Commit d88c759e authored by Robert Griesemer's avatar Robert Griesemer

- moved package code into globals.go, adjusted deps

SVN=127887
parent 6426659d
...@@ -8,7 +8,6 @@ import Globals "globals" ...@@ -8,7 +8,6 @@ import Globals "globals"
import Object "object" import Object "object"
import Type "type" import Type "type"
import Universe "universe" import Universe "universe"
import Package "package"
import Scanner "scanner" import Scanner "scanner"
import Parser "parser" import Parser "parser"
import Export "export" import Export "export"
...@@ -18,12 +17,12 @@ export Compilation ...@@ -18,12 +17,12 @@ export Compilation
type Compilation struct { type Compilation struct {
src_name string; src_name string;
pkg *Globals.Object; pkg *Globals.Object;
imports [256] *Package.Package; // TODO need open arrays imports [256] *Globals.Package; // TODO need open arrays
nimports int; nimports int;
} }
func (C *Compilation) Lookup(file_name string) *Package.Package { func (C *Compilation) Lookup(file_name string) *Globals.Package {
for i := 0; i < C.nimports; i++ { for i := 0; i < C.nimports; i++ {
pkg := C.imports[i]; pkg := C.imports[i];
if pkg.file_name == file_name { if pkg.file_name == file_name {
...@@ -34,7 +33,7 @@ func (C *Compilation) Lookup(file_name string) *Package.Package { ...@@ -34,7 +33,7 @@ func (C *Compilation) Lookup(file_name string) *Package.Package {
} }
func (C *Compilation) Insert(pkg *Package.Package) { func (C *Compilation) Insert(pkg *Globals.Package) {
if C.Lookup(pkg.file_name) != nil { if C.Lookup(pkg.file_name) != nil {
panic "package already inserted"; panic "package already inserted";
} }
...@@ -44,7 +43,7 @@ func (C *Compilation) Insert(pkg *Package.Package) { ...@@ -44,7 +43,7 @@ func (C *Compilation) Insert(pkg *Package.Package) {
} }
func (C *Compilation) InsertImport(pkg *Package.Package) *Package.Package { func (C *Compilation) InsertImport(pkg *Globals.Package) *Globals.Package {
p := C.Lookup(pkg.file_name); p := C.Lookup(pkg.file_name);
if (p == nil) { if (p == nil) {
// no primary package found // no primary package found
...@@ -111,4 +110,5 @@ func Compile(src_name string, verbose int) { ...@@ -111,4 +110,5 @@ func Compile(src_name string, verbose int) {
print "parsing ", src_name, "\n"; print "parsing ", src_name, "\n";
P.ParseProgram(); P.ParseProgram();
//comp.Export();
} }
...@@ -7,7 +7,6 @@ package Exporter ...@@ -7,7 +7,6 @@ package Exporter
import Globals "globals" import Globals "globals"
import Object "object" import Object "object"
import Type "type" import Type "type"
import Package "package"
//import Compilation "compilation" //import Compilation "compilation"
...@@ -25,7 +24,7 @@ type Exporter struct { ...@@ -25,7 +24,7 @@ type Exporter struct {
func (E *Exporter) WriteType(typ *Globals.Type); func (E *Exporter) WriteType(typ *Globals.Type);
func (E *Exporter) WriteObject(obj *Globals.Object); func (E *Exporter) WriteObject(obj *Globals.Object);
func (E *Exporter) WritePackage(pkg *Package.Package) ; func (E *Exporter) WritePackage(pkg *Globals.Package) ;
func (E *Exporter) WriteByte(x byte) { func (E *Exporter) WriteByte(x byte) {
...@@ -240,7 +239,7 @@ func (E *Exporter) WriteType(typ *Globals.Type) { ...@@ -240,7 +239,7 @@ func (E *Exporter) WriteType(typ *Globals.Type) {
} }
func (E *Exporter) WritePackage(pkg *Package.Package) { func (E *Exporter) WritePackage(pkg *Globals.Package) {
if pkg.ref >= 0 { if pkg.ref >= 0 {
E.WritePackageTag(-pkg.ref); // package already exported E.WritePackageTag(-pkg.ref); // package already exported
return; return;
...@@ -279,7 +278,7 @@ func (E *Exporter) Export(/*Compilation* comp, BBuffer* buf*/) { ...@@ -279,7 +278,7 @@ func (E *Exporter) Export(/*Compilation* comp, BBuffer* buf*/) {
E.type_ref = Universe.types.len(); E.type_ref = Universe.types.len();
*/ */
var pkg *Package.Package = nil; // comp.packages[0]; var pkg *Globals.Package = nil; // comp.packages[0];
E.WritePackage(pkg); E.WritePackage(pkg);
for p := pkg.scope.entries.first; p != nil; p = p.next { for p := pkg.scope.entries.first; p != nil; p = p.next {
if p.obj.mark { if p.obj.mark {
......
...@@ -6,9 +6,9 @@ package Globals ...@@ -6,9 +6,9 @@ package Globals
// The following types should really be in their respective files // The following types should really be in their respective files
// object.go, type.go, and scope.go but they refer to each other // (object.go, type.go, scope.go, package.go) but they refer to each
// and we don't know how to handle forward-declared pointers across // other and we don't know how to handle forward-declared pointers
// packages yet. // across packages yet.
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
...@@ -64,6 +64,17 @@ type Scope struct { ...@@ -64,6 +64,17 @@ type Scope struct {
} }
export Package
type Package struct {
ref int; // for exporting only: >= 0 means already exported
file_name string;
ident string;
key string;
scope *Scope;
pno int;
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Creation // Creation
...@@ -103,6 +114,13 @@ func NewScope(parent *Scope) *Scope { ...@@ -103,6 +114,13 @@ func NewScope(parent *Scope) *Scope {
} }
export NewPackage;
func NewPackage() *Package {
pkg := new(Package);
return pkg;
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// List methods // List methods
......
// 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 Package
import Globals "globals"
export Package
type Package struct {
ref int;
file_name string;
ident string;
key string;
scope *Globals.Scope;
pno int;
}
export NewPackage;
func NewPackage() *Package {
pkg := new(Package);
return pkg;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment