Skip to content

Commit 5c281fb

Browse files
committed
Fix field assignment
1 parent 3e60986 commit 5c281fb

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

ops.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,15 @@ func doLet(env *Env, node *Node) (*Node, error) {
513513
}
514514
switch curr.car.car.t {
515515
case NodeCell:
516-
curr.car.car.v = vv.v
516+
obj, err := eval(env, curr.car.car.cdr.cdr.car)
517+
if err != nil {
518+
return nil, err
519+
}
520+
if obj.t == NodeCell && obj.car != nil && obj.car.t == NodeGoValue {
521+
obj = obj.car
522+
}
523+
fld := obj.v.(reflect.Value).Elem().FieldByName(curr.car.car.cdr.car.v.(string))
524+
fld.Set(vv.car.v.(reflect.Value))
517525
case NodeIdent:
518526
scope.vars[curr.car.car.v.(string)] = vv
519527
}

0 commit comments

Comments
 (0)