1.6.1
[1.6.1] - 2023-07-19
Script Compiler
With 1.6.0, the official nwscript compiler source code has been added to the repository, licenced as GPL-3.0. This release builds on this:
- Parser now understands floating point values such as
0f
,.0
and.42f
. - For loops can now take non-integer expressions in the first and third part of a loop statement. (e.g. floating point values now work).
- Constant folding:
const
declarations can now contain any constant expression (such as arithmetics), including previously defined consts. - Instruction melding: A second pass over the generated bytecode will now meld some redundant instructions together.
- Where possible, expressions are now evaluated at compile time (instead of runtime).
- The CLI utility can now utilise all CPU cores to compile scripts in parallel.
- The script compiler will ensure no outdated .ndb remains when re/compiling scripts without debugging support enabled.
- Fixed structures passed using the
?:
operator causing a bad compiler state. - The script compiler has gained support for enabling optimisations. Currently available:
-O0
Turn off all optimisations-O2
: Turn on all optimisations:- Constant folding
- Instruction melding
- Removing all dead/unused code
Bytecode Disassembler
nwn_asm
can now decode DE_STRUCT instructions.nwn_asm
can now disable loading .ndb with a cli flag, if no per-function disassembly is desired.nwn_asm
now prints global offsets in addition to per-function offsets when .ndb is enabled.nwn_asm
can now optionally weave the originating source code into the disassembly, if both source code and .ndb is available.
Other utilities
- Fixed regression introduced with 1.6.0 that resulted in GFF files failing to compile with a integer out of range error.
- All cli utilities now support the flag
--silent
to hide all output, even errors. Errors can be detected by checking the process exit code. - Performance improvements on internal data structures to make utilities start up faster.
- Added some legacy (currently unused) restypes: .res, .wfx
Note: [Windows only!] Still unsure about amd64 windows binaries. Mingw fseek bug probably persists and I have no time to look into it. To be safe, or if you run into stream exceptions on known-good data, pick the i386 variant.