aboutsummaryrefslogtreecommitdiff
path: root/expression.go
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-09-01 11:45:51 +0200
committerHimbeer <himbeer@disroot.org>2024-09-01 11:45:51 +0200
commita7a15e1193b09414316fea40d6999f47bc0f57d4 (patch)
treec3d468f43642540c5182ecad5d95a3e90a7c2462 /expression.go
parentbb80a9c772b077bdc7173055e88c3e9f8bb1c35b (diff)
Add support for arithmetic assignment statements
Diffstat (limited to 'expression.go')
-rw-r--r--expression.go63
1 files changed, 62 insertions, 1 deletions
diff --git a/expression.go b/expression.go
index 9752730..27f4ddb 100644
--- a/expression.go
+++ b/expression.go
@@ -134,6 +134,11 @@ func (m *mutStmt) markDecl() {}
func (m *mutStmt) line() int { return m.ln }
+type assignmentStmt interface {
+ statementExpr
+ markAssign()
+}
+
type assignStmt struct {
name string
value exprExpr
@@ -144,10 +149,66 @@ func (a *assignStmt) markExpr() {}
func (a *assignStmt) markStmt() {}
-func (a *assignStmt) markDecl() {}
+func (a *assignStmt) markAssign() {}
func (a *assignStmt) line() int { return a.ln }
+type addAssignStmt struct {
+ name string
+ value exprExpr
+ ln int
+}
+
+func (a *addAssignStmt) markExpr() {}
+
+func (a *addAssignStmt) markStmt() {}
+
+func (a *addAssignStmt) markAssign() {}
+
+func (a *addAssignStmt) line() int { return a.ln }
+
+type subAssignStmt struct {
+ name string
+ value exprExpr
+ ln int
+}
+
+func (s *subAssignStmt) markExpr() {}
+
+func (s *subAssignStmt) markStmt() {}
+
+func (s *subAssignStmt) markAssign() {}
+
+func (s *subAssignStmt) line() int { return s.ln }
+
+type mulAssignStmt struct {
+ name string
+ value exprExpr
+ ln int
+}
+
+func (m *mulAssignStmt) markExpr() {}
+
+func (m *mulAssignStmt) markStmt() {}
+
+func (m *mulAssignStmt) markAssign() {}
+
+func (m *mulAssignStmt) line() int { return m.ln }
+
+type divAssignStmt struct {
+ name string
+ value exprExpr
+ ln int
+}
+
+func (d *divAssignStmt) markExpr() {}
+
+func (d *divAssignStmt) markStmt() {}
+
+func (d *divAssignStmt) markAssign() {}
+
+func (d *divAssignStmt) line() int { return d.ln }
+
type exprExpr interface {
expression
markExprExpr()