Added support for unions as a step towards lowering ADTs in the next pass to be written.

This commit is contained in:
Nathan Braswell
2016-06-15 22:26:03 -07:00
parent d44293a48b
commit 4de7dd1210
8 changed files with 55 additions and 13 deletions

View File

@@ -445,8 +445,16 @@ obj c_generator (Object) {
type_poset.get_sorted().for_each(fun(vert: *ast_node) {
/*var base_name = vert->type_def.name*/
var base_name = get_name(vert)
plain_typedefs += string("typedef struct ") + base_name + "_dummy " + base_name + ";\n"
structs += string("struct ") + base_name + "_dummy {\n"
plain_typedefs += string("typedef ")
if (vert->type_def.is_union) {
plain_typedefs += "union "
structs += "union "
} else {
plain_typedefs += "struct "
structs += "struct "
}
plain_typedefs += base_name + "_dummy " + base_name + ";\n"
structs += base_name + "_dummy {\n"
if (is_type_def(vert)) {
vert->type_def.variables.for_each(fun(variable_declaration: *ast_node) structs += generate_declaration_statement(variable_declaration, null<ast_node>(), null<ast_node>(), null<stack<pair<bool,stack<*ast_node>>>>(), false).one_string() + ";\n";) // also no defer stack
// generate the methods (note some of these may be templates)