Commit graph

7871 commits

Author SHA1 Message Date
Christoph Oelckers
847b8c45ef - Changed ZCCCompiler::Simplify to allow running in constant and non-constant mode. The difference is that non-constant mode does not attempt to simplify function name expressions because these cannot be processed without destroying them, if some identifier in there is not referencing a symbol, which is quite common. 2016-10-16 01:33:36 +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
db8ab1bc4a - give PFunction a bit more information:
* explicitly require passing the owning class when creating it.
 * extract self pointer class when adding a variant.
 * put the flags on the single variants, we can not fully rule out that they will be 100% identical, if variants ever get allowed.
2016-10-15 15:50:45 +02:00
Christoph Oelckers
091da92819 - Added AStateProvider class which is used to define the special action function behavior of weapons and custom inventorys. The class itself does not do anything, but the compiler will use it to set up the action function prototypes differently which in turn will be used to do type checking during code generation. 2016-10-15 15:10:48 +02:00
Christoph Oelckers
32a3f57a54 - more preparations to compile functions:
* Allow PFunction to work without a VMFunction being attached.
 * The Variant for a function must store the prototype itself instead of relying on the VMFunction it points to. Otherwise it would not be possible to reference a prototype during compilation of the function because it does not exist yet.
 * Give the variant a list of the function's argument's names, because these are also needed to compile the function.
 * create an anonymous function symbol when the function gets registered to the builder. At this point we have all the needed information to set it up correctly, but later this is no longer the case. This is the most convenient info to have here because it contains everything that's needed to compile the function in the proper context, so it has to be present when starting compilation.
 * added some preparations to implement special handling for weapons and custom inventory items, which can run action functions in another actor's context. This part is not active yet but the basics are present in SetImplicitArgs.
2016-10-15 14:36:08 +02:00
Christoph Oelckers
2cb5839c11 - count errors in the parser and abort afterward if there were some.
- use FScriptPosition's error counter throughout the compiler so that there is only one counter for everything, not two.

Parts of the compiler use FScriptPosition, so this is easier to handle than having a separate counter in the compiler class. It also avoids having to pass the compiler object to any function where an error may be output. The TreeNodes contain sufficient data to be converted to an FScriptPosition and using that for error message formatting.
2016-10-15 12:15:25 +02:00
Christoph Oelckers
5f5da26321 Merge branch 'master' of https://github.com/rheit/zdoom into zscript 2016-10-15 10:52:35 +02:00
Christoph Oelckers
162da2fcaf - allow to specify "none" to set an actor's translation to the identity table. 2016-10-15 10:51:48 +02:00
Christoph Oelckers
3b0d687b22 - committed from the wrong subdirectory and missed all files that just changed the #include line. 2016-10-15 10:43:02 +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
Christoph Oelckers
d8a8b59006 - cleaned up the loop statement nodes in the code generator, which put some handling in FCompileContext and some of their data into the base FxExpression class instead of having an intermediate base class for all loops which is responsible for the relevant data. All this is now encapsulated in a new FxLoopStatement class which serves as base for the actual loop statements. 2016-10-15 10:34:26 +02:00
Marisa Heit
f23e5d2677 Fixed: XLAT would not parse
- Disable the changes from commit 96afce241d
  because it appears to not recognize default rules that reduce as
  reducing.
- When tracing a parser, flush after every line output in case an
  assert is hit so you can actually see what it did up to that point.
