Commit Graph

1436 Commits

Author SHA1 Message Date
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 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 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