* Compiles with StrategoXT 0.9.5.
* Works with autoconf 2.50+, automake 1.7+.
* New autoxt based build system: Stratego programs are now compiled to
C code, which is then compiled and linked normally. The (architecture
independent) C files are included in the tarball distribution, so it is
now possible to build CodeBoost without the Stratego compiler, as long
as none of the Stratego source files are changed. Furthermore, all
Stratego source files have been renamed, and now use the .str extension
(instead of .r).
* Source tree moved to Subversion:
https://svn.cs.uu.nl:12443/repos/codeboost/
* More C++ language features supported: namespace, using (syntactic
support only), enum, extern "C", hexadecimal literals, multi-line
preprocessor directives.
* Semantic analysis is much improved.
* Added memoisation makes CodeBoost run 2-3 times faster.
* AST changes:
+ New type representation:
Old style used Type(q,n,d), where q was a list of qualifiers
(signedness, constness, etc.), n was the type name, and d was the
'declarator-part' of the type (e.g., 'pointer-to' or 'reference-to').
The new style is defined inductively as follows:
type := Type(cv-mod-type)
cv-mod-type := cv-type | mod-type | Array(expr, cv-mod-type)
cv-type := Const(mod-type)
| Volatile(mod-type)
| Const(Volatile(mod-type))
mod-type := base-type
| Ptr(cv-mod-type)
| Ref(cv-mod-type)
base-type := BaseType(name)
| FunType(list(type|Ellipsis), type)
For example:
int (an integer) => Type(BaseType(IdName("int")))
int* (ptr to int) => Type(Ptr(BaseType(IdName("int"))))
const int* (ptr to const int)
=> Type(Ptr(Const(BaseType(IdName("int")))))
int (*)(const char*, int[5]) (ptr to function taking a pointer to
a const char and an array of
integers and returning int)
=>
Type(Ptr(FunType([Type(Ptr(Const(BaseType(IdName("char"))))),
Type(Array(Int(5), BaseType(IdName("int"))))],
Type(BaseType(IdName("int"))))))
+ No more ManyDecl:
Declarations of multiple variables in one statement is split into
several consecutive declarations:
int a, b, c; -> int a; int b; int c;
This means that the ManyDecl constructor is gone, and VarDecl is the
only constructor used for declaring variables. For-statements needs
special attention:
for(int a,b; ...; ...) -> {int a; for(int b; ...; ...)}
This means that the meaning of the program changes on non-compliant
compilers where 'for' does not define its own scope.
+ [A utility (src/util/typeconv) is included in the Subversion
repository to convert between old-style Type/ManyDecl, and the new
style]
* Literals are now const.
--
Nicolas Desprès
nicolas.despres(a)lrde.epita.fr