diff options
Diffstat (limited to 'src/pkg/exp/eval/scope.go')
| -rw-r--r-- | src/pkg/exp/eval/scope.go | 98 | 
1 files changed, 49 insertions, 49 deletions
| diff --git a/src/pkg/exp/eval/scope.go b/src/pkg/exp/eval/scope.go index 971b92d53..84c4c92b8 100644 --- a/src/pkg/exp/eval/scope.go +++ b/src/pkg/exp/eval/scope.go @@ -5,8 +5,8 @@  package eval  import ( -	"go/token"; -	"log"; +	"go/token" +	"log"  )  /* @@ -15,25 +15,25 @@ import (  // A definition can be a *Variable, *Constant, or Type.  type Def interface { -	Pos() token.Position; +	Pos() token.Position  }  type Variable struct { -	token.Position; +	token.Position  	// Index of this variable in the Frame structure -	Index	int; +	Index int  	// Static type of this variable -	Type	Type; +	Type Type  	// Value of this variable.  This is only used by Scope.NewFrame;  	// therefore, it is useful for global scopes but cannot be used  	// in function scopes. -	Init	Value; +	Init Value  }  type Constant struct { -	token.Position; -	Type	Type; -	Value	Value; +	token.Position +	Type  Type +	Value Value  }  // A block represents a definition block in which a name may not be @@ -41,35 +41,35 @@ type Constant struct {  type block struct {  	// The block enclosing this one, including blocks in other  	// scopes. -	outer	*block; +	outer *block  	// The nested block currently being compiled, or nil. -	inner	*block; +	inner *block  	// The Scope containing this block. -	scope	*Scope; +	scope *Scope  	// The Variables, Constants, and Types defined in this block. -	defs	map[string]Def; +	defs map[string]Def  	// The index of the first variable defined in this block.  	// This must be greater than the index of any variable defined  	// in any parent of this block within the same Scope at the  	// time this block is entered. -	offset	int; +	offset int  	// The number of Variables defined in this block. -	numVars	int; +	numVars int  	// If global, do not allocate new vars and consts in  	// the frame; assume that the refs will be compiled in  	// using defs[name].Init. -	global	bool; +	global bool  }  // A Scope is the compile-time analogue of a Frame, which captures  // some subtree of blocks.  type Scope struct {  	// The root block of this scope. -	*block; +	*block  	// The maximum number of variables required at any point in  	// this Scope.  This determines the number of slots needed in  	// Frame's created from this Scope at run-time. -	maxVars	int; +	maxVars int  }  func (b *block) enterChild() *block { @@ -81,9 +81,9 @@ func (b *block) enterChild() *block {  		scope: b.scope,  		defs: make(map[string]Def),  		offset: b.offset + b.numVars, -	}; -	b.inner = sub; -	return sub; +	} +	b.inner = sub +	return sub  }  func (b *block) exit() { @@ -98,66 +98,66 @@ func (b *block) exit() {  			log.Crash("Exit of parent block without exit of child block")  		}  	} -	b.outer.inner = nil; +	b.outer.inner = nil  }  func (b *block) ChildScope() *Scope {  	if b.inner != nil && b.inner.scope == b.scope {  		log.Crash("Failed to exit child block before entering a child scope")  	} -	sub := b.enterChild(); -	sub.offset = 0; -	sub.scope = &Scope{sub, 0}; -	return sub.scope; +	sub := b.enterChild() +	sub.offset = 0 +	sub.scope = &Scope{sub, 0} +	return sub.scope  }  func (b *block) DefineVar(name string, pos token.Position, t Type) (*Variable, Def) {  	if prev, ok := b.defs[name]; ok {  		return nil, prev  	} -	v := b.defineSlot(t, false); -	v.Position = pos; -	b.defs[name] = v; -	return v, nil; +	v := b.defineSlot(t, false) +	v.Position = pos +	b.defs[name] = v +	return v, nil  } -func (b *block) DefineTemp(t Type) *Variable	{ return b.defineSlot(t, true) } +func (b *block) DefineTemp(t Type) *Variable { return b.defineSlot(t, true) }  func (b *block) defineSlot(t Type, temp bool) *Variable {  	if b.inner != nil && b.inner.scope == b.scope {  		log.Crash("Failed to exit child block before defining variable")  	} -	index := -1; +	index := -1  	if !b.global || temp { -		index = b.offset + b.numVars; -		b.numVars++; +		index = b.offset + b.numVars +		b.numVars++  		if index >= b.scope.maxVars {  			b.scope.maxVars = index + 1  		}  	} -	v := &Variable{token.Position{}, index, t, nil}; -	return v; +	v := &Variable{token.Position{}, index, t, nil} +	return v  }  func (b *block) DefineConst(name string, pos token.Position, t Type, v Value) (*Constant, Def) {  	if prev, ok := b.defs[name]; ok {  		return nil, prev  	} -	c := &Constant{pos, t, v}; -	b.defs[name] = c; -	return c, nil; +	c := &Constant{pos, t, v} +	b.defs[name] = c +	return c, nil  }  func (b *block) DefineType(name string, pos token.Position, t Type) Type {  	if _, ok := b.defs[name]; ok {  		return nil  	} -	nt := &NamedType{pos, name, nil, true, make(map[string]Method)}; +	nt := &NamedType{pos, name, nil, true, make(map[string]Method)}  	if t != nil {  		nt.Complete(t)  	} -	b.defs[name] = nt; -	return nt; +	b.defs[name] = nt +	return nt  }  func (b *block) Lookup(name string) (bl *block, level int, def Def) { @@ -168,27 +168,27 @@ func (b *block) Lookup(name string) (bl *block, level int, def Def) {  		if b.outer != nil && b.scope != b.outer.scope {  			level++  		} -		b = b.outer; +		b = b.outer  	} -	return nil, 0, nil; +	return nil, 0, nil  } -func (s *Scope) NewFrame(outer *Frame) *Frame	{ return outer.child(s.maxVars) } +func (s *Scope) NewFrame(outer *Frame) *Frame { return outer.child(s.maxVars) }  /*   * Frames   */  type Frame struct { -	Outer	*Frame; -	Vars	[]Value; +	Outer *Frame +	Vars  []Value  }  func (f *Frame) Get(level int, index int) Value {  	for ; level > 0; level-- {  		f = f.Outer  	} -	return f.Vars[index]; +	return f.Vars[index]  }  func (f *Frame) child(numVars int) *Frame { | 
