summaryrefslogtreecommitdiff
path: root/src/pkg/go/ast
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2009-11-03 14:05:18 -0800
committerRobert Griesemer <gri@golang.org>2009-11-03 14:05:18 -0800
commit5e91150fe9fcb7b653b3ff3cafa3c5efaf2ea706 (patch)
tree9ff17efaef4be7d37270cdd226646e93e8b1e998 /src/pkg/go/ast
parentb591b9b5fd617b7027293bd16af74d54ec8268c4 (diff)
downloadgolang-5e91150fe9fcb7b653b3ff3cafa3c5efaf2ea706.tar.gz
Note: This is an exact replica and replacement of CL 1018027
(which I uploaded at home and thus can't upload from here). CL 1018027 was reviewed. - added comments to scope.go - commented out some code that is not yet needed (and which showed up prominently in the documentation) R=rsc http://go/go-review/1017017
Diffstat (limited to 'src/pkg/go/ast')
-rw-r--r--src/pkg/go/ast/scope.go18
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,
}
}
+*/