diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-04-14 14:42:32 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-04-14 14:42:32 +0000 |
commit | 9985230c00226826949473c3862c0c3afea74aaf (patch) | |
tree | d221b96649f2a134cce366efdfc5685145567aa2 /src/libexpr/eval.hh | |
parent | 816dd3f0612111718c338842283c1ee6577b9f0a (diff) |
* After parsing, compute level/displacement pairs for each variable
use site, allowing environments to be stores as vectors of values
rather than maps. This should speed up evaluation and reduce the
number of allocations.
Diffstat (limited to 'src/libexpr/eval.hh')
-rw-r--r-- | src/libexpr/eval.hh | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh index eda081261..a24b7345e 100644 --- a/src/libexpr/eval.hh +++ b/src/libexpr/eval.hh @@ -18,13 +18,6 @@ struct Value; typedef std::map<Symbol, Value> Bindings; -struct Env -{ - Env * up; - Bindings bindings; -}; - - typedef enum { tInt = 1, tBool, @@ -109,6 +102,13 @@ struct Value }; +struct Env +{ + Env * up; + Value values[0]; +}; + + static inline void mkInt(Value & v, int n) { v.type = tInt; @@ -258,7 +258,7 @@ public: /* Allocation primitives. */ Value * allocValues(unsigned int count); - Env & allocEnv(); + Env & allocEnv(unsigned int size); void mkList(Value & v, unsigned int length); void mkAttrs(Value & v); |