Commit Graph

1784 Commits

Author SHA1 Message Date
Bill Currie 44fcd76475 Add some missing command line option docs. 2012-05-03 00:03:13 +09:00
Bill Currie 15de69d868 Use dstring for progdefs.h writing.
And finally get qfcc into the thing :P
2012-05-02 23:39:49 +09:00
Bill Currie 04b9b3a11d Fix progdefs.h writing. 2012-05-02 22:44:45 +09:00
Bill Currie ce278b2fbf Ensure .zero does not get a vector field for v6 progs.
v6 progs expects .zero to be only 1 word. The code actually tried to keep
vector out of .zero, but it seems I'd rearranged the structure defintion
without updating the code that kills the vector field. Problem spotted by
divVerent.
2012-05-02 22:29:17 +09:00
Bill Currie 4fe7efbed8 Add a test for end of function conditional return.
divVerent was telling Spike about such a bug in fteqcc and I though I'd
better get in an explicit test for qfcc.
2012-04-30 20:27:24 +09:00
Bill Currie e06ee34287 Allow quat * vec in ruamoko. 2012-04-26 12:00:27 +09:00
Bill Currie bc1b483525 Nuke the rcsid stuff.
It's pretty useless in git.
2012-04-22 10:56:32 +09:00
Bill Currie eefa89e72e Remove the AM_CONDITIONALs from tools.
Now that the tools directories aren't entered when those tools aren't being
built, there's no reason to use AM_CONDITIONAL in there.
2012-02-10 02:50:42 +09:00
Bill Currie 9fbff2f4d5 Do an audit of the Makefile.am files.
o All instances of LIBADD/LDADD have a corresponding DEPENDENCIES
    specificatiion.
  o libraries now use a lib_ldflags macro to keep things consistent
  o duplication of source/lib names has been minimized (particularly in
    the libraries; more work needs to be done for the executables)
  o automake spec blocks have been organized (again, more work needs to be
    done for the executables)
