[INTERPRETER]
* NEW: Implementation of computed Goto and GoSub.
[COMPILER]
* NEW: Implementation of computed Goto and GoSub.
* NEW: There is a maximum of 255 labels by function now. This limit may be removed.
[INTERPRETER]
* OPT: Optimize object release for native integer and float arrays accessors.
* OPT: Shortcut path for adding a small integer or float constant number.
[COMPILER]
* OPT: Shortcut path for adding a small integer or float constant number.
[GB.JIT]
* NEW: Support for new bytecodes.
[INTERPRETER]
* NEW: Support for the new Eval() feature.
[GB.EVAL]
* NEW: 'Eval()' now can evaluate several expressions at once, provided that they are separated by newlines. The value of the last expression is returned.
* NEW: 'Eval()' now returns NULL if its last expression returns nothing.
[COMPILER]
* OPT: Optimization of conditional jumps based on values known to be Boolean.
* BUG: Jump optimization is effective when debugging information is generated.
* BUG: The '/' operator correctly returns a Float if its arguments are Float.
[INTERPRETER]
* OPT: Optimization of conditional jumps based on values known to be Boolean.
[GB.JIT]
* NEW: Support for conditional jumps optimization.
[INTERPRETER]
* BUG: Fix overflow detection in conversion functions.
* BUG: Check for overflow detection only if the '__has_builtin' pseudo-macro is implemented by the compiler.
[COMPILER]
* OPT: Optimize jumps pointing at a JUMP instruction.
[INTERPRETER]
* OPT: Avoid conversion to boolean when possible in conditional jumps.
[GB.JIT]
* NEW: Implement overflow detection in integer arithmetic operations. The UNSAFE keyword disable them to get full speed.
[INTERPRETER]
* OPT: Put less code in the main interpreter loop because it became too big again with gcc 12.
[COMPILER]
* OPT: Some optimizations in the parser.
* NEW: Make the compiler more clever when deciding if an identifier is a reserved keyword or not.
[INTERPRETER]
* NEW: The divide operator now returns infinity when the numerator is infinity, and raises "Division by zero" error only if the numerator is zero.
[INTERPRETER]
* OPT: Move some code outside of 'gbx_exec_loop.c' source file. Apparently if the result of the compilation of this source file is too big, the interpreter can be about 150% slower.
[INTERPRETER]
* NEW: Bool@(), Byte@()... functions can be the target of an affectation now.
[COMPILER]
* NEW: Bool@(), Byte@()... functions can be the target of an affectation now.
[GB.JIT]
* NEW: Bool@(), Byte@()... functions can be the target of an affectation now.
[COMPILER]
* OPT: Optimization of small integer floating point constants.
[INTEGER]
* OPT: Optimization of small integer floating point constants.
[GB.JIT]
* OPT: Optimization of small integer floating point constants.
[INTERPRETER]
* BUG: Fix backward-compatibility with previous bytecode.
* OPT: Optimizations of local variables and argument assignements.
* BUG: NULL can be serialized on streams correctly now.
[COMPILER]
* OPT: Support for local variable manipulation optimization.
[INTERPRETER]
* OPT: Avoid unneeded type conversion swhen manipulating local variables.
* OPT: Various optimizations of the interpreter execution loop. Apparently a smaller execution loop has a big impact on speed. I guess this is related to the size of the various CPU caches.
[COMPILER]
* NEW: Remove useless LIKELY() and UNLIKELY() macros.
[INTERPRETER]
* NEW: Remove useless LIKELY() and UNLIKELY() macros.
* NEW: Add a class flag for bytecode strictly older than 3.18.
[GB.DEBUG]
* BUG: Fix incorrect 'printf' format on 32-bits architectures.
[INTERPRETER]
* NEW: Add a debugger API to allows debugging inside components.
[GB.DEBUG]
* NEW: New debugger command to toggle debugging inside components.
* NEW: Support for profiling inside components.
[INTERPRETER]
* BUG: Class overriding is not retroactive anymore when the class already has instances.
* NEW: In tracing mode, indent the interpreter output according to the current stack depth.
[COMPILER]
* NEW: 'STATIC' keyword can be used instead of 'DIM' for declaring local static variables.
[INTERPRETER]
* NEW: Support for local static variables.
[GB.DEBUG]
* NEW: Support for local static variables.
[INTERPRETER]
* NEW: Support for expression watches.
[GB.DEBUG]
* NEW: Add new command for watching expressions, i.e. stopping the debugger when the value of an expressions changes.
[INTERPRETER]
* NEW: '_read' and '_write' are two new special methods that allow to make any object serializable by the READ and WRITE instructions.
* NEW: Rename macro that convert a Gambas stream object to the internal stream structure and add a macro that does the reverse conversion.
[COMPILER]
* BUG: Fix compilation of function calls with variable arguments passing.
* BUG: Remove some useless structure packing directives.
[INTERPRETER]
* BUG: Fix compilation of function calls with variable arguments passing.
[COMPILER]
* NEW: Assert is an new instruction that raises an error as soon as its boolean argument is FALSE. The associated bytecode is not emitted if the '-x' option is specified.
[INTERPRETER]
* NEW: Assert is an new instruction that raises an error as soon as its boolean argument is FALSE.
[GB.DEBUG]
* BUG: Fix a potential array overflow.
[COMPILER]
* NEW: Allow loop variables to be declared inside the loop syntax.
* NEW: Consequently, FOR EACH now can only use local variables.
[INTERPRETER]
* OPT: A little optimization of integer loops. They are about 5% faster now.
[INTERPRETER]
* BUG: Forgot to call JIT function when the call is dynamic, i.e. if the object owning the method has an anonymous datatype (Object or Variant).
[GB.JIT]
* BUG: Save the initial stack pointer of a function in the function stack instead of using the interpreter stack.
[INTERPRETER]
* NEW: String value can be used like object.
* NEW: String[X] returns the X-th character of the string, 0 being the first one.
* NEW: String[X, N] returns N characters from the position X, 0 being the first one. IF N is strictly negative, then all characters from the position X, except the last N characters are returned.
* NEW: String.Len returns the length of the string.
[COMPILER]
* NEW: Allow the [] operator to be applied to a string.