use fully qualified name for YYStorage in code generated for compilation counters to avoid macro expansion exception when YYStorage isn't imported by the test.
Fixed bug when there are both required vars and non-required holes, with test.
More logical return types for PrintDSL, but still don't know how to handle statements with both effects and values so that nesting works.
per variable guards as Strings are working, but holes become constants and need redesign
rename reqVars to compilationVars. Distinguish between static and dynamic. Static are lifted and captured in the DSL class. Dynamic are lifted and captured, but also transformed to holes, so they're passed as arguments to the generated code. Non-compilation vars are transformed to holes as before, since they're not needed for code generation.
Code cache with static size
Defined different types of compilation variables: (required, optional) x (static, dynamic). Special treatment for optional not implemented yet.
Created third node type called mixed in addition to hole and lift. A mixed node carries both a lifted value and a hole.
Added Set[holeId] argument to generateCode and compile, with default empty value
Storing information about variable stability in CompiledStorage, but currently all stay stable.
Added VarTypePrintDSL to test usage of VarTypes.
CompiledStorage discards cached program variants when some of the guarded values (WeakReferences) have been GC'ed meanwhile
Rewired YYTransformer to treat optional variables correctly and added logic to YYStorage for unstable optional variables, with test case.
Made code cache size and initial behavior for optional variables a config option of the YYTransformer.
CompiledStorage tracks statistics and dynamically decides on stability. Tests check output.
Unstable refs are updated to detect later stabilization of the value. Counts are kept per-variant and absolutely (w.r.t. recent history), when both are available the absolute is chosen.
Added design description of stabilization to YYStorage.
CompiledStorage concurrency #1: immutable instance data (dsl instance, attributes and guards) are stored in one ConcurrentHashMap
CompiledStorage concurrency #2: Program variant cache is also stored with instance data, in synchronized mutable DoubleLL
CodeGenSpec in ScalaMeter, restart sbt if OutOfMemory.