4.0
December 8, 2015 · View on GitHub
BIG THANKS to Sam Harwell and, again, to Udo Borkowski for debugging help and suggestions. Sam is doing the C# implementation. Benjamin Niemann is doing the Python port. Alan Condit is doing Objective-C.
4.0 – March 27, 2011
- ST.add() returns self now so we can chain. t.add("x", 1).add("y", "hi");
- import from files in jar didn't work.
- removed field tokens from STGroupString
- improved imports lookup
- made fields of events public final.
- augmented debug event toString and fixed start/stop issue with eval events. renamed fields to be more clear.
- Added IndentEvent for dbg
- ^(INDENT expr-sub-tree) is now ^(INDENTED_EXPR INDENT expr-sub-tree) with changes to grammars. More consistent with subtree root being operator. STViz now highlights indentation properly in template pane.
- Altered CodeGenerator.g to pass AST node for indentation not just string. This way we get INDENT operations into the sourceMap for indent debug events.
4.0b5 – March 6, 2011
- true/false were only allowed as default args; now allowed as template arg expressions in templates. Works as dictionary value too.
- couldn't have anonymous templates inside a region.
- parentheses were a bit weird in conditions. Now, conditions cannot use parentheses to mean "early evaluation" except as obj.(propName)
- nativeGroup of all implicit templates was STGroup.defaultGroup.
- removed all writes of the enclosingInstance at evaluation time; fixed issue for STViz.
- comments on line by themselves don't emit \n to output
- STViz tried to highlight AST pane even when we switched ASTs
- combined load_str, write into write_str single op. minor optimizations too. Seems a tiny bit faster per benchmarks.
- Added ST.VERSION auto-updated by ANT.
- added STGroupString
- Added support for this in group.g:
oldStyleHeader // ignore but lets us use this parser in AW for both v3 and v4
: 'group' ID ( ':' ID )? ( 'implements' ID (',' ID)\* )? ';'
;
- IndexOutOfBounds Exception when using "cap" format on empty string
- @t.() ::= "" caused NPE
- Region redefinition caused NPE. "<@r>a<@end><@r()>"
- STViz couldn't see first subtemplate when computing template range in output.
- Was incorrectly computing filename to load template .st files from group dir.
- Listener was not notified upon "no such template" in group dir.
- Redid how ST found imported files, dir, etc.. Can now import a template file even. Can be absolute path or relative path. If relative, it looks in dir of .stg file with import then CLASSPATH.
- The listener of import groups is now set to that of group that imports them.
- Regions behave like
tags now. Indent respected if <@r>...<@end> on indented single line. Indent/newlines ignored after those tags if on separate lines.
4.0b4 – February 5, 2011
BIG THANKS to Udo Borkowski for his help debugging these betas and his suggestions.
- added write to file methods
- had infinite loop for expr: "<t()$"
- the default file encoding is now UTF-8
- early eval <(x) > using new STWriter derived from type of current STWriter. e.g., AutoIndentWriter.
- didn't detect nonterminated comment.
- added two literals "true" and "false" to the template argument syntax; e.g., stat(name,x=true,y=false) ::= "..."
- it was treating "..." default arg as a template not string.
- throws STException now upon not finding group file or group dir instead of sending err to listener.
- default args couldn't have subtemplates
t(x,y={<x:{s|
}>}) ::= "..." - Added a new benchmark from Oliver Zeigermann. Discovered 60% of time is spent using reflection invoke() for properties.
4.0b3 – January 28, 2011
- exception in lexer blew out of parsing
- missing '}' in {...} caused infinite loop
- NPE in storeArgs if empty arg list
- removed debugging prints.
- x={<(...)>} default arg was hardcoded to <...> not or whatever.
- The grammar needed to match and ignore an optional INDENT before region @end
- when redefining a region (template) the newline before the >> was kept.
- WS not ignored in front of STRING token in expressions.
- closing STViz doesn't exit vm now.
- throws exception if registering renderer or model adaptor for primitive
4.0b2 – January 22, 2011
- Order of static init issue; an error mgr was null.
- Fixed some unit testing the Windows friendly
- Fix bug in triple if-elseif-elseif-elseif; added unit tests
- bug where I did not say current_ip when calling exec() from writeObject
- Updated README to include install information
4.0b1 – January 14, 2011