* proper indentation for the generated JS code
* improved dead-code elimination for JavaScript
* test the JS dead-code elimination
A new test spec has been added - "maxcodesize". It specifies the
maximum size of the generated code in bytes.
* Why is tyInferred needed?
The bindings in TCandidate are capable of inferring types within a single
call expression. In concepts, we need to infer types in the same way, but
across the whole body of the concept.
Previously, once a concept type param was inferred, it was destructively
mutated using t.assignType, but this proved to be problematic in the presence
of overloads, because the bindings established while a non-matching overload
is tested must be reverted/forgotten. tyInferred offers a non-destructive way to
keep track of the inference progress.
While introducing new types usually requires a lot of code paths in the compiler
to updated, currently tyInferred is only a short-lived type within the concept body
pass and it's unlikely to introduce breakage elsewhere in the compiler.
* removed mangling of object fields for the js target only.
* changed default mangling behaviour for the php target as well.
* Added test for unorthodox field names (reserved words and operators). Adjusted field accessors and object constructors / new to be ECMAScript first edition compatible, when using fieldnames which are reserved words.
I suddenly got ReferenceError exceptions for some of the code which is
using etyBaseIndex ptr. Initialising the xxx_Idx part of the variable
fixes this problem.