From a64e01e828dbec9ccb63e47c01cd700549822034 Mon Sep 17 00:00:00 2001 From: Nathan Braswell Date: Sat, 30 Jan 2016 04:16:25 -0500 Subject: [PATCH] Fixed += as well as the related -=, *=, and /=. --- stdlib/ast_transformation.krak | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/stdlib/ast_transformation.krak b/stdlib/ast_transformation.krak index b467b5a..840f98a 100644 --- a/stdlib/ast_transformation.krak +++ b/stdlib/ast_transformation.krak @@ -351,8 +351,18 @@ fun make_method_call(object_ident: *ast_node, method: *ast_node, parameters: vec var method_access = ast_function_call_ptr(get_builtin_function(string("."), vector(get_ast_type(object_ident), get_ast_type(method))), vector(object_ident, method)) return ast_function_call_ptr(method_access, parameters) } +fun make_operator_call(left: *ast_node, func: *char, right: *ast_node): *ast_node return make_operator_call(left, string(func), right); +fun make_operator_call(left: *ast_node, func: string, right: *ast_node): *ast_node { + return ast_function_call_ptr(get_builtin_function(func, vector(get_ast_type(left), get_ast_type(right))), vector(left, right)) +} fun transform_assignment_statement(node: *tree, scope: *ast_node): *ast_node { - var assignment = ast_assignment_statement_ptr(transform(get_node("factor", node), scope), transform(get_node("boolean_expression", node), scope)) + var assign_to = transform(get_node("factor", node), scope) + var to_assign = transform(get_node("boolean_expression", node), scope) + if (get_node("\"\\+=\"", node)) to_assign = make_operator_call(assign_to, "+", to_assign) + else if (get_node("\"-=\"", node)) to_assign = make_operator_call(assign_to, "-", to_assign) + else if (get_node("\"\\*=\"", node)) to_assign = make_operator_call(assign_to, "*", to_assign) + else if (get_node("\"/=\"", node)) to_assign = make_operator_call(assign_to, "/", to_assign) + var assignment = ast_assignment_statement_ptr(assign_to, to_assign) return assignment } fun transform_if_statement(node: *tree, scope: *ast_node): *ast_node {