diff --git a/k.krak b/k.krak index 8a915d1..cb17587 100644 --- a/k.krak +++ b/k.krak @@ -1166,15 +1166,29 @@ fun syntax_to_ast(file_name: str, syntax: *tree, import_paths: ref vec): *tree return syntax_to_ast_helper(x, declared_template_types);) return _declaration(children) - } else if (syntax->data.name == "assignment_statement") + } else if (syntax->data.name == "assignment_statement") { return _call(vec(make_ast_binding("op" + concat(syntax->children[1])), syntax_to_ast_helper(syntax->children[0], declared_template_types), syntax_to_ast_helper(syntax->children[2], declared_template_types))) - else if (syntax->data.name == "function_call") - return _call(vec(syntax_to_ast_helper(syntax->children[0], declared_template_types)) + get_nodes("parameter", syntax).map(fun(s: *tree): *tree { - return syntax_to_ast_helper(s->children[0], declared_template_types) - })) - else if (syntax->data.name == "boolean_expression" || + } else if (syntax->data.name == "function_call") { + // if method, pull out + if syntax->children[0]->data.name == "unarad" && syntax->children[0]->children[0]->data.name == "access_operation" { + println("doing a method call!") + return _call(vec(syntax_to_ast_helper(syntax->children[0]->children[0]->children[2], declared_template_types)) + syntax_to_ast_helper(syntax->children[0]->children[0]->children[0], declared_template_types) + get_nodes("parameter", syntax).map(fun(s: *tree): *tree { + return syntax_to_ast_helper(s->children[0], declared_template_types) + })) + } else { + println("NOT doing a method call! - is " + syntax->children[0]->data.name + " not unrad, or") + println(syntax->children[0]->children[0]->data.name + " not access_operation") + return _call(vec(syntax_to_ast_helper(syntax->children[0], declared_template_types)) + get_nodes("parameter", syntax).map(fun(s: *tree): *tree { + return syntax_to_ast_helper(s->children[0], declared_template_types) + })) + } + } else if (syntax->data.name == "access_operation") { + // somehow note / do the crazier scope lookup + // also handle . vs -> + return _call(vec(make_ast_binding(concat(syntax->children[2])), syntax_to_ast_helper(syntax->children[0], declared_template_types))) + } else if (syntax->data.name == "boolean_expression" || syntax->data.name == "and_boolean_expression" || syntax->data.name == "bitwise_or" || syntax->data.name == "bitwise_xor" || @@ -1207,10 +1221,6 @@ fun syntax_to_ast(file_name: str, syntax: *tree, import_paths: ref vecchildren[0], declared_template_types), syntax_to_ast_helper(syntax->children[2], declared_template_types))) } - } else if (syntax->data.name == "access_operation") { - // somehow note / do the crazier scope lookup - // also handle . vs -> - return _call(vec(make_ast_binding(concat(syntax->children[2])), syntax_to_ast_helper(syntax->children[0], declared_template_types))) } else if (syntax->data.name == "cast_expression") { return _cast(parse_type(get_node("type", syntax), declared_template_types), vec(syntax_to_ast_helper(syntax->children[0], declared_template_types))) } else if (syntax->data.name == "number") {