Fixed, working unions. Had to move the is_union member to the end. I'm not sure if this is a C bug or an effect of me doing something weird somewhere

This commit is contained in:
Nathan Braswell
2016-06-16 23:06:38 -07:00
parent 59f5c6f667
commit 4a33a94b15
4 changed files with 23 additions and 25 deletions

View File

@@ -190,13 +190,13 @@ obj identifier (Object) {
return name == other.name && type == other.type && enclosing_scope == other.enclosing_scope
}
}
fun ast_type_def_ptr(name: string): *ast_node {
/*fun ast_type_def_ptr(name: ref string): *ast_node {*/
/*return ast_type_def_ptr(name, false)*/
/*}*/
/*fun ast_type_def_ptr(name: ref string, is_union: bool): *ast_node {*/
/*var to_ret.construct(name, is_union): type_def*/
var to_ret.construct(name): type_def
/*fun ast_type_def_ptr(name: string): *ast_node {*/
fun ast_type_def_ptr(name: ref string): *ast_node {
return ast_type_def_ptr(name, false)
}
fun ast_type_def_ptr(name: ref string, is_union: bool): *ast_node {
var to_ret.construct(name, is_union): type_def
/*var to_ret.construct(name): type_def*/
var ptr = new<ast_node>()
ptr->copy_construct(&ast_node::type_def(to_ret))
return ptr
@@ -210,16 +210,16 @@ fun is_type_def(node: *ast_node): bool {
obj type_def (Object) {
var scope: map<string, vector<*ast_node>>
var name: string
/*var is_union: bool*/
var self_type: *type
var variables: vector<*ast_node>
var methods: vector<*ast_node>
/*fun construct(nameIn: ref string, is_unionIn: bool): *type_def {*/
fun construct(nameIn: ref string): *type_def {
var is_union: bool
fun construct(nameIn: ref string, is_unionIn: bool): *type_def {
/*fun construct(nameIn: ref string): *type_def {*/
/*fun construct(nameIn: string): *type_def {*/
scope.construct()
name.copy_construct(&nameIn)
/*is_union = is_unionIn*/
is_union = is_unionIn
self_type = null<type>()
variables.construct()
methods.construct()
@@ -229,7 +229,7 @@ obj type_def (Object) {
self_type = old->self_type
scope.copy_construct(&old->scope)
name.copy_construct(&old->name)
/*is_union = old->is_union*/
is_union = old->is_union
variables.copy_construct(&old->variables)
methods.copy_construct(&old->methods)
}
@@ -244,8 +244,8 @@ obj type_def (Object) {
copy_construct(&other)
}
fun operator==(other: ref type_def): bool {
/*return name == other.name && is_union == other.is_union && self_type == other.self_type && variables == other.variables && methods == other.methods*/
return name == other.name && self_type == other.self_type && variables == other.variables && methods == other.methods
return name == other.name && is_union == other.is_union && self_type == other.self_type && variables == other.variables && methods == other.methods
/*return name == other.name && self_type == other.self_type && variables == other.variables && methods == other.methods*/
}
}
fun ast_adt_def_ptr(name: string): *ast_node {