
* 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@lrde.epita.fr
participants (1)
-
PoLRoP