Commit graph

208 commits

Author SHA1 Message Date
Benoît Minisini
c600f69be3 Implementation of computed Goto and GoSub.
[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.
2023-09-30 22:00:00 +02:00
Benoît Minisini
d98df39658 Some interpreter optimizations.
[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.
2023-09-30 00:18:13 +02:00
Benoît Minisini
9fd602df70 Add Base() / Base$() and Dec() / FromBase() subroutines.
[COMPILER]
* NEW: Add Base() / Base$() subroutines.
* NEW: Add Dec() / FromBase() subroutines.

[INTERPRRETER]
* NEW: Add Base() / Base$() subroutines.
* NEW: Add Dec() / FromBase() subroutines.
2023-09-29 02:51:42 +02:00
Benoît Minisini
5fa1961a62 Recover the speed of Gambas 3.18 by moving code.
[INTERPRETER]
* OPT: Recover the speed of Gambas 3.18 by moving code.
2023-08-16 18:04:08 +02:00
Benoît Minisini
bfe5a88537 Fix common integer loop optimization.
[INTERPRETER]
* BUG: Fix common integer loop optimization.
2023-04-13 12:05:09 +02:00
Benoît Minisini
06a1d2e33d 'Eval()' now can evaluate several expressions at once, provided that they are separated by newlines. The value of the last expression is returned.
[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.
2023-03-29 12:16:47 +02:00
Benoît Minisini
c10fe0a6c3 Optimization of conditional jumps based on values known to be Boolean.
[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.
2022-12-10 12:54:42 +01:00
Benoît Minisini
e082046379 Suppression de deux étiquettes inutiles dans la boucle de l'interpréteur.
[INTERPRETER]
* BUG: Suppression de deux étiquettes inutiles dans la boucle de l'interpréteur.
2022-12-09 20:05:39 +01:00
Benoît Minisini
5d0c54bca2 Some fixes in overflow detection.
[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.
2022-12-09 16:07:12 +01:00
Benoît Minisini
af950247c4 Implement overflow detection in JIT compiler. Some jump optimizations in the compiler and the interpreter.
[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.
2022-12-09 15:00:55 +01:00
Benoît Minisini
c2c08aef6c The '/' operator does not necessarily return a Float. Fix incorrect optimizations that lead to interpreter crashes.
[COMPILER]
* BUG: The '/' operator does not necessarily return a Float. Fix incorrect optimizations that lead to interpreter crashes.
2022-12-08 15:52:56 +01:00
Benoît Minisini
0a7f10ad52 Integer arithmetic and conversion now raise an error if overflow is detected.
[INTERPRETER]
* NEW: Integer arithmetic and conversion now raise an error if overflow is detected.
2022-12-06 20:30:39 +01:00
Benoît Minisini
7a238f4c76 Make the compiler more clever when deciding if an identifier is a reserved keyword or not. Some optimizations in the compiler parser.
[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.
2022-12-04 20:00:04 +01:00
Benoît Minisini
50e5bba9df Finally the divide operator does not return infinities. It raises a "Mathematic error" instead.
[INTERPRETER]
* NEW: Finally the divide operator does not return infinities. It raises a "Mathematic error" instead.
2022-11-29 20:47:26 +01:00
Benoît Minisini
c997255367 The divide operator now returns infinity when the numerator is infinity, and raises "Division by zero" error only if the numerator is zero.
[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.
2022-11-29 15:34:51 +01:00
Benoît Minisini
dc2d102a95 Move some code outside of 'gbx_exec_loop.c' source file.
[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.
2022-10-08 22:39:44 +02:00
Benoît Minisini
09adb643df Bool@(), Byte@()... functions can be the target of an affectation now.
[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.
2022-10-08 10:26:50 +02:00
Benoît Minisini
1004b39078 Optimization of small integer floating point constants.
[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.
2022-10-07 13:10:22 +02:00
Benoît Minisini
56cc729fe0 Fix backward-compatibility with previous bytecode.
[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.
2022-10-04 22:49:01 +02:00
Benoît Minisini
50893e77cb Various optimizations of the interpreter execution loop.
[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.
2022-10-04 01:04:15 +02:00
Benoît Minisini
dba45b1fed Don't use 3.18 multiply and divide optimization if current bytecode version is lower than 3.18.
[INTERPRETER]
* BUG: Don't use 3.18 multiply and divide optimization if current bytecode version is lower than 3.18.
2022-10-03 19:10:42 +02:00
Benoît Minisini
d7e373c633 Always check bytecode version when the current class changes during interpreter execution loop.
[INTERPRETER]
* BUG: Always check bytecode version when the current class changes during interpreter execution loop.
2022-10-03 13:46:20 +02:00
Benoît Minisini
df270cbbc0 Fix optimization of dynamic variable writing.
[INTERPRETER]
* BUG: Fix optimization of dynamic variable writing.
2022-10-01 20:04:20 +02:00
Benoît Minisini
5d1db11ab3 Fix optimization of dynamic variable reading.
[INTERPRETER]
* BUG: Fix optimization of dynamic variable reading.
2022-10-01 20:03:37 +02:00
Benoît Minisini
fd66b99f32 Some optimizations of the main interpreter loop.
[INTERPRETER]
* OPT: Some optimizations of the main interpreter loop.
2022-10-01 16:26:08 +02:00
Benoît Minisini
558360ab97 Fix compilation on non-C99 compiler.
[INTERPRETER]
* BUG: Fix compilation on non-C99 compiler.
2022-10-01 01:31:15 +02:00
Benoît Minisini
13aa1311d7 Optimize array access and basic arithmetic operator on integer and floats.
[INTERPRETER]
* OPT: Optimize array access and basic arithmetic operator on integer and floats.
2022-10-01 00:54:05 +02:00
Benoît Minisini
6a793ddeb7 Replace my old depracted gmail mail by the new one.
[CONFIGURATION]
* NEW: Replace my old depracted gmail mail by the new one.
2022-09-12 15:13:13 +02:00
Benoît Minisini
0ec57295b7 Remove useless LIKELY() and UNLIKELY() macros. Add a class flag for bytecode strictly older than 3.18.
[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.
2022-09-03 14:20:13 +02:00
gambas
d2eebaf136 The debugger and the profiler now can act inside components.
[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.
2022-02-05 00:11:10 +01:00
gambas
a62007de37 Class overriding is not retroactive anymore when the class already has instances.
[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.
2021-09-18 01:09:05 +02:00
gambas
792c7bec6f Remove an incorrectly committed debug test.
[INTERPRETER]
* BUG: Remove an incorrectly committed debug test.
2021-07-07 22:57:59 +02:00
gambas
eba9622d5e Date formatting with escaped characters works correctly again.
[INTERPRETER]
* BUG: Date formatting with escaped characters works correctly again.
2021-07-06 23:22:24 +02:00
gambas
8a8b470c5a 'STATIC' keyword can be used instead of 'DIM' for declaring local static variables.
[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.
2021-06-01 23:12:55 +02:00
gambas
65eff9e732 The debugger now can watch expressions, and stop when their value changes.
[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.
2021-05-24 15:34:37 +02:00
gambas
95572fb040 Fix multi-dimensional arrays management.
[INTERPRETER]
* BUG: Fix multi-dimensional arrays management.
2021-02-09 02:19:39 +01:00
gambas
86981a3c2c Change the internal signature of the implementation of the class "fast methods".
[INTERPRETER]
* NEW: Change the internal signature of the implementation of the class "fast methods".
2021-02-03 18:56:34 +01:00
gambas
08c5fc95c7 '&=' operator optimization.
[COMPILER]
* OPT: Support for '&=' operator optimization.

[INTERPRETER]
* OPT: '&=' operator optimization.
2020-04-04 16:18:10 +02:00
gambas
3d956c269c '_read' and '_write' are two new special methods that allow to make any object serializable by the READ and WRITE instructions.
[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.
2019-12-21 17:03:42 +01:00
gambas
20a345cec4 Fix compilation of function calls with variable arguments passing.
[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.
2019-11-09 11:58:57 +01:00
gambas
8d8c8a71f8 Remove a useless global variable.
[INTERPRETER]
* BUG: Remove a useless global variable.
2019-10-21 09:44:52 +02:00
gambas
28df313554 Add a '-t' option that dumps to the standard error the position of each executed line of code.
[INTERPRETER]
* NEW: Add a '-t' option that dumps to the standard error the position of each executed line of code.
2019-09-28 16:53:48 +02:00
gambas
f08ce22cdc Fix support of read-only arrays.
[INTERPRETER]
* BUG: Read-only arrays are now really read-only.

[GB.JIT]
* BUG: Support for read-only arrays.
2019-09-26 14:25:37 +02:00
gambas
63d9d81bd2 Disabling JIT compiler works correctly again.
[INTERPRETER]
* BUG: Disabling JIT compiler works correctly again.
2019-03-13 12:59:14 +01:00
gambas
634b5c4168 Really fix the loop optimization.
[INTERPRETER]
* BUG: Really fix the loop optimization.
2019-01-11 01:14:42 +01:00
gambas
dd551e9bc5 Fix loop optimization that didn't work on loops calling themselves recursively.
[INTERPRETER]
* BUG: Fix loop optimization that didn't work on loops calling themselves recursively.
2019-01-11 01:11:46 +01:00
gambas
d91451cf1e Assert is an new instruction that raises an error as soon as its boolean argument is FALSE.
[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.
2018-12-16 00:35:46 +01:00
gambas
a1f96a549c Allow loop variables to be declared inside the loop syntax.
[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.
2018-12-13 13:15:33 +01:00
gambas
df275f7c9b 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).
[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.
2018-12-07 01:03:47 +01:00
gambas
737b77c387 String value can be used like object.
[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.
2018-09-23 09:15:29 +02:00