Refactor Type to be an int
Some checks failed
Publish Image / publish (push) Waiting to run
Test / build (push) Waiting to run
Build / build (push) Has been cancelled

This commit is contained in:
Chuck Smith
2024-03-29 11:01:15 -04:00
parent f65d7bfb1c
commit 12d43c9835
58 changed files with 164 additions and 132 deletions

View File

@@ -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())