Commit Graph

7234 Commits

Author SHA1 Message Date
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 f54ce02725 Macros for quaterion access in progs memory. 2011-02-12 22:57:37 +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 cfdc2e5d6b Complete the documentation for relocations.
This covers only in-memory storage of relocation records, not object file
relocations.
2011-02-12 15:55:58 +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 2617f9e3ed Update for the new syntax.
With this, qwaq will compile once I sort out the parameters for QC style
functions, and some non-executable warnings. However, as those are
compiler problems, this should be the final qwaq related commit.
2011-02-10 14:58:59 +09:00
Bill Currie c3a991e555 Support nil in initializers. 2011-02-10 14:51:52 +09:00
Bill Currie 1f8b453d58 Add some return statments for now.
At the moment, qfcc has no way of knowing that a function will never
return. This is needed until the time qfcc can know that.
2011-02-10 14:48:06 +09:00
Bill Currie 5a7650e54a Fix a missing return.
Yay, I've wanted this feature in qfcc for many years :).
2011-02-10 14:47:24 +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 55b7f6eee4 Avoid another segfault when debugging. 2011-02-09 10:13:08 +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