Added 'maps' field to FunctionPrototype data type to try to cope more properly with datas that match others when deciding which variables to share at low level compile time.
Reenabled the optimization in memory allocation that allow to free large unused memory areas (it had been disabled, and I now guess that it was related to the bug that was solved in R19)
The debugging informations are more compact (the memory consumed at debugging level 1 or higher is less than half from previous releases ... and it's still a big waste)
The main bug that was standing for long in the know bugs list has been solved. (mainly by Patrice Ossona de Mendez)
This release contains great improvements in the compiler. It may break several programs, but the improvements worth it.
Added the 'backtracking' delayed action field to the 'Expression' data type in order to revert cleanly side effects when an expression as been compiled, and the compile code is discared because a better one has been selected.
The identifier compiling function (in compile.c) has been rewritten. As a result, various broken meta functions had to be updated.
Introduced the 'weak_definition' 'strong_definition' 'always_weak_definition' 'always_strong_definition' has a replacement of 'priority'. The new mechanism is more powerfull for avoiding ambiguous expressions.
Cleaned the way mapped result are handled.
Reordered the optimizing functions, and changed one, in order to better separate general high level optimizations from low level ones.
Cleaned the low level optimizer. As a result, the code generator should be much safer.
Changed remaining 'address' words to 'address'
Autoinlining is now used since it works fine.
It is now possible to use GCC in order to low compile functions.
The RPM packaging has been revisited.
The RPM packaging has been revisited.
Errors where not reported when the program was run at debugging level 0.
Pliant executable soft link is
/bin/pliant
back, and no more
/usr/local/bin/pliant
Added an error handler in
Expression_compile_step4
. The missing error handler was preventing to compile some valid expressions. As a result, I could remove the error handler in 'compile_as' method.
The 'attempted to use a module out of it's scope' error message was coded buggy in module.c
Renamed 'unsetted_error_message' field in 'Expression' data type as 'error_message'
Inserted the 'account_start' function in the default accounting mechanism that prevents the server to complain when no accounting is required and will enable to dynamically reload accounts.
Errors during a constant evaluation where not caugth properly; as a result, the interpreter might exit.
The Pliant executable soft link is now /usr/local/bin/pliant
The RPM will now install Pliant in /usr/local/pliant/
Changed 'expression' and 'compile_as' in order to avoid side effects when substituting several times, and better ambiguous expressions reports.
The PNG files of the documentation where corrupted, so i rebuilt them.
The 'compile_as' control in R12 was catching all errors, whereas it must catch only compile errors. This led (i don't know really why) to R12 not working at debugging level 0.
This is the first major change since initial release.
General scheme for errors handling
pliant_debugging_level is now a constant function instead of a variable, the variable is called pliant_debugging_level_variable
outputs a message when it fails to open a precompiled file (backup command)
A comment could stop the indentation, which is bad (see forum).
Added 'cast_flags' field in the 'Expression' data type in order to correctly handle the case where the same expression would be cast tested against various types with various casting flags.
Corrected some
misspelled
keywords:
old spelling
new spelling
address
Address
addressof
addressof
is_opened
is_open
os_datetime_origin
os_datetime_origin
The constant expressions evaluation at compile time could return a pointer to a freed object.
David Morneau corrected the documentation.
Improved version of the 'operator' and 'dual_keyword' function.
The 'argument constant' now requires to provide the type of the constant, in order to avoid
bad surprises
.
Improved version of the 'console' instruction.
Pliant is now distributed under GPL
Removed the backward Arrow to 'pliant_module_dictionary' that prevented to free the memory up to the last byte when precompiling the PDEE at debugging level 2.
Added the possibility to install /pliant/ in ${home}/pliant/ or /usr/local/pliant/
Removed a big bug in stack allocation for new threads. As a result, calling external programs ('execute' or 'shell' instructions) would lead to lock in a multithreaded program.
More powerfull version of 'expression' function and 'Expression' methods (initial idea from Patrice Ossona de Mendez).
The HTTP server is now fully dynamic: if you change the source code of a page, it will recompile it on the fly (but not if you change the modules it's using).
The Pliant Web site is now ready for hosting external Pliant packages. Welcome to all of you !