• Austin Clements's avatar
    Make Value always represent an l-value and never a generic · 816e3da2
    Austin Clements authored
    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
    816e3da2
expr.go 23 KB