2016-10-14 22:02:55 -05:00
Christoph Oelckers
7bdd320f13 - forgot to save this. 2016-10-14 23:51:38 +02:00
Christoph Oelckers
2e882a41a3 - removed some redundancy. 2016-10-14 23:13:08 +02:00
FishyClockwork
08504dcbe2 Added a small check just in case... 2016-10-14 23:11:58 +02:00
FishyClockwork
ecffd0bea6 Done the code changes.
This time only nulls I've added are nullptrs
2016-10-14 23:11:57 +02:00
FishyClockwork
1ab990f81f Again... 2016-10-14 23:11:57 +02:00
FishyClockwork
0df6ba6951 First, take care of usdf.txt
Updated about the new 'goodbye' property.
2016-10-14 23:11:56 +02:00
alexey.lysiuk
0370592422 Fixed serialization of DSeqPolyNode class objects
Polyobject pointer was not serialized at all
2016-10-14 23:05:02 +02:00
Magnus Norddahl
36aff68501 Fix divide by zero if yscale is too small a number 2016-10-14 23:02:16 +02:00
Magnus Norddahl
657abb374b Fix SkyViewpoint skyboxes not being rendered 2016-10-14 23:01:10 +02:00
Christoph Oelckers
9def9ec095 - added more casting kludges so that I can run some tests with Heretic's definitions. 2016-10-14 22:54:22 +02:00
Christoph Oelckers
d00e93bdab - fixed order of state setup.
It looks like the setup of the action function and the adding of the states got inverted by something I tried, leaving the ActionFunc member empty on the real states.
2016-10-14 21:56:45 +02:00
Christoph Oelckers
52005214c1 - Added some fudging so that A_PlayerSkinCheck creates proper code until I can rewrite the FunctionCall expression to match what the script compiler needs. The current version of this class is too much geared toward DECORATE. 2016-10-14 21:15:46 +02:00
Christoph Oelckers
784f7ed671 - converted all of Doom's actors.
- fixed a few problems that were encountered during conversion:
 * action specials as action functions were not recognized by the parser.
 * Player.StartItem could not be parsed.
 * disabled the naming hack for PowerupType. ZScript, unlike DECORATE will never prepend 'Power' to the power's name, it always needs to specified by its full name.
 * states and defaults were not checked for empty bodies.
 * the scope qualifier for goto labels was not properly converted to a string, because it is an ENamedName, not an FName.
