Commit graph

235 commits

Author SHA1 Message Date
Christoph Oelckers
d1ce5e37fc - fixed another error in DispatchScriptProperty. That AST's data organization is really messed up... :( 2017-03-13 21:22:11 +01:00
alexey.lysiuk
3a039b1e44 Fixed compilation error reported by GCC 2017-03-13 22:05:55 +02:00
Christoph Oelckers
cc60b005a1 - fixed processing of parameter-less ZScript properties. 2017-03-13 19:57:20 +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
c008ddaf66 - replaced homegrown SWORD, SBYTE and uint32_t types. 2017-03-09 19:31:45 +01:00
Christoph Oelckers
77bac4f6fa - fixed code generation for min/max when the first operand was a local variable or constant.
The code for constants was not optimal because the first operand of the instructions cannot be constant. This was solved by swapping it with the second choice which will always be non-constant.
The code for local variables did not allocate a new destination register and would overwrite the first parameter's variable.
2017-03-09 09:36:12 +01:00
Christoph Oelckers
6dee9ff566 - replaced another large batch of homegrown type use. 2017-03-08 18:55:53 +01:00
Christoph Oelckers
2b5fea4ea8 - added version checks for function calls and virtual overrides.
- restricted the UI functions in inventory.
2017-03-05 21:44:10 +01:00
Christoph Oelckers
8a5daf211c - added version check for member variables. 2017-03-05 20:41:41 +01:00
Christoph Oelckers
456ac64723 - implemented version checks for compile-time type determination and for class inheritance.
Note that in this system, DECORATE counts as version 2.0, so any data that should be available to DECORATE should not use version restriction.
2017-03-05 17:58:55 +01:00
Christoph Oelckers
7df698dad8 - implemented the parser basics of a ZScript versioning system.
Note that this completely disables the newly added keywords 'play' and 'ui' for unversioned code to allow using them as identifiers as I have found at least one mod that uses a variable named 'play' that would have been rendered broken otherwise.
This also disables many ZScript only keywords for other parsing jobs.
2017-03-05 14:13:00 +01: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
ZZYZX
6af5c1fa2b Produce a warning if clearscope is used on non-inner structs. Also now checking for outer class presence correctly. 2017-03-05 09:49:31 +01:00
ZZYZX
86a494aacd Can use clearscope on struct to signify that it should be plain data even if defined inside a play/ui class 2017-03-05 09:49:31 +01:00
ZZYZX
6c90d05407 By default, inner struct in class should take the scope of it's outer class 2017-03-05 09:49:31 +01:00
ZZYZX
0a7aebae93 Fixed const method qualifier. Also, fixed: const is not clearscope, treat differently. 2017-03-05 09:49:31 +01:00
Christoph Oelckers
7dbc6939c4 - declared most native getters in Actor as const.
- made the self pointer of const functions readonly.

This seems to work fine. Both calling a non-const function and trying to assign a value to a member fail with an error message.
2017-03-04 12:43:07 +01:00
Christoph Oelckers
b3ba5bfe2c - allow 'const' on class functions. This is preferable to 'clearscope' so that the UI code can call getter functions without having to declare things as 'clearscope'.
Clearscope is a dangerous context and should be limited to the minimum extent possible and preferably be blocked in user code.
This may still need some work on const functions but better have it in now.
2017-03-04 12:07:45 +01:00
alexey.lysiuk
a5edd48996 Fixed remaining warning reported by Clang
src/scripting/zscript/zcc_compile.cpp:2456:54: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
2017-03-04 12:23:15 +02:00
alexey.lysiuk
d8cee4d3a5 Fixed most of warnings reported by Clang
src/scripting/zscript/zcc_compile.cpp: warning: comparison of integers of different signs: 'int' and 'unsigned long' [-Wsign-compare]
src/p_acs.cpp: warning: format specifies type 'char *' but the argument has type 'PClass *' [-Wformat]
2017-03-04 12:17:53 +02:00
ZZYZX
c9a994a885 Fixed: clearscope should also clear the inherited scope (through struct member access chain); Fixed: struct member access chain should ONLY work for structs (forgot that FxClassMember inherits FxStructMember) 2017-03-04 00:04:19 +02: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
168627f549 - native meta variables are not needed anymore. They were only a temporary aid to properly handle this, but now all have been redone. 2017-02-28 14:38:50 +01:00
Christoph Oelckers
b6a1fe7fc6 - scriptified the basic attack functions, its properties and the explosion properties to test the new metadata system. 2017-02-28 10:51:32 +01:00
Christoph Oelckers
a93a7e1cac - handle player meta properties.
Only two really make sense, the rest is never used from scripts and may just remain where it was.
2017-02-28 01:23:12 +01:00
Christoph Oelckers
78a66e001a - properly handle all meta properties for inventory items. 2017-02-28 00:45:16 +01: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
alexey.lysiuk
eb40e8bcf0 Removed DYNLIGHT preprocessor definition
https://mantis.zdoom.org/view.php?id=318
2017-02-22 23:02:58 +02:00
Christoph Oelckers
bb6e667f33 - removed some unneeded version.h #includes. 2017-02-20 01:42:53 +01:00
ZZYZX
fb9b8c8870 Re-enabled clearscope for methods; made isBlinking() clearscope 2017-02-18 07:51:41 +02:00
ZZYZX
463620c3b8 ClearScope is not needed for methods either. Disabled, but not removed - reenable if needed later 2017-02-18 07:33:27 +02:00
ZZYZX
d7f5d8a403 ClearScope for fields essentially means 'world-writable'. We don't want to support that - disallowed 2017-02-18 07:31:07 +02: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
12aa18a92b Preparing to do class-based method scopes: can't change class scope once defined (play stays play, ui stays ui) 2017-02-18 00:39:57 +02:00
Christoph Oelckers
50d2846e40 - scriptified UpdateColorsets. 2017-02-17 23:16:07 +01:00
ZZYZX
014db18f2a Fixed some things around 2017-02-17 23:36:16 +02:00
ZZYZX
8b0dee6f66 My am dumb: PStruct is a base for PClass 2017-02-17 22:00:47 +02:00
ZZYZX
496b2a74ce Disallow const qualifier for classes 2017-02-17 20:04:40 +02:00
ZZYZX
0f031c5f22 Renamed 'allowui' to 'clearscope'. 'allowui' doesn't reflect the real meaning of the keyword which clears implicit 'play' or 'ui' inherited from parent class (for classes) or owning type (for methods/fields) 2017-02-17 18:24:01 +02:00
ZZYZX
2b20abff02 Fixed consistency of checks 2017-02-17 18:01:39 +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
363990a105 Class abstractness should be inherited 2017-02-16 02:31:20 +02:00