Jeff Teunissen
6ead583195
Ruamoko: Implement infinity.
...
The special token __INFINITY__, like __FILE__ and friends, will expand to
a floating-point expression containing a value the C compiler considers
infinite. Obviously, this assumes that the system has relatively modern
float hardware -- but if it doesn't, having Ruamoko be able to represent
float infinity is the least of your problems. :)
2011-12-14 12:20:10 -05:00
Bill Currie
ea02f3cd44
Fix a missed byteswap when loading qfo files.
2011-11-15 17:36:55 +09:00
Bill Currie
a71acc9ae5
Move the essential init code into Sys_Init().
2011-09-11 14:56:47 +09:00
Bill Currie
e42c5a4272
More tests and fix vector/quaternion global dumps.
2011-08-11 14:58:13 +09:00
Bill Currie
c6e0e094d8
Fix an unterminated array.
...
That was sneaky. It took building qfcc on an arm to trigger that bug.
2011-07-30 15:01:16 +09:00
Bill Currie
d910c14935
Clean up some doxygen warnings.
2011-07-10 19:12:07 +09:00
Bill Currie
617e70c8e3
Clean up a bunch of bison unused warnings.
2011-06-21 19:52:47 +09:00
Bill Currie
0f7390dd60
Clean up all the "set but not used" warnings.
...
gcc on my system is failing to treat this specific warning as an error :/
2011-06-19 10:48:02 +09:00
Bill Currie
c7612dcd99
Make statement dumps a little more informative.
2011-04-10 09:08:46 +09:00
Bill Currie
fd6e341e06
Clean up cast_expr() a little bit.
2011-04-10 00:29:27 +09:00
Bill Currie
57ed603658
Extract values from constant defs.
2011-04-09 12:42:41 +09:00
Bill Currie
cc714864a8
Support converting to/from unsigned values.
2011-04-09 11:32:33 +09:00
Bill Currie
55cc0f9206
Bring back the unsigned type (PROGS version bump)
...
This is only low-level support (the unsigned keyword still does not work),
but sufficient to make switch statements using jump tables work.
2011-04-09 10:07:47 +09:00
Bill Currie
b522853765
Ensure the target of def_op relocs gets updated.
...
These occur only when switch statements use jump tables, thus why the
problem went unnoticed :/
2011-04-08 17:09:40 +09:00
Bill Currie
237f11c472
Fix cast expressions.
...
Casting between ints and floats needs special treatment to get the
conversion operator, but other casts need to be aliases.
2011-04-08 13:55:26 +09:00
Bill Currie
c4a398850a
Fix defs as constants for vectors and quaternions.
2011-04-04 21:31:59 +09:00
Bill Currie
38b25e0c38
Do not double-allocate space for immediates.
...
Caused by changed semantics in def creation.
2011-04-03 13:11:50 +09:00
Bill Currie
92ba110a87
Ensure a field def is emitted for @this.
2011-04-03 13:03:48 +09:00
Bill Currie
7f67e6eb17
Refactor the def handling code a little.
2011-04-03 13:03:22 +09:00
Bill Currie
6d0b13dbf0
Resolve types whenever possible.
2011-04-03 13:02:04 +09:00
Bill Currie
2c9c1bd968
Ensure defs for @self and @this are generated.
2011-04-03 13:00:48 +09:00
Bill Currie
2de7733b6a
Fix initialized variable type handling.
...
Same problem as initialized constants :P
2011-03-30 21:21:38 +09:00
Bill Currie
8e18c76bde
Make initialized variables defs rather than immediate constants.
2011-03-30 19:58:09 +09:00
Bill Currie
7dbd2ec172
Allow field aliasing.
...
Initializing a field variable to another field will set the new field to
point to the same location. No type checking is done.
eg:
.SEL thinkMethod = think;
2011-03-30 09:33:47 +09:00
Bill Currie
550fff5467
Allow assignments between any field types.
2011-03-30 08:14:17 +09:00
Bill Currie
75c3653be4
Implement some missed relocs.
2011-03-30 08:13:13 +09:00
Bill Currie
1911cc1472
Mingw build fixes.
2011-03-27 08:26:42 +09:00
Bill Currie
896791b209
Correct the spelling of "int" and clean up the mess.
2011-03-25 16:53:04 +09:00
Bill Currie
1617f0765e
Support the default type without segfaulting.
2011-03-25 09:59:48 +09:00
Bill Currie
a7cfe3b215
Preserve the current class across protocol defs.
...
It seems that protocol defs are allowed in class implementations, so don't
let the protocol def kill the current class for the class implementation.
2011-03-24 11:55:17 +09:00
Bill Currie
71af121665
Detect missing @end tags.
...
Give a warning when @end is forgotten in class implementations.
2011-03-24 11:44:22 +09:00
Bill Currie
8d3508cf20
Allocate space for temp defs using size rather than type.
...
Statement operands throw away the high level type information, so store
type size in the operand and use this size for allocating space for temps
rather than using the low-level type.
2011-03-23 21:32:14 +09:00
Bill Currie
9b62c8c126
Rename ty_type_e to ty_meta_e and type_t.ty to type_t.meta
2011-03-22 16:06:47 +09:00
Bill Currie
d4be914019
Fix initialized vector variables.
...
The whole initialized variable system is wonky, but it will do for now.
2011-03-22 15:10:06 +09:00
Bill Currie
a9eb793a5e
Yay, even more tests :P
2011-03-22 15:00:46 +09:00
Bill Currie
6a49861b49
Fix the bogus source file for "redefined" functions.
2011-03-22 13:45:44 +09:00
Bill Currie
7dbd5f656c
Fix traditional vector component access.
2011-03-22 13:05:42 +09:00
Bill Currie
f1d9570dc8
Fix constant value type handling.
...
Rename immediate.[ch] to value.[ch] and clean up the mess.
Add convert_value() to convert the type of a value (only scalar types).
2011-03-22 12:24:39 +09:00
Bill Currie
1219df0872
Fix field immediates.
...
Field immediates need to be treated the same way as pointer immediates when
merging values.
2011-03-21 18:11:46 +09:00
Bill Currie
46093c0937
Use the correct meta type for spacial types.
...
Although vector and quaternion types have symbol tables, they are not
really structs, so set the meta type to "none", allowing the types to be
encoded correctly.
2011-03-21 17:26:49 +09:00
Bill Currie
cefe7e2e94
Use the correct source of defs for field defs.
2011-03-21 17:07:40 +09:00
Bill Currie
0c0f4360da
Make field defs "nosave".
...
The engine treats fielddefs with DEF_SAVEGLOBAL set as bogus.
2011-03-21 17:06:45 +09:00
Bill Currie
f5ce9e2004
Fix a merge induced error in overloaded functions.
2011-03-20 19:04:18 +09:00
Bill Currie
1ada2a96cf
Merge branch 'master' into qfcc-codegen
...
Conflicts:
tools/qfcc/source/expr.c
tools/qfcc/source/function.c
tools/qwaq/test.r
2011-03-20 15:58:31 +09:00
Bill Currie
a919e5f619
Make class_check_ivars() use class_add_ivars() to add the ivars.
...
This avoids implementation ivar blocks trashing the ivar offsets in
derived classes.
2011-03-20 13:35:59 +09:00
Bill Currie
8c8a6a4d63
The function return type is the address of the type descriptor...
2011-03-17 20:31:20 +09:00
Bill Currie
01144d23cf
Add a new gcc warning option and fix the two bugs it found.
2011-03-17 19:58:56 +09:00
Bill Currie
5aa0b34570
Add the cast statement to the statement block.
...
*sob*
2011-03-10 20:43:53 +09:00
Bill Currie
f663f587fe
Fix the missing local defs for builtin functions.
2011-03-10 20:16:35 +09:00
Bill Currie
899af3119b
Use the correct type when generating a move expression.
2011-03-10 19:30:21 +09:00
Bill Currie
2129eaaf20
Dereference moves need movepi rather than movei.
2011-03-10 19:29:23 +09:00
Bill Currie
8d69c5c898
More tests
2011-03-09 20:34:23 +09:00
Bill Currie
cbbbf87e20
Resurrect the stats output.
2011-03-09 15:51:17 +09:00
Bill Currie
8368f57fbf
Close a potential buffer overflow.
2011-03-09 11:09:46 +09:00
Bill Currie
4d90eba2ad
Remove some unused globals.
2011-03-09 11:08:30 +09:00
Bill Currie
2464a89d37
Preserve relocs across def churning.
...
Freeing then re-allocating a def to change its storage from external is
really not the right way to do it, but for now this fixes the loss of the
relocs. With this, the menus seem to work :)
2011-03-09 10:52:29 +09:00
Bill Currie
39278ba8cc
Explicitly select between direct and indirect moves.
2011-03-09 10:30:57 +09:00
Bill Currie
b95cdc33d9
Set instace_size to the correct size.
2011-03-08 22:45:34 +09:00
Bill Currie
55eed1ae07
Make module dumping a little more informative.
2011-03-08 22:43:53 +09:00
Bill Currie
7c770b75c5
Do not creat field defs for local storage.
...
This prevents field params and local vars from messing up the real field
defs.
2011-03-08 19:56:02 +09:00
Bill Currie
f66e20db17
Set the dereferenced type in the field value.
2011-03-08 19:29:36 +09:00
Bill Currie
7198be5726
Treat entities a bit like structures in field_expr ().
...
Look in the entity field symbol table for the field before looking in the
normal symbol table. This allows entity fields to be accessed even when
the current scope has symbol of the same name. However, checking the
normal symbol table where there is no such field allows for field
variables when I get around to implementing them.
2011-03-08 19:28:11 +09:00
Bill Currie
505bde308e
Fix the handling of @system defs.
...
When treating a def as external, actually say it is external.
2011-03-07 20:53:27 +09:00
Bill Currie
8dbf8a97ea
Be more informative with ext/def internal errors.
2011-03-07 20:52:31 +09:00
Bill Currie
6312ccba81
Fix storage class blocks.
...
@extern { defs }; etc
2011-03-07 20:51:51 +09:00
Bill Currie
4db8ebb6af
Support qcc style local function variables.
2011-03-07 20:04:05 +09:00
Bill Currie
853cc53d0f
FIx the handling of storage class.
2011-03-07 17:49:01 +09:00
Bill Currie
7649549de6
Handle external field declarations.
2011-03-07 17:23:52 +09:00
Bill Currie
49e446b637
Make field defs global.
...
It turns out that field defs need to be global after all, so use separate
field def tables in the linker.
2011-03-07 14:45:50 +09:00
Bill Currie
041c5d53b8
Check for the vector being a constant before trying to get its value.
2011-03-07 14:04:36 +09:00
Bill Currie
c069bafad8
Support casting from enum to float.
2011-03-07 14:04:05 +09:00
Bill Currie
5a78758781
Support return in void functions in v6 code.
2011-03-07 13:52:28 +09:00
Bill Currie
1246fd9e30
Use the correct size when growing a data space.
2011-03-07 13:36:00 +09:00
Bill Currie
02a70ebe1c
Remove the auxfunction manipulation from the compiler proper.
...
It was broken code in the first place (realloc and pointers), and is
redundant with the new linking process.
2011-03-07 13:33:02 +09:00
Bill Currie
16103f9018
Fix param mangling for qc style functions.
2011-03-07 10:43:38 +09:00
Bill Currie
29cac0fe3a
Optionally create *_[xyz] symbols for accessing vector components.
...
"vector-components" in code options controls this feature. The default is
off for advanced code and on for traditional code. Disabling
vector-components prevents the comonent names polluting the namespace and
reduces the number of globals needed for vector fields if the components
of that field are never used.
2011-03-07 10:21:40 +09:00
Bill Currie
0b3d0011c5
Implement vector and quaternion component access.
2011-03-07 10:02:20 +09:00
Bill Currie
f0e47f2334
Clean up some code duplication.
2011-03-07 10:01:21 +09:00
Bill Currie
a6f222106e
Fix taking the address of normal variables.
...
Treat them the same as structure variables.
2011-03-07 09:58:51 +09:00
Bill Currie
3c1784d46c
Fold constants on both sides of = to ensure correct expression types.
2011-03-07 08:33:30 +09:00
Bill Currie
66447df6b3
Undo the offset relocation of local defs.
...
The debug info expects local defs to be 0 based, so once relocations in
the progs data have been completed, undo the local def offset relocation
so that the correct offsets will be written to the debug info.
2011-03-06 21:05:25 +09:00
Bill Currie
b2f0c9a127
Dump the local defs for functions when debug info is available.
2011-03-06 21:03:12 +09:00
Bill Currie
b49d90e769
Do not lose the block expression when taking its address.
2011-03-06 16:32:51 +09:00
Bill Currie
c78d15b331
Support taking the address of block expressions that have a result.
2011-03-06 16:05:38 +09:00
Bill Currie
993d05b3d3
Support taking the address of alias expressions.
...
Taking the address of an alias expression undoes the alias but uses the
aliased type.
2011-03-06 15:58:49 +09:00
Bill Currie
b74c644a10
Perform offset field relocations.
2011-03-06 15:41:38 +09:00
Bill Currie
8712d30d1a
Make entity field defs static.
...
Entity field defs need to be static in order to avoid clashing with their
field variables.
2011-03-06 15:41:15 +09:00
Bill Currie
c4e9a45d91
Do not lose the entity field defs.
2011-03-06 15:40:07 +09:00
Bill Currie
b7aa2f6786
Support access to struct fields in a structure in an entity.
2011-03-06 15:39:27 +09:00
Bill Currie
fe3d228658
Maintain a symbol table for entity fields.
2011-03-06 15:38:19 +09:00
Bill Currie
c29e0250e4
Make def_field_Ofs reloc dumps more informative.
2011-03-06 15:34:53 +09:00
Bill Currie
02766f0795
Do not try to dump def values from spaces with no data.
2011-03-06 15:33:53 +09:00
Bill Currie
1eb759bb8a
Update reloc_names.
...
I really need to get reloc_names unduplicated.
2011-03-06 15:33:10 +09:00
Bill Currie
d1187f0857
Set the edict area size when dumping qfo files.
2011-03-06 13:41:00 +09:00
Bill Currie
7bfaf107ce
Set the output file name as early as possible.
2011-03-06 13:40:24 +09:00
Bill Currie
417d1b4442
Fix structure copy into and out of entities.
2011-03-06 13:19:20 +09:00
Bill Currie
dc7a78b2ff
Fix case label type conversions.
...
The previous method made too many assumptions.
2011-03-06 11:41:01 +09:00
Bill Currie
fe4df03896
Add is_float ().
...
For now, it checks just floats, but I might one day add doubles.
2011-03-06 11:35:15 +09:00
Bill Currie
85bffbcad0
Add is_integral() to check for integral types (integer, short, enum).
2011-03-06 11:25:12 +09:00
Bill Currie
17a9dff769
Avoid freeing an operand twice.
...
Due to the way operands are used, they can be freed twice in dead-statement
removal. Detect the double-free and ignore it.
2011-03-06 11:19:09 +09:00