2016-10-14 20:08:41 +02:00
alexey.lysiuk
d6b3cbe0c9 Fixed serialization of MovePoly class objects
See http://forum.zdoom.org/viewtopic.php?t=53787
Removed "speed" field which is serialized in the parent class
2016-10-14 14:33:13 +03:00
Christoph Oelckers
9e2830a3db - converted the rest of actors/shared.
- moved damagetype definitions to MAPINFO. These were in DECORATE which is not correct. The old code is left for compatibility.
2016-10-14 10:46:15 +02:00
Christoph Oelckers
905e44713f - deprecated A_SetUserVar family for ZSCRIPT due to its muddled semantics. Better use direct variable access which is a lot safer and also provides better error checking. 2016-10-14 09:32:45 +02:00
Christoph Oelckers
b8a2059aa9 Merge branch 'master' of https://github.com/rheit/zdoom into zscript 2016-10-14 09:11:54 +02:00
Marisa Heit
97107b6b6d Update lempar.c to 2016-10-04 version
- Every update rolled into one, because I'm pretty sure I missed some while
updating lemon.c (not counting today's commits), since it wasn't always
updated at the same time as lemon.c.
- In particular, I think this check-in from 2016-06-06 was very important to
  us after commit 3d5867d29e (For the
  Lemon-generated parser, add a new action type SHIFTREDUCE and use it to
  further compress the parser tables and improve parser performance.):
  * Fix lempar.c so that the shift-reduce optimization works for error
    processing.
2016-10-13 22:30:12 -05:00
Marisa Heit
696beca40f Lemon update 2016-08-16 16:46:40 on branch trunk
— Fix a bug in destructorprocessing of Lemon. That has no impact on the SQLite grammar. The bug was introduced by prior work to optimize the Lemon-generated parser used by SQLite. (user: drh)
2016-10-13 22:23:28 -05:00
Marisa Heit
3b1a048885 Lemon update 2016-05-24 18:55:08 on branch trunk
— Enhance Lemon and the parser template so that it can once again build parsers that have no unreachable branches. (user: drh)
2016-10-13 22:22:04 -05:00
Marisa Heit
96afce241d Lemon update 2016-05-24 18:55:08 on branch trunk
— Enhance Lemon and the parser template so that it can once again build
parsers that have no unreachable branches. (user: drh)
2016-10-13 22:18:20 -05:00
Marisa Heit
64bd551d20 Lemon update 2016-05-23 14:24:31 on branch trunk
— Fix comment typos and improve clarity of presention in Lemon. The output
should be identical. (user: drh)
2016-10-13 22:09:13 -05:00
Marisa Heit
0d67d107ab Lemon update 2016-05-23 14:24:31 on branch trunk
— Fix comment typos and improve clarity of presention in Lemon. The output
should be identical. (user: drh)
2016-10-13 22:07:01 -05:00
Marisa Heit
45d441f103 Lemon update 2016-04-29 11:28:35 on branch trunk
— Lemon bug fix: Do not merge action routines unless their destructors are
also identical. Problem and suggested fix reported on the mailing list by
Kelvin Sherlock. (user: drh)
2016-10-13 21:48:29 -05:00
Marisa Heit
de56be6c01 Lemon update 2016-04-29 11:28:35 on branch trunk
— Lemon bug fix: Do not merge action routines unless their destructors are
also identical. Problem and suggested fix reported on the mailing list by
Kelvin Sherlock. (user: drh)
2016-10-13 21:41:54 -05:00
Christoph Oelckers
7de683f9f5 - converted a few more DECORATE files.
- started with the AST converter. So far it only deals with direct function calls with simple constants as parameters.
- added an error condition for the defaults block to get rid of some asserts.
2016-10-14 00:40:20 +02:00
Christoph Oelckers
7e8d7eb2ec - fixed parsing of 'damage' default property.
- fixed processing of goto labels.
2016-10-13 22:52:31 +02:00
Christoph Oelckers
433bf46010 - removed token 'mode' because it isn't used anywhere and clashed with some actor properties.
- fixed uninitialized counter variable in DECORATE parser.
- allow dottable_id of xxx.color so that the property parser can parse 'powerup.color'.
- fixed crash with actor replacement in script compiler.
- add the lump number to tree nodes because parts of the property parser need that to make decisions.
- removed test stuff.
- converted inventory.txt, player.txt and specialspot.txt to ZSCRIPT. These were the minimal files required to allow actor.txt to parse successfully.
- removed the converted files from the DECORATE include list so that these are entirely handled by ZSCRIPT now.
2016-10-13 20:45:52 +02:00
Christoph Oelckers
a72fbb771f - separated the code generation from the DECORATE parser and cleaned up the interface to the code generator. Most importantly, the VMScriptFunctions are now preallocated when being added to the list of functions to compile and will be filled in later by the code generator. This allowed the removal of some ugly maintenance code. 2016-10-13 00:53:59 +02:00
Christoph Oelckers
59ed26c0b6 - resorted some of thingdef.cpp's contents into more appropriate files.
- split FinishActor into several functions. While DECORATE can, ZSCRIPT cannot do all this in one go.
- split the state finalization into several class-specific virtual functions.
2016-10-12 20:42:41 +02:00
Christoph Oelckers
b1a83bfd26 - started with cleanup and separation of DECORATE code.
* everything related to scripting is now placed in a subdirectory 'scripting', which itself is separated into DECORATE, ZSCRIPT, the VM and code generation.
 * a few items have been moved to different headers so that the DECORATE parser definitions can mostly be kept local. The only exception at the moment is the flags interface on which 3 source files depend.
2016-10-12 19:22:33 +02:00
Christoph Oelckers
6a8ab9a4d3 - implemented the state compiler. So far all it can handle is parameter-less functions.
To do the rest, some cleanup is needed first, to untangle the DECORATE parser from the actual code generation so that the low end stuff can actually be reused here instead of having to be redone.
2016-10-12 17:50:23 +02:00
Christoph Oelckers
900644e465 Merge branch 'master' of https://github.com/rheit/zdoom into zscript 2016-10-12 12:43:56 +02:00
Christoph Oelckers
6f92efc72c - renamed thingdef_codeptr.cpp and moved it out of thingdef/.
Ultimately, thingdef should only contain code that is directly related to the DECORATE parser, but that's not the case with this file. It's only function definitions which get used during gameplay and will also be accessed by ZScript.
The change is intentionally on master so that pull requests can adjust to it now instead of creating conflicts later.
2016-10-12 12:43:26 +02:00