]> Cypherpunks repositories - gostls13.git/commitdiff
- changed go-in-go parser to require ()'s for panic and print
authorRobert Griesemer <gri@golang.org>
Tue, 12 Aug 2008 04:20:42 +0000 (21:20 -0700)
committerRobert Griesemer <gri@golang.org>
Tue, 12 Aug 2008 04:20:42 +0000 (21:20 -0700)
- adjusted much of the existing go code
- missing: tests

R=r
DELTA=229  (1 added, 17 deleted, 211 changed)
OCL=14103
CL=14103

17 files changed:
src/lib/container/vector.go
src/lib/flag.go
src/pkg/integer.go
src/pkg/test_integer.go
usr/gri/gosrc/compilation.go
usr/gri/gosrc/export.go
usr/gri/gosrc/globals.go
usr/gri/gosrc/go.go
usr/gri/gosrc/import.go
usr/gri/gosrc/parser.go
usr/gri/gosrc/printer.go
usr/gri/gosrc/scanner.go
usr/gri/gosrc/test_scanner.go
usr/gri/gosrc/type.go
usr/gri/gosrc/universe.go
usr/gri/gosrc/utils.go
usr/gri/gosrc/verifier.go

index 891f3538d395d1e382ec34ad066967c373b7db89..c3ec0d390f0defb8c104ec99a8b7bc56c5cd59f6 100644 (file)
@@ -37,8 +37,8 @@ func Alloc(i int) *[]Element {
        case 1000:
                return new([1000]Element);
        }
