Commit graph

151 commits

Author SHA1 Message Date
Chronos Ouroboros
df3f074b0a Fixed some issues in the ZScript array compilation code. 2019-04-26 01:33:09 +02:00
Chronos Ouroboros
541fd0097b Implemented compound initializers for arrays. 2019-04-26 01:31:23 +02:00
Christoph Oelckers
3a3ae0bcd5 - fixed deprecation warnings for member functions not checking the version. 2019-04-17 19:44:10 +02:00
Christoph Oelckers
044b635a26 - more direct native function calls. 2019-04-17 14:32:06 +02:00
Christoph Oelckers
a42ece4fb4 - added missing min/max unsigned instructions for the VM. 2019-04-16 22:00:46 +02:00
Christoph Oelckers
798cebf891 - fixed character to int conversion for UTF8-characters. 2019-04-16 17:43:33 +02:00
Christoph Oelckers
f3171c95cc - fixed: Any direct native function may not use struct values as parameters, not even something as simple as an FName. 2019-04-16 14:58:25 +02:00
Christoph Oelckers
c01981d08a - define the built-in functions defined in codegen.cpp through the regular interface instead uf just hacking them into the symbol table with incompletely set up data.
- added direct native variants to these builtins and fixed problems with builtin processing.
2019-04-15 22:30:01 +02:00
Christoph Oelckers
5e63252fdc - moved the type infomation entirely out of VMValue.
For the varargs functions that used the Type field to validate their parameters, now a hidden additional argument is passed which contains a byte array with the type info for the current call's arguments. Since this is static per call location it can be better prepared once when the code is being compiled instead of being put in a runtime created array for each invocation. Everything else uses the per-function instance of the same data.

The only thing that still needed the type field with a VMValue is the defaults array, so this uses a different struct type now to store its data.

# Conflicts:
#	src/v_draw.cpp
2019-04-15 16:02:17 +02:00
Christoph Oelckers
cb9c1f021c - generate register type info for the parameter lists of all functions.
Currently used for loading parameters into registers.
For checking parameters of native functions some more work is needed to get the info to the function. Currently it doesn't receive the function descriptor.
2019-04-15 15:52:22 +02:00
Christoph Oelckers
b33fd19fa2 - missed one OP_RESULT. 2019-04-15 15:52:13 +02:00
Christoph Oelckers
6727301330 - moved all code related to function calls into the helper class so that all future work on the calling convention is in one place only. 2019-04-15 15:52:12 +02:00
Christoph Oelckers
a900390683 - moved all handling for the simple calls into EmitterArray to have it in one place only.
The main case of FxVmFunctionCall is not done yet, though.
2019-04-15 15:52:11 +02:00
Christoph Oelckers
054640ce41 - removed OP_TAIL.
The amount of support code for this minor optimization was quite large and this stood in the way of streamlining the VM's calling convention, so it was preferable to remove it before moving on.
2019-04-15 15:52:10 +02:00
Christoph Oelckers
e9a5f094c9 - changed OP_PARAM handling so that all registers remain allocated until the call instruction and reordered instruction emission so that the param instructions all directly precede the call instruction. 2019-04-15 15:48:37 +02:00
Christoph Oelckers
9456c877d4 - deconstruct A_Jump with multiple labels into A_Jump(chance, RandomPick(label1, label2, label3,...)) to remove this ugly special case from the VM calling convention.
This also adds the number of available choices to OP_IJMP.
2019-04-15 15:48:27 +02:00
Christoph Oelckers
05fd4d8b62 - fixed RNG setup in FxRandom. 2019-04-15 15:48:24 +02:00
Christoph Oelckers
9d126954d1 - removed the default parameter handling from all native script functions because it is no longer needed.
# Conflicts:
#	src/p_actionfunctions.cpp

# Conflicts:
#	src/hwrenderer/postprocessing/hw_postprocessshader.cpp
#	src/v_2ddrawer.cpp
2019-04-15 14:59:00 +02:00
Christoph Oelckers
6d8cf38cef - fixed FxFRandom setup which used a path in FxRandom that is no longer supported. 2019-04-15 14:37:46 +02:00
Christoph Oelckers
7d2c4a05e2 - removed the unused 'no arguments' cases from the BuiltinRandom functions and split off BuiltinRandom2 into its own function.
This removes the last non-vararg cases where a native VM function checks 'numparam'. As of this commit all function calls will pass the complete list of arguments.
2019-04-15 14:37:40 +02:00
Christoph Oelckers
a0b4f5ad68 - always pass complete argument lists in the VM. 2019-04-15 14:37:37 +02:00
Christoph Oelckers
b8ca67f426 - fixed the type checks for object arrays.
Null pointers must be allowed and non-object pointers which are not null must be explicitly checked for because the code could crash on them when performing a static_cast on an incorrect type.
2018-11-18 21:57:12 +01:00
Christoph Oelckers
692d6e9045 - Restricted argument count check to the void return case.
There were some issues here:

