diff options
Diffstat (limited to 'src/pkg/go/ast/scope.go')
-rw-r--r-- | src/pkg/go/ast/scope.go | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/pkg/go/ast/scope.go b/src/pkg/go/ast/scope.go index 9a62686e3..688ae50c7 100644 --- a/src/pkg/go/ast/scope.go +++ b/src/pkg/go/ast/scope.go @@ -4,17 +4,28 @@ package ast +// A Scope maintains the set of identifiers visible +// in the scope and a link to the immediately surrounding +// (outer) scope. +// +// NOTE: WORK IN PROGRESS +// type Scope struct { Outer *Scope; Names map[string]*Ident } +// NewScope creates a new scope nested in the outer scope. func NewScope(outer *Scope) *Scope { return &Scope{outer, make(map[string]*Ident)}; } +// Declare inserts an identifier into the scope s. If the +// declaration succeeds, the result is true, if the identifier +// exists already in the scope, the result is false. +// func (s *Scope) Declare(ident *Ident) bool { if _, found := s.Names[ident.Value]; found { return false; @@ -24,6 +35,10 @@ func (s *Scope) Declare(ident *Ident) bool { } +// Lookup looks up an identifier in the current scope chain. +// If the identifier is found, it is returned; otherwise the +// result is nil. +// func (s *Scope) Lookup(name string) *Ident { for ; s != nil; s = s.Outer { if ident, found := s.Names[name]; found { @@ -34,6 +49,8 @@ func (s *Scope) Lookup(name string) *Ident { } +// TODO(gri) Uncomment once this code is needed. +/* var Universe = Scope { Names: map[string]*Ident { // basic types @@ -74,3 +91,4 @@ var Universe = Scope { "println": nil, } } +*/ |