1
0
mirror of https://github.com/golang/go synced 2024-09-28 16:14:28 -06:00

syscall: mksyscall_windows.pl to produce packages other than syscall (for example pkg/exp/wingui/zwinapi.go)

R=golang-dev, alex.brainman, rsc
CC=golang-dev
https://golang.org/cl/4964074
This commit is contained in:
Jaroslavas Počepko 2011-09-24 10:38:39 +10:00 committed by Alex Brainman
parent cf6d0175d9
commit 10b23e7fc9
2 changed files with 17 additions and 13 deletions

View File

@ -19,11 +19,5 @@ include ../../../Make.cmd
zwinapi.go: winapi.go
$(GOROOT)/src/pkg/syscall/mksyscall_windows.pl $< \
| sed 's/^package.*syscall$$/package main/' \
| sed '/^import/a \
import "syscall"' \
| sed 's/Syscall/syscall.Syscall/' \
| sed 's/NewLazyDLL/syscall.NewLazyDLL/' \
| sed 's/EINVAL/syscall.EINVAL/' \
| gofmt \
> $@

View File

@ -64,6 +64,7 @@ sub parseparam($) {
return ($1, $2);
}
my $package = "";
my $text = "";
my $vars = "";
my $mods = "";
@ -73,8 +74,12 @@ while(<>) {
s/\s+/ /g;
s/^\s+//;
s/\s+$//;
$package = $1 if !$package && /^package (\S+)$/;
next if !/^\/\/sys /;
my $syscalldot = "";
$syscalldot = "syscall." if $package ne "syscall";
# Line must be of the form
# func Open(path string, mode int, perm int) (fd int, errno int)
# Split into name, in params, out params.
@ -96,7 +101,7 @@ while(<>) {
my $modvname = "mod$modname";
if($modnames !~ /$modname/) {
$modnames .= ".$modname";
$mods .= "\t$modvname = NewLazyDLL(\"$modname.dll\")\n";
$mods .= "\t$modvname = ${syscalldot}NewLazyDLL(\"$modname.dll\")\n";
}
# System call name.
@ -165,23 +170,23 @@ while(<>) {
my $nargs = @args;
# Determine which form to use; pad args with zeros.
my $asm = "Syscall";
my $asm = "${syscalldot}Syscall";
if(@args <= 3) {
while(@args < 3) {
push @args, "0";
}
} elsif(@args <= 6) {
$asm = "Syscall6";
$asm = "${syscalldot}Syscall6";
while(@args < 6) {
push @args, "0";
}
} elsif(@args <= 9) {
$asm = "Syscall9";
$asm = "${syscalldot}Syscall9";
while(@args < 9) {
push @args, "0";
}
} elsif(@args <= 12) {
$asm = "Syscall12";
$asm = "${syscalldot}Syscall12";
while(@args < 12) {
push @args, "0";
}
@ -247,7 +252,7 @@ while(<>) {
$body .= "\t\tif $reg != 0 {\n";
$body .= "\t\t\t$name = $type($reg)\n";
$body .= "\t\t} else {\n";
$body .= "\t\t\t$name = EINVAL\n";
$body .= "\t\t\t$name = ${syscalldot}EINVAL\n";
$body .= "\t\t}\n";
$body .= "\t} else {\n";
$body .= "\t\t$name = 0\n";
@ -279,9 +284,14 @@ print <<EOF;
// $cmdline
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
package syscall
package $package
import "unsafe"
EOF
print "import \"syscall\"\n" if $package ne "syscall";
print <<EOF;
var (
$mods