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
62456dc1e9
Yet another test.
2011-02-15 09:48:10 +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
b3d5789377
More tests.
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
e3325b199e
More tests.
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
ed3f98eab4
qwaq related compile fixes for the new function syntax rules.
2011-02-13 19:07:30 +09:00
Bill Currie
ef32d1fb6d
Save away some of my tests.
2011-02-13 19:02:39 +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
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