Added overloaded support for str * int
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"monkey/ast"
|
||||
"monkey/object"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -304,6 +305,18 @@ func evalIntegerPrefixOperatorExpression(operator string, right object.Object) o
|
||||
|
||||
func evalInfixExpression(operator string, left, right object.Object) object.Object {
|
||||
switch {
|
||||
|
||||
// " " * 4
|
||||
case left.Type() == object.STRING_OBJ && right.Type() == object.INTEGER_OBJ:
|
||||
leftVal := left.(*object.String).Value
|
||||
rightVal := right.(*object.Integer).Value
|
||||
return &object.String{Value: strings.Repeat(leftVal, int(rightVal))}
|
||||
// 4 * " "
|
||||
case left.Type() == object.INTEGER_OBJ && right.Type() == object.STRING_OBJ:
|
||||
leftVal := left.(*object.Integer).Value
|
||||
rightVal := right.(*object.String).Value
|
||||
return &object.String{Value: strings.Repeat(rightVal, int(leftVal))}
|
||||
|
||||
case left.Type() == object.BOOLEAN_OBJ && right.Type() == object.BOOLEAN_OBJ:
|
||||
return evalBooleanInfixExpression(operator, left, right)
|
||||
case left.Type() == object.INTEGER_OBJ && right.Type() == object.INTEGER_OBJ:
|
||||
|
||||
Reference in New Issue
Block a user