# HG changeset patch
# User Laman
# Date 2023-01-01 21:11:21
# Node ID 2dc5ec5e11be8fb766a0de655f6e5064af3eff55
# Parent  18037ac0f6b4a66b4530b707123f44fe25e0e814

AssignmentExpression

diff --git a/src/jasinta.py b/src/jasinta.py
--- a/src/jasinta.py
+++ b/src/jasinta.py
@@ -61,6 +61,19 @@ class MemberExpression:
 		return prop
 
 
+class AssignmentExpression:
+	def __init__(self, node):
+		self.node = node
+
+	def eval(self, context):
+		left = evaluate(self.node["left"], context)
+		right = evaluate(self.node["right"], context)
+		if self.node["operator"] == "+=":
+			left.val += right.val
+		else:
+			raise NotImplementedError
+
+
 class BinaryExpression:
 	def __init__(self, node):
 		self.node = node
@@ -124,8 +137,8 @@ class Literal:
 
 
 node_index = {cls.__name__: cls for cls in [
-	Program, ExpressionStatement, CallExpression, MemberExpression, EmptyStatement, BinaryExpression,
-	VariableDeclaration, VariableDeclarator, Literal
+	Program, ExpressionStatement, CallExpression, MemberExpression, EmptyStatement, AssignmentExpression,
+	BinaryExpression, VariableDeclaration, VariableDeclarator, Literal
 ]}
 
 
diff --git a/tests/test_jasinta.py b/tests/test_jasinta.py
--- a/tests/test_jasinta.py
+++ b/tests/test_jasinta.py
@@ -16,3 +16,16 @@ document.write(c);"""
 
 		interpret(parse(s))
 		mock_print.assert_called_with(4)
+
+
+class TestAssignment(TestCase):
+	@patch("builtins.print")
+	def test_interpret(self, mock_print):
+		s = """var a=1;
+var b=1;
+a+=b;
+b+=a;
+document.write(b);"""
+
+		interpret(parse(s))
+		mock_print.assert_called_with(3)