import Globals "globals"
import Object "object"
import Type "type"
+import Universe "universe"
import Package "package"
import Scanner "scanner"
import Parser "parser"
type Compilation struct {
src_name string;
pkg *Globals.Object;
- imports *Globals.List; // a list of *Globals.Package
+ imports [256] *Package.Package; // TODO need open arrays
+ nimports int;
}
export Compile
-func Compile() {
+func Compile(src_name string, verbose int) {
+ comp := new(Compilation);
+ comp.src_name = src_name;
+ comp.pkg = nil;
+ comp.nimports = 0;
+
+ src, ok := sys.readfile(src_name);
+ if !ok {
+ print "cannot open ", src_name, "\n"
+ return;
+ }
+
+ Universe.Init();
+
+ S := new(Scanner.Scanner);
+ S.Open(src_name, src);
+
+ P := new(Parser.Parser);
+ P.Open(S, verbose);
+
+ print "parsing ", src_name, "\n";
+ P.ParseProgram();
}
type Scope struct {
parent *Scope;
entries *List;
- // entries *map[string] *Object; // doesn't work yet
+ // entries *map[string] *Object; // doesn't work properly
}
package main
import Build "build"
-import Globals "globals"
-import Object "object"
-import Type "type"
-import Universe "universe"
-import Scanner "scanner"
-import Parser "parser"
+import Compilation "compilation"
func PrintHelp() {
}
-func Compile(filename, src string, verbose int) {
- Universe.Init();
-
- S := new(Scanner.Scanner);
- S.Open(filename, src);
-
- P := new(Parser.Parser);
- P.Open(S, verbose);
-
- P.ParseProgram();
-}
-
-
func main() {
if sys.argc() <= 1 {
PrintHelp();
continue;
}
- src, ok := sys.readfile(sys.argv(i));
- if ok {
- print "parsing " + sys.argv(i) + "\n";
- Compile(sys.argv(i), src, verbose);
- } else {
- print "error: cannot read " + sys.argv(i) + "\n";
- }
+ Compilation.Compile(sys.argv(i), verbose);
}
}