Refactor Type to be an int
This commit is contained in:
@@ -20,7 +20,7 @@ var (
|
||||
|
||||
func isError(obj object.Object) bool {
|
||||
if obj != nil {
|
||||
return obj.Type() == object.ERROR_OBJ
|
||||
return obj.Type() == object.ErrorType
|
||||
}
|
||||
return false
|
||||
}
|
||||
@@ -262,7 +262,7 @@ func evalBlockStatements(block *ast.BlockStatement, env *object.Environment) obj
|
||||
|
||||
if result != nil {
|
||||
rt := result.Type()
|
||||
if rt == object.RETURN_VALUE_OBJ || rt == object.ERROR_OBJ {
|
||||
if rt == object.ReturnType || rt == object.ErrorType {
|
||||
return result
|
||||
}
|
||||
}
|
||||
@@ -281,7 +281,7 @@ func nativeBoolToBooleanObject(input bool) object.Object {
|
||||
func evalPrefixExpression(operator string, right object.Object) object.Object {
|
||||
switch operator {
|
||||
case "!":
|
||||
if right.Type() == object.BOOLEAN_OBJ {
|
||||
if right.Type() == object.BooleanType {
|
||||
return evalBooleanPrefixOperatorExpression(operator, right)
|
||||
}
|
||||
return evalIntegerPrefixOperatorExpression(operator, right)
|
||||
@@ -293,7 +293,7 @@ func evalPrefixExpression(operator string, right object.Object) object.Object {
|
||||
}
|
||||
|
||||
func evalBooleanPrefixOperatorExpression(operator string, right object.Object) object.Object {
|
||||
if right.Type() != object.BOOLEAN_OBJ {
|
||||
if right.Type() != object.BooleanType {
|
||||
return newError("unknown operator: %s%s", operator, right.Type())
|
||||
}
|
||||
|
||||
@@ -310,7 +310,7 @@ func evalBooleanPrefixOperatorExpression(operator string, right object.Object) o
|
||||
}
|
||||
|
||||
func evalIntegerPrefixOperatorExpression(operator string, right object.Object) object.Object {
|
||||
if right.Type() != object.INTEGER_OBJ {
|
||||
if right.Type() != object.IntegerType {
|
||||
return newError("unknown operator: -%s", right.Type())
|
||||
}
|
||||
|
||||
@@ -331,7 +331,7 @@ func evalInfixExpression(operator string, left, right object.Object) object.Obje
|
||||
switch {
|
||||
|
||||
// {"a": 1} + {"b": 2}
|
||||
case operator == "+" && left.Type() == object.HASH_OBJ && right.Type() == object.HASH_OBJ:
|
||||
case operator == "+" && left.Type() == object.HashType && right.Type() == object.HashType:
|
||||
leftVal := left.(*object.Hash).Pairs
|
||||
rightVal := right.(*object.Hash).Pairs
|
||||
pairs := make(map[object.HashKey]object.HashPair)
|
||||
@@ -344,7 +344,7 @@ func evalInfixExpression(operator string, left, right object.Object) object.Obje
|
||||
return &object.Hash{Pairs: pairs}
|
||||
|
||||
// [1] + [2]
|
||||
case operator == "+" && left.Type() == object.ARRAY_OBJ && right.Type() == object.ARRAY_OBJ:
|
||||
case operator == "+" && left.Type() == object.ArrayType && right.Type() == object.ArrayType:
|
||||
leftVal := left.(*object.Array).Elements
|
||||
rightVal := right.(*object.Array).Elements
|
||||
elements := make([]object.Object, len(leftVal)+len(rightVal))
|
||||
@@ -352,7 +352,7 @@ func evalInfixExpression(operator string, left, right object.Object) object.Obje
|
||||
return &object.Array{Elements: elements}
|
||||
|
||||
// [1] * 3
|
||||
case operator == "*" && left.Type() == object.ARRAY_OBJ && right.Type() == object.INTEGER_OBJ:
|
||||
case operator == "*" && left.Type() == object.ArrayType && right.Type() == object.IntegerType:
|
||||
leftVal := left.(*object.Array).Elements
|
||||
rightVal := int(right.(*object.Integer).Value)
|
||||
elements := leftVal
|
||||
@@ -362,7 +362,7 @@ func evalInfixExpression(operator string, left, right object.Object) object.Obje
|
||||
return &object.Array{Elements: elements}
|
||||
|
||||
// 3 * [1]
|
||||
case operator == "*" && left.Type() == object.INTEGER_OBJ && right.Type() == object.ARRAY_OBJ:
|
||||
case operator == "*" && left.Type() == object.IntegerType && right.Type() == object.ArrayType:
|
||||
leftVal := int(left.(*object.Integer).Value)
|
||||
rightVal := right.(*object.Array).Elements
|
||||
elements := rightVal
|
||||
@@ -372,13 +372,13 @@ func evalInfixExpression(operator string, left, right object.Object) object.Obje
|
||||
return &object.Array{Elements: elements}
|
||||
|
||||
// " " * 4
|
||||
case operator == "*" && left.Type() == object.STRING_OBJ && right.Type() == object.INTEGER_OBJ:
|
||||
case operator == "*" && left.Type() == object.StringType && right.Type() == object.IntegerType:
|
||||
leftVal := left.(*object.String).Value
|
||||
rightVal := right.(*object.Integer).Value
|
||||
return &object.String{Value: strings.Repeat(leftVal, int(rightVal))}
|
||||
|
||||
// 4 * " "
|
||||
case operator == "*" && left.Type() == object.INTEGER_OBJ && right.Type() == object.STRING_OBJ:
|
||||
case operator == "*" && left.Type() == object.IntegerType && right.Type() == object.StringType:
|
||||
leftVal := left.(*object.Integer).Value
|
||||
rightVal := right.(*object.String).Value
|
||||
return &object.String{Value: strings.Repeat(rightVal, int(leftVal))}
|
||||
@@ -396,11 +396,11 @@ func evalInfixExpression(operator string, left, right object.Object) object.Obje
|
||||
case operator == ">":
|
||||
return nativeBoolToBooleanObject(left.(object.Comparable).Compare(right) == 1)
|
||||
|
||||
case left.Type() == object.BOOLEAN_OBJ && right.Type() == object.BOOLEAN_OBJ:
|
||||
case left.Type() == object.BooleanType && right.Type() == object.BooleanType:
|
||||
return evalBooleanInfixExpression(operator, left, right)
|
||||
case left.Type() == object.INTEGER_OBJ && right.Type() == object.INTEGER_OBJ:
|
||||
case left.Type() == object.IntegerType && right.Type() == object.IntegerType:
|
||||
return evalIntegerInfixExpression(operator, left, right)
|
||||
case left.Type() == object.STRING_OBJ && right.Type() == object.STRING_OBJ:
|
||||
case left.Type() == object.StringType && right.Type() == object.StringType:
|
||||
return evalStringInfixExpression(operator, left, right)
|
||||
|
||||
default:
|
||||
@@ -597,13 +597,13 @@ func unwrapReturnValue(obj object.Object) object.Object {
|
||||
|
||||
func evalIndexExpression(left, index object.Object) object.Object {
|
||||
switch {
|
||||
case left.Type() == object.STRING_OBJ && index.Type() == object.INTEGER_OBJ:
|
||||
case left.Type() == object.StringType && index.Type() == object.IntegerType:
|
||||
return evalStringIndexExpression(left, index)
|
||||
case left.Type() == object.ARRAY_OBJ && index.Type() == object.INTEGER_OBJ:
|
||||
case left.Type() == object.ArrayType && index.Type() == object.IntegerType:
|
||||
return evalArrayIndexExpression(left, index)
|
||||
case left.Type() == object.HASH_OBJ:
|
||||
case left.Type() == object.HashType:
|
||||
return evalHashIndexExpression(left, index)
|
||||
case left.Type() == object.MODULE_OBJ:
|
||||
case left.Type() == object.ModuleType:
|
||||
return EvalModuleIndexExpression(left, index)
|
||||
default:
|
||||
return newError("index operator not supported: %s", left.Type())
|
||||
|
||||
Reference in New Issue
Block a user