]> Cypherpunks repositories - gostls13.git/commit
Implement single-valued, non-variadic function literals and
authorAustin Clements <aclements@csail.mit.edu>
Mon, 27 Jul 2009 20:01:23 +0000 (13:01 -0700)
committerAustin Clements <aclements@csail.mit.edu>
Mon, 27 Jul 2009 20:01:23 +0000 (13:01 -0700)
commitd3888fe8a318da1fdd089e0059aaa1596405a659
treef71e1ce1d782f4b76859763c402c654a1e79bc54
parentca01716934ef58ad175c07c481011c21e2697511
Implement single-valued, non-variadic function literals and
function calling.  Implement a type compiler and named types.
Implement a universal scope containing built-in named types,
and some built-in constants.  Implement a simple virtual
machine for executing statements and single-valued return.

Fix many places that incorrectly dealt with named types.  In
particular, the Type.Zero methods now use the type's bit count
to determine the appropriate value representation.  As a
result, a bit count of 0 now means architecture-dependent and
bounded types use unsafe.Sizeof to determine the correct
bounds.  Previously, the bounds on a 32-bit machine would have
been wrong.

Eliminated Type.compatible, since the implementation is
equivalent for all types.  Added Type.rep that shallowly
strips named types.  Replaced almost all uses of Type.literal
with Type.rep.

Fix implementation of assign-op's so it only evaluates the
left side once.  As part of this, there is now a generic way
to separate out the effect and value of an expression.

R=rsc
APPROVED=rsc
DELTA=1530  (1244 added, 68 deleted, 218 changed)
OCL=32184
CL=32230
usr/austin/eval/compiler.go [new file with mode: 0644]
usr/austin/eval/decls.go
usr/austin/eval/expr.go
usr/austin/eval/func.go [new file with mode: 0644]
usr/austin/eval/scope.go
usr/austin/eval/stmt.go
usr/austin/eval/type.go
usr/austin/eval/typec.go [new file with mode: 0644]
usr/austin/eval/value.go