Commit graph

1227 commits

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