From e02bde4955aa386317f8762c77b4e238b64be0a4 Mon Sep 17 00:00:00 2001 From: Jan Dudek Date: Wed, 21 Mar 2012 23:31:46 +0100 Subject: [PATCH] Support for object property modification --- src/c_backend.js | 11 ++++++++++- test/c_backend_test.js | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/c_backend.js b/src/c_backend.js index d0ae886..343537f 100644 --- a/src/c_backend.js +++ b/src/c_backend.js @@ -29,7 +29,16 @@ exports.compile = function (ast) { case AST.AssignStatement: if (node.leftExpr() instanceof AST.Variable) { return "js_assign_variable(binding, " + - quotes(node.leftExpr().identifier()) + ", " + expression(node.rightExpr()) + ");"; + quotes(node.leftExpr().identifier()) + ", " + + expression(node.rightExpr()) + + ");"; + } else if (node.leftExpr() instanceof AST.Refinement) { + return "{ "+ + "JSValue* object = " + expression(node.leftExpr().expression()) + "; " + + "object->object_value = dict_insert(object->object_value, " + + "js_to_string(" + expression(node.leftExpr().key()) + ")->string_value, " + + expression(node.rightExpr()) + "); " + + "}"; } else { throw "Invalid left-hand side in assignment"; } diff --git a/test/c_backend_test.js b/test/c_backend_test.js index 45c0d41..88c4d59 100644 --- a/test/c_backend_test.js +++ b/test/c_backend_test.js @@ -55,6 +55,7 @@ tests.push(testProgram("return 2 > 3;", "false")); tests.push(testProgram("var x; return 2;", "2")); tests.push(testProgram("var x = 2; return x;", "2")); tests.push(testProgram("var x = 5; x = 2; return x;", "2")); +tests.push(testProgram("var x = {}; x.y = 2; return x.y;", "2")); // Test: expression statement tests.push(testProgram("var x = 2; 5; return x;", "2"));