From: Rob Pike Date: Tue, 24 Jun 2008 22:31:03 +0000 (-0700) Subject: arguments available X-Git-Tag: weekly.2009-11-06~3635 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=2987c8434b205a3047c59200b4fb1e618d58859c;p=gostls13.git arguments available argc, argv, envc, envv all in sys now sys.argc() etc. SVN=124398 --- diff --git a/src/cmd/gc/sys.go b/src/cmd/gc/sys.go index 629446e262..613a0dcbcb 100644 --- a/src/cmd/gc/sys.go +++ b/src/cmd/gc/sys.go @@ -23,6 +23,11 @@ func intstring(int64) string; func byteastring(*byte, int32) string; func mkiface(*byte, *byte, *struct{}) interface{}; +func argc() int32; +func envc() int32; +func argv(int32) string; +func envv(int32) string; + func frexp(float64) (int32, float64); // break fp into exp,fract func ldexp(int32, float64) float64; // make fp from exp,fract func modf(float64) (float64, float64); // break fp into double.double @@ -56,6 +61,13 @@ export byteastring mkiface + // args + argc + envc + argv + envv + + // fp frexp ldexp modf diff --git a/src/cmd/gc/sysimport.c b/src/cmd/gc/sysimport.c index 352fc5dd89..5017083378 100644 --- a/src/cmd/gc/sysimport.c +++ b/src/cmd/gc/sysimport.c @@ -93,54 +93,74 @@ char* sysimport = "type sys._e041 (sys._e042 sys._o282 sys._i284)\n" "var !sys.mkiface sys._e041\n" "type sys._e048 {}\n" - "type sys._o295 {_e292 sys.int32 _e293 sys.float64}\n" - "type sys._i297 {_e294 sys.float64}\n" - "type sys._e047 (sys._e048 sys._o295 sys._i297)\n" - "var !sys.frexp sys._e047\n" - "type sys._e050 {}\n" - "type sys._o304 {_e301 sys.float64}\n" - "type sys._i306 {_e302 sys.int32 _e303 sys.float64}\n" - "type sys._e049 (sys._e050 sys._o304 sys._i306)\n" - "var !sys.ldexp sys._e049\n" - "type sys._e052 {}\n" - "type sys._o314 {_e311 sys.float64 _e312 sys.float64}\n" - "type sys._i316 {_e313 sys.float64}\n" - "type sys._e051 (sys._e052 sys._o314 sys._i316)\n" - "var !sys.modf sys._e051\n" - "type sys._e054 {}\n" - "type sys._e056 [sys.any] sys.any\n" - "type sys._e055 *sys._e056\n" - "type sys._o320 {hmap sys._e055}\n" - "type sys._i322 {keysize sys.uint32 valsize sys.uint32 keyalg sys.uint32 valalg sys.uint32 hint sys.uint32}\n" - "type sys._e053 (sys._e054 sys._o320 sys._i322)\n" - "var !sys.newmap sys._e053\n" + "type sys._o293 {_e292 sys.int32}\n" + "type sys._e049 {}\n" + "type sys._e047 (sys._e048 sys._o293 sys._e049)\n" + "var !sys.argc sys._e047\n" + "type sys._e051 {}\n" + "type sys._o298 {_e296 sys.string}\n" + "type sys._i300 {_e297 sys.int32}\n" + "type sys._e050 (sys._e051 sys._o298 sys._i300)\n" + "var !sys.argv sys._e050\n" + "type sys._e053 {}\n" + "type sys._o306 {_e304 sys.string}\n" + "type sys._i308 {_e305 sys.int32}\n" + "type sys._e052 (sys._e053 sys._o306 sys._i308)\n" + "var !sys.envv sys._e052\n" + "type sys._e055 {}\n" + "type sys._o313 {_e312 sys.int32}\n" + "type sys._e056 {}\n" + "type sys._e054 (sys._e055 sys._o313 sys._e056)\n" + "var !sys.envc sys._e054\n" "type sys._e058 {}\n" - "type sys._o330 {val sys.any}\n" - "type sys._e060 [sys.any] sys.any\n" - "type sys._e059 *sys._e060\n" - "type sys._i332 {hmap sys._e059 key sys.any}\n" - "type sys._e057 (sys._e058 sys._o330 sys._i332)\n" - "var !sys.mapaccess1 sys._e057\n" + "type sys._o319 {_e316 sys.int32 _e317 sys.float64}\n" + "type sys._i321 {_e318 sys.float64}\n" + "type sys._e057 (sys._e058 sys._o319 sys._i321)\n" + "var !sys.frexp sys._e057\n" + "type sys._e060 {}\n" + "type sys._o328 {_e325 sys.float64}\n" + "type sys._i330 {_e326 sys.int32 _e327 sys.float64}\n" + "type sys._e059 (sys._e060 sys._o328 sys._i330)\n" + "var !sys.ldexp sys._e059\n" "type sys._e062 {}\n" - "type sys._o337 {val sys.any pres sys.bool}\n" - "type sys._e064 [sys.any] sys.any\n" - "type sys._e063 *sys._e064\n" - "type sys._i339 {hmap sys._e063 key sys.any}\n" - "type sys._e061 (sys._e062 sys._o337 sys._i339)\n" - "var !sys.mapaccess2 sys._e061\n" - "type sys._e066 {}\n" - "type sys._e067 {}\n" - "type sys._e069 [sys.any] sys.any\n" - "type sys._e068 *sys._e069\n" - "type sys._i344 {hmap sys._e068 key sys.any val sys.any}\n" - "type sys._e065 (sys._e066 sys._e067 sys._i344)\n" - "var !sys.mapassign1 sys._e065\n" - "type sys._e071 {}\n" + "type sys._o338 {_e335 sys.float64 _e336 sys.float64}\n" + "type sys._i340 {_e337 sys.float64}\n" + "type sys._e061 (sys._e062 sys._o338 sys._i340)\n" + "var !sys.modf sys._e061\n" + "type sys._e064 {}\n" + "type sys._e066 [sys.any] sys.any\n" + "type sys._e065 *sys._e066\n" + "type sys._o344 {hmap sys._e065}\n" + "type sys._i346 {keysize sys.uint32 valsize sys.uint32 keyalg sys.uint32 valalg sys.uint32 hint sys.uint32}\n" + "type sys._e063 (sys._e064 sys._o344 sys._i346)\n" + "var !sys.newmap sys._e063\n" + "type sys._e068 {}\n" + "type sys._o354 {val sys.any}\n" + "type sys._e070 [sys.any] sys.any\n" + "type sys._e069 *sys._e070\n" + "type sys._i356 {hmap sys._e069 key sys.any}\n" + "type sys._e067 (sys._e068 sys._o354 sys._i356)\n" + "var !sys.mapaccess1 sys._e067\n" "type sys._e072 {}\n" + "type sys._o361 {val sys.any pres sys.bool}\n" "type sys._e074 [sys.any] sys.any\n" "type sys._e073 *sys._e074\n" - "type sys._i350 {hmap sys._e073 key sys.any val sys.any pres sys.bool}\n" - "type sys._e070 (sys._e071 sys._e072 sys._i350)\n" - "var !sys.mapassign2 sys._e070\n" + "type sys._i363 {hmap sys._e073 key sys.any}\n" + "type sys._e071 (sys._e072 sys._o361 sys._i363)\n" + "var !sys.mapaccess2 sys._e071\n" + "type sys._e076 {}\n" + "type sys._e077 {}\n" + "type sys._e079 [sys.any] sys.any\n" + "type sys._e078 *sys._e079\n" + "type sys._i368 {hmap sys._e078 key sys.any val sys.any}\n" + "type sys._e075 (sys._e076 sys._e077 sys._i368)\n" + "var !sys.mapassign1 sys._e075\n" + "type sys._e081 {}\n" + "type sys._e082 {}\n" + "type sys._e084 [sys.any] sys.any\n" + "type sys._e083 *sys._e084\n" + "type sys._i374 {hmap sys._e083 key sys.any val sys.any pres sys.bool}\n" + "type sys._e080 (sys._e081 sys._e082 sys._i374)\n" + "var !sys.mapassign2 sys._e080\n" "))\n" ; diff --git a/src/runtime/rt0_amd64_darwin.s b/src/runtime/rt0_amd64_darwin.s index fcd86b9879..9aefd769bd 100644 --- a/src/runtime/rt0_amd64_darwin.s +++ b/src/runtime/rt0_amd64_darwin.s @@ -24,6 +24,11 @@ loop: done: ADDQ $8, CX + SUBQ $16, SP + MOVL DI, 0(SP) + MOVQ SI, 8(SP) + CALL args(SB) + ADDQ $16, SP CALL check(SB) CALL main_main(SB) CALL sys_exit(SB) diff --git a/test/args.go b/test/args.go new file mode 100644 index 0000000000..684cc46009 --- /dev/null +++ b/test/args.go @@ -0,0 +1,19 @@ +// $G $F.go && $L $F.$A && ./$A.out arg1 arg2 + +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func main() { + if sys.argc() != 3 { + panic "argc" + } + if sys.argv(1) != "arg1" { + panic "arg1" + } + if sys.argv(2) != "arg2" { + panic "arg2" + } +} diff --git a/test/golden.out b/test/golden.out index ffebd277d7..ea5127385e 100644 --- a/test/golden.out +++ b/test/golden.out @@ -1,4 +1,6 @@ +=========== ./args.go + =========== ./char_lit.go =========== ./float_lit.go