Commit graph

12 commits

Author SHA1 Message Date
Christoph Oelckers
8a6230d64a - Renamed FxSequence to FxCompoundStatement.
- fixed: The state parser was unable to accept empty anonymous functions, which should be treated as if there is none at all.
2016-10-19 16:15:02 +02:00
Christoph Oelckers
458c68775f - fixed handling of loop statements.
All break and continue statements were collected in one list, and each loop statement taking hold of that entire list, including the breaks and continues from previous outer loops.
Changed it so that loop statements contain the jump addresses themselves and set a pointer in FCompileContext, so that the jump point can be set directly in the loop statement - and an error printed if there is none in the resolving stage, not the emitting one.
Consolidated the identical backpatching code of the three loop statement nodes into a subfunction.
2016-10-19 14:36:54 +02:00
Christoph Oelckers
a6a0c4b93c - handle all unary operators.
- handle all binary operators which are already implemented in the code generator.
- implemented sizeof/alignof operators in code generator.
- rewrote RequestAddress so that its return value is not the writability of an address but the mere existence. Also changed it to not output errors itself because those cannot be dealt with by the calling function.
2016-10-17 20:33:35 +02:00
Christoph Oelckers
938ab4ca70 - implemented '**' (power) operator. To ensure reliability, acustom 'pow' function will be used to calculate it.
- fixed: FxBinary::ResolveLR' check for numeric operations was incomplete. Like far too many other places it just assumed that everything with ValueType->GetRegType() == REGT_INT is a numeric type, but for names this is not the case.
2016-10-17 15:17:48 +02:00
Christoph Oelckers
6650e2bbfb - converted some Heretic stuff to ZScript for testing.
- added type casts to the arguments of function calls.
- added string constant to state conversion to FxTypeCast.
2016-10-16 22:32:52 +02:00
Christoph Oelckers
afd9347087 - changed order of script files to match the old DECORATE list for easy comparison of the disassembly.
- added a descriptive name to all types for error messages.
- added a generic type cast node to the code generator.
- added a few more cast operations to the 'cast' VM instruction.
- extended FxClassTypeCast to handle all possible input that can be cast to a class pointer, not just names.
2016-10-16 19:42:22 +02:00
Christoph Oelckers
d6ce60f63a - added named RNG support to FxFunctionCall.
This looks simpler than duplicating all that stuff and avoids a lot code duplication.
2016-10-16 01:08:02 +02:00
Christoph Oelckers
55f6661c87 - added handling for all the builtins supported by DECORATE to FxFunctionCall.
For the random functions this class only handles the default-RNG version. The one with an explicit RNG needs to be done separately because the parser produces different output for them.
2016-10-16 00:12:33 +02:00
Christoph Oelckers
b299b64e47 - the compile context now knows if it is invoked by ZScript or DECORATE, so that it can be more strict with ZScript if needed.
- added a truncation warning to FxIntCast, which only occurs with ZScript, not with DECORATE. FxBoolCast is intentionally left out because it would defeat the reason for this cast type.
2016-10-15 21:35:31 +02:00
Christoph Oelckers
c3e693b507 - added FindClassMemberFunction which retrieves a function symbol and performs some verification.
- removed Self parameter from FxFunctionCall. Actual member function calls through an object require quite different handling so lumping these two together makes no sense.
- added a workaround to deal with ACS_NamedExecuteWithResult to both the compiler and FindClassMemberFunction. The way the ZScript compiler sets this up means that it will call the builtin, not the actual action function, so the parser needs to do some explicit check to get past the same-named action function.
- pass a proper self pointer to FxActionSpecial. Although it's still not being used, propagating design shortcuts through several function levels is a very, very bad idea.
2016-10-15 20:16:44 +02:00
Christoph Oelckers
cbb990a79e - pass the current function to the compile context instead of just the containing class. 2016-10-15 17:40:27 +02:00
Christoph Oelckers
f86e64e712 - renamed thingdef_expression to codegen. Eventually this needs to be split up into smaller units because the file is already quite large and there's still a lot to add here. 2016-10-15 10:39:58 +02:00
Renamed from src/scripting/codegeneration/thingdef_exp.h (Browse further)