Added overloaded support for array * int
Some checks failed
Build / build (push) Successful in 10m20s
Test / build (push) Has been cancelled

This commit is contained in:
Chuck Smith
2024-03-24 11:47:31 -04:00
parent 803d717379
commit c9d96236dd
4 changed files with 68 additions and 0 deletions

View File

@@ -306,6 +306,25 @@ func evalIntegerPrefixOperatorExpression(operator string, right object.Object) o
func evalInfixExpression(operator string, left, right object.Object) object.Object {
switch {
// [1] * 3
case left.Type() == object.ARRAY_OBJ && right.Type() == object.INTEGER_OBJ:
leftVal := left.(*object.Array).Elements
rightVal := int(right.(*object.Integer).Value)
elements := leftVal
for i := rightVal; i > 1; i-- {
elements = append(elements, leftVal...)
}
return &object.Array{Elements: elements}
// 3 * [1]
case left.Type() == object.INTEGER_OBJ && right.Type() == object.ARRAY_OBJ:
leftVal := int(left.(*object.Integer).Value)
rightVal := right.(*object.Array).Elements
elements := rightVal
for i := leftVal; i > 1; i-- {
elements = append(elements, rightVal...)
}
return &object.Array{Elements: elements}
// " " * 4
case left.Type() == object.STRING_OBJ && right.Type() == object.INTEGER_OBJ:
leftVal := left.(*object.String).Value