SELF HOSTING

This commit is contained in:
Nathan Braswell
2016-03-26 05:29:20 -04:00
parent 1cc8fd294e
commit 756f2e71de
2 changed files with 6 additions and 1 deletions

View File

@@ -1092,6 +1092,8 @@ fun make_operator_call(func: string, params: vector<*ast_node>): *ast_node {
return ast_function_call_ptr(get_builtin_function(func, params.map(fun(p:*ast_node): *type return get_ast_type(p);)), params)
}
fun get_builtin_function(name: string, param_types: vector<*type>): *ast_node {
// none of the builtin functions should take in references
param_types = param_types.map(fun(t: *type): *type return t->clone_without_ref();)
if (name == "==" || name == "!=" || name == ">" || name == "<" || name == "<=" || name == ">" || name == ">=" || name == "&&" || name == "||" || name == "!")
return ast_function_ptr(name, type_ptr(param_types, type_ptr(base_type::boolean())), vector<*ast_node>())
if (name == "." || name == "->")

View File

@@ -568,7 +568,10 @@ obj c_generator (Object) {
// if we're returning a ref, we need to account for that in the temp type
// note the temp type is a pointer, not a ref so we don't have the deref/ref thing on return
var temp_ident_type = return_value_type
// now use the function_return_type instead so we don't make a ref
// var temp_ident_type = return_value_type
var temp_ident_type = function_return_type
if (function_return_type->is_ref)
temp_ident_type = temp_ident_type->clone_with_increased_indirection()
var temp_ident = ast_identifier_ptr(string("temporary_return")+get_id(), temp_ident_type, null<ast_node>())