Bill Currie
694b268f53
Correct the type of id.
...
It should be struct obj_object * rather than Object *.
2012-11-11 17:22:57 +09:00
Bill Currie
35a88d873c
Rework the builtin class creation once again.
...
Now the classes are built "properly" (using the same tools as the parser
itself), and the structs (obj_object, obj_class and obj_protocol) are built
separately, but using the class ivars.
2012-11-11 16:23:04 +09:00
Bill Currie
b36bd3a988
Remove the list offsets from the class ivars.
...
Even just before, type_obj_object, type_obj_class and type_obj_protocol
were a bit bogus (still are), but now the arrays used to list their ivars
are correct. I plan to create the above mentioned types using
class_to_struct to do it properly.
2012-11-11 09:52:55 +09:00
Bill Currie
0cf16ac558
Make _OBJ_CLASS_foo the correct type.
...
It needs to be type_obj_class, but I had gotten confused earlier when
rearranging the type names as I was having trouble with "not a class"
errors.
2012-11-10 13:45:38 +09:00
Bill Currie
06fd912a09
Make super_class for the internal Protocol and Class objects.
...
They're based on Object, and that needs to be represented properly.
2012-11-10 13:01:56 +09:00
Bill Currie
86091856be
Revamp the static class creation.
...
Type names are cleaned up, as is the creation. Also, the class pointer in
the type encoding now gets emitted. However, Still need to actually create
_OBJ_CLASS_Class and fix the type encoding reloc handling in the linker.
2012-11-10 12:56:19 +09:00
Bill Currie
d33d062bd1
Rearrange class_message_response.
...
Even if an object doesn't seem to respond to a message, return the message
so unrelated warnings or errors don't occur.
2012-11-09 19:18:09 +09:00
Bill Currie
fd8c639773
Initialize current_symtab early, with pr.symtab.
...
This (with the previous commit) fixes the problems with the tags for
builtin structs.
2012-11-09 14:37:28 +09:00
Bill Currie
9cb0ca6fed
Catch symtab operations with an invalid symtab.
...
Just via a simple segfault, but it's better than silently missing incorrect
usage.
2012-11-09 14:36:19 +09:00
Bill Currie
49cc4fed0c
Give the builtin structures proper tags.
...
With the previous commit, the structures were being created before a valid
source file name was available and thus qfcc would segfault when trying to
generate a tag. Now, the tags look better anyway :).
2012-11-09 14:00:10 +09:00
Bill Currie
9fd8741b4f
Move the state clearing into InitData.
...
Now, for each compilation, or before linking, only InitData needs to be
called. Fixes the double chaining internal error when compiling and linking
in the same command.
2012-11-09 13:56:45 +09:00
Bill Currie
f307c7bebc
Rework the unary_expr grammar to allow ++*foo.
...
This required throwing out the primary rules that snax did up to help me
with conflicts many years ago, but they were now getting in the way. Now
the productions from primary are merged in with unary_expr.
2012-11-09 12:32:38 +09:00
Bill Currie
6ff2644ab5
Fix simple pointer dereferences.
...
It turns out no code was being generated for x = *y. Ouch. I suspect I need
to take a better look at expr_deref at some time in the not too distant
future.
Conflicts:
tools/qfcc/source/statements.c
2012-11-09 12:32:35 +09:00
Bill Currie
7a2f7e8982
Add some safety checks to progs global dumping.
...
Getting segfaults in the debug tools is not fun :P
Conflicts:
tools/qfcc/source/dump_globals.c
2012-11-09 12:30:14 +09:00
Bill Currie
cc24e2e67e
Initialize global string vars correctly.
...
Ouch, I'd fixed that for arrays, but not normal vars.
2012-11-09 12:23:04 +09:00
Bill Currie
9095e1eabc
Rework build_switch to use initialize_def.
...
This required support for label reference expressions, whose purpose is to
represent the address of a label.
2012-11-09 12:22:34 +09:00
Bill Currie
48fe9f729d
Add partial support for pointer arithmetic.
...
Only pointer +/- integral is supported. pointer - pointer will come later.
2012-11-09 12:21:45 +09:00
Bill Currie
afbab60c25
Create linker_find_def.
...
It turns out I didn't need it, but it could be useful in the future, so
I'll leave it in.
2012-11-09 11:57:06 +09:00
Bill Currie
4ef4711c3b
Make the type encodings findable.
...
The base of the type encodings block is given by the .type_encodings def.
The block begins with a "null" type (4 words of 0), followed by the first
type encoding.
At some stage, I will need to add information for extended def information
(32 bit offset, type encoding, other?), but this is good for initial
testing.
2012-11-09 11:43:19 +09:00
Bill Currie
1d060d1ac1
Quote string values when dumping globals.
...
Much nicer :)
2012-11-08 21:13:24 +09:00
Bill Currie
eb86a66ce5
Do some class object type renaming.
...
type_object -> type_obj_object
type_Class -> type_obj_class
type_ClassPtr -> type_Class
In the process, one more FIXME is gone :)
2012-11-08 20:58:48 +09:00
Bill Currie
377f8f9d56
Use an explicit flag for class initialization.
...
Much cleaner than messing with class_Class, which is about to go away.
2012-11-08 17:14:33 +09:00
Bill Currie
7e293a38e8
Check for double-chaining of types.
...
Chaining a type twice will form a loop in the type list, causing find_type
to go into an infinite loop.
2012-11-08 17:14:33 +09:00
Bill Currie
950a3aa83d
Avoid infinite recursion when encoding struct types.
...
Structures (especially hard-coded ones) can be really nasty as they can
refer to themselves. Avoid the recursion by setting the type_def field of
the type before doing the recursive encodings in the structure encoder.
2012-11-08 17:06:38 +09:00
Bill Currie
7a25283beb
Clear out the type encoding def from all types.
...
The encodings of static types were getting corrupted because their defs
were not necessarily in the same places between compilations when compiling
multiple files.
2012-11-08 17:06:38 +09:00
Bill Currie
a3a22f2a1b
Add the ability to dump qfo type encoding.
2012-11-08 17:06:38 +09:00
Bill Currie
09d1cd61f3
Don't convert a qfo to progs unnecessarily.
...
This avoids segfaults on reloctions for external defs.
2012-11-08 17:06:29 +09:00
Bill Currie
61ef901254
Tweak some FIXMEs.
2012-11-08 17:03:02 +09:00
Bill Currie
ed4018fd8d
Clear out the function overloading tables between compiles.
...
Fixes some issues with multiple compiles (especially mixed languages!).
2012-11-01 20:53:33 +09:00
Bill Currie
ea34a5b753
Fix some nasty memory errors.
...
Three cheers for valgrind!!!
2012-11-01 20:53:28 +09:00
Bill Currie
5c79953a7e
Put quotes around strings for statement operands.
...
This makes reading output a bit easier (especially if the string is empty
or just whitespace).
2012-10-30 12:31:28 +09:00
Bill Currie
f8bdd909cc
Separate out C and html quoting into separate functions.
...
Dot sometimes wants normal C quotes, othertimes html. Quite annoying,
really, but this is cleaner anyway.
2012-10-30 12:31:22 +09:00
Bill Currie
f680521e0f
Escape unprintable chars.
2012-10-27 11:45:51 +09:00
Bill Currie
ec42bde527
Make hash tables more const correct.
...
And clean up the resulting mess :/
2012-10-27 11:44:31 +09:00
Bill Currie
034139b806
Move some code around so it's more accessible.
2012-10-27 11:43:29 +09:00
Bill Currie
7519ec7bbd
Fix the bogus missing return warning.
...
Pascal's return mechanism is such that void return is always used.
2012-10-26 20:11:38 +09:00
Bill Currie
3f351a5c88
Fix a printf format goof.
...
Forgot to compile test :/
2012-10-26 19:38:59 +09:00
Bill Currie
52b9721027
Add the COMMA token to the pascal parser.
...
I guess I forgot I needed to keep token numbers in sync between pascal and
qc/ruamoko.
2012-10-26 19:06:10 +09:00
Bill Currie
72045f1a5b
Delay storage setting for pascal functions.
...
The function def must not be local. This fixes the null function call in
gcd.pas.
2012-10-26 19:03:00 +09:00
Bill Currie
27b83a8d65
Clean up all extra aborts, using internal_error instead.
...
Some internal_error calls have no message, but at least things will be more
consistent.
2012-10-26 19:02:02 +09:00
Bill Currie
5530e84ada
Call find_type for pascal functions/procedures.
...
The result of parse_params needs to be passed through find_type before
actually being used. I guess I'd missed this back when I got things working
for qc.
2012-10-26 16:20:57 +09:00
Bill Currie
f14d8060e0
Merge qfpc into qfcc.
...
Since gnu bison and flex are required anyway, no harm in using their api
prefix options. Now, qfcc can compile both QC/Ruamoko and Pascal files
(Pascal is (currently?) NOT supported in progs.src mode), selecting the
language based on the extension: .r, .qc and .c select QC/Ruamoko, .pas and
.p select Pascal, while anything else is treated as an object file (as
before).
2012-10-26 16:01:41 +09:00
Bill Currie
358ea4ef9a
Fall back to execve/wait when execvp and waitpid are unavailable.
2012-08-19 13:18:38 +09:00
Bill Currie
b6125276e4
Fix the mis-handling of the progs.dat line in preprogs.src
...
Gah, must have lost a line at some stage. Also, handle line number
directives.
2012-07-14 19:01:47 +09:00
Bill Currie
7444371162
Disable bolding for special chars.
...
If an escape sequence is used to access a char, the the programmer probably
wanted that char, regardless of the current bolding mode.
2012-07-14 17:47:34 +09:00
Bill Currie
3b8141691e
Fix a bunch of continue vs break issues.
2012-07-14 17:26:13 +09:00
Bill Currie
1364bff91b
Add an extended mode to qfcc.
...
Extended mode allows extra keywords (switch, for, etc) that are compatible
with v6 progs.
2012-07-14 17:16:33 +09:00
Bill Currie
4055d9a435
Add support for \s escapes to qfcc.
...
I guess \s is an fteqcc extention for toggling bold characters. At the
request of freewill.
2012-07-14 11:47:26 +09:00
Bill Currie
dbc203b625
And a few more bits of whitespace.
2012-05-23 08:21:27 +09:00
Bill Currie
23a38738fc
Massive whitespace cleanup.
...
Lots of trailing whitespace and otherwise blank lines.
2012-05-22 08:23:22 +09:00
Bill Currie
0036a5e113
Ensure edict_size is never 0.
...
Avoids division by / in NUM_FOR_EDICT
2012-05-06 21:35:42 +09:00
Bill Currie
1dd5cccda2
Correct some more error messages.
2012-05-06 18:52:05 +09:00
Bill Currie
a0788c6cdf
Implement constant folding for unary operators.
...
Including conversions between float and int :)
2012-05-06 18:49:07 +09:00
Bill Currie
f781e9078c
Correct some typos in error messages.
2012-05-06 18:43:18 +09:00
Bill Currie
954e03c3f7
Report the correct function name for the largest locals.
...
I must have been tired when I adapted that code.
* taniwha dons brown paper bag
2012-05-06 13:02:11 +09:00
Bill Currie
55ecf94f2d
Don't draw arrows leaving return statements.
...
Return statements never flow to the next block (or any other block, for
that matter), so drawing arrows leaving them not only messes up dot's
graphs, but is quite missleading.
2012-05-05 18:04:10 +09:00
Bill Currie
56410ddc58
Prevent merged if/goto losing its way.
...
When mering if/goto (ie, if skipping a goto), the rest of the dead code
remover is used to delete the goto. That part of the code unuses the goto's
label. The if was getting the goto's label without the lable's used count
being incremented (the usaged temporarily increases by one). I have no idea
why the problem showed up randomly, but this seems to fix it (it fixes /a/
bug, anyway).
2012-05-04 22:35:20 +09:00
Bill Currie
953e789db2
Handle movement of the final block.
...
Moving a final block caused segfaults and weird flow graph corruptions.
2012-05-04 19:48:32 +09:00
Bill Currie
e8c17c68e6
Fix a segfault when the switch expression errors.
2012-05-04 18:13:11 +09:00
Bill Currie
5df25133b3
Implement code movement for unconditional jumps.
...
That is, when the destination of the jump is reachable via only the jump.
2012-05-04 18:00:05 +09:00
Bill Currie
33bfac0508
Process all basic blocks for jump threading.
...
I'd copied the for loop from the dead block removal code, but jump
threading doesn't need to look at the following block...
2012-05-04 14:10:30 +09:00
Bill Currie
f169a7732d
Factor out label unuse.
...
I expect to need this more often in the future.
2012-05-04 14:01:39 +09:00
Bill Currie
75aa28cfac
Mark all subsequent blocks as reachable after if/goto merge.
...
If an if/goto merge is done in the first dead block pass, no blocks after
the merge have their rechable flag set because they've never been tested.
2012-05-04 10:58:18 +09:00
Bill Currie
8ddd58f951
Fix the dropping of the block after the merged if/goto.
...
The naive implementation of the if/goto merging was letting the old target
of the if get dropped because the block would lose its label and thus be
judged unreachable because the preceeding goto block was still in the list.
Instead, when the if/goto are "merged", mark the goto block as unreachable,
the following block as reachable, and break out of the analysis loop to
force the removal of the goto block. Since the dead block removal function
loops until no action is taken, all other dead blocks will be removed.
2012-05-04 10:07:55 +09:00
Bill Currie
e866619de6
Output basic block flow diagrams to files.
...
The output can be controlled via --block-dot (not yet documented). The
files a named <sourcefile>.<function>.<stage>.dot. Currently, stage will be
one of "initial" (after expression to statement conversion), "thread"
(after jump threading), "dead" (after dead block removal), "final" (final
state before actual code emission).
2012-05-04 09:45:51 +09:00
Bill Currie
3da44ace52
Merge if and goto blocks when if only skips over the goto.
2012-05-03 22:21:32 +09:00
Bill Currie
6afdfb5fac
Unuse label expressions that are no longer necessary.
2012-05-03 22:20:00 +09:00
Bill Currie
402a578bf8
Add some more helper functions.
...
Things were getting messy with the strcmps.
2012-05-03 22:17:23 +09:00
Bill Currie
88bed3644e
Rename some helper functions.
2012-05-03 22:11:52 +09:00
Bill Currie
159f1bafea
Add a little more info to statement flow diagrams.
...
The relative block number and the label user count are printed now.
2012-05-03 22:09:49 +09:00
Bill Currie
6900907129
Remove dead labels when jump threading.
...
This lets the dead block removal do a better job.
2012-05-03 19:32:44 +09:00
Bill Currie
ab73a267cd
Do not unconditionally remove labels from blocks.
...
Labels can be shared between multiple flow-control instructions, so use the
label's used counter to determine when to remove the label. This was
causing problems with the jump threading.
2012-05-03 19:22:57 +09:00
Bill Currie
c79620f04c
Make statement blocks more identifiable.
2012-05-03 19:10:44 +09:00
Bill Currie
43b5edf46b
Implement jump threading.
...
First real optimization :)
2012-05-03 17:42:58 +09:00
Bill Currie
78a9ba2557
Make expression alias chains not-a-bug.
...
The common cause seems to be casting a cast (very common, and I'm not sure
just realiasing the expression would be right). It does't cause any harm
(particularly, it doesn't trigger alias def chains), so I won't worry about
it.
2012-05-03 13:57:31 +09:00
Bill Currie
006882407d
Fix the source of alias def chains.
...
The actual bug might still be elsewhere, but at least now I know the alias
chains were coming from accessing .return and .param_N, which are unions
(not directly usable by the progs engine). Emitting a reference to a union
(or struct) would create an alias def, but an alias expression was created
in the expression tree to simplify return/param access. The double layer
(sometimes 3 or 4) alias isn't really neaded, so rather than layering the
aliases, just re-alias the alaised def.
2012-05-03 13:28:16 +09:00
Bill Currie
ec98e3e206
Mark alias def chains as a bug.
2012-05-03 13:27:30 +09:00
Bill Currie
5f676c367f
Add a non-error diagnostic that can't be silenced.
...
It is inteded for flagging buggy conditions in the compiler, particularly
after having fixed the original bug (in case something comes back from the
dead).
2012-05-03 13:24:24 +09:00
Bill Currie
3306039da2
Print the destination type for alias expression bubbles.
2012-05-03 11:55:19 +09:00
Bill Currie
e267e0a664
Allow control of progdefs.h CRC writing.
...
CRC writing defaults to off for non-v6 progs, but on for v6 progs. The
--progdefs option forces CRC writing.
2012-05-03 00:22:24 +09:00
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
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
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
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
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
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
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
Bill Currie
4192ef835c
Delay initialization of obj_module_t as long as possible.
...
This keeps the type descriptor out of progs that never use any
Objective-QC features.
2011-03-04 08:25:50 +09:00
Bill Currie
ee9045c377
Emit code for jump tables.
...
With this, the entirety of the ruamoko tree builds (though the progs will
be broken in various ways: mostly unrelocated references).
2011-03-03 19:09:00 +09:00
Bill Currie
a281033920
Alais the jump table's array to an integer.
...
As per the previous commit, I'm not sure this is the right thing to do, but
it works for now.
2011-03-03 19:07:37 +09:00
Bill Currie
4324486ae6
Give - unary expressions special treatment.
...
The progs engine has no neg instruction, so need to implement -val as
nil - val
2011-03-03 18:13:30 +09:00
Bill Currie
f9e177efd6
Obtain the label to be removed from the correct place.
...
This fixes the undetected dead block after "if return else return".
2011-03-03 17:50:46 +09:00
Bill Currie
ed901bd48f
Drop unused labels rather than adding them to the statement block.
...
However, even unused labels create a new statement block if necessary.
2011-03-03 17:35:06 +09:00
Bill Currie
b5e7e666e9
Fix some missed branch/goto expression changes.
2011-03-03 17:33:53 +09:00
Bill Currie
c5ecc170b6
Give labels a usage count to detect unused labels.
2011-03-03 15:28:49 +09:00
Bill Currie
90640614ef
Compare symbols using the right method.
...
That fixme was right :)
2011-03-03 15:02:26 +09:00
Bill Currie
610d775bd1
Treat void values as the largest type.
...
This fixes passing nil through a structure return value.
2011-03-03 14:56:21 +09:00
Bill Currie
bad5fddec4
Fix overloaded function resolution.
...
Update the expression symbol pointer, not just the symbol name.
2011-03-03 14:44:48 +09:00
Bill Currie
fff4fc693e
Fix value hashing and comparison in switch expressions.
2011-03-03 14:02:18 +09:00
Bill Currie
74e6b13aee
Use alias expressions where possible when testing an expression.
2011-03-03 13:47:28 +09:00
Bill Currie
d937172243
Create and use alias operands for alias expressions.
...
This avoids the alias expression modifying the operand used in other
expressions.
2011-03-03 13:46:07 +09:00
Bill Currie
022fde666f
Implement unary expression statements.
2011-03-03 13:10:07 +09:00
Bill Currie
45de7327dc
Implement alias expressions (finally).
...
Alias expressions are like cast expressions, but never do any conversions.
2011-03-03 11:06:10 +09:00
Bill Currie
848994323e
Support enums in expressions that support scalar types.
2011-03-03 10:36:43 +09:00
Bill Currie
c12211d8bb
Support enum results for boolean expressions.
...
eg enum BOOL x = a && b;
2011-03-02 22:46:55 +09:00
Bill Currie
c06dd776d2
Fix expression initializers for arrays and structs.
2011-03-02 22:28:17 +09:00
Bill Currie
76f912c7a1
Fix function typedefs.
2011-03-02 22:23:24 +09:00
Bill Currie
aa4ed00090
Fix the message type used to check arguments.
2011-03-02 22:13:16 +09:00
Bill Currie
4a99f8dcbd
Write the linker output to progs.dat.
...
There is much breakage, but qfcc now produces a progs.dat from either
progs.src or object files. Better yet, the progs.src result is passed
through the linker, removing much duplicate code.
2011-03-02 20:51:00 +09:00
Bill Currie
29985efcef
Expose some linker functions to the rest of the compiler.
...
They proved to be useful for cleaning up the final compilation stages.
2011-03-02 20:48:55 +09:00
Bill Currie
8cdd28f534
Use qfo_to_progs() for dumping qfo data.
...
Yay, less duplicate code, and better yet, qfo_to_progs gets some much
needed testing :).
2011-03-02 19:08:11 +09:00
Bill Currie
ecb995a8f7
Rewrite qfo_to_progs() to go direct from qfo to progs.dat.
...
Relocs and debug info is currently broken.
2011-03-02 19:06:43 +09:00
Bill Currie
824d8bfc3c
Remove some now unnecessary functions.
2011-03-02 14:21:20 +09:00
Bill Currie
065d3e0dd7
Partial linking for a single qfo file now seems to work.
2011-03-02 14:03:41 +09:00
Bill Currie
bfeece3255
Fix the bogus declarations of obj_msgSend and obj_msgSend_super.
2011-03-02 12:35:10 +09:00
Bill Currie
fda46a4aca
Handle the special defs.
2011-03-02 12:26:53 +09:00
Bill Currie
330e76a9ac
Set the correct storage class for struct and enum specifiers.
2011-03-02 11:29:08 +09:00
Bill Currie
54317965cc
Handle relocs.
...
With this, the building of the work qfo seems to be almost finished, just
the special defs to go. Next step will be to stitch all the parts of the
work qfo into a real qfo.
However, still have to fix the relocs for the type descriptors, but they
are not critical to the linker's functioning.
2011-03-02 11:16:35 +09:00
Bill Currie
8669dc373f
Add some documentation.
2011-03-02 11:13:44 +09:00
Bill Currie
65bd215058
Minor rearrangements.
2011-03-01 15:35:14 +09:00
Bill Currie
2cb1c74718
More progress on the linker.
...
Need to finish up defs and handle relocs, and then take care of special
defs (@self etc), but things are getting very close.
2011-03-01 15:18:47 +09:00
Bill Currie
b584a22d6b
Fix external function declarations.
...
Use spec.storage rather than current_storage.
2011-03-01 11:08:33 +09:00
Bill Currie
cce6838e16
Ensure .ctor is declared static.
2011-03-01 11:08:32 +09:00
Bill Currie
c36919aae7
Fix verbosity and diagnostic messages.
2011-03-01 11:08:32 +09:00
Bill Currie
cfff2b1037
Add defs from near and far data spaces.
2011-03-01 10:52:27 +09:00
Bill Currie
21558864b9
Make defrefs a little more stupid.
...
Stupid code does little well :P
I forgot that spaces get realloced, and I don't remember why I had the def
list pointer separate anyway.
2011-03-01 09:19:04 +09:00
Bill Currie
1416b996d3
Ensure the type space pointer is cleared with each object file.
2011-03-01 09:18:09 +09:00
Bill Currie
30272968c9
Update the def's type pointer.
2011-03-01 09:17:32 +09:00
Bill Currie
1837518d05
Split the space processing into two passes.
...
This allows strings and types to be handled before code and data.
2011-03-01 08:48:58 +09:00
Bill Currie
eb11a19ed4
Split the type processing into two passes.
...
This allows all duplicate types to be "merged" before adding any new
types, thus avoiding any accidental duplication caused by possible
differences in order between defs and the type descriptors.
2011-03-01 08:46:02 +09:00
Bill Currie
05e6f00e72
Initialize the new type def.
...
Oops :P
2011-03-01 08:16:14 +09:00
Bill Currie
3761cddca6
Finally, some real progress on the linker.
...
There is still much to be done, but this seems to be a workable approach.
2011-02-28 23:18:07 +09:00
Bill Currie
bad7078797
Don't set the space defs pointer if there are no defs.
2011-02-28 23:16:59 +09:00
Bill Currie
5d9fbc2d6d
Set the space ids to the destination space.
...
This is mostly redundant, but it allows qfo spaces to get out of order
without breaking everything.
2011-02-28 23:16:19 +09:00
Bill Currie
b544196c21
Change ptrfld to fldptr for consistency with type.h.
2011-02-28 23:12:32 +09:00
Bill Currie
8b661bbb89
Rename qfo_reloc_t's def to target and correct its usage.
2011-02-27 11:37:24 +09:00
Bill Currie
c8f1b5b1f0
Fix the missing type encoding for structures.
...
There should be a better way (probably by doing the encoding as needed
rather than in chain_type), but this seems to work for now.
2011-02-27 00:39:40 +09:00
Bill Currie
438d14d852
More or less fix qfprogs when dumping info from qfo files.
...
Relocations are still broken, but everything seems to be working and
qfprogs now seems to be generally usable.
2011-02-27 00:36:45 +09:00
Bill Currie
4f6d18a328
Encode the basic type for functions, fields and pointers.
...
Very important for distinguishing them from other types.
2011-02-27 00:33:16 +09:00
Bill Currie
9cf63dbbdf
Clean up the create of the obj_module_s structure.
2011-02-26 22:06:22 +09:00
Bill Currie
cbfbc0b01a
Ensure type_ClassPtr is chained before it is used.
2011-02-26 22:05:53 +09:00
Bill Currie
a7ae71efad
Fix some type encoding problems found using qfprogs.
2011-02-25 15:59:23 +09:00
Bill Currie
58ac212b54
Fix qfo function dumping.
2011-02-25 13:37:23 +09:00
Bill Currie
2b3436beed
Fix qfo reloc dumping.
2011-02-25 13:29:09 +09:00
Bill Currie
f43eda63fe
Fix qfo global dumping.
2011-02-25 09:39:07 +09:00
Bill Currie
f362e74f98
Update the header.
2011-02-24 15:24:35 +09:00
Bill Currie
a106c1fb51
Add a field for loose relocation records.
...
Loose relocation records are those that are not bound to a def or a
function.
2011-02-24 15:21:06 +09:00
Bill Currie
8f1e2c143a
Clean up some fixmes.
2011-02-24 14:08:42 +09:00
Bill Currie
c10a551c84
Rename new_defspace() and defspace_new_loc().
2011-02-24 13:07:36 +09:00
Bill Currie
88cd37a3e2
Header update for the renamed files.
2011-02-24 13:00:19 +09:00
Bill Currie
5efeb7ebf8
Rename some files that have been bugging me.
2011-02-24 12:59:18 +09:00
Bill Currie
66b255afbf
First stage of the linker rewrite.
...
Strings, code and data spaces are "merged". Various offsets are updated.
Still to do:
o Merge reloc, def, function and line data.
o Merge type data.
o Update def and function type pointers.
o Resolve external defs and check for duplicate defs.
o Perform relocations.
o anything else I've forgotten :)
2011-02-24 12:18:35 +09:00
Bill Currie
74497f00e1
Read qfo object files :)
2011-02-23 18:10:38 +09:00
Bill Currie
33810e9c91
Write out object files in the new format.
2011-02-23 15:05:33 +09:00
Bill Currie
1f7c39b918
Chain @va_list's type.
...
Oops :P
2011-02-23 14:49:00 +09:00
Bill Currie
a1ea492889
Remove some redundant fields from qfo objects.
2011-02-23 10:40:35 +09:00
Bill Currie
c585a17db9
Give type data a null pointer.
...
Pointers to the void type descriptor looked just like null pointers and
that was terribly confusing. Avoid that confusion by pre-allocating a
small amount of data in order to reserve space for a null descriptor.
2011-02-23 08:08:26 +09:00
Bill Currie
e68e6d0858
Create defs for entity fields in the entity space.
2011-02-22 15:43:15 +09:00
Bill Currie
e1158a83f0
Begin work on rewriting obj_file.c for the new format.
2011-02-22 15:42:49 +09:00
Bill Currie
64cf07351f
Encode types to string and qfo representation on creation.
2011-02-22 13:36:16 +09:00
Bill Currie
b50b392746
Fix field def allocation for function fields.
...
Assignment of nil to a field function is permitted, but trying to use one
as a builtin or as a normal function is treated as an error.
.void (float y) func; OK
.void (float y) bi = #0 ; error
.void (float y) ni = nil; OK
.void (float y) co = { }; error
2011-02-22 12:07:31 +09:00
Bill Currie
7d1f2c4ef3
Fix field def allocation for non-function fields.
2011-02-22 10:43:35 +09:00
Bill Currie
b7c6c4af5d
Better variable naming in init_elements().
2011-02-22 09:22:04 +09:00
Bill Currie
497db3ac81
Fix the return symbol extraction when appending a return statement.
...
The code is still icky, though :P
2011-02-22 09:20:52 +09:00
Bill Currie
4fd6bdae6f
Allow nil to be assigned to field variables.
...
Note, this is the field variable itself, not the field in the entity.
eg:
.integer x = nil;
2011-02-22 09:19:01 +09:00
Bill Currie
87b240f469
Use special treatment for .float ()foo; functions.
...
The parser wants to treat .float () foo; as a function returning a float
field, but qcc treats it as a field holding a function variable.
Fortuantely, field types are always "simple" (ie, at worst, just more
field type wrappers around the non-field type), so all that's needed to
obtain qcc grammar is to reach into the field type layers and do the
function type calculation based on the non-field type found there.
2011-02-22 08:54:01 +09:00
Bill Currie
4c11304c8d
Documentation tweaks.
2011-02-21 08:41:03 +09:00
Bill Currie
bffc1dd239
Clean up objective-qc type encoding.
...
Structures etc now never encode the fields as well (I might revert that
at some time). Type parsing has been removed: it has proven unnecessary
and overly complicated, and the new qfo encoding should be more useful.
2011-02-18 20:51:04 +09:00
Bill Currie
41523852cd
Cleaner def and string emittion for types.
...
Use local defines for emitting defs and strings as everything goes to the
same locations.
2011-02-18 12:44:11 +09:00
Bill Currie
7251bc91fa
Enhanced type encoding.
...
This creates a compact representation of types as seen by qfcc. This is
intended mainly for debuggers.
2011-02-18 09:06:05 +09:00
Bill Currie
0f0ed3dae2
Allow null types in defs again.
...
However, only at the lowest level. This is needed for my type encoding.
2011-02-18 09:04:33 +09:00
Bill Currie
bceb98e5a4
Create structures for new qfo format.
...
This breaks a lot of existing code, so that code has been commented out
for now.
2011-02-17 15:02:09 +09:00
Bill Currie
9c9a71f1af
Allow defs to specify use of offset relocations.
...
Access to struct fields in near data can be done using only one operand,
but offset relocs need to be used. However, as not all defs want offset
relocs, a flag has been added to the def struct.
2011-02-15 22:55:15 +09:00
Bill Currie
d04865884f
Set the method's function pointer.
2011-02-15 22:27:13 +09:00
Bill Currie
3721b2edca
Method lists are made of methods, not integers :P
2011-02-15 22:26:44 +09:00
Bill Currie
c068138d91
More addresses in hex.
2011-02-15 22:26:09 +09:00
Bill Currie
814e36d3c8
Correct an error message and tidy some code.
2011-02-15 22:25:40 +09:00
Bill Currie
4336fc2c73
Move method function defs into the far data space.
...
As they are never referenced directly by instructions, there's no need for
them to be in the near data space, taking precious def locations.
2011-02-15 15:33:18 +09:00
Bill Currie
5252d72856
Correct the type for _OBJ_SELECTOR_TABLE.
2011-02-15 15:33:12 +09:00
Bill Currie
b3da6ef3d4
Allow zero size arrays to match sized arrays of the same type.
...
This allows externally declared arrays to not specify a size.
2011-02-15 12:08:03 +09:00
Bill Currie
b2d4aee61e
Reimplement selector expressions to work with far data.
...
They currently execute a lea instruction every method call, but the
optimizer should take care of that once its written.
2011-02-15 10:48:05 +09:00
Bill Currie
6bd63f811f
Preserve any relocs when converting a def from extern to otherwise.
2011-02-15 10:47:16 +09:00
Bill Currie
4e86b28b59
Use the def type rather than expression type to select the init method.
...
Local defs may be initialized with non-constant expressions, which
includes function calls. Both function calls and aggregate initializers
use block expressions.
2011-02-15 09:38:44 +09:00
Bill Currie
19f6faf0ad
Fix aggregate initializers.
...
Initializing arrays and structs seems to be working.
2011-02-15 09:30:37 +09:00
Bill Currie
d162838299
Resurrect constant_expr().
2011-02-15 09:28:27 +09:00
Bill Currie
bc882ddc3c
Fix the parser side of aggregate initializers.
2011-02-14 23:31:37 +09:00
Bill Currie
09af401f0c
Reset current_func at the end of each function.
2011-02-14 23:10:46 +09:00
Bill Currie
5fa349927f
Preserve the ivars inheritance chain across build_struct().
...
build_struct() unlinks the structure symbol table from its parent, but
that breaks the ivar inheritance chain.
2011-02-14 23:10:46 +09:00
Bill Currie
5707888fcf
Fix some error-recovery segfaults.
2011-02-14 23:10:46 +09:00
Bill Currie
f1fccb19dd
Allow same-type re-declarations of uninitialized variables.
...
This is especially important for declaring variables that were previously
declared external.
2011-02-14 23:10:46 +09:00
Bill Currie
23b01be214
Handle invalid initializers gracefully.
2011-02-14 23:10:46 +09:00
Bill Currie
4c63a0bad6
Generate a warning when creating a var with no type.
...
This makes the internal error in new_def() non-functional, but the warning
will catch the bug and there's no harm in leaving the test in new_def().
2011-02-14 23:10:46 +09:00
Bill Currie
ee866ae3a6
Enable the small struct optimization.
...
For now, anyway. It would probably be much better to handle this sort of
thing in the optimizer stage.
2011-02-14 23:10:45 +09:00
Bill Currie
bcaf3687c5
Fix loading structs into params via an offset pointer.
...
For certain values of "fix" :/. The code is ugly, but it does the right
thing: calculate the effect address and use the resulting pointer in a
move instruction.
2011-02-14 23:10:45 +09:00
Bill Currie
352be1f8bd
Handle null string pointers.
2011-02-14 23:10:45 +09:00
Bill Currie
e10d561459
Treat small structs as integers (disabled).
...
This is more to stash away a potential optimization. I need to fix the
real problem first.
2011-02-14 23:10:45 +09:00
Bill Currie
6b29568fa9
Set the source file and line when copying an expression.
...
This fixes the crazy line numbers in the debug info.
2011-02-14 23:10:45 +09:00
Bill Currie
fc18ebd923
Add the source line number to most node labels.
2011-02-14 23:10:45 +09:00
Bill Currie
3e5989463f
Update the def_tail when removing the last def from the space.
2011-02-14 23:10:45 +09:00
Bill Currie
11485556e5
Quote expression names to avoid problems with null pointers.
2011-02-14 23:10:45 +09:00
Bill Currie
c139099294
Put another bandaid on the type creation system.
...
It seems that building types is very fragile: all too easy to fix things
in one place and break something somewhere else. I guess the type system
will need a comlete rewrite at some stage.
2011-02-14 23:10:45 +09:00
Bill Currie
e0d61705b4
And fix build_struct for built-in struct types.
...
The previous fix broke builtin structs (eg, @param). Calling find_type()
for built-in structs has proven to be a bad idea :)
2011-02-13 21:07:22 +09:00
Bill Currie
a19b7ec8f9
Make struct decls actually work.
...
find_type() does type comparisons based on tag name for struct/union/enum
but when it returns the previous tag (eg, from "struct foo;") the returned
type has a null symtab pointer, so setting the symtab pointer in the type
before calling find_type() only throws away the symtab. Thus, since
find_type() doesn't check the symtab pointer when comparing the types, set
the symtab pointer after calling find_type().
2011-02-13 20:56:12 +09:00
Bill Currie
acced90101
Create the symbol for the struct as early as possible.
2011-02-13 20:55:33 +09:00
Bill Currie
b545f72f93
Report errors for incomplete types and missing fields.
2011-02-13 20:23:08 +09:00
Bill Currie
c336aaeb80
Handle incomplete types gracefully.
2011-02-13 19:26:20 +09:00
Bill Currie
976ff8a6bb
Allow cast expressions to be lvalues.
...
These really need to be alias expressions rather than cast expressions
so the two can be separated as cast expressions should not be lvalues.
2011-02-13 17:54:15 +09:00
Bill Currie
fa742ceed6
Handle @self and @this correctly.
2011-02-13 17:52:19 +09:00
Bill Currie
547f361bd3
Allow (void) qc-style functions.
2011-02-13 17:37:11 +09:00
Bill Currie
d75c35ba30
Allow qc style function params.
...
Due to ambiguities in the grammar, qc-style function params and c-style
function params had to be completely separated. This means that qc-style
functions can not use pointers and must use qc-style function declarations
for parameters, and c-style functions must use c-style param declarations.
While this rule is tedious for converting the Ruamoko library, it does
actually make for a more consistent language.
2011-02-13 17:07:14 +09:00
Bill Currie
8a314e9e87
Class pointers need to be directly addressable.
2011-02-13 16:05:50 +09:00
Bill Currie
0b5565396b
Add a class type to symbols and rework the CLASS_NAME handling.
...
This fixes the problem with [Array alloc] producing a warning about Class
not repsonding to -alloc.
2011-02-13 16:05:09 +09:00
Bill Currie
3f690eacb1
Fix another double insertion of a symbol.
2011-02-13 15:28:49 +09:00
Bill Currie
127a1c8772
Fix the creation of enum values.
2011-02-13 15:19:55 +09:00
Bill Currie
f24de89a2a
Handle type-modified constants.
...
The fix for pointers broke constants (particularly, enums). Oops.
2011-02-13 14:13:32 +09:00
Bill Currie
fa6b8d773c
Correctly emit class and category symtab references.
2011-02-13 13:21:00 +09:00
Bill Currie
c4f364fd37
Emit pointers properly.
...
Rename ReuseConstant to emit_value and use emit_value to emit any non-short
constant. This fixes the null pointer in the call to __obj_exec_class.
2011-02-13 10:09:42 +09:00
Bill Currie
1bcf434b20
Move _OBJ_MODULE to the far data space.
2011-02-12 23:00:04 +09:00
Bill Currie
d42a379924
Dump the contents of a pointer def.
2011-02-12 22:59:29 +09:00
Bill Currie
eede83dea1
Avoid crashing when a null class pointer is found.
2011-02-12 22:58:50 +09:00
Bill Currie
3505de6868
Point the near and far data spaced into the merged data space.
...
This lets the relocations work on the final data without having to adjust
their locations.
2011-02-12 22:35:44 +09:00
Bill Currie
181596f5bf
Make relocation records store the space of the relocation.
...
The space is meaningless for op_* relocations as they are always in the
code space, but def_* relocations need to know which space holds the
location to be adjusted.
2011-02-12 22:34:38 +09:00
Bill Currie
8c01497936
Give __obj_exec_class a sterner beating.
...
When linking a def into a defspace, ensure it can be removed. This fixes
the missing __obj_exec_class def in qwaq.
2011-02-11 22:29:57 +09:00
Bill Currie
75d90d2f00
Propogate the specifiers through external_decl_list.
2011-02-11 22:29:57 +09:00
Bill Currie
0efc759f2d
Catch attempts to create a def with a null type.
2011-02-11 22:29:57 +09:00
Bill Currie
5f3c1872b9
Put class and category reference/name symbols in the symbol table.
...
This fixes the undefined defs in qwaq.
2011-02-11 22:29:57 +09:00
Bill Currie
179c1f7058
Support move statements (structure copy).
2011-02-11 22:29:57 +09:00
Bill Currie
e19f7e3521
Sort out the parameters for QC style functions :)
2011-02-11 22:29:57 +09:00
Bill Currie
370f0b97ed
Produce cleaner output for a = b op c.
2011-02-11 22:29:57 +09:00
Bill Currie
d93d8d7d46
Remove the dirty hack used for accessing params and the return value.
...
Instead of using the equivalent of *(float*)&.return, now use the
equivalent of (float).return. No conversion is done in the "cast".
NOTE: this sort of cast should be separated from normal casts.
2011-02-11 22:29:38 +09:00
Bill Currie
f5412c2b20
Remove a fixme.
2011-02-11 22:29:38 +09:00
Bill Currie
c185fbb782
Set the type of the super structure to the correct type.
2011-02-11 22:29:38 +09:00
Bill Currie
7d2a95ee40
Mark a few problem spots.
2011-02-11 22:29:37 +09:00
Bill Currie
a1d4d4bae1
Handle block expressions in is_indirect().
2011-02-11 22:29:30 +09:00
Bill Currie
b01f960db9
Disable the subgraphs for now.
...
They tend to make large trees difficult to read. I might re-enable them
when I've gotten a better handle on dot.
2011-02-10 15:11:08 +09:00
Bill Currie
c3a991e555
Support nil in initializers.
2011-02-10 14:51:52 +09:00
Bill Currie
adeef4a4eb
Copy named expressions.
...
Since expressions can be modified, making DAGs this early causes
corruption of the expression tree.
2011-02-10 14:43:49 +09:00
Bill Currie
6f625e426f
Use the correct type when deferencing an offset pointer.
2011-02-10 14:26:12 +09:00
Bill Currie
1099ca086c
Dump the offending expression and statement for a bad instruction.
2011-02-10 14:25:09 +09:00
Bill Currie
4a41d97afc
Angle brackets and html :P
2011-02-10 14:24:31 +09:00
Bill Currie
01a7af17e5
Beat __obj_exec_class into submission.
2011-02-10 00:15:19 +09:00
Bill Currie
006c16807d
Add the statement for based loads.
...
Oops :P
2011-02-09 22:40:16 +09:00
Bill Currie
a43946abf3
Give short values special treatment.
...
As a short value fits directly into a statement, it needs a fake def that
holds its value in the def's offset in order for the value to be written to
the statement.
2011-02-09 22:13:43 +09:00
Bill Currie
c7adde8709
Fix some case&paste errors.
2011-02-09 22:04:54 +09:00
Bill Currie
1b8edc07c9
Adjust the offsets of ivars in derived classes.
...
As ivar structs are not independent, their starting offset is not
necessarily zero (almost never will be for derived classes).
2011-02-09 22:02:52 +09:00
Bill Currie
d66a441867
Write out the far data space as well as the near.
...
This causes the Objective-QC structs to be emitted now that they havve been
moved to the far data space. Relocs are broken, though.
2011-02-09 21:45:29 +09:00
Bill Currie
244d969ae3
Ensure any tail bytes in the strings data are zeroed.
2011-02-09 18:32:37 +09:00
Bill Currie
2d5d8eda5a
Save the caller's address when creating new relocations.
2011-02-09 17:16:49 +09:00
Bill Currie
29c1f7ac03
Use the correct type object in emit_struct().
2011-02-09 17:15:29 +09:00
Bill Currie
59a683d39e
Protect the name passed into emit_struct().
...
The name passed into emit_struct is sometimes created via va(), but the
struct creation code also uses va. This makes a mess of names.
2011-02-09 17:12:47 +09:00
Bill Currie
3e1b034aaf
Use EMIT_DEF correctly.
2011-02-09 15:58:32 +09:00
Bill Currie
e75295b00c
Make normal C style functions generate code.
2011-02-09 10:25:23 +09:00
Bill Currie
68cdc904f5
Give temporary variables unique names.
2011-02-09 10:04:55 +09:00
Bill Currie
681ded9375
Fix debug line number information.
2011-02-09 09:59:43 +09:00
Bill Currie
5eff00fdeb
Fix debug information.
2011-02-09 08:47:01 +09:00
Bill Currie
81125cff3a
Creation of .ctor now mostly works.
...
There seems to be problems with the actual code generation using incorrect
addresses, but a very simple test file compiles successfully.
2011-02-08 22:38:34 +09:00
Bill Currie
1647b1e61d
Check for the correct type in emit_symtab_cat_def_cnt().
2011-02-08 22:31:09 +09:00
Bill Currie
9b52c590f8
Do not try to emit anything when there are no selector references.
2011-02-08 22:28:32 +09:00
Bill Currie
da14c95bb8
Initialize current_symtab in class_init() when necessary.
...
If an objective-qc symbol is the first token to be read, class_init() is
called before the parser gets a chance to perform the initialization
action. However, class_init() setting current_symtab if the first
objective-qc symbol is seen in a function body would be bad.
2011-02-08 22:26:35 +09:00
Bill Currie
c01f742b7b
Fix some Class vs ClassPtr confusion.
2011-02-08 18:25:23 +09:00
Bill Currie
0d5ab6600d
Store the source expression in a statement.
...
This makes problem reporting more informative.
2011-02-08 18:18:34 +09:00
Bill Currie
faab931ffc
Fix assignment of id to class pointers.
2011-02-08 17:12:01 +09:00
Bill Currie
6643c5dd98
Fix messages to super.
2011-02-08 17:09:27 +09:00
Bill Currie
505e141633
Ensure the class symbol is in the symbol table.
2011-02-08 17:08:58 +09:00
Bill Currie
93a5808659
Support direct struct/union field access.
2011-02-08 14:48:26 +09:00
Bill Currie
3c849b970b
Handle union access now that they're detected properly.
2011-02-08 14:45:48 +09:00
Bill Currie
204a267b6a
Print the def name for a pointer expr when known.
2011-02-08 14:43:57 +09:00
Bill Currie
3b080fcbb0
Fix an uninitialized variable.
2011-02-08 13:27:37 +09:00
Bill Currie
2594be8b1b
Fix a type-o ;)
2011-02-08 13:26:49 +09:00
Bill Currie
8c6fc6fb03
Fix a double insertion of a symbol.
2011-02-08 08:44:08 +09:00
Bill Currie
daa88d8f1c
Fix a type clash warning I'd failed to notice.
2011-02-08 08:23:25 +09:00
Bill Currie
35d53d0d77
Fix typedefs and class names once and for all.
...
I suspect Holub did them that way as a teaching exercise :P
2011-02-08 08:20:32 +09:00
Bill Currie
7e2173f268
Remove some old code.
2011-02-08 08:16:36 +09:00
Bill Currie
92799650c0
Implement struct field access via a pointer.
2011-02-07 22:15:10 +09:00
Bill Currie
7a1a9e3f2d
Better handling of the current storage for function scopes.
2011-02-07 22:11:22 +09:00
Bill Currie
ff70177041
Fix type handling for local variables.
2011-02-07 21:38:58 +09:00
Bill Currie
952a02eb23
Make print_type() output a newline.
2011-02-07 21:31:37 +09:00
Bill Currie
a28ac636a7
Make local declarations support C syntax.
2011-02-07 21:29:04 +09:00
Bill Currie
da4ec3d47c
Allow typedefs and classes in structs.
2011-02-07 20:55:13 +09:00
Bill Currie
aefd2a27d5
Make type handling in the grammar more consistent.
2011-02-07 20:54:49 +09:00
Bill Currie
3c64ae7b66
Fix overzealous type merging.
...
Use the type name instead of the symbol table for comparing
struct/union/enum types.
2011-02-07 20:48:01 +09:00
Bill Currie
265a244ba2
Set the symbol type for structs etc as soon as the tag is created.
...
Tags (struct/union/enum) are always types.
2011-02-07 15:30:49 +09:00
Bill Currie
65a07ada1c
Implement offset dereferences.
2011-02-07 14:56:29 +09:00
Bill Currie
d2b464053c
Fix assignment sub-expressions.
2011-02-07 14:43:07 +09:00
Bill Currie
6fa5bbe473
Support constant folding on enums.
2011-02-07 11:31:23 +09:00
Bill Currie
d549e5c6b5
Allow enums to be tested.
2011-02-07 11:30:56 +09:00
Bill Currie
ef2ad46f7a
Convert complex types to a suitable low-level type.
...
This takes care of moving structures etc around.
2011-02-07 10:55:09 +09:00
Bill Currie
b629c12b31
Do not change the type of the return operand.
...
Doing so made a mess of returning expressions. It was probably a holdover
from before getting instructions with void operand types working.
2011-02-07 10:21:54 +09:00
Bill Currie
829fb33e92
Fix converting nil to a pointer type.
2011-02-07 10:10:48 +09:00
Bill Currie
b8127f7543
Do not segfault when printing a pointer value with a bogus type
2011-02-07 09:57:26 +09:00
Bill Currie
d564e6f017
Clean out the old debug prints from emit_function()
2011-02-07 08:46:12 +09:00
Bill Currie
76034861c9
Implement direct ivar access in methods.
...
A warning needs to be generated for access to ivars in a class method, but
it seems to work (unable to check due to other errors).
2011-02-07 08:32:52 +09:00
Bill Currie
3025e04ac5
Partially resurrect field_expr()
...
For now, only entity.field and ivar access via a pointer have been
implemented. The rest will come later as needed.
2011-02-07 08:30:28 +09:00
Bill Currie
1d108a8cec
Support emitting symbolic constants.
2011-02-06 20:08:54 +09:00
Bill Currie
e4ac92b5f2
Auto-cast between enums and the default type.
2011-02-06 20:08:16 +09:00
Bill Currie
6b7a81f5a7
Run find_type() early on enums and structs.
2011-02-06 20:07:19 +09:00
Bill Currie
d54a96e68a
Make enum values visible.
...
Put them in the current symbol table as well as the enum symbol table. The
latter is really just for keeping track of what values are in the enum.
2011-02-06 20:06:09 +09:00
Bill Currie
2860a8b28b
enum too is a scalar.
2011-02-06 20:01:55 +09:00
Bill Currie
f2c272f0b8
Make adding a symbol to multiple tables an internal error.
2011-02-06 20:00:14 +09:00
Bill Currie
d7cdf8077b
Rename id_ivars to object_ivars.
2011-02-06 15:41:15 +09:00
Bill Currie
c3c693e9c7
Correct construction of type_id.
2011-02-06 15:36:21 +09:00
Bill Currie
e27f3fd7c3
Copy the method's params into the method symbol.
2011-02-06 15:14:42 +09:00
Bill Currie
00bba1eb3a
Fix creation of uninitialized global variables.
2011-02-06 14:37:25 +09:00
Bill Currie
59d3dc6ae0
Check early for assignment of a class pointer to id.
2011-02-06 14:35:17 +09:00
Bill Currie
2f7b892452
Fix passing messages to classes.
...
Rename class_pointer_def() to class_pointer_symbol() and use it when a
class name is used as the receiver of a message.
2011-02-06 14:34:40 +09:00
Bill Currie
67957a14df
Bring back convert_name(), but siimplified.
...
It is now mainly for converting __FILE__ etc, handling expression symbols,
and checking for undefined identifiers.
2011-02-06 14:29:14 +09:00
Bill Currie
d03fdc5e67
Correctly calculate the size of the ivars of a class.
...
Need to include the size of the super class ivars.
2011-02-05 00:04:35 +09:00
Bill Currie
690ae1cb57
Fix send_message().
2011-02-04 23:49:25 +09:00
Bill Currie
29fbc3b073
Struct and ivar declarations now seem to work.
...
However, not bit-fields.
2011-02-04 23:48:58 +09:00
Bill Currie
1f6abb2cce
Minor cleanups to message_expr().
...
Fix for class names no longer being pointers to the class.
2011-02-04 23:22:51 +09:00
Bill Currie
eff3957487
Resurrect the address expression code for arrays etc.
...
This fixes selector finding.
2011-02-04 23:20:37 +09:00
Bill Currie
c542e1a453
Possibly fix normal methods.
2011-02-04 22:31:23 +09:00
Bill Currie
d9446c5eb0
Fix builtin methods.
2011-02-04 22:31:22 +09:00
Bill Currie
d0ecbb38b8
Copy the spec bits and storage class for QC functions.
2011-02-04 15:25:21 +09:00
Bill Currie
f721144ca5
Rewrite emit_ivars to use emit_structure.
...
The old code was broken anyway :) (it was segfaulting).
2011-02-04 15:11:47 +09:00
Bill Currie
acb3c0da11
Fix class initialization.
2011-02-04 14:29:47 +09:00
Bill Currie
04b86fcdb7
Move the Objective-QC structs from type.c to class.c
2011-02-04 12:07:32 +09:00
Bill Currie
7b22bfba63
Better Objective-QC keyword detection.
...
Use a flag in the keyword struct rather than checking for "@" in the
keyword. This catches such keywords as "id" and "Protocol" as well.
2011-02-04 08:38:58 +09:00
Bill Currie
993bee4f59
Do not count unimplemented methods.
...
The method emitter skips unimplemented methods, so counting them when
figuring out how many methods to emit leads to a segfault.
2011-02-04 08:26:16 +09:00
Bill Currie
e04ed72afa
Increment the index when emitting array elements.
...
Oops :)
2011-02-04 08:25:27 +09:00
Bill Currie
d7853682af
Fix conversion of nil to a real type.
2011-02-03 21:37:15 +09:00
Bill Currie
f44a26e268
Fix type chaining when dealing with decls.
2011-02-03 21:32:58 +09:00
Bill Currie
54c8a10fe4
Don't trip over incomplete structs (again:P)
2011-02-03 21:31:14 +09:00
Bill Currie
12d8658ece
Create a typedef for obj_module_t.
2011-02-03 18:05:46 +09:00
Bill Currie
b07392b818
Allow ivars to use C syntax declarations.
2011-02-03 18:04:41 +09:00
Bill Currie
dc6296e9b1
Allow ivars to use typedefs and other classes.
2011-02-03 18:03:37 +09:00
Bill Currie
2203903bb2
Temporarily splice the class's ivar chain into the symbol table.
...
The root class's ivar symbol table needs to be connected to the global
symbol table while building the current class's ivar symbol table. This
allows access to other classes and typedefs.
2011-02-03 18:02:49 +09:00
Bill Currie
79df3d2cca
Put newly created classes into the symbol table.
2011-02-03 17:28:49 +09:00
Bill Currie
564b7b9968
Use abstract_decl instead of type wherever a generic type is needed.
2011-02-03 10:53:59 +09:00
Bill Currie
a208aed6ef
Fix a segfault when encoding incomplete structs.
2011-02-03 10:52:42 +09:00
Bill Currie
22ccd41164
Give struct types a name.
...
Use the struct/union's name (minus "tag ") for the type name.
2011-02-03 10:52:12 +09:00
Bill Currie
d12cdca758
Functions and enums now seem to be working properly.
...
find_type now operates recursively (depth-first) so built up typechains
work as expected.
@overload is treated as a specifier (directly as a storage class, similaar
to typedef).
2011-02-03 10:48:12 +09:00
Bill Currie
52799a4e1c
Must merge specifiers :P
2011-02-02 22:59:08 +09:00
Bill Currie
4420a7125e
Ensure structs get added to the symbol table.
2011-02-02 22:53:53 +09:00
Bill Currie
a4eaa2a89b
Allow typedefed types and classes in parameters.
2011-02-02 21:58:53 +09:00
Bill Currie
aeecdc84dc
Get typedef working.
2011-02-02 21:58:11 +09:00
Bill Currie
cca829aa6b
Remove a stray semicolon from the grammar.
2011-02-02 21:57:41 +09:00
Bill Currie
400abe7fce
Allow freeing of typechains.
2011-02-02 15:15:24 +09:00
Bill Currie
1fe031e8cb
Build C style var/func/abs decl types from the outside in.
...
QuakeC style are built from the inside out.
2011-02-02 15:15:04 +09:00
Bill Currie
7fb8c8247e
Don't do a find_type on the parsed function.
...
This is needed for C style declarations, but breaks QuakeC style. The fix
is to do the find_type once the return type has been filled in.
2011-02-02 15:08:59 +09:00
Bill Currie
1452da676d
Allow types to be built from the outside in.
...
This is required for C style decl processing.
2011-02-02 15:07:44 +09:00
Bill Currie
ac91e9376b
The big type-system rewrite. Horribly broken :)
...
While broken, it is good enough to compile modulo.r.
This gives qfcc C's type system with QC specifics bolted on top (rather
than trying to cram C's type system into QC's). Pointers and arrays now
use C syntax and semantics (though I think there's a lot of breakage in
there at the moment). Functions themselves are still dual mode: both QC
style and C style are available.
2011-02-01 21:23:03 +09:00
Bill Currie
d11d128c96
Avoid segfaulting on errors.
2011-02-01 21:18:39 +09:00
Bill Currie
80ce179bc2
Scan the param list for problems with void.
2011-02-01 21:18:08 +09:00
Bill Currie
c53001800a
Create a struct for representing specifiers.
...
The specifiers are yet to come (next few commits), but this will be
necessary when they do.
2011-02-01 21:15:51 +09:00
Bill Currie
917c5f08b0
Make a var representing the default type.
...
The default type for vars is integer for ruamoko and float for v6 qc.
2011-02-01 21:12:02 +09:00
Bill Currie
54c14eb899
Add "return" to pascal.
...
I'm still not sure I'll keep it, but it's useful for testing.
2011-01-30 22:16:59 +09:00
Bill Currie
e7424e1496
Don't segfault on bare return statements.
...
I will probably need to do something about the required operand for v6
progs, but this will do for now.
2011-01-30 21:43:56 +09:00
Bill Currie
440a13b649
Untwist params' knickers for pascal, too.
2011-01-30 21:42:10 +09:00
Bill Currie
861ab93274
Don't type-check against the wrong type :P
2011-01-29 09:56:08 +09:00
Bill Currie
afc6605739
Don't set the space for external defs.
2011-01-29 09:55:14 +09:00
Bill Currie
d80a3413e5
Fix a segfault when freeing locations.
...
When chasing linked lists with a double pointer, must check the first
dereference and not the pointer itself.
2011-01-29 09:54:47 +09:00
Bill Currie
e1226bd3f1
Quaternions aren't vectors :P
2011-01-28 21:57:04 +09:00
Bill Currie
2cce903cc9
Set the default storage class for local vars.
2011-01-28 21:56:17 +09:00
Bill Currie
bc7d42d176
Immediate constants now work, though still not shared.
2011-01-28 21:39:01 +09:00
Bill Currie
3c95667b79
Print data contents for most simple types.
2011-01-28 21:21:29 +09:00
Bill Currie
4476074021
Print more addresses as hex.
2011-01-28 18:03:26 +09:00
Bill Currie
4837e0bd18
Fix most of the FIXMEs in qfcc.c.
...
Functions and defs seem to be relocated correctly. Constants are very
broken, however.
2011-01-28 15:17:30 +09:00
Bill Currie
834417b8c8
Add "debug" diagnotic printing, and use it.
...
Debug diagnostics are silent for verbosity levels less than 1.
2011-01-28 13:28:45 +09:00
Bill Currie
a37bdd9fb5
Free removed sblocks.
2011-01-28 13:23:20 +09:00
Bill Currie
80424f6ad5
Ensure functions are always properly terminated.
...
Control that reaches the end of a function must see a return statement.
2011-01-28 13:14:30 +09:00
Bill Currie
9159daf99d
Do simple unreachable block analysis and dead block removal.
2011-01-28 11:45:04 +09:00
Bill Currie
90a2738459
Add the label to the block to which it refers.
2011-01-28 11:41:53 +09:00
Bill Currie
c158b14286
Remove the labels list from the pr struct.
...
I'm not sure they were ever needed.
2011-01-28 11:40:25 +09:00
Bill Currie
4738c767a2
Fix branch label handling.
...
Conditional branches and goto now go to the correct location.
2011-01-27 21:11:32 +09:00
Bill Currie
95b17d9fd4
Rename add_statement_ref to add_statement_def_ref.
2011-01-27 21:10:37 +09:00
Bill Currie
bd78b8a7ee
Enable more end-of-compilation code.
2011-01-27 15:44:12 +09:00
Bill Currie
cdea1d07aa
Produce code for progs.src mode.
...
Separate compilation will take fixing object files.
The generated code is broken due to various relocation fixups being
broken, and float immediates seem to be badly broken.
Debug information is broken too.
2011-01-27 15:44:11 +09:00
Bill Currie
c7bbd40df6
Give special treatment to opcodes that have void operand types.
2011-01-27 15:44:11 +09:00
Bill Currie
71b5decbe8
Get assignments to .return working.
...
I really do not like the mechanism I currently use for handling pointer
derefences vs pointer assignments, but this will have to do for now until
I can get qfcc producing code again.
2011-01-27 15:44:11 +09:00
Bill Currie
56106892c8
The & operator produces a pointer, not void.
2011-01-27 15:44:10 +09:00
Bill Currie
1c3cc571f1
Pascal variables need defs too.
2011-01-27 15:44:10 +09:00
Bill Currie
f532fbc6df
Convert all integer operands to float for v6 progs.
...
Converting only opc is no longer enough.
2011-01-27 15:43:59 +09:00
Bill Currie
1ed1efbdfb
Implement the ROTL macro correctly.
...
Bit rotation requires unsigned ints.
2011-01-27 15:43:50 +09:00
Bill Currie
a6e65488ec
Remove the "test" parameter from test_expr.
...
The parameter became redundant at some stage.
2011-01-27 08:31:51 +09:00
Bill Currie
f7d60397fb
Set the type for zer_def used by labels.
2011-01-26 22:43:59 +09:00
Bill Currie
36c99a8da1
Get function def creation working again.
2011-01-26 14:48:22 +09:00
Bill Currie
5231e8e9f8
Handle .zero, .return and .param* properly.
2011-01-26 08:01:24 +09:00
Bill Currie
4966120e3b
Untwist param's knickers.
2011-01-25 20:21:41 +09:00
Bill Currie
6ce3c5a59a
Get statments being emitted to the code segment.
...
The first function seems to work fine, but there's a problems with the
scope of params causing params to get their knickers in a twist (tangled
linked list).
2011-01-25 15:46:48 +09:00
Bill Currie
fd3b594ca5
Move label relocs to the relevant statement block.
2011-01-25 15:45:31 +09:00
Bill Currie
849d013f5e
Allocate space for function parameters.
2011-01-25 15:43:57 +09:00
Bill Currie
f45919df09
Need alias defs after all.
2011-01-25 15:42:26 +09:00
Bill Currie
a648f043de
Give functions their own defspace.
...
The defspace is propogated through the function's sub-scopes.
2011-01-25 12:34:45 +09:00
Bill Currie
27c5139612
Give defspaces some backing memory.
...
I'm not sure I want all defspaces to have backing memory, but this will do
for now.
2011-01-25 12:16:13 +09:00
Bill Currie
34ffce50fa
Ensure current_symtab gets set at the start of parsing.
...
current_symtab must be set even if the first thing encountered is a syntax
error.
2011-01-25 12:16:13 +09:00
Bill Currie
69b889756d
Fix a misplaced !
2011-01-25 12:16:13 +09:00
Bill Currie
726f293d0d
Allocate space for defs and handle basic initializations.
...
Block initializers (arrays and structs) are still broken.
2011-01-25 12:16:13 +09:00
Bill Currie
30701980bc
Get QC cfunctions and defs working.
2011-01-25 12:16:13 +09:00
Bill Currie
ade2e92ea4
Fix the immediate breakage in immediate handling.
2011-01-25 09:08:11 +09:00
Bill Currie
7e914b8c53
Fix copyright headers.
...
Add forgotten templates and fill in the information in places I had
forgotten. I hope I got the dates right (timezone issues).
2011-01-25 09:01:37 +09:00
Bill Currie
49b7c2d527
Document make_symbol
2011-01-25 09:01:37 +09:00
Bill Currie
0624408317
Move the diagnostic functions into their own file.
2011-01-24 21:54:57 +09:00
Bill Currie
d618e51dc8
Move save_string and make_string into strpool
...
Might not be the perfect place, but at least they're strongly related.
2011-01-24 21:32:48 +09:00
Bill Currie
483cbeba03
Fix a few FIXMEs.
2011-01-24 21:13:37 +09:00
Bill Currie
afc5b2827d
Simplify def handling, use far data.
...
Since there is now a proper symbol table, defs are now just references to
memory locations and the symbol table takes care of duplicates.
Also, start using far data for ObjQC structures.
The qfo functions have been stubbed out until I figure out what to do with
object files in the new scheme.
2011-01-24 15:41:43 +09:00
Bill Currie
ce02fe8660
Fix the order of paramenters in the tree output.
...
Also get call nodes looking a little better.
2011-01-23 12:59:30 +09:00
Bill Currie
a79b6f0a6c
Partially implement casts.
2011-01-23 11:53:08 +09:00
Bill Currie
bf626c9e00
Fix some simple fixmes
2011-01-23 11:13:56 +09:00
Bill Currie
20b14af024
Add "is_math" type check and use for unary +/-.
2011-01-23 11:12:58 +09:00
Bill Currie
341f370662
Rename is_math() to is_math_op().
2011-01-23 11:12:05 +09:00
Bill Currie
dea6771d92
Create type_nil for passing nil into ...
2011-01-22 16:41:31 +09:00
Bill Currie
4ac80c2932
Get qfcc running again.
...
It segs when it tries to link, but that's because a real object file has
not been created yet. However, I can get my tree and flow diagrams :)
2011-01-22 15:52:57 +09:00
Bill Currie
55d3d17807
Add a missing break.
...
"return" falling through to "goto" was bad news :)
2011-01-22 15:52:01 +09:00
Bill Currie
d5f669af7a
Nuke temp reference counting.
...
The whole reason for this crazy developement branch :)
2011-01-22 11:40:53 +09:00
Bill Currie
3b462e16cf
Produce flow diagrams of the basic blocks.
2011-01-22 11:40:53 +09:00
Bill Currie
246778b5de
Use function pointer tables instead of switch.
...
This seems to be better for complicated code. switch seems to be better
suited for relatively simple code.
2011-01-22 11:40:53 +09:00
Bill Currie
2f09efe547
Break out print_expr into its own file.
2011-01-21 20:31:40 +09:00
Bill Currie
bcb2667b73
Possibly get vector calls working.
2011-01-21 19:40:46 +09:00
Bill Currie
52b561f7cb
Nuke bind expressions.
...
Since I'm planning on implementing CSE and other optimizations, they're
rather redundant (and I'm having trouble getting them to work).
2011-01-21 19:07:58 +09:00
Bill Currie
0d01930056
Link a bool to its block rather than the block's head.
...
This makes the flow make a little more sense.
2011-01-21 18:50:17 +09:00
Bill Currie
977c48d728
Make operator type overrides clear.
2011-01-21 15:57:53 +09:00
Bill Currie
aec9f256a7
Get calls mostly working.
...
Bind seems to be broken, but parameters seem to be being set correctly.
2011-01-21 15:54:53 +09:00
Bill Currie
5c5fa67e43
Minor tweaks of the expression tree output.
2011-01-21 15:34:42 +09:00
Bill Currie
96fae582e3
Implement bind expressions.
2011-01-21 11:27:40 +09:00
Bill Currie
4a24393d8d
Temp expressions now use operands instead of defs.
2011-01-21 11:26:43 +09:00
Bill Currie
2998e578fb
Get very basic deref assignments working.
...
More complicated expressions will not work yet.
2011-01-21 10:59:16 +09:00
Bill Currie
ff6e2584da
Handle block sub-expressions that produce results.
2011-01-21 10:57:47 +09:00
Bill Currie
16e013ff5d
Allow the operand to override the symbol's type.
2011-01-21 10:56:32 +09:00
Bill Currie
3f2793ef72
Get a lot of statements being generated.
2011-01-20 23:26:13 +09:00
Bill Currie
e45ea4b2ae
Move the statement printing near the top of the file.
2011-01-20 18:07:24 +09:00
Bill Currie
35b7278967
Re-disable the next-edge constraints.
...
This gives a flatter layout.
2011-01-20 15:36:10 +09:00
Bill Currie
08e387ebac
Slight improvement to branch instruction nodes/labels.
2011-01-20 15:33:13 +09:00
Bill Currie
f8cc347dce
Print expressions as dot files.
...
While the resulting images can be a little confusing, they're much easier
to read than my cryptic postfix notation.
2011-01-20 15:23:19 +09:00
Bill Currie
0594609b3a
Get the label from the right expression.
2011-01-19 22:25:43 +09:00
Bill Currie
5deda9c9b9
Clean out ex_def as ex_symbol replaces it.
2011-01-19 22:25:04 +09:00
Bill Currie
b5424bca7d
Start work on getting expressions converted to internal statements.
2011-01-19 15:47:45 +09:00
Bill Currie
f2ef24d0cc
Make symbols use the new value struct for constants.
2011-01-19 11:09:54 +09:00
Bill Currie
e08efe036b
Move the constant expression values into their own struct.
2011-01-19 08:43:24 +09:00
Bill Currie
ff6e1b4d6c
Get functions attempting to generate code.
...
However, the statements are only printed as expressions.
2011-01-19 08:38:09 +09:00
Bill Currie
87ce9f5333
Get basic function creation working.
...
Even more FIXMEs, but the pascal parser can now create functions. The
function records even get emitted.
2011-01-18 12:47:13 +09:00
Bill Currie
b186173d18
Fix a segfault in structure finalization.
2011-01-18 08:59:44 +09:00
Bill Currie
21c0c960ae
Initialize data before types.
...
This is needed for string data. It might be better to init saved strings
separately, but this works for now.
2011-01-18 08:58:43 +09:00
Bill Currie
3fe7a7250a
Handle unnamed structures in make_structure.
...
Symbols may not have null names.
2011-01-18 08:56:47 +09:00
Bill Currie
ea3895805b
Rewrite much to use symbols and symtabs. Gut emit.c. Massive breakage.
...
That which isn't rewritten is horribly broken. However, this does include a
nice mechanism for building QC structs for emitting data.
emit.c has been gutted in the spirit of "throw one away".
There is much work to be done to get even variables emitted, let alone
code. Things should be a little more fun from here on.
2011-01-17 22:34:41 +09:00
Bill Currie
85de101aa3
Break out the defspace code.
...
This also makes some improvements to the free block handling code.
2011-01-17 22:34:41 +09:00
Bill Currie
d3a98af783
Make internal_error globally available.
2011-01-17 22:34:41 +09:00
Bill Currie
537b930ba6
Add new_symbol_type to ease creation of typed symbols.
...
This is inteded for code generation functions that need to create
variables and structures.
2011-01-17 12:04:41 +09:00
Bill Currie
ffea505678
Cleanup QC's constant handling based on QP.
2011-01-14 12:10:28 +09:00
Bill Currie
c38ea0b1bc
Correct the spelling of "nil".
2011-01-14 12:07:40 +09:00
Bill Currie
c4d19e6ebc
Get __PRETTY_FUNCTION__ working for overloaded functions.
2011-01-13 16:22:27 +09:00
Bill Currie
0c9522b1ca
Fix overloaded functions.
2011-01-13 16:21:31 +09:00
Bill Currie
b4dd1b0a89
Add some diagnostic variables.
...
__PRETTY_FUNCTION__ __FUNCTION__ __LINE__ and __FILE__
2011-01-13 15:30:46 +09:00
Bill Currie
fb8b3d1211
Rework the lexer and parser to use symbols instead of defs.
...
Currently parses the test program just fine, but code generation is very
very broken.
2011-01-13 14:58:16 +09:00
Bill Currie
8f71986306
Add symbol expressions (like def expressions).
...
They will eventually replace def expressions. Currently quite broken.
2011-01-13 14:54:24 +09:00
Bill Currie
008f4e1929
Don't return .return in advanced mode.
2011-01-13 14:50:25 +09:00
Bill Currie
5b8725ca66
Rewrite the symbol (table) management in light of actual usage.
2011-01-13 14:48:38 +09:00
Bill Currie
ac14db7b1b
Create a function to ease param list building.
...
This is especially useful for QuakePascal, but it will mean I'll be able to
get rid of the parameter reversals in Ruamoko later on.
2011-01-13 14:45:53 +09:00
Bill Currie
258c896e4d
Create a function to build if/else blocks.
2011-01-13 14:33:16 +09:00
Bill Currie
638f4445cc
More return code cleanup.
...
Don't use the true void return in traditional mode.
Prefer the true void return over "done" at the end of functions.
Don't emit the above if the last emitted statement is a return and there is
no label at the end of the function.
2011-01-13 00:46:46 +09:00
Bill Currie
3c9991364b
Add a "void return" instruction.
...
I got fed up with always having to explicty return something.
2011-01-13 00:29:56 +09:00
Bill Currie
9ce9b70484
Add variadic functions.
...
Already extending QuakePascal, and many basics aren't there yet :P
2011-01-12 23:39:59 +09:00
Bill Currie
02b3dde83b
Make QuakePascal programs runnable.
...
Generate a mini-main function (".main", to avoid namespace pollution) that
calls the function named by "program", and make qwaq check for ".main" as
well as "main". If both are present, ".main" will take priority.
2011-01-12 23:39:22 +09:00
Bill Currie
332b7da127
Minor header cleanup.
2011-01-12 23:34:15 +09:00
Bill Currie
96ba4605fa
Fix the micro-optimization that avoided emitting x = x
...
The check was broken by alias defs. If a def is aliased, the alias must be
checked.
2011-01-12 23:33:51 +09:00
Bill Currie
c787923c99
Forgot to remove that print_expr.
2011-01-11 12:11:54 +09:00
Bill Currie
08bf7e24de
Produce nicer code for post-op.
...
The temp notice is still there for arrays (that's caused by issues in
constfold.c, not easily fixilbe), but it's harmless and correct (and nice)
code is much more important.
2011-01-11 12:07:48 +09:00
Bill Currie
ad787ae98a
Set the expression type to the correct value for addresses.
2011-01-11 12:06:40 +09:00
Bill Currie
21d7c78eb7
Allow deep copying of expression trees.
...
Certain expression types (eg labels) are created fresh.
2011-01-11 12:05:29 +09:00
Bill Currie
c73ac30e3f
Turns out decrementing the users was very very bad.
2011-01-11 10:56:36 +09:00
Bill Currie
4af5dad424
More math identities.
...
I forgot about 0 for multiplication and division. Detects division by zero.
2011-01-11 08:49:43 +09:00
Bill Currie
5b43fc1de3
Improve interaction between temps and const_folding.
...
Unfortunately, this seems to overdo the decrementing, so it could be
dangerous, but the ruamoko directory builds properly.
2011-01-11 08:47:52 +09:00
Bill Currie
abe471110c
Make inc/dec_users return the the expression.
...
Just for convenience.
2011-01-11 08:44:43 +09:00