1
0
mirror of https://github.com/golang/go synced 2024-11-25 23:28:00 -07:00
go/usr/gri/gosrc/compilation.go

74 lines
1.4 KiB
Go
Raw Normal View History

// 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 Compilation
import Globals "globals"
import Object "object"
import Type "type"
2008-07-15 20:59:00 -06:00
import Universe "universe"
import Scanner "scanner"
import AST "ast"
import Parser "parser"
import Export "export"
func BaseName(s string) string {
// TODO this is not correct for non-ASCII strings!
i := len(s) - 1;
for i >= 0 && s[i] != '/' {
if s[i] > 128 {
panic "non-ASCII string"
}
i--;
}
return s[i + 1 : len(s)];
}
func FixExt(s string) string {
i := len(s) - 3; // 3 == len(".go");
if s[i : len(s)] == ".go" {
s = s[0 : i];
}
return s + ".7";
}
export Compile
func Compile(file_name string, verbose int) {
src, ok := sys.readfile(file_name);
2008-07-15 20:59:00 -06:00
if !ok {
print "cannot open ", file_name, "\n"
2008-07-15 20:59:00 -06:00
return;
}
Universe.Init(); // TODO eventually this should be only needed once
comp := Globals.NewCompilation();
pkg := Globals.NewPackage(file_name);
comp.Insert(pkg);
if comp.npkgs != 1 {
panic "should have exactly one package now";
}
2008-07-15 20:59:00 -06:00
scanner := new(Scanner.Scanner);
scanner.Open(file_name, src);
2008-07-15 20:59:00 -06:00
parser := new(Parser.Parser);
parser.Open(comp, scanner, verbose);
print "parsing ", file_name, "\n";
parser.ParseProgram();
if parser.S.nerrors > 0 {
return;
}
2008-07-15 20:59:00 -06:00
// export
/*
exp := new(Export.Exporter);
exp.Export(comp, FixExt(BaseName(file_name)));
*/
}