2012-02-07 16:04:19 +09:00
Bill Currie c8163fc0de Add an option to prevent the use of default paths.
Despair has things locked down such that running qfcc during a build fails
due to lack of read access to /usr/local/lib. This is actually a good
thing as accidentally hitting old includes/libs (when a file gets deleted
in the tree) hides bugs. Thus, --no-default-paths to turn off default
search paths.
2012-01-04 13:53:04 +09:00
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
Bill Currie 28f4de94d2 Fix switch statements so the work in the new scheme.
Convert case labels to be the same type as the switch expression.
Use alias expressions for the various test expressions.
2011-03-06 00:29:29 +09:00
Bill Currie 8cfa80b5d4 Implement think expressions. 2011-03-05 18:01:37 +09:00
Bill Currie 7209c61912 Fix initializing local float variables with an integer constant.
Run the assignment expression through fold_constants to handle any
necessary conversions and error checking.
2011-03-05 17:23:58 +09:00
Bill Currie a3c1f339fc Gracefully handle undefined symbols in entity field expressions. 2011-03-05 17:22:04 +09:00
Bill Currie fbea276ede Yet more tests. 2011-03-05 17:21:19 +09:00
Bill Currie 7314b944d5 Bring back the offset alias support.
Accidently nuked it when fixing .return etc.
2011-03-05 16:31:32 +09:00
Bill Currie e7e8220246 Dump code addresses as hex, too. 2011-03-05 16:25:56 +09:00
Bill Currie 2f74e6e4bf Nuke the old progs global.
It is no longer needed thanks to the new qfo conversion functions.
2011-03-05 16:24:53 +09:00
Bill Currie fcb567fc98 Use the correct function number when updating the function def.
Functions are 1 based in progs bug 0 based in qfo files.
2011-03-05 16:00:39 +09:00
Bill Currie 535dfad305 Emit defs for far data.
They will break when the offsets exceed 64k, but they are needed for
debugging.
2011-03-05 15:59:14 +09:00
Bill Currie 97b1ceceb0 Fix line number info.
line number info is now 1 based rather than 0 based (to better detect when
a function does not have line number info).
2011-03-05 15:40:08 +09:00
Bill Currie 1dea86a3e4 Update debug info loading when dumping qfo files. 2011-03-05 14:53:41 +09:00
Bill Currie cfefd79e07 Fix the source of bogus string relocs.
Nested aggregate initializers were corrupting themselves.
2011-03-05 09:21:12 +09:00
Bill Currie 7c95913c61 Avoid segfaulting with bad string relocs. 2011-03-05 09:07:16 +09:00
Bill Currie 8eb5fd653a Perform the relocations!!!
line numbers seem to be broken, but the code itself looks good.
2011-03-05 08:41:14 +09:00
Bill Currie fe7be543f8 Correctly update the offset of code relocs. 2011-03-05 08:39:47 +09:00
Bill Currie 7fd839a5ed Handle chains of alias defs so relocs will be emitted. 2011-03-05 08:39:16 +09:00
Bill Currie bbedbf5c9c Add the .return etc symbols to the symbol table.
This puts their defs into the object file.
2011-03-05 08:37:51 +09:00
Bill Currie c3f1c186f8 Resolve types of .return etc. 2011-03-05 08:36:55 +09:00
Bill Currie af7bc81e16 Chain the types for the linker. 2011-03-05 08:35:56 +09:00
Bill Currie 0bd0f783b2 Update def offsets with their final locations. 2011-03-04 23:37:46 +09:00
Bill Currie 6d02555ca9 Reorganize the offset calculations.
keep the offset calculations separate from the data transfers for better
clarity in what is happening.
2011-03-04 23:31:09 +09:00
Bill Currie e62163e569 Nuke any invalidated relocs. 2011-03-04 21:46:19 +09:00
Bill Currie 2565e0db32 Update reloc targets when linking. 2011-03-04 21:29:47 +09:00
Bill Currie bc78b84869 Set the target of string relocs to the string index. 2011-03-04 21:29:10 +09:00
Bill Currie 7fb22bd1e4 Make D_STRING() more useful and add D_GETSTR() 2011-03-04 21:28:12 +09:00
Bill Currie e04f6266b1 Nuke def_list from defref_t.
It didn't work :/.
2011-03-04 20:40:01 +09:00
Bill Currie 5a552d8841 Add the null function. 2011-03-04 20:29:40 +09:00
Bill Currie 368a3826be Redo the offset and size calculations for qfo_to_progs(). 2011-03-04 20:14:02 +09:00
Bill Currie cd12a78f93 Replace some accidentally deleted code.
Forgot to commit it the first time round, then rebase messed me up and I
didn't notice until after pushing. *sigh*
2011-03-04 19:02:47 +09:00
Bill Currie 72fae608e5 Write the function start address to the progs file.
Oops:P
2011-03-04 18:46:28 +09:00
Bill Currie 2211a807d4 Do not relocate builtin functions. 2011-03-04 18:46:25 +09:00
Bill Currie d6d8b5b49d Generate the debug symbol file. 2011-03-04 18:46:05 +09:00
Bill Currie 9a96febdf5 Fix the hordes of bogus defs.
They were caused by unused external defs, so not processing unused externs
in the first place is the simplest solution.
2011-03-04 14:51:09 +09:00
Bill Currie 7b7f4c70e0 Correct non-external def processing. 2011-03-04 14:33:03 +09:00
Bill Currie c5dac6d1d1 Transfer the type encoding.
oops
2011-03-04 14:29:22 +09:00
Bill Currie d0b4546383 qfprogs isn't yet fully functional... 2011-03-04 13:54:29 +09:00
Bill Currie 2992d66f87 Simplify the tag used for anonymous structs etc.
Hopefully two files with the same file name won't have anonymous stucts on
the same line.
2011-03-04 13:52:32 +09:00
Bill Currie e525727a24 Add a null type descriptor to the linker output. 2011-03-04 11:38:33 +09:00
Bill Currie 3a828ca5c2 Ensure work spaces are always connected to their data. 2011-03-04 11:18:56 +09:00