Magnus Norddahl
bb3d0021d6
- switch ToMemAddress to imm_ptr where allowed
2019-04-15 14:33:25 +02:00
Magnus Norddahl
f90019561d
- switch from ASMJIT_ARCH_X64 to ASMJIT_ARCH_64BIT when checking if we need to use 64-bit pointers
2019-04-15 14:33:23 +02:00
Magnus Norddahl
e0f0511d29
- create a very basic OP_IJMP implementation
2019-04-15 14:33:22 +02:00
Magnus Norddahl
812a4290b1
- create CreateCall helper to get rid of a lot of the cc.call boilerplate
2019-04-15 14:33:20 +02:00
Magnus Norddahl
ff6317d6f4
- implement OP_TAIL and OP_TAIL_K
2019-04-15 14:33:19 +02:00
Magnus Norddahl
be6637dd17
- use the ParamOpcodes array for finding the OP_PARAM's used by a call
2019-04-15 14:33:17 +02:00
Magnus Norddahl
f1f2dca792
- implement string version of OP_CAST
2019-04-15 14:33:16 +02:00
Magnus Norddahl
0cf5f3704b
- implement string part of OP_CASTB
2019-04-15 14:33:14 +02:00
Magnus Norddahl
097de74510
- implement OP_LFP
2019-04-15 14:33:13 +02:00
Magnus Norddahl
7f996b5334
- read the parameters and registers directly off the stack
2019-04-15 14:33:11 +02:00
Jonathan Russell
ff421eda63
- changed a bunch of manual address additions in string opcodes to leas
2019-04-15 14:33:10 +02:00
Magnus Norddahl
b6521467f3
- more load fixes
2019-04-15 14:33:08 +02:00
Magnus Norddahl
e28389ad12
- fix truncated load addresses due to a bug in asmjit
...
- change ToMemAddress to use uint64_t
2019-04-15 14:33:06 +02:00
Magnus Norddahl
db0c516693
- avoid certain x86::ptr overloads as the last argument is not always an offset
2019-04-15 14:33:05 +02:00
Jonathan Russell
0da351bfea
- fixed typo in last commit
2019-04-15 14:33:03 +02:00
Jonathan Russell
2dd2344e80
- implemented SS_R, LCS_R, and LKS_R
2019-04-15 14:33:02 +02:00
Magnus Norddahl
fb7df75011
- fix bug in LKF_R
2019-04-15 14:33:00 +02:00
Magnus Norddahl
d74cc3e49e
- fixed OP_VTBL bug
2019-04-15 14:32:59 +02:00
Magnus Norddahl
e93d9570dc
- fix crash in OP_RET handling
2019-04-15 14:32:57 +02:00
Magnus Norddahl
378e58731a
- simplify some code
2019-04-15 14:32:56 +02:00
Jonathan Russell
b342dbc8db
- added string PARAM and RET
2019-04-15 14:32:54 +02:00
Magnus Norddahl
608f49a4a8
- fix clang errors and warnings
2019-04-15 14:32:53 +02:00
Jonathan Russell
06780bf228
- added OP_MOVES, OP_CONCAT, OP_LENS, OP_CMPS
2019-04-15 14:32:52 +02:00
Magnus Norddahl
a4b3536caf
- fix opcodes not being listed in jit debug assembly
2019-04-15 14:32:50 +02:00
Magnus Norddahl
c328f9c85c
- move EmitRESULT to jit_call
2019-04-15 14:32:49 +02:00
Magnus Norddahl
ff8d21b2ec
- minor cleanups in header file
2019-04-15 14:32:47 +02:00
Magnus Norddahl
9d970a1acb
- split JitCompiler into multiple files
2019-04-15 14:32:46 +02:00
Jonathan Russell
8905701df7
- added strings and a few string opcodes
2019-04-15 14:32:44 +02:00
Magnus Norddahl
f3ca96373a
- fix CALL_K and disable CALL
2019-04-15 14:32:43 +02:00
Magnus Norddahl
56fe7af9d3
- implement OP_CALL and OP_CALL_K
2019-04-15 14:32:41 +02:00
Magnus Norddahl
60ee2c91a4
- fix misc integer opcodes and remove mov statements when they have no effect
2019-04-15 14:32:40 +02:00
Jonathan Russell
279e97fcc9
- changed the way EmitComparisonOpcode works to get rid of the temporary register that was used previously
2019-04-15 14:32:38 +02:00
Magnus Norddahl
c248fad17f
- implement PARAM and PARAMI
2019-04-15 14:32:37 +02:00
Magnus Norddahl
53b11dd0d8
- fix missing zero extend
2019-04-15 14:32:36 +02:00
Magnus Norddahl
29f6258d33
- fix that the code for META and CLSS was swapped
2019-04-15 14:32:34 +02:00
Magnus Norddahl
c2669d3a03
- some jump fixes
2019-04-15 14:32:33 +02:00
Magnus Norddahl
f7dd6a1313
- fix jump direction in EmitComparisonOpcode
2019-04-15 14:32:31 +02:00
Jonathan Russell
9530a2e43c
- more spelling mistakes...
2019-04-15 14:32:29 +02:00
Jonathan Russell
a770b3af16
- fix minor spelling error
2019-04-15 14:32:28 +02:00
Jonathan Russell
821c336c5e
- add vector comparison opcodes
2019-04-15 14:32:26 +02:00
Magnus Norddahl
14d6aa8cac
- remove some macros and add functions checking if a register needs to be copied
2019-04-15 14:32:25 +02:00
Magnus Norddahl
35a8162022
- implemented LBIT, SBIT, VTBL, SCOPE, NEW, NEW_K, THROW, EQA_R and EQA_K
2019-04-15 14:32:23 +02:00
Magnus Norddahl
4cab630871
- implement emitter functions for LKP_R, META, CLSS, LO, LO_R, LP, LP_R, SO, SO_R, SP, SP_R
...
- add emit code for throwing exceptions on null pointers
2019-04-15 14:32:22 +02:00
Magnus Norddahl
2efaa7846d
- improve jit debug output slightly
2019-04-15 14:32:20 +02:00
Magnus Norddahl
f0dbc8414a
- fix offsetting bug when loading address registers
2019-04-15 14:32:19 +02:00
Magnus Norddahl
db78d02d79
- fix swapped operands in EmitSUBF_KR
2019-04-15 14:32:17 +02:00
Magnus Norddahl
ede8c6d86b
- implement MODF_RR, MODF_RK and MODF_KR
2019-04-15 14:32:16 +02:00
Magnus Norddahl
708362b31f
- fix mul using wrong instruction
2019-04-15 14:32:14 +02:00
Magnus Norddahl
c46a4d4483
- implement BOUND opcodes and add logging the resulting assembly code if asmjit throws an exception
2019-04-15 14:32:13 +02:00
Magnus Norddahl
c2938926a7
- implement a few more opcodes and fix some bugs
2019-04-15 14:32:11 +02:00
Magnus Norddahl
9427e22d7c
- implemented pow, min, max
2019-04-15 14:32:10 +02:00
Magnus Norddahl
f4181be6b8
- implement ATAN2 and FLOP
2019-04-15 14:32:08 +02:00
Magnus Norddahl
77fe376eca
- implement DYNCAST*, TEST, TESTN and JMP opcodes
2019-04-15 14:32:07 +02:00
Magnus Norddahl
9474a2554d
- convert JitCompile's switch into a class to enable easier code reuse
2019-04-15 14:32:05 +02:00
Magnus Norddahl
9889d2fbb6
- fix clang compile error
2019-04-15 14:32:03 +02:00
Magnus Norddahl
976a7fab3a
- implement throwing by storing exception information in a struct, then return from the jitted function and throw from c++
2019-04-15 14:32:02 +02:00
Jonathan Russell
45bc0d266e
- removed the ability to use printf-like formatting in emitAbortExceptionCall, it barely worked
2019-04-15 14:32:00 +02:00
Jonathan Russell
197b20af5d
- add first draft of abort exceptions
2019-04-15 14:31:58 +02:00
Magnus Norddahl
c65b7076eb
- call play sqrt when calculating lengths
2019-04-15 14:31:57 +02:00
Magnus Norddahl
50d0049460
- fix 8 and 16 bit store
2019-04-15 14:31:55 +02:00
Magnus Norddahl
76c08bf725
- destroy the jit runtime when all script functions are destroyed
2019-04-15 14:31:54 +02:00
Magnus Norddahl
4820c32794
- disable all unimplemented opcodes in the switch to ensure 'Unknown VM opcode' fatal error is generated if CanJit has a bug
2019-04-15 14:31:52 +02:00
Magnus Norddahl
e9914f38af
Fix compile errors on macOS
2019-04-15 14:31:51 +02:00
Jonathan Russell
601c492cf2
- added remaining int arithmetic opcodes (and fixed float loading offset issue)
2019-04-15 14:31:49 +02:00
Jonathan Russell
e771064657
- forgot to turn off debug switch in last commit
2019-04-15 14:31:47 +02:00
Jonathan Russell
4228891da2
- made absMaskInt const
2019-04-15 14:31:46 +02:00
Jonathan Russell
8306815292
- implemented CMP_APPROX for OP_EQF_*, making ~== work for doubles
2019-04-15 14:31:44 +02:00
Chronos Ouroboros
e07af1428c
Updated CanJit's supported opcodes list.
2019-04-15 14:31:43 +02:00
Chronos Ouroboros
63cda1c13d
Pointer addition opcodes must leave NULL pointers as they are.
2019-04-15 14:31:41 +02:00
Chronos Ouroboros
3c8aa9f641
Changed binary int ops to use a temporary register, fixed some opcodes.
...
For some reason, binary ops might reuse one of the input registers as the output register.
This is a problem for very obvious reasons.
2019-04-15 14:31:39 +02:00
Jonathan Russell
62ece01c0a
- made CMP_CHECK checking compile time
2019-04-15 14:31:37 +02:00
Jonathan Russell
f897f2bfd3
- added exact floating point comparison opcodes
2019-04-15 14:31:36 +02:00
Jonathan Russell
5846357268
- implemented all integer comparison operators
2019-04-15 14:31:34 +02:00
Jonathan Russell
166ce87a86
- adds OP_EQ_R, the first instruction using jumps
2019-04-15 14:31:33 +02:00
Magnus Norddahl
5c3ef8ac15
- add misc float opcodes
2019-04-15 14:31:31 +02:00
Jonathan Russell
b242ffdbbe
- added most vector maths opcodes
2019-04-15 14:31:29 +02:00
Chronos Ouroboros
73892f4a6e
Fix floats and implement some more opcodes.
2019-04-15 14:31:27 +02:00
Magnus Norddahl
113714990e
- copy initial register values from the VM frame
2019-04-15 14:31:26 +02:00
Magnus Norddahl
10a6ab4d56
- implement most of the integer math opcodes
2019-04-15 14:31:24 +02:00
Magnus Norddahl
d651c02b17
- embed and use asmjit to JIT ZScript VM functions
2019-04-15 14:31:22 +02:00
Christoph Oelckers
53c87fd5eb
- extended the register limit for 'param'.
...
The instruction one free instruction byte so it's now using that to extend its argument's register range to 65535.
For param this is needed because it passes strings by reference and creating an implicit temporary copy for string constants does not work here.
2018-10-14 10:31:48 +02:00
Christoph Oelckers
608e5f5bcf
- fixed bad code for OP_SRL_KR.
2018-09-02 18:47:42 +02:00
alexey.lysiuk
c55cf00c8e
- added missing null pointer checks to VM ops
2018-07-16 19:11:20 +02:00
drfrag666
0e25e40deb
- Addressed crash on exit with MinGW. This is a hack and i've reported it as a bug in the MinGW C runtime.
2018-05-17 12:06:44 +02:00
drfrag666
429bd5d843
- Made VMFrameStack GlobalVMStack a non thread_local variable for MinGW since that helps to prevent crashes on exit.
2018-05-14 12:53:57 +02:00
alexey.lysiuk
81bc05b7c5
Added support for default values of arguments with uint type
2018-03-07 15:58:06 +02:00
alexey.lysiuk
81ea9fb372
Added runtime check for negative array indices in VM
...
https://forum.zdoom.org/viewtopic.php?t=57886
2017-11-02 18:01:13 +02:00
Christoph Oelckers
daca12600d
- fixed: The ADDA_RK opcode used the wrong constant type for the offset it adds to the pointer.
2017-07-15 09:14:39 +02:00
alexey.lysiuk
279b1e27dc
Made usage of assertions in VM code consistent
...
https://forum.zdoom.org/viewtopic.php?t=56995
2017-06-22 10:36:08 +03:00
Christoph Oelckers
1ed415014e
- fixed: 'self' may never be null for native VM functions so it must always abort if null gets passed.
2017-06-05 08:43:12 +02:00
Christoph Oelckers
b50123ec6b
- avoid function call in VM code.
...
- return after calling ThrowAbortException because this avoids storing some register variables on the stack.
2017-05-30 17:50:56 +02:00
alexey.lysiuk
62bac1d612
Added check for nullptr to CLSS and META instructions of scripting VM
...
https://forum.zdoom.org/viewtopic.php?t=56667
2017-05-30 18:09:51 +03:00
Christoph Oelckers
97b664968e
- removed a few unused VM opcodes.
2017-05-19 10:27:22 +02:00
Christoph Oelckers
57d703236b
- changed Doom source license to GPL in all subdirectories and fixed missing licenses in a few other files.
2017-04-17 12:27:19 +02:00
Christoph Oelckers
6599e2c425
- moved the VM types into their own file and only include it where really needed.
2017-04-13 01:12:04 +02:00
Christoph Oelckers
fc9e304189
- separated class descriptors from VM types.
...
Combining these two groups of data has been the cause of many hard to detect errors because it allowed liberal casting between types that are used for completely different things.
2017-04-12 22:46:49 +02:00
Christoph Oelckers
7a6e70e777
- reenabled the part of OP_THROW that throws a VMAbortException. This part is still needed for a runtime variable access check.
2017-04-11 00:11:36 +02:00
alexey.lysiuk
d5edd3db36
Commented out remains of VM exception handling opcodes
...
This fixes build with GCC/Clang
2017-04-10 22:18:43 +03:00
Christoph Oelckers
040c70714c
- commented out the exception handling opcodes in the VM.
...
They are currently not used and not planned to be used - and they are rather costly by increasing stack size per call quite significantly.
2017-04-10 20:41:55 +02:00
Christoph Oelckers
9ae97502be
- removed the last remnants of the ATAGs.
2017-04-10 17:08:52 +02:00
Christoph Oelckers
60dd58e7d2
- most ATAG stuff is gone, except for the static storage space in the VMFunction.
2017-04-10 16:06:18 +02:00
Christoph Oelckers
5464336035
- removed ATAGs from the function builder.
2017-04-10 15:48:27 +02:00
Christoph Oelckers
e551ef52f8
- removed atag parameter from GetConstantAddress.
2017-04-10 15:39:04 +02:00
Christoph Oelckers
ef77cbd295
- stop using the ATAGs for checking pointer types in asserts.
...
This is an incredibly costly way to do a debug check as it infests the entire VM design from top to bottom. These tags are basically useless for anything else but validating object pointers being passed to native functions (i.e. mismatches between definition and declaration) and that simply does not justify a feature that costs execution time in non-debug builds and added memory overhead everywhere.
Note that this commit does not remove the tags, it only discontinues their use.
2017-04-10 15:18:31 +02:00
Christoph Oelckers
e780cd8297
- seems the wrong version of this got committed...
2017-04-01 12:04:31 +02:00
Christoph Oelckers
41f2f61b94
- minor VM optimization: Precalculate a function's frame size when compiling it instead of doing it each time it gets called.
...
This made up ca. 10% of the 'call' instruction's execution time.
2017-04-01 10:42:47 +02:00
Christoph Oelckers
31ea33bfc4
- rewrote the condition nodes from SBARINFO in ZScript. This compiles but hasn't been tested yet.
2017-03-23 00:25:26 +01:00
Christoph Oelckers
9bd75bcac5
- some conceptual work on statusbar stuff. This looks like a viable approach to build something that can replace SBARINFO.
2017-03-22 19:56:21 +01:00
Christoph Oelckers
4417afd548
- changed VMValue to handle strings by reference.
...
This makes VMValue a real POD type with no hacky overloads and eliminates a lot of destructor code in all places that call a VM function. Due to the way this had to be handled, none of these destructors could be skipped because any value could have been a string.
This required some minor changes in functions that passed a temporary FString into the VM to ensure that the temporary object lives long enough to be handled. The code generator had already been changed to deal with this in a previous commit.
This is easily offset by the code savings and reduced maintenance needs elsewhere.
2017-03-22 01:44:56 +01:00
Christoph Oelckers
9bffe4ee50
- scriptified the main statusbar interface and the Strife status bar.
...
Note that the Strife status bar does not draw the health bars yet. I tried to replace the hacky custom texture with a single fill operation but had to find out that all the coordinate mangling for the status bar is being done deep in the video code. This needs to be fixed before this can be made to work.
Currently this is not usable in mods because they cannot initialize custom status bars yet.
2017-03-22 00:32:52 +01:00
alexey.lysiuk
7aa6a6b0b3
Restored explicit assignment operators for VMValue
...
Unfortunately strings require special handling and so all operators must be available
This partly solves https://mantis.zdoom.org/view.php?id=453 (and https://mantis.zdoom.org/view.php?id=459 too)
2017-03-21 12:14:50 +02:00
Christoph Oelckers
403c5693a9
- cleaned out a large part of unused methods from VMValue.
...
- keep string registers which are being used as function parameters allocated until after the function call returns. This is for allowing to pass strings by reference which would avoid some costly constructor/destructor loops in the call instruction.
2017-03-19 21:25:30 +01:00
Christoph Oelckers
3cced6c7cc
- fixed the early-outs for empty functions in the VM caller.
...
OP_RET should not be used as an absolute number here.
2017-03-18 21:31:43 +01:00
Christoph Oelckers
539af96b8e
- fixed variable size mismatch and some warnings for 32 bit builds.
2017-03-14 18:48:51 +01:00
Christoph Oelckers
cd392e50e9
- added a dummy struct named '_' to define global variables. This can only be used internally.
...
This method was chosen because it avoids adding variable declarations to the global namespace which would have required a lot more work while polluting the grammar.
This way the global variables can be handled by a small bit of special coding in the struct generator.
2017-03-13 14:42:14 +01:00
Christoph Oelckers
5fd86cf98c
- added some syntactic help to the ZScript parser to allow defining the arrays with native structs on the script side instead of having to define them internally.
2017-03-13 12:51:09 +01:00
Christoph Oelckers
61c91f05fc
Merge branch '3.0_work'
...
# Conflicts:
# src/gl/scene/gl_portal.cpp
# src/r_plane.cpp
2017-03-12 20:31:34 +01:00
ZZYZX
bd889cc8f1
Fixed various virtualscope oddities; set scope for DECORATE classes to play.
2017-03-12 20:27:38 +01:00
Christoph Oelckers
bd7476fb8d
- untangled r_defs.h from actor.h
...
Both files can now be included independently without causing problems.
This also required moving some inline functions into separate files and splitting off the GC definitions from dobject.h to ensure that r_defs does not need to pull in any part of the object hierarchy.
2017-03-10 02:22:42 +01:00
Christoph Oelckers
a4710bcdb0
- did a bit of header cleanup to reduce the dependency on dobject.h.
2017-03-09 23:30:42 +01:00
Christoph Oelckers
878e6015df
- made all iterator classes natively abstract so that they do not get a ConstructNative method so that OP_NEW can refuse creating them without the need to mark them as abstract.
...
- block creation of actors with the 'new' instruction. Unlike the above these cannot be made abstract because without ConstructNative they cannot be serialized.
2017-03-09 17:21:37 +01:00
Christoph Oelckers
6dee9ff566
- replaced another large batch of homegrown type use.
2017-03-08 18:55:53 +01:00
Christoph Oelckers
1cb89c6b37
- fixed bad call to validate function.
2017-03-08 13:35:21 +01:00
Christoph Oelckers
d911cdcfe7
- missed a bit.
2017-03-07 22:18:50 +01:00
Christoph Oelckers
e2f3a09dd0
- refactored the scope check for VirtualScope calls.
...
It now uses a dedicated opcode instead of piggybacking on OP_CALL and it passes data that is closer to the VM. Symbols should be avoided at this level.
It also will skip the scope instruction if the code generator detects that both calling function and the self pointer type have the same scope, this assumes that subclasses cannot flip between UI and Play.
2017-03-07 22:17:48 +01:00
Christoph Oelckers
0c686c593b
- simplify the runtime checks for OP_NEW.
...
They are not needed for OP_NEW_K which can evaluate the class relations at compile time and for OP_NEW the calling function can also be checked at compile time, passing only the scope value itself.
2017-03-07 19:57:55 +01:00
ZZYZX
8400961a00
Did some cleanup - since FScopeBarrier is not in codegen now, it's possible to include it properly from vm.h
2017-03-05 18:39:59 +01:00
alexey.lysiuk
27376b1697
Fixed compilation of Debug configuration
...
src/scripting/vm/vmexec.cpp:204:44: error: no member named 'Native' in 'VMScriptFunction'
2017-03-05 11:39:25 +02:00
ZZYZX
3eafc13b08
Removed BarrierSide from VMFunction, since it's obsolete with addition of VarFlags
2017-03-05 09:49:31 +01:00
ZZYZX
7cbabfb0d4
Implemented implicit 'protected' inheritance in virtual functions
2017-03-05 09:49:31 +01:00
Christoph Oelckers
3879e67cee
- the #if was in the wrong place.
2017-03-04 11:34:53 +01:00
Christoph Oelckers
fd4727e701
- did a bit of cleanup.
...
- disabled the runtime check in OP_CALL because as implemented it doesn't clean up properly and is not fully implemented.
2017-03-04 10:28:51 +01:00
ZZYZX
723f9770a4
Merge remote-tracking branch 'gz/master' into gz_master2
2017-03-03 23:33:02 +02:00
ZZYZX
3a57a9809f
Removed nonew class modifier
2017-03-03 22:42:12 +02:00
Christoph Oelckers
f343d36ea9
- implemented the basics of a working metadata system.
...
This will store class meta properties in a separate memory block so that it won't have to muck around with PClass - which made the implementation from the scripting branch relatively useless because extending the data wasn't particularly easy and also not well implemented. This can now be handled just like the defaults.
2017-02-27 23:28:19 +01:00
Christoph Oelckers
10c6b7a80b
- added a NULL check to the VM's entry point, in case some bad but non-fatal DECORATE results in a function not having generated any code.
2017-02-25 10:57:12 +01:00
Christoph Oelckers
5bc26763cb
- fixed: String CVARs get stored as a const char *, not an FString, so the ls opcode cannot be used to read their content.
2017-02-23 22:01:46 +01:00
Christoph Oelckers
aabcc1f92e
- scriptified the input functions of DMessageBoxMenu.
2017-02-18 23:05:01 +01:00
Christoph Oelckers
f5a0f6b3bf
- almost done with TextEnterMenu.
2017-02-18 21:18:23 +01:00
ZZYZX
dbc595f886
Marked DrawPowerup as ui, still compiles and somewhat works :D
2017-02-18 07:30:20 +02:00
ZZYZX
e0ae0fdb2e
Dynamic virtualscope checking. May yet be buggy.
2017-02-18 06:27:28 +02:00
ZZYZX
b5ab011bb9
Static virtualscope checking. This is possible, because virtualscope can't produce false positives (data readable for everyone), only false negatives (which are handled at runtime later)
2017-02-18 04:07:12 +02:00
ZZYZX
4fe9c7d8c8
Added parsing of ui, play, allowui and const qualifiers
2017-02-17 17:58:16 +02:00
ZZYZX
5e5d0d3e57
Using separate keyword 'nonew' as reverse abstract; nonew is inherited, and nonew class can only be created from the first nonew class in the hierarchy
2017-02-16 12:40:09 +02:00
ZZYZX
0819dd8d89
Actually pass PFunction to OP_NEW
2017-02-16 04:14:21 +02:00
ZZYZX
7d3663500f
Disallow creation of abstract classes outside of their own class (this is so that modders can create their own factory methods, not just for native)
2017-02-16 03:49:03 +02:00
Christoph Oelckers
89ef30166d
- fixed assembly output for SO instruction.
2017-02-13 00:25:39 +01:00
Christoph Oelckers
dbf3530696
- the keybinding control works again, this time fully scripted.
2017-02-12 18:38:23 +01:00
Christoph Oelckers
03283de4e8
- fixed issues with option menu items.
...
- fixed the octal parser in strbin.
- remove 'new' token because it gets in the way.
2017-02-12 16:02:55 +01:00
Christoph Oelckers
8277299135
- Turned DropItem into a plain struct again like it was before the scripting branch got merged.
...
Making this an object had little to no advantage, except being able to remove the deleter code. Now, with some of the class data already being allocated in a memory arena so that freeing it is easier, this can also be used for the drop item lists which makes it unnecessary to subject them to the GC. This also merges the memory arenas for VM functions and flat pointers because both get deleted at the same time so they can share the same one.
2017-02-08 20:37:22 +01:00