I just released the version 0.8.
The main change of this version is the addition of a 64bit generation. If you compiles eddic in 64bit, the default output of the compiler will be 64 bit, otherwise it will be 32 bit. You can also select the output by setting command line switch (-32 and -64).
The biggest change at the side of the language is the support of command line arguments. If the main function is declared as main(string args), the args passed from the command line will be accessible.
I’ve also added two operators to the language : size() and length(). These operators allows the programmer to get the size of an array, respectively the length of a string. If the information is present at compile-time, the operator is replaced by the constant otherwise it is equivalent to a single memory access.
I’ve also made some improvements to the generated x86 code. For example, I’m using string instructions to simplify the generated code and lea and shl to perform fast multiplications. I also changed the syntax used in the generated assembly replacing AT&T syntax by the Intel syntax.
I’ve added a new optimization technique, copy propagation. This technique keeps track of the assignment of variables to a variables to simplify the generated three-address-code.
You can find the compiler sources on the Github repository : https://github.com/wichtounet/eddic
The exact version I refer to is the v0.8 available in the github tags or directly as the release branch.