-       print "bad size ", i, "\n";
-       panic "not known size\n";
+       print("bad size ", i, "\n");
+       panic("not known size\n");
 }
 
 func is_pow10(i int) bool {
@@ -63,7 +63,7 @@ func (v *Vector) Len() int {
 
 func (v *Vector) At(i int) Element {
        if i < 0 || i >= v.nelem {
-               panic "Vector.At(", i, ") out of range (size ", v.nelem, ")\n";
+               panic("Vector.At(", i, ") out of range (size ", v.nelem, ")\n");
                return nil;
        }
        return v.elem[i];
@@ -71,7 +71,7 @@ func (v *Vector) At(i int) Element {
 
 func (v *Vector) Delete(i int) {
        if i < 0 || i >= v.nelem {
-               panic "Delete out of range\n";
+               panic("Delete out of range\n");
        }
        for j := i+1; j < v.nelem; j++ {
                v.elem[j-1] = v.elem[j];
@@ -82,7 +82,7 @@ func (v *Vector) Delete(i int) {
 
 func (v *Vector) Insert(i int, e Element) {
        if i > v.nelem {
-               panic "Del too large\n";
+               panic("Del too large\n");
        }
        if v.nelem == v.nalloc && is_pow10(v.nalloc) {
                n := Alloc(v.nalloc * 10);
@@ -114,14 +114,14 @@ func Test() {
        i3 := new(I); i3.val = 3333;
        i4 := new(I); i4.val = 44444;
        v := New();
-       print "hi\n";
+       print("hi\n");
        v.Insert(0, i4);
        v.Insert(0, i3);
        v.Insert(0, i2);
        v.Insert(0, i1);
        v.Insert(0, i0);
        for i := 0; i < v.Len(); i++ {
-               print i, " ", v.At(i).(*I).val, "\n";
+               print(i, " ", v.At(i).(*I).val, "\n");
        }
 }
 
index f473aeafdccc0a8d34f8edfe24d3e43a423888f7..acf3424db39f786cf267f90eb29bd75bacf5f837 100644 (file)
@@ -21,8 +21,8 @@ package flag
  *
  *     3) Flags may then be used directly (getters are SVal, BVal, Ival) or through the associated
  *     cell, if set:
- *             print "fi has value ", fi.IVal(), "\n";
- *             print "i has value ", i, "\n";
+ *             print("fi has value ", fi.IVal(), "\n");
+ *             print("i has value ", i, "\n");
  *
  *     4) After parsing, flag.Arg(i) is the i'th argument after the flags.
  *     Args are indexed from 0 up to flag.NArg().
@@ -291,9 +291,9 @@ type Flags struct {
 
 func (flags *Flags) Usage() {
        // BUG: use map iteration when available
-       print "Usage: \n";
+       print("Usage: \n");
        for f := flags.flag_list; f != nil; f = f.next {
-               print "  -", f.name, "=", f.value.Str(), ": ", f.usage, "\n";
+               print("  -", f.name, "=", f.value.Str(), ": ", f.usage, "\n");
        }
        sys.exit(1);
 }
@@ -349,8 +349,8 @@ func Add(name string, value Value, usage string) *Flag {
        f.value = value;
        dummy, alreadythere := flags.formal[name];
        if alreadythere {
-               print "flag redefined: ", name, "\n";
-               panic "flag redefinition"
+               print("flag redefined: ", name, "\n");
+               panic("flag redefinition");
        }
        flags.formal[name] = f;
        f.next = flags.flag_list;  // BUG: remove when we can iterate over maps
@@ -392,7 +392,7 @@ func (f *Flags) ParseOne(index int) (ok bool, next int)
        }
        name := s[num_minuses : len(s)];
        if len(name) == 0 || name[0] == '-' || name[0]=='=' {
-               print "bad flag syntax: ", s, "\n";
+               print("bad flag syntax: ", s, "\n");
                f.Usage();
        }
 
@@ -409,13 +409,13 @@ func (f *Flags) ParseOne(index int) (ok bool, next int)
        }
        flag, alreadythere := flags.actual[name];
        if alreadythere {
-               print "flag specified twice: -", name, "\n";
+               print("flag specified twice: -", name, "\n");
                f.Usage();
        }
        m := flags.formal;
        flag, alreadythere = m[name]; // BUG
        if !alreadythere {
-               print "flag provided but not defined: -", name, "\n";
+               print("flag provided but not defined: -", name, "\n");
                f.Usage();
        }
        if !has_value && index < sys.argc()-1 && flag.value.ValidValue(sys.argv(index+1)) {
@@ -429,7 +429,7 @@ func (f *Flags) ParseOne(index int) (ok bool, next int)
                        if has_value {
                                k, ok := atob(value);
                                if !ok {
-                                       print "invalid boolean value ", value, " for flag: -", name, "\n";
+                                       print("invalid boolean value ", value, " for flag: -", name, "\n");
                                        f.Usage();
                                }
                                flag.value.AsBool().Set(k)
@@ -438,18 +438,18 @@ func (f *Flags) ParseOne(index int) (ok bool, next int)
                        }
                case flag.value.IsInt():
                        if !has_value {
-                               print "flag needs an argument: -", name, "\n";
+                               print("flag needs an argument: -", name, "\n");
                                f.Usage();
                        }
                        k, ok := atoi(value);
                        if !ok {
-                               print "invalid integer value ", value, " for flag: -", name, "\n";
+                               print("invalid integer value ", value, " for flag: -", name, "\n");
                                f.Usage();
                        }
                        flag.value.AsInt().Set(k)
                case flag.value.IsString():
                        if !has_value {
-                               print "flag needs an argument: -", name, "\n";
+                               print("flag needs an argument: -", name, "\n");
                                f.Usage();
                        }
                        flag.value.AsString().Set(value)
index b9c3fc714901c7d53dea19d36441d89fcc7060ce..b10c73577e4782cc8e9355ae7dc879fa6c6b2103 100755 (executable)
@@ -24,20 +24,20 @@ const M = 1 << L - 1;
 // TODO What are we going to about asserts?
 func ASSERT(p bool) {
   if !p {
-    panic "ASSERT failed";
+    panic("ASSERT failed");
   }
 }
 
 
 func CHECK(p bool) {
   if !p {
-    panic "CHECK failed";
+    panic("CHECK failed");
   }
 }
 
 
 func UNIMPLEMENTED(s string) {
-  panic "UNIMPLEMENTED: ", s;
+  panic("UNIMPLEMENTED: ", s);
 }
 
 
@@ -631,5 +631,5 @@ func (x Integer) ToInt() int {
     }
     return i;
   }
-  panic "integer too large";
+  panic("integer too large");
 }
index be93f33ef0887ad0f450228764ce72da8540b7ef..991c99811c07156ca2d3f02d8cbcd739c199c44f 100644 (file)
@@ -24,7 +24,7 @@ var (
 
 func CHECK(msg string, p bool) {
   if !p {
-    panic "CHECK failed: ", msg, "\n";
+    panic("CHECK failed: ", msg, "\n");
   }
 }
 
@@ -46,7 +46,7 @@ func Init() {
 func N991() string { return "991" }
 
 func TestConv() {
-  print "TestConv\n";
+  print("TestConv\n");
   CHECK("TC1", a.eql(Integer.FromInt(991)));
   CHECK("TC2", b.eql(Integer.Fact(20)));
   CHECK("TC3", c.eql(Integer.Fact(100)));
@@ -59,7 +59,7 @@ func TestConv() {
 
 
 func TestAdd() {
-  print "TestAdd\n";
+  print("TestAdd\n");
   CHECK("TA1", z.add(z).eql(z));
   CHECK("TA2", a.add(z).eql(a));
   CHECK("TA3", z.add(a).eql(a));
@@ -78,7 +78,7 @@ func TestAdd() {
 
 
 func TestSub() {
-  print "TestSub\n";
+  print("TestSub\n");
   CHECK("TS1", z.sub(z).eql(z));
   CHECK("TS2", a.sub(z).eql(a));
   CHECK("TS3", z.sub(a).eql(a.neg()));
@@ -95,25 +95,25 @@ func TestSub() {
 
 
 func TestMul() {
-  print "TestMul\n";
+  print("TestMul\n");
   // tested much via TestFact for now
 }
 
 
 func TestDiv() {
-  print "TestDiv\n";
+  print("TestDiv\n");
   // no div implemented yet
 }
 
 
 func TestMod() {
-  print "TestMod\n";
+  print("TestMod\n");
   // no mod implemented yet
 }
 
 
 func TestFact() {
-  print "TestFact\n";
+  print("TestFact\n");
   for n := 990; n < 1010; n++ {
     f := Integer.Fact(n);
     CHECK("TF", Integer.FromString(f.ToString()).eql(f));
@@ -133,5 +133,5 @@ func main() {
 
   TestFact();
   
-  print "PASSED\n";
+  print("PASSED\n");
 }
index c8c394279e18590f8dfb8387d07dedcddb7f2e09..d8a78be10ad1feb041a638511a1a6d0d37affae7 100644 (file)
@@ -21,7 +21,7 @@ import Verifier "verifier"
 
 func ReadImport(comp* Globals.Compilation, filename string, update bool) (data string, ok bool) {
        if filename == "" {
-               panic "illegal package file name";
+               panic("illegal package file name");
        }
 
        // see if it just works
@@ -32,7 +32,7 @@ func ReadImport(comp* Globals.Compilation, filename string, update bool) (data s
        
        if filename[0] == '/' {
                // absolute path
-               panic `don't know how to handle absolute import file path "` + filename + `"`;
+               panic(`don't know how to handle absolute import file path "` + filename + `"`);
        }
        
        // relative path
@@ -77,7 +77,7 @@ export func Export(comp *Globals.Compilation, pkg_file string) {
        data := Exporter.Export(comp);
        ok := Platform.WriteObjectFile(pkg_file, data);
        if !ok {
-               panic "export failed";
+               panic("export failed");
        }
 }
 
@@ -85,12 +85,12 @@ export func Export(comp *Globals.Compilation, pkg_file string) {
 export func Compile(comp *Globals.Compilation, src_file string) {
        src, ok := Platform.ReadSourceFile(src_file);
        if !ok {
-               print "cannot open ", src_file, "\n"
+               print("cannot open ", src_file, "\n");
                return;
        }
        
        if comp.flags.verbosity > 0 {
-               print src_file, "\n";
+               print(src_file, "\n");
        }
 
        scanner := new(Scanner.Scanner);
index cfca1a9aef0e06d1f7aafa823cbe738e6365fbb3..97f9d1b17ad81d03eb53330a77eefead56965684 100755 (executable)
@@ -30,7 +30,7 @@ func (E *Exporter) WriteByte(x byte) {
        E.buf_pos++;
        /*
        if E.debug {
-               print " ", x;
+               print(" ", x);
        }
        */
 }
@@ -46,7 +46,7 @@ func (E *Exporter) WriteInt(x int) {
        E.WriteByte(byte(x + 192));
        /*
        if E.debug {
-               print " #", x0;
+               print(" #", x0);
        }
        */
 }
@@ -59,7 +59,7 @@ func (E *Exporter) WriteString(s string) {
                E.WriteByte(s[i]);
        }
        if E.debug {
-               print ` "`, s, `"`;
+               print(` "`, s, `"`);
        }
 }
 
@@ -68,9 +68,9 @@ func (E *Exporter) WritePackageTag(tag int) {
        E.WriteInt(tag);
        if E.debug {
                if tag >= 0 {
-                       print " [P", tag, "]";  // package ref
+                       print(" [P", tag, "]");  // package ref
                } else {
-                       print "\nP", E.pkg_ref, ":";
+                       print("\nP", E.pkg_ref, ":");
                }
        }
 }
@@ -80,9 +80,9 @@ func (E *Exporter) WriteTypeTag(tag int) {
        E.WriteInt(tag);
        if E.debug {
                if tag >= 0 {
-                       print " [T", tag, "]";  // type ref
+                       print(" [T", tag, "]");  // type ref
                } else {
-                       print "\nT", E.type_ref, ": ", Type.FormStr(-tag);
+                       print("\nT", E.type_ref, ": ", Type.FormStr(-tag));
                }
        }
 }
@@ -90,18 +90,18 @@ func (E *Exporter) WriteTypeTag(tag int) {
 
 func (E *Exporter) WriteObjectTag(tag int) {
        if tag < 0 {
-               panic "tag < 0";
+               panic("tag < 0");
        }
        E.WriteInt(tag);
        if E.debug {
-               print "\n", Object.KindStr(tag);
+               print("\n", Object.KindStr(tag));
        }
 }
 
 
 func (E *Exporter) WritePackage(pkg *Globals.Package) {
        if E.comp.pkg_list[pkg.obj.pnolev] != pkg {
-               panic "inconsistent package object"
+               panic("inconsistent package object");
        }
 
        if pkg.ref >= 0 {
@@ -121,7 +121,7 @@ func (E *Exporter) WritePackage(pkg *Globals.Package) {
 
 func (E *Exporter) WriteScope(scope *Globals.Scope) {
        if E.debug {
-               print " {";
+               print(" {");
        }
 
        for p := scope.entries.first; p != nil; p = p.next {
@@ -132,7 +132,7 @@ func (E *Exporter) WriteScope(scope *Globals.Scope) {
        E.WriteObject(nil);
        
        if E.debug {
-               print " }";
+               print(" }");
        }
 }
 
@@ -144,7 +144,7 @@ func (E *Exporter) WriteType(typ *Globals.Type) {
        }
 
        if -typ.form >= 0 {
-               panic "conflict with ref numbers";
+               panic("conflict with ref numbers");
        }
        E.WriteTypeTag(-typ.form);
        typ.ref = E.type_ref;
@@ -155,7 +155,7 @@ func (E *Exporter) WriteType(typ *Globals.Type) {
        if typ.obj != nil {
                // named type
                if typ.obj.typ != typ {
-                       panic "inconsistent named type";
+                       panic("inconsistent named type");
                }
                ident = typ.obj.ident;
                if !typ.obj.exported {
@@ -177,7 +177,7 @@ func (E *Exporter) WriteType(typ *Globals.Type) {
        case Type.FORWARD:
                // corresponding package must be forward-declared too
                if typ.obj == nil || E.comp.pkg_list[typ.obj.pnolev].key != "" {
-                       panic "inconsistency in package.type forward declaration";
+                       panic("inconsistency in package.type forward declaration");
                }
                
        case Type.ALIAS, Type.MAP:
@@ -203,7 +203,7 @@ func (E *Exporter) WriteType(typ *Globals.Type) {
                E.WriteType(typ.elt);
 
        default:
-               panic "UNREACHABLE";
+               panic("UNREACHABLE");
        }
 }
 
@@ -218,7 +218,7 @@ func (E *Exporter) WriteObject(obj *Globals.Object) {
        if obj.kind == Object.TYPE {
                // named types are handled entirely by WriteType()
                if obj.typ.obj != obj {
-                       panic "inconsistent named type"
+                       panic("inconsistent named type");
                }
                E.WriteType(obj.typ);
                return;
@@ -238,7 +238,7 @@ func (E *Exporter) WriteObject(obj *Globals.Object) {
                E.WriteInt(0);  // should be the correct address/offset
                
        default:
-               panic "UNREACHABLE";
+               panic("UNREACHABLE");
        }
 }
 
@@ -261,7 +261,7 @@ func (E *Exporter) Export(comp* Globals.Compilation) string {
        {       i := 0;
                for p := Universe.types.first; p != nil; p = p.next {
                        if p.typ.ref != i {
-                               panic "incorrect ref for predeclared type";
+                               panic("incorrect ref for predeclared type");
                        }
                        i++;
                }
@@ -274,7 +274,7 @@ func (E *Exporter) Export(comp* Globals.Compilation) string {
        E.WriteScope(pkg.scope);
        
        if E.debug {
-               print "\n(", E.buf_pos, " bytes)\n";
+               print("\n(", E.buf_pos, " bytes)\n");
        }
        
        return string(E.buf)[0 : E.buf_pos];
index 4bc9affc4f3751811d173485c408b16c4df672a1..4285aa324b4d4296cfeead334209736b9fe25cbf 100644 (file)
@@ -192,7 +192,7 @@ func (L* List) len_() int {
 
 func (L *List) at(i int) *Elem {
        if i < 0 || L.len_ <= i {
-               panic "index out of bounds";
+               panic("index out of bounds");
        }
 
        p := L.first;
@@ -282,7 +282,7 @@ func (scope *Scope) Lookup(ident string) *Object {
 
 func (scope *Scope) Insert(obj *Object) {
        if scope.Lookup(obj.ident) != nil {
-               panic "obj already inserted";
+               panic("obj already inserted");
        }
        scope.entries.AddObj(obj);
 }
@@ -299,11 +299,11 @@ func (scope *Scope) InsertImport(obj *Object) *Object {
 
 
 func (scope *Scope) Print() {
-       print "scope {";
+       print("scope {");
        for p := scope.entries.first; p != nil; p = p.next {
-               print "\n  ", p.obj.ident;
+               print("\n  ", p.obj.ident);
        }
-       print "\n}\n";
+       print("\n}\n");
 }
 
 
@@ -323,7 +323,7 @@ func (C *Compilation) Lookup(file_name string) *Package {
 
 func (C *Compilation) Insert(pkg *Package) {
        if C.Lookup(pkg.file_name) != nil {
-               panic "package already inserted";
+               panic("package already inserted");
        }
        pkg.obj.pnolev = C.pkg_ref;
        C.pkg_list[C.pkg_ref] = pkg;
index 625548ed89f4095836b66534d65a4755ece06c41..b4e7bcb6abbc5506bd0ee9e232321dbd6b3bf4e6 100644 (file)
@@ -10,7 +10,7 @@ import Compilation "compilation"
 
 
 func PrintHelp() {
-       print
+       print(
                "go (" + Build.time + ")\n" +
                "usage:\n" +
                "  go { flag } { file }\n" +
@@ -24,7 +24,8 @@ func PrintHelp() {
                "  -parse         parse only, print productions\n" +
                "  -ast           analyse only, print ast\n" +
                "  -deps          print package dependencies\n" +
-               "  -token_chan    use token channel to scan and parse in parallel\n";
+               "  -token_chan    use token channel to scan and parse in parallel\n"
+       );
 }
 
 
@@ -54,7 +55,7 @@ func main() {
            switch arg {
                case "-d": flags.debug = true;
                case "-o": flags.object_file = Next();
-                       print "note: -o flag ignored at the moment\n";
+                       print("note: -o flag ignored at the moment\n");
                case "-r": flags.update_packages = true;
                case "-p": flags.print_interface = true;
                case "-v":
@@ -69,12 +70,12 @@ func main() {
                        }
                case "-6g": flags.sixg = true;
                case "-scan": flags.scan = true;
-                       print "note: -scan flag ignored at the moment\n";
+                       print("note: -scan flag ignored at the moment\n");
                case "-parse": flags.parse = true;
-                       print "note: -parse flag ignored at the moment\n";
+                       print("note: -parse flag ignored at the moment\n");
                case "-ast": flags.ast = true;
                case "-deps": flags.deps = true;
-                       print "note: -deps flag ignored at the moment\n";
+                       print("note: -deps flag ignored at the moment\n");
                case "-token_chan": flags.token_chan = true;
                default: files.AddStr(arg);
                }
index 2be6e06af674d60add0200198fc2d272cae7b45f..8aff3330630ae58932ebb471a8d94ed50fb9f02a 100755 (executable)
@@ -32,7 +32,7 @@ func (I *Importer) ReadByte() byte {
        I.buf_pos++;
        /*
        if E.debug {
-               print " ", x;
+               print(" ", x);
        }
        */
        return x;
@@ -52,7 +52,7 @@ func (I *Importer) ReadInt() int {
        x |= ((int(b) - 192) << s);
        /*
        if I.debug {
-               print " #", x;
+               print(" #", x);
        }
        */
        return x;
@@ -67,7 +67,7 @@ func (I *Importer) ReadString() string {
        }
        s := string(buf)[0 : n];
        if I.debug {
-               print ` "`, s, `"`;
+               print(` "`, s, `"`);
        }
        return s;
 }
@@ -77,9 +77,9 @@ func (I *Importer) ReadPackageTag() int {
        tag := I.ReadInt();
        if I.debug {
                if tag >= 0 {
-                       print " [P", tag, "]";  // package ref
+                       print(" [P", tag, "]");  // package ref
                } else {
-                       print "\nP", I.pkg_ref, ":";
+                       print("\nP", I.pkg_ref, ":");
                }
        }
        return tag;
@@ -90,9 +90,9 @@ func (I *Importer) ReadTypeTag() int {
        tag := I.ReadInt();
        if I.debug {
                if tag >= 0 {
-                       print " [T", tag, "]";  // type ref
+                       print(" [T", tag, "]");  // type ref
                } else {
-                       print "\nT", I.type_ref, ": ", Type.FormStr(-tag);
+                       print("\nT", I.type_ref, ": ", Type.FormStr(-tag));
                }
        }
        return tag;
@@ -102,10 +102,10 @@ func (I *Importer) ReadTypeTag() int {
 func (I *Importer) ReadObjectTag() int {
        tag := I.ReadInt();
        if tag < 0 {
-               panic "tag < 0";
+               panic("tag < 0");
        }
        if I.debug {
-               print "\n", Object.KindStr(tag);
+               print("\n", Object.KindStr(tag));
        }
        return tag;
 }
@@ -130,14 +130,14 @@ func (I *Importer) ReadPackage() *Globals.Package {
                pkg = Globals.NewPackage(file_name, obj, Globals.NewScope(nil));
                I.comp.Insert(pkg);
                if I.comp.flags.verbosity > 1 {
-                       print `import: implicitly adding package `, ident, ` "`, file_name, `" (pno = `, obj.pnolev, ")\n";
+                       print(`import: implicitly adding package `, ident, ` "`, file_name, `" (pno = `, obj.pnolev, ")\n");
                }
        } else if key != "" && key != pkg.key {
                // the package was imported before but the package
                // key has changed (a "" key indicates a forward-
                // declared package - it's key is consistent with
                // any actual package of the same name)
-               panic "package key inconsistency";
+               panic("package key inconsistency");
        }
        I.pkg_list[I.pkg_ref] = pkg;
        I.pkg_ref++;
@@ -148,7 +148,7 @@ func (I *Importer) ReadPackage() *Globals.Package {
 
 func (I *Importer) ReadScope(scope *Globals.Scope, allow_multiples bool) {
        if I.debug {
-               print " {";
+               print(" {");
        }
 
        obj := I.ReadObject();
@@ -164,7 +164,7 @@ func (I *Importer) ReadScope(scope *Globals.Scope, allow_multiples bool) {
        }
        
        if I.debug {
-               print " }";
+               print(" }");
        }
 }
 
@@ -229,7 +229,7 @@ func (I *Importer) ReadType() *Globals.Type {
                typ.elt = I.ReadType();
 
        default:
-               panic "UNREACHABLE";
+               panic("UNREACHABLE");
        }
 
        return ptyp;  // only use primary type
@@ -246,7 +246,7 @@ func (I *Importer) ReadObject() *Globals.Object {
                // named types are handled entirely by ReadType()
                typ := I.ReadType();
                if typ.obj.typ != typ {
-                       panic "inconsistent named type";
+                       panic("inconsistent named type");
                }
                return typ.obj;
        }
@@ -267,7 +267,7 @@ func (I *Importer) ReadObject() *Globals.Object {
                I.ReadInt();  // should set the address/offset field
                
        default:
-               panic "UNREACHABLE";
+               panic("UNREACHABLE");
        }
 
        return obj;
@@ -290,7 +290,7 @@ func (I *Importer) Import(comp* Globals.Compilation, data string) *Globals.Packa
        // Predeclared types are "pre-imported".
        for p := Universe.types.first; p != nil; p = p.next {
                if p.typ.ref != I.type_ref {
-                       panic "incorrect ref for predeclared type";
+                       panic("incorrect ref for predeclared type");
                }
                I.type_list[I.type_ref] = p.typ;
                I.type_ref++;
@@ -301,7 +301,7 @@ func (I *Importer) Import(comp* Globals.Compilation, data string) *Globals.Packa
        I.ReadScope(pkg.scope, true);
        
        if I.debug {
-               print "\n(", I.buf_pos, " bytes)\n";
+               print("\n(", I.buf_pos, " bytes)\n");
        }
        
        return pkg;
index 01bb8c71eba1db8fadeedc2ca3fc3c6b488cf863..789573190b69da0cf1db95ad0d517253b68459af 100644 (file)
@@ -40,7 +40,7 @@ export type Parser struct {
 
 func (P *Parser) PrintIndent() {
        for i := P.indent; i > 0; i-- {
-               print ". ";
+               print(". ");
        }
 }
 
@@ -48,7 +48,7 @@ func (P *Parser) PrintIndent() {
 func (P *Parser) Trace(msg string) {
        if P.verbose {
                P.PrintIndent();
-               print msg, " {\n";
+               print(msg, " {\n");
        }
        P.indent++;
 }
@@ -58,7 +58,7 @@ func (P *Parser) Ecart() {
        P.indent--;
        if P.verbose {
                P.PrintIndent();
-               print "}\n";
+               print("}\n");
        }
 }
 
@@ -72,7 +72,7 @@ func (P *Parser) Next() {
        }
        if P.verbose {
                P.PrintIndent();
-               print "[", P.pos, "] ", Scanner.TokenName(P.tok), "\n";
+               print("[", P.pos, "] ", Scanner.TokenName(P.tok), "\n");
        }
 }
 
@@ -141,7 +141,7 @@ func (P *Parser) DeclareInScope(scope *Globals.Scope, obj *Globals.Object) {
                return;
        }
        if P.level > 0 {
-               panic "cannot declare objects in other packages";
+               panic("cannot declare objects in other packages");
        }
        obj.pnolev = P.level;
        if scope.Lookup(obj.ident) != nil {
@@ -163,7 +163,7 @@ func MakeFunctionType(sig *Globals.Scope, p0, r0 int, check_recv bool) *Globals.
        if p0 > 0 && check_recv {
                // method
                if p0 != 1 {
-                       panic "p0 != 1";
+                       panic("p0 != 1");
                }
        }
 
@@ -192,7 +192,7 @@ func (P *Parser) DeclareFunc(pos int, ident string, typ *Globals.Type) *Globals.
        if typ.flags & Type.RECV != 0 {
                // method - declare in corresponding struct
                if typ.scope.entries.len_ < 1 {
-                       panic "no recv in signature?";
+                       panic("no recv in signature?");
                }
                recv_typ := typ.scope.entries.first.obj.typ;
                if recv_typ.form == Type.POINTER {
@@ -256,7 +256,7 @@ func (P *Parser) ParseIdent(allow_keyword bool) (pos int, ident string) {
                ident = P.val;
                if P.verbose {
                        P.PrintIndent();
-                       print "Ident = \"", ident, "\"\n";
+                       print("Ident = \"", ident, "\"\n");
                }
                P.Next();
        } else {
@@ -322,11 +322,11 @@ func (P *Parser) ParseQualifiedIdent(pos int, ident string) *Globals.Object {
 
                if obj.kind == Object.PACKAGE && P.tok == Scanner.PERIOD {
                        if obj.pnolev < 0 {
-                               panic "obj.pnolev < 0";
+                               panic("obj.pnolev < 0");
                        }
                        pkg := P.comp.pkg_list[obj.pnolev];
                        //if pkg.obj.ident != ident {
-                       //      panic "pkg.obj.ident != ident";
+                       //      panic("pkg.obj.ident != ident");
                        //}
                        P.Next();  // consume "."
                        pos, ident = P.ParseIdent(false);
@@ -534,7 +534,7 @@ func (P *Parser) ParseAnonymousSignature() *Globals.Type {
                p0 = sig.entries.len_;
                if P.semantic_checks && p0 != 1 {
                        P.Error(recv_pos, "must have exactly one receiver")
-                       panic "UNIMPLEMENTED (ParseAnonymousSignature)";
+                       panic("UNIMPLEMENTED (ParseAnonymousSignature)");
                        // TODO do something useful here
                }
                P.Next();
@@ -573,9 +573,9 @@ func (P *Parser) ParseNamedSignature() (pos int, ident string, typ *Globals.Type
                P.ParseParameters();
                p0 = sig.entries.len_;
                if P.semantic_checks && p0 != 1 {
-                       print "p0 = ", p0, "\n";
+                       print("p0 = ", p0, "\n");
                        P.Error(recv_pos, "must have exactly one receiver")
-                       panic "UNIMPLEMENTED (ParseNamedSignature)";
+                       panic("UNIMPLEMENTED (ParseNamedSignature)");
                        // TODO do something useful here
                }
        }
@@ -718,7 +718,7 @@ func (P *Parser) ParsePointerType() *Globals.Type {
                                // package exists already - must be forward declaration
                                if pkg.key != "" {
                                        P.Error(P.pos, `cannot use implicit package forward declaration for imported package "` + P.val + `"`);
-                                       panic "wrong package forward decl";
+                                       panic("wrong package forward decl");
                                        // TODO introduce dummy package so we can continue safely
                                }
                        }
@@ -738,7 +738,7 @@ func (P *Parser) ParsePointerType() *Globals.Type {
                                obj.pnolev = pkg.obj.pnolev;
                        } else {
                                if obj.kind != Object.TYPE || obj.typ.form != Type.FORWARD {
-                                       panic "inconsistency in package.type forward declaration";
+                                       panic("inconsistency in package.type forward declaration");
                                }
                                elt = obj.typ;
                        }
@@ -939,17 +939,6 @@ func (P *Parser) ParseExpressionPairList(list *Globals.List) {
 }
 
 
-func (P *Parser) ParseBuiltinCall() Globals.Expr {
-       P.Trace("BuiltinCall");
-       
-       args := Globals.NewList();
-       P.ParseExpressionList(args);  // TODO should be optional
-       
-       P.Ecart();
-       return nil;
-}
-
-
 func (P *Parser) ParseCompositeLit(typ *Globals.Type) Globals.Expr {
        P.Trace("CompositeLit");
        
@@ -1006,18 +995,12 @@ func (P *Parser) ParseOperand(pos int, ident string) Globals.Expr {
        var res Globals.Expr = AST.Bad;
 
        if pos >= 0 {
-               // TODO set these up properly in the Universe
-               if ident == "panic" || ident == "print" {
-                       res = P.ParseBuiltinCall();
-                       
-               } else {
-                       obj := P.ParseQualifiedIdent(pos, ident);
-                       if P.semantic_checks {
-                               if obj.kind == Object.TYPE {
-                                       res = P.ParseCompositeLit(obj.typ);
-                               } else {
-                                       res = AST.NewObject(pos, obj);
-                               }
+               obj := P.ParseQualifiedIdent(pos, ident);
+               if P.semantic_checks {
+                       if obj.kind == Object.TYPE {
+                               res = P.ParseCompositeLit(obj.typ);
+                       } else {
+                               res = AST.NewObject(pos, obj);
                        }
                }
 
@@ -1025,7 +1008,7 @@ func (P *Parser) ParseOperand(pos int, ident string) Globals.Expr {
        
                switch P.tok {
                case Scanner.IDENT:
-                       panic "UNREACHABLE";
+                       panic("UNREACHABLE");
                        
                case Scanner.LPAREN:
                        P.Next();
@@ -1126,7 +1109,7 @@ func (P *Parser) ParseSelectorOrTypeAssertion(x Globals.Expr) Globals.Expr {
                P.Expect(Scanner.RPAREN);
                
                if P.semantic_checks {
-                       panic "UNIMPLEMENTED";
+                       panic("UNIMPLEMENTED");
                }
        }
        
@@ -1154,12 +1137,12 @@ func (P *Parser) ParseIndexOrSlice(x Globals.Expr) Globals.Expr {
                        // ignore
                        break;
                case Type.STRING, Type.ARRAY:
-                       panic "UNIMPLEMENTED";
+                       panic("UNIMPLEMENTED");
                        
                case Type.MAP:
                        if Type.Equal(typ.aux, i1.typ()) {
                                // x = AST.NewSubscript(x, i1);
-                               panic "UNIMPLEMENTED";
+                               panic("UNIMPLEMENTED");
                                
                        } else {
                                P.Error(x.pos(), "map key type mismatch");
@@ -1189,7 +1172,7 @@ func (P *Parser) ParseCall(x Globals.Expr) Globals.Expr {
        P.Expect(Scanner.RPAREN);
 
        if P.semantic_checks {
-               panic "UNIMPLEMENTED";
+               panic("UNIMPLEMENTED");
        }
        
        P.Ecart();
@@ -1311,7 +1294,7 @@ func (P *Parser) ParseIdentExpression(pos int, ident string) Globals.Expr {
        x := P.ParseBinaryExpr(pos, ident, 1);
        
        if indent != P.indent {
-               panic "imbalanced tracing code (Expression)";
+               panic("imbalanced tracing code (Expression)");
        }
        P.Ecart();
        return x;
@@ -1740,7 +1723,7 @@ func (P *Parser) TryStatement() bool {
        }
 
        if indent != P.indent {
-               panic "imbalanced tracing code (Statement)"
+               panic("imbalanced tracing code (Statement)");
        }
        P.Ecart();
        return res;
@@ -1825,10 +1808,10 @@ func (P *Parser) ParseTypeSpec(exported bool) {
                if obj.typ.form == Type.FORWARD {
                        // imported forward-declared type
                        if !exported {
-                               panic "foo";
+                               panic("foo");
                        }
                } else {
-                       panic "bar";
+                       panic("bar");
                }
                
        } else {
@@ -1915,7 +1898,7 @@ func (P *Parser) ParseSpec(exported bool, keyword int) {
        case Scanner.CONST: P.ParseConstSpec(exported);
        case Scanner.TYPE: P.ParseTypeSpec(exported);
        case Scanner.VAR: P.ParseVarSpec(exported);
-       default: panic "UNREACHABLE";
+       default: panic("UNREACHABLE");
        }
 }
 
@@ -2024,7 +2007,7 @@ func (P *Parser) ParseDeclaration() {
        }
        
        if indent != P.indent {
-               panic "imbalanced tracing code (Declaration)"
+               panic("imbalanced tracing code (Declaration)");
        }
        P.Ecart();
 }
@@ -2041,12 +2024,12 @@ func (P *Parser) ResolveForwardTypes() {
        for p := P.forward_types.first; p != nil; p = p.next {
                typ := p.typ;
                if typ.form != Type.POINTER {
-                       panic "unresolved types should be pointers only";
+                       panic("unresolved types should be pointers only");
                }
                
                elt := typ.elt;
                if typ.elt.form != Type.FORWARD {
-                       panic "unresolved pointer should point to forward type";
+                       panic("unresolved pointer should point to forward type");
                }
                
                obj := elt.obj;
@@ -2120,12 +2103,12 @@ func (P *Parser) ParseProgram() {
        
        {       P.OpenScope();
                if P.level != 0 {
-                       panic "incorrect scope level";
+                       panic("incorrect scope level");
                }
                
                P.comp.Insert(Globals.NewPackage(P.S.filename, obj, P.top_scope));
                if P.comp.pkg_ref != 1 {
-                       panic "should have exactly one package now";
+                       panic("should have exactly one package now");
                }
 
                for P.tok == Scanner.IMPORT {
@@ -2142,7 +2125,7 @@ func (P *Parser) ParseProgram() {
                P.MarkExports();
                
                if P.level != 0 {
-                       panic "incorrect scope level";
+                       panic("incorrect scope level");
                }
                P.CloseScope();
        }
index c053caea8af12ee13143432b5bbacefe34935b36..bcd7edb6c39f56addcc6be87ce108aa23089045f 100755 (executable)
@@ -42,23 +42,23 @@ func (P *Printer) PrintSigRange(typ *Globals.Type, a, b int) {
        if a + 1 == b && IsAnonymous(scope.entries.ObjAt(a).ident) {
                P.PrintType(scope.entries.TypAt(a));  // result type only
        } else {
-               print "(";
+               print("(");
                for i := a; i < b; i++ {
                        par := scope.entries.ObjAt(i);
                        if i > a {
-                               print ", ";
+                               print(", ");
                        }
-                       print par.ident, " ";
+                       print(par.ident, " ");
                        P.PrintType(par.typ);
                }
-               print ")";
+               print(")");
        }
 }
 
 
 func (P *Printer) PrintSignature(typ *Globals.Type, fun *Globals.Object) {
        if typ.form != Type.FUNCTION {
-               panic "typ.form != Type.FUNCTION";
+               panic("typ.form != Type.FUNCTION");
        }
        
        p0 := 0;
@@ -69,34 +69,34 @@ func (P *Printer) PrintSignature(typ *Globals.Type, fun *Globals.Object) {
        l0 := typ.scope.entries.len_;
        
        if P.level == 0 {
-               print "func ";
+               print("func ");
 
                if 0 < p0 {
                        P.PrintSigRange(typ, 0, p0);
-                       print " ";
+                       print(" ");
                }
        }
        
        if fun != nil {
                P.PrintObject(fun);
-               //print " ";
+               //print(" ");
        } else if p0 > 0 {
-               print ". ";
+               print(". ");
        }
        
        P.PrintSigRange(typ, p0, r0);
 
        if r0 < l0 {
-               print " ";
+               print(" ");
                P.PrintSigRange(typ, r0, l0);
        }
 }
 
 
 func (P *Printer) PrintIndent() {
-       print "\n";
+       print("\n");
        for i := P.level; i > 0; i-- {
-               print "\t";
+               print("\t");
        }
 }
 
@@ -134,44 +134,44 @@ func (P *Printer) PrintScope(scope *Globals.Scope, delta int) {
 func (P *Printer) PrintObjectStruct(obj *Globals.Object) {
        switch obj.kind {
        case Object.BAD:
-               print "bad ";
+               print("bad ");
                P.PrintObject(obj);
 
        case Object.CONST:
-               print "const ";
+               print("const ");
                P.PrintObject(obj);
-               print " ";
+               print(" ");
                P.PrintType(obj.typ);
 
        case Object.TYPE:
-               print "type ";
+               print("type ");
                P.PrintObject(obj);
-               print " ";
+               print(" ");
                P.PrintTypeStruct(obj.typ);
 
        case Object.VAR, Object.FIELD:
                if P.level == 0 {
-                       print "var ";
+                       print("var ");
                }
                P.PrintObject(obj);
-               print " ";
+               print(" ");
                P.PrintType(obj.typ);
 
        case Object.FUNC:
                P.PrintSignature(obj.typ, obj);
 
        case Object.PACKAGE:
-               print "package ";
+               print("package ");
                P.PrintObject(obj);
-               print " ";
+               print(" ");
                P.PrintScope(P.comp.pkg_list[obj.pnolev].scope, 0);
 
        default:
-               panic "UNREACHABLE";
+               panic("UNREACHABLE");
        }
        
        if P.level > 0 {
-               print ";";
+               print(";");
        }
 }
 
@@ -181,86 +181,86 @@ func (P *Printer) PrintObject(obj *Globals.Object) {
                pkg := P.comp.pkg_list[obj.pnolev];
                if pkg.key == "" {
                        // forward-declared package
-                       print `"`, pkg.file_name, `"`;
+                       print(`"`, pkg.file_name, `"`);
                } else {
                        // imported package
-                       print pkg.obj.ident;
+                       print(pkg.obj.ident);
                }
-               print "."
+               print(".");
        }
-       print obj.ident;
+       print(obj.ident);
 }
 
 
 func (P *Printer) PrintTypeStruct(typ *Globals.Type) {
        switch typ.form {
        case Type.VOID:
-               print "void";
+               print("void");
                
        case Type.FORWARD:
-               print "<forward type>";
+               print("<forward type>");
 
        case Type.BAD:
-               print "<bad type>";
+               print("<bad type>");
 
        case Type.NIL, Type.BOOL, Type.UINT, Type.INT, Type.FLOAT, Type.STRING, Type.ANY:
                if typ.obj == nil {
-                       panic "typ.obj == nil";
+                       panic("typ.obj == nil");
                }
                P.PrintType(typ);
 
        case Type.ALIAS:
                P.PrintType(typ.elt);
                if typ.aux != typ.elt {
-                       print " /* ";
+                       print(" /* ");
                        P.PrintType(typ.aux);
-                       print " */";
+                       print(" */");
                }
                
        case Type.ARRAY:
-               print "[]";
+               print("[]");
                P.PrintType(typ.elt);
 
        case Type.STRUCT:
-               print "struct {";
+               print("struct {");
                P.PrintScope(typ.scope, 1);
-               print "}";
+               print("}");
 
        case Type.INTERFACE:
-               print "interface {";
+               print("interface {");
                P.PrintScope(typ.scope, 1);
-               print "}";
+               print("}");
 
        case Type.MAP:
-               print "map [";
+               print("map [");
                P.PrintType(typ.aux);
-               print "] ";
+               print("] ");
                P.PrintType(typ.elt);
 
        case Type.CHANNEL:
-               print "chan";
+               print("chan");
                switch typ.flags {
-               case Type.SEND: print " -<";
-               case Type.RECV: print " <-";
+               case Type.SEND: print(" -<");
+               case Type.RECV: print(" <-");
                case Type.SEND + Type.RECV:  // nothing to print
-               default: panic "UNREACHABLE";
+               default: panic("UNREACHABLE");
                }
-               print " ";
+               print(" ");
                P.PrintType(typ.elt);
 
        case Type.FUNCTION:
                P.PrintSignature(typ, nil);
 
        case Type.POINTER:
-               print "*";
+               print("*");
                P.PrintType(typ.elt);
 
        case Type.REFERENCE:
-               print "&";
+               print("&");
                P.PrintType(typ.elt);
 
        default:
-               panic "UNREACHABLE";
+               panic("UNREACHABLE");
                
        }
 }
@@ -279,5 +279,5 @@ export func PrintObject(comp *Globals.Compilation, obj *Globals.Object, print_al
        var P Printer;
        (&P).Init(comp, print_all);
        (&P).PrintObjectStruct(obj);
-       print "\n";
+       print("\n");
 }
index 5ff69104909a9415965ae3ffceda9537a99e3b58..956d0facfad6d0f6e5bc2c437ca6162e9b4779fd 100644 (file)
@@ -397,17 +397,17 @@ func (S *Scanner) Error(pos int, msg string) {
                delta = -delta;
        }
        if delta > errdist || S.nerrors == 0 /* always report first error */ {
-               print S.filename;
+               print(S.filename);
                if pos >= 0 {
                        // print position
                        line, col := S.LineCol(pos);
                        if VerboseMsgs {
-                               print ":", line, ":", col;
+                               print(":", line, ":", col);
                        } else {
-                               print ":", line;
+                               print(":", line);
                        }
                }
-               print ": ", msg, "\n";
+               print(": ", msg, "\n");
                S.nerrors++;
                S.errpos = pos;
        }
index 5c23acf21f2996d27412bd111dfad27d61debc62..ffdc0b56fcce31cceedbe75a65aa3861d786ba6c 100644 (file)
@@ -12,11 +12,11 @@ func Scan1(filename, src string) {
        S.Open(filename, src);
        for {
                tok, pos, val := S.Scan();
-               print pos, ": ", Scanner.TokenName(tok);
+               print(pos, ": ", Scanner.TokenName(tok));
                if tok == Scanner.IDENT || tok == Scanner.INT || tok == Scanner.FLOAT || tok == Scanner.STRING {
-                       print " ", val;
+                       print(" ", val);
                }
-               print "\n";
+               print("\n");
                if tok == Scanner.EOF {
                        return;
                }
@@ -33,11 +33,11 @@ func Scan2(filename, src string) {
                var t *Scanner.Token;
                t = <- c;
                tok, pos, val := t.tok, t.pos, t.val;
-               print pos, ": ", Scanner.TokenName(tok);
+               print(pos, ": ", Scanner.TokenName(tok));
                if tok == Scanner.IDENT || tok == Scanner.INT || tok == Scanner.FLOAT || tok == Scanner.STRING {
-                       print " ", val;
+                       print(" ", val);
                }
-               print "\n";
+               print("\n");
                if tok == Scanner.EOF {
                        return;
                }
@@ -51,14 +51,14 @@ func main() {
                var ok bool;
                src, ok = sys.readfile(sys.argv(i));
                if ok {
-                       print "scanning (standard) " + sys.argv(i) + "\n";
+                       print("scanning (standard) " + sys.argv(i) + "\n");
                        Scan1(sys.argv(i), src);
-                       print "\n";
-                       print "scanning (channels) " + sys.argv(i) + "\n";
+                       print("\n");
+                       print("scanning (channels) " + sys.argv(i) + "\n");
                        Scan2(sys.argv(i), src);
                } else {
-                       print "error: cannot read " + sys.argv(i) + "\n";
+                       print("error: cannot read " + sys.argv(i) + "\n");
                }
-               print "\n";
+               print("\n");
        }
 }
index 266a903bb1a9c83b487cbcb2a4ced39812ce824a..bd554d4ea7a316e14b9958b08dc38e4f76dae143 100644 (file)
@@ -128,7 +128,7 @@ func Equal0(x, y *Globals.Type) bool {
                                xf := p.obj;
                                yf := q.obj;
                                if xf.kind != Object.VAR || yf.kind != Object.VAR {
-                                       panic "parameters must be vars";
+                                       panic("parameters must be vars");
                                }
                                if !Equal(xf.typ, yf.typ) {
                                        return false;
@@ -160,14 +160,14 @@ func Equal0(x, y *Globals.Type) bool {
                return false;
 
        case INTERFACE:
-               panic "UNIMPLEMENTED";
+               panic("UNIMPLEMENTED");
                return false;
 
        case POINTER, REFERENCE:
                return Equal(x.elt, y.elt);
        }
 
-       panic "UNREACHABLE";
+       panic("UNREACHABLE");
        return false;
 }
 
@@ -176,7 +176,7 @@ export func Equal(x, y *Globals.Type) bool {
        res := Equal0(x, y);
        // TODO should do the check below only in debug mode
        if Equal0(y, x) != res {
-               panic "type equality must be symmetric";
+               panic("type equality must be symmetric");
        }
        return res;
 }
@@ -187,6 +187,6 @@ export func Assigneable(from, to *Globals.Type) bool {
                return true;
        }
        
-       panic "UNIMPLEMENTED";
+       panic("UNIMPLEMENTED");
        return false;
 }
index 744244c485ff967bbfcf28347239a1b41762479c..cb656825c01326cd41c511f52a5cf9c5b9346040 100755 (executable)
@@ -80,7 +80,7 @@ func DeclAlias(ident string, typ *Globals.Type) *Globals.Type {
 
 func Register(typ *Globals.Type) *Globals.Type {
        if types.len_ < 0 {
-               panic "types.len_ < 0";
+               panic("types.len_ < 0");
        }
        typ.ref = types.len_;
        types.AddTyp(typ);
index 57d2eb546dc930a3b4d28c50409ac0fcd96d2a3e..0764a2f8ca256e1f8321a401476bc2ada30ad75c 100644 (file)
@@ -10,7 +10,7 @@ export func BaseName(s string) string {
        i := len(s) - 1;
        for i >= 0 && s[i] != '/' {
                if s[i] > 128 {
-                       panic "non-ASCII string"
+                       panic("non-ASCII string");
                }
                i--;
        }
@@ -38,7 +38,7 @@ export func IntToString(x, base int) string {
        if x < 0 {
                x = -x;
                if x < 0 {
-                       panic "smallest int not handled";
+                       panic("smallest int not handled");
                }
        } else if x == 0 {
                return "0";
index b7f64ce0f5ac08c3d37ca209ceb51cd7b415bddf..236675ffea6ee350c2b5f1cafb1f4ace18ddf7bc 100644 (file)
@@ -17,7 +17,7 @@ import AST "ast"
 
 
 func Error(msg string) {
-       panic "internal compiler error: ", msg, "\n";
+       panic("internal compiler error: ", msg, "\n");
 }