* a check for mismatching count is too strict because it is legal to omit return values
* it failed to detect returning multiple values in a single expression.
2018-11-16 21:33:22 +01:00
Christoph Oelckers
c1edaa317d fixed right shift operator for unsigned values
This is version protected to avoid breaking old code.
2018-11-16 21:33:20 +01:00
Christoph Oelckers
38fe0b2fe1 - fixed: FxUnaryNotBitwise modified the source operand instead of allocating a new one. 2018-11-16 21:33:19 +01:00
Player701
3bd16afc0f - Readonly pointer casting now works in ZScript. 2018-11-16 21:33:17 +01:00
alexey.lysiuk
6e922761a8 - fixed compilation of targets with optimization 2018-11-16 21:33:11 +01:00
Magnus Norddahl
7567462328 - fix missing type check when using Push or Insert for typed arrays 2018-11-16 21:26:33 +01:00
alexey.lysiuk
08dfdd2687 - added warning for constant conditional expression
ZScript code like `if (x = 0) // ...` no longer causes assertion failure in Debug but produces a warning regadless of configuration

https://forum.zdoom.org/viewtopic.php?t=62422
2018-11-02 13:31:43 +01:00
Christoph Oelckers
6daece72c9 - versioned the return mismatch check to demote it to a warning for older versions than 3.7.
# Conflicts:
#	wadsrc/static/zscript.txt
2018-11-02 13:31:10 +01:00
alexey.lysiuk
7226f38375 - made 'return void' case a compilation error 2018-11-02 13:30:42 +01: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
alexey.lysiuk
7736504a22 Fixed code generation of infinite for loop
https://forum.zdoom.org/viewtopic.php?t=62023
2018-09-15 20:33:10 +02:00
Christoph Oelckers
0fd1909f2c - got rid of FNameNoInit and made the default constructor of FName non-initializing.
This setup has been a constant source of problems so now I reviewed all uses of FName to make sure that everything that needs to be initialized is done manually.
This also merges the player_t constructor into the class definition as default values.
2018-08-19 10:36:10 +02:00
alexey.lysiuk
e84b360cb5 - prohibit assignment of dynamic arrays
https://forum.zdoom.org/viewtopic.php?t=61682
2018-08-18 19:45:52 +02:00
Christoph Oelckers
08a1cc0e7e - allow temporary strings to be used as self pointer for String's member functions.
Due to how function calls get resolved by the code generator there were some incorrect flags on the self pointer which triggered an assert and caused incorrect code generation.
Fortunately this was a mostly contained special case for which a workaround was possible.
2018-07-20 12:42:08 +02:00
Christoph Oelckers
ed5c2b21ac - ZScript used the wrong variable for compatflags2.
ii_* is merely the storage for info from the compatibility.txt lump.

(cherry picked from commit ae1fe041ee)
2018-06-09 19:44:12 +02:00
alexey.lysiuk
c5b20b91ff - fixed: flag CVars in ZScript referenced wrong addresses
(cherry picked from commit 4a1f36623b)
2018-06-09 19:44:11 +02:00
drfrag666
8ff20c98a5 - That cmath include was actually not needed (bad merge). 2018-06-09 14:46:34 +02:00
Christoph Oelckers
43c3d63786 - redirect script access to the compatflags CVARs to their internal shadow variables.
This is needed so that MAPINFO settings for these flags don't get ignored.

(cherry picked from commit 1fdcacc337)

# Conflicts:
#	src/scripting/backend/codegen.cpp
2018-06-09 14:30:41 +02:00
Christoph Oelckers
6fe5af7c0c - fixed: FxFloatCast must transfer the outer expression's value type to the inner expression if it performs a float->float cast.
This violated an important rule that a cast may not alter the expression's type and led to failed asserts elsewhere.

(cherry picked from commit 7d515e72c2)
2018-06-02 10:03:43 +02:00
alexey.lysiuk
81bc05b7c5 Added support for default values of arguments with uint type 2018-03-07 15:58:06 +02:00
Christoph Oelckers
bcc8972356 - fixed: A preincrement of a local variable generated wrong code if passed as a function parameter.
Due to the special nature of this expression the code generator got stuck in 'address' mode and passed the address of the variable instead of its value.
2018-03-01 15:00:18 +01:00
Christoph Oelckers
aaaf9aa108 Added 'TeleportSpecial' as an alias for 'Teleport' in ZScript to deconflict from the Actor.Teleport function. 2018-02-27 12:44:00 +01:00
alexey.lysiuk
1e41c042d4 Fixed codegen crash with non-numeric random seed
The following code crashed ZScript code generator if my_seed is not convertible to numeric type
SetRandomSeed[my_random_id](my_seed);
2018-02-19 11:46:36 +02:00
Christoph Oelckers
09f1859c83 - allow retrieving the length of a string constant. 2018-01-21 18:49:46 +01:00
alexey.lysiuk
6d20da8ab5 Fixed nust -> must typos 2018-01-18 11:43:32 +02:00
alexey.lysiuk
d50ba4954a Fixed potential crash when calling undefined function in ZScript
The following code which uses explicit class specifier led to a crash:
class C
{
	void F()
	{
		Object.Undefined();
	}
}
2017-12-23 15:27:32 +02:00
alexey.lysiuk
4beefb7007 Removed warning for uninitialized variables in ZScript
This reverts commit 8104ef5189
2017-11-06 15:38:28 +02:00
alexey.lysiuk
8104ef5189 Added warning for uninitialized variables in ZScript
https://forum.zdoom.org/viewtopic.php?t=57868
2017-11-03 16:23:41 +02:00