diff options
author | Austin Clements <aclements@csail.mit.edu> | 2009-09-03 17:14:49 -0700 |
---|---|---|
committer | Austin Clements <aclements@csail.mit.edu> | 2009-09-03 17:14:49 -0700 |
commit | b62dede7477f50dd1fca4b7e73054ebe26290633 (patch) | |
tree | 5a04caec40047896d3a897caff66ae2f65d52ded /usr/austin/eval/expr.go | |
parent | 72afc835accfa35984736f63738a021ab9c27a38 (diff) | |
download | golang-b62dede7477f50dd1fca4b7e73054ebe26290633.tar.gz |
Thread Thread into Value Get/Set/Assign so other Value
implementations can abort. Make genConstant get values lazily
since we need the Thread now.
R=rsc
APPROVED=rsc
DELTA=299 (8 added, 19 deleted, 272 changed)
OCL=34353
CL=34353
Diffstat (limited to 'usr/austin/eval/expr.go')
-rw-r--r-- | usr/austin/eval/expr.go | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/usr/austin/eval/expr.go b/usr/austin/eval/expr.go index f24887bc2..472db83c1 100644 --- a/usr/austin/eval/expr.go +++ b/usr/austin/eval/expr.go @@ -346,7 +346,7 @@ func (a *assignCompiler) compile(b *block, lt Type) (func(Value, *Thread)) { vt := a.rmt.Elems[0]; effect = func(t *Thread) { m, k := rf(t); - v := m.Elem(k); + v := m.Elem(t, k); found := boolV(true); if v == nil { found = boolV(false); @@ -902,7 +902,7 @@ func (a *exprInfo) compileSelectorExpr(v *expr, name string) *expr { expr := a.newExpr(ft, "selector expression"); pf := parent.asStruct(); evalAddr := func(t *Thread) Value { - return pf(t).Field(index); + return pf(t).Field(t, index); }; expr.genValue(evalAddr); return sub(expr); @@ -990,7 +990,7 @@ func (a *exprInfo) compileIndexExpr(l, r *expr) *expr { if r < 0 || r >= bound { t.Abort(IndexError{r, bound}); } - return l.Elem(r); + return l.Elem(t, r); }); case *SliceType: @@ -1004,7 +1004,7 @@ func (a *exprInfo) compileIndexExpr(l, r *expr) *expr { if r < 0 || r >= l.Len { t.Abort(IndexError{r, l.Len}); } - return l.Base.Elem(r); + return l.Base.Elem(t, r); }); case *stringType: @@ -1029,7 +1029,7 @@ func (a *exprInfo) compileIndexExpr(l, r *expr) *expr { if m == nil { t.Abort(NilPointerError{}); } - e := m.Elem(k); + e := m.Elem(t, k); if e == nil { t.Abort(KeyError{k}); } @@ -1197,7 +1197,7 @@ func (a *exprInfo) compileBuiltinCallExpr(b *block, ft *FuncType, as []*expr) *e if m == nil { return 0; } - return m.Len(); + return m.Len(t); }; //case *ChanType: |