]> Cypherpunks repositories - gostls13.git/commit
Make Value always represent an l-value and never a generic
authorAustin Clements <aclements@csail.mit.edu>
Thu, 16 Jul 2009 00:56:17 +0000 (17:56 -0700)
committerAustin Clements <aclements@csail.mit.edu>
Thu, 16 Jul 2009 00:56:17 +0000 (17:56 -0700)
commit816e3da26d69ee4b52e6c860d87baded7a299be3
tree772a8caacd99a2ea2fcaa94985621dc3ef1911d0
parent3fc7cfd55f1e1e7bc4e120d6bb0afc9f3869f439
Make Value always represent an l-value and never a generic
container for values.

Instead of having one evaluator function that returns a
generic Value, there is now an evaluator function for each
generalized type that simply returns a native type.

The compiler is more type-safe now because there are almost no
type conversions at evaluation time and it's impossible to
invoke a nil evaluator function during evaluation.  This also
makes ideals and pointers really clean.

As an added bonus, expression evaluation should be faster
because it doesn't require heap allocation for every
intermediate value, type switches, or lots of conversions to
and from Value.  It also involves fewer function calls.

R=rsc
APPROVED=rsc
DELTA=431  (280 added, 115 deleted, 36 changed)
OCL=31705
CL=31709
usr/austin/eval/decls.go
usr/austin/eval/expr.go
usr/austin/eval/scope.go
usr/austin/eval/type.go
usr/austin/eval/value.go