@@ -87,7 +87,9 @@ func (p *Parser) letDeclaration() (statements.Stmt, error) {
8787 return nil , err
8888 }
8989 if initializer != nil && initializer .ReturnType () != varType {
90- return nil , p .error (p .peekCount (- 2 ), fmt .Sprintf ("Cannot assign %s to %s." , initializer .ReturnType (), varType ))
90+ if ! (p .isListType (varType ) && initializer .ReturnType () == expressions .VoidType ) {
91+ return nil , p .error (p .peekCount (- 2 ), fmt .Sprintf ("Cannot assign %s to %s." , initializer .ReturnType (), varType ))
92+ }
9193 }
9294 p .variables [p .currentScope ] = append (p .variables [p .currentScope ], statements.VarDef {
9395 Name : name .Lexeme ,
@@ -102,10 +104,10 @@ func (p *Parser) letDeclaration() (statements.Stmt, error) {
102104
103105func (p * Parser ) variableAssignment () (statements.Stmt , error ) {
104106 name := p .previous ()
105- hasIndex := false
106107 var index expressions.Expr
108+ var err error
107109 if p .match (tokens .BracketOpen ) {
108- index , err : = p .expression ()
110+ index , err = p .expression ()
109111 if err != nil {
110112 return nil , err
111113 }
@@ -116,12 +118,11 @@ func (p *Parser) variableAssignment() (statements.Stmt, error) {
116118 if index .ReturnType () != expressions .IntType {
117119 return nil , p .error (p .peek (), fmt .Sprintf ("Index must be of type %s." , expressions .IntType ))
118120 }
119- if p . isStruct (name ) {
121+ if ! p . isList (name ) {
120122 return nil , p .error (name , fmt .Sprintf ("Cannot index type %s." , p .getType (name )))
121123 }
122- hasIndex = true
123124 }
124- _ , err : = p .consume (tokens .Equal , "Expected '=' after variable name." )
125+ _ , err = p .consume (tokens .Equal , "Expected '=' after variable name." )
125126 if err != nil {
126127 return nil , err
127128 }
@@ -133,10 +134,7 @@ func (p *Parser) variableAssignment() (statements.Stmt, error) {
133134 if err != nil {
134135 return nil , err
135136 }
136- if hasIndex {
137- return statements.VariableAssignmentStmt {Name : name , Index : & index , Value : value }, nil
138- }
139- return statements.VariableAssignmentStmt {Name : name , Value : value }, nil
137+ return statements.VariableAssignmentStmt {Name : name , Value : value , Index : index }, nil
140138}
141139
142140func (p * Parser ) functionDeclaration () (statements.Stmt , error ) {
0 commit comments