diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-03-21 08:13:45 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-03-21 08:13:45 +0000 |
| commit | fe113241971cfe87b163a9eb4dc51e9d5e32410e (patch) | |
| tree | f9e435c44020ffbbb9231df79719a4d407ea8000 /src/main/java/org/zwobble/couscous/interpreter/values | |
| parent | 22f5765125eea28ae158bab4d9e96ae6472b73d4 (diff) | |
Move standard type definitions into a Types class
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/values')
6 files changed, 35 insertions, 39 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java index a183206..6cebc21 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java @@ -4,7 +4,7 @@ import org.zwobble.couscous.ast.Operator; import org.zwobble.couscous.interpreter.errors.NoSuchField; import org.zwobble.couscous.interpreter.types.InterpreterType; import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; -import org.zwobble.couscous.values.BooleanValue; +import org.zwobble.couscous.types.Types; import org.zwobble.couscous.values.PrimitiveValue; import org.zwobble.couscous.values.PrimitiveValues; @@ -22,15 +22,15 @@ public final class BooleanInterpreterValue implements InterpreterValue { private static final InterpreterType TYPE = IntrinsicInterpreterType.builder(BooleanInterpreterValue.class, "boolean") - .method(Operator.BOOLEAN_NOT.getSymbol(), list(), BooleanValue.REF, (environment, arguments) -> + .method(Operator.BOOLEAN_NOT.getSymbol(), list(), Types.BOOLEAN, (environment, arguments) -> of(!arguments.getReceiver().getValue())) - .method(Operator.BOOLEAN_AND.getSymbol(), list(BooleanValue.REF), BooleanValue.REF, (environment, arguments) -> { + .method(Operator.BOOLEAN_AND.getSymbol(), list(Types.BOOLEAN), Types.BOOLEAN, (environment, arguments) -> { BooleanInterpreterValue right = (BooleanInterpreterValue)arguments.get(0); return of(arguments.getReceiver().getValue() && right.getValue()); }) - .method(Operator.BOOLEAN_OR.getSymbol(), list(BooleanValue.REF), BooleanValue.REF, (environment, arguments) -> { + .method(Operator.BOOLEAN_OR.getSymbol(), list(Types.BOOLEAN), Types.BOOLEAN, (environment, arguments) -> { BooleanInterpreterValue right = (BooleanInterpreterValue)arguments.get(0); return of(arguments.getReceiver().getValue() || right.getValue()); }) diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java index 18d0c34..b4f8701 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java @@ -2,10 +2,7 @@ package org.zwobble.couscous.interpreter.values; import org.zwobble.couscous.interpreter.types.InterpreterType; import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; -import org.zwobble.couscous.values.BooleanValue; -import org.zwobble.couscous.values.IntegerValue; -import org.zwobble.couscous.values.ObjectValues; -import org.zwobble.couscous.values.StringValue; +import org.zwobble.couscous.types.Types; import static org.zwobble.couscous.util.ExtraLists.list; @@ -21,24 +18,24 @@ public class BoxedIntegerInterpreterValue { } public static final InterpreterType TYPE = IntrinsicInterpreterType.classBuilder("java.lang.Integer") - .field("value", IntegerValue.REF) + .field("value", Types.INT) - .staticMethod("parseInt", list(StringValue.REF), IntegerValue.REF, + .staticMethod("parseInt", list(Types.STRING), Types.INT, (environment, arguments) -> { StringInterpreterValue value = (StringInterpreterValue)arguments.get(0); return new IntegerInterpreterValue(Integer.parseInt(value.getValue())); }) - .staticMethod("valueOf", list(IntegerValue.REF), ObjectValues.BOXED_INT, + .staticMethod("valueOf", list(Types.INT), Types.BOXED_INT, (environment, arguments) -> { IntegerInterpreterValue value = (IntegerInterpreterValue)arguments.get(0); return of(value); }) - .method("equals", list(ObjectValues.OBJECT), BooleanValue.REF, + .method("equals", list(Types.OBJECT), Types.BOOLEAN, (environment, arguments) -> { InterpreterValue right = arguments.getPositionalArguments().get(0); - if (right.getType().getType().equals(ObjectValues.BOXED_INT)) { + if (right.getType().getType().equals(Types.BOXED_INT)) { IntegerInterpreterValue leftValue = (IntegerInterpreterValue)arguments.getReceiver().getField("value"); IntegerInterpreterValue rightValue = (IntegerInterpreterValue)right.getField("value"); return BooleanInterpreterValue.of(leftValue.getValue() == rightValue.getValue()); @@ -47,7 +44,7 @@ public class BoxedIntegerInterpreterValue { } }) - .method("toString", list(), StringValue.REF, + .method("toString", list(), Types.STRING, (environment, arguments) -> { IntegerInterpreterValue value = (IntegerInterpreterValue)arguments.getReceiver().getField("value"); return StringInterpreterValue.of(Integer.toString(value.getValue())); diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java index f0ce783..00d4aa5 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java @@ -5,8 +5,7 @@ import org.zwobble.couscous.interpreter.Environment; import org.zwobble.couscous.interpreter.errors.NoSuchField; import org.zwobble.couscous.interpreter.types.InterpreterType; import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; -import org.zwobble.couscous.values.BooleanValue; -import org.zwobble.couscous.values.IntegerValue; +import org.zwobble.couscous.types.Types; import org.zwobble.couscous.values.PrimitiveValue; import org.zwobble.couscous.values.PrimitiveValues; @@ -16,31 +15,31 @@ import java.util.function.BiFunction; import static org.zwobble.couscous.util.ExtraLists.list; public final class IntegerInterpreterValue implements InterpreterValue { - public static final InterpreterType TYPE = IntrinsicInterpreterType.builder(IntegerInterpreterValue.class, IntegerValue.REF) - .method(Operator.ADD.getSymbol(), list(IntegerValue.REF), IntegerValue.REF, + public static final InterpreterType TYPE = IntrinsicInterpreterType.builder(IntegerInterpreterValue.class, Types.INT) + .method(Operator.ADD.getSymbol(), list(Types.INT), Types.INT, infixReturningInteger((left, right) -> left + right)) - .method(Operator.SUBTRACT.getSymbol(), list(IntegerValue.REF), IntegerValue.REF, + .method(Operator.SUBTRACT.getSymbol(), list(Types.INT), Types.INT, infixReturningInteger((left, right) -> left - right)) - .method(Operator.MULTIPLY.getSymbol(), list(IntegerValue.REF), IntegerValue.REF, + .method(Operator.MULTIPLY.getSymbol(), list(Types.INT), Types.INT, infixReturningInteger((left, right) -> left * right)) - .method(Operator.DIVIDE.getSymbol(), list(IntegerValue.REF), IntegerValue.REF, + .method(Operator.DIVIDE.getSymbol(), list(Types.INT), Types.INT, infixReturningInteger((left, right) -> left / right)) - .method(Operator.MOD.getSymbol(), list(IntegerValue.REF), IntegerValue.REF, + .method(Operator.MOD.getSymbol(), list(Types.INT), Types.INT, infixReturningInteger((left, right) -> left % right)) - .method(Operator.EQUALS.getSymbol(), list(IntegerValue.REF), BooleanValue.REF, + .method(Operator.EQUALS.getSymbol(), list(Types.INT), Types.BOOLEAN, (environment, arguments) -> { IntegerInterpreterValue right = (IntegerInterpreterValue)arguments.getPositionalArguments().get(0); return integerEquals(arguments, right); }) - .method(Operator.NOT_EQUALS.getSymbol(), list(IntegerValue.REF), BooleanValue.REF, + .method(Operator.NOT_EQUALS.getSymbol(), list(Types.INT), Types.BOOLEAN, infixReturningBoolean((left, right) -> !left.equals(right))) - .method(Operator.GREATER_THAN.getSymbol(), list(IntegerValue.REF), BooleanValue.REF, + .method(Operator.GREATER_THAN.getSymbol(), list(Types.INT), Types.BOOLEAN, infixReturningBoolean((left, right) -> left > right)) - .method(Operator.GREATER_THAN_OR_EQUAL.getSymbol(), list(IntegerValue.REF), BooleanValue.REF, + .method(Operator.GREATER_THAN_OR_EQUAL.getSymbol(), list(Types.INT), Types.BOOLEAN, infixReturningBoolean((left, right) -> left >= right)) - .method(Operator.LESS_THAN.getSymbol(), list(IntegerValue.REF), BooleanValue.REF, + .method(Operator.LESS_THAN.getSymbol(), list(Types.INT), Types.BOOLEAN, infixReturningBoolean((left, right) -> left < right)) - .method(Operator.LESS_THAN_OR_EQUAL.getSymbol(), list(IntegerValue.REF), BooleanValue.REF, + .method(Operator.LESS_THAN_OR_EQUAL.getSymbol(), list(Types.INT), Types.BOOLEAN, infixReturningBoolean((left, right) -> left <= right)) .build(); diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/InternalCouscousInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/InternalCouscousInterpreterValue.java index faab2a8..80635b2 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/InternalCouscousInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/InternalCouscousInterpreterValue.java @@ -2,14 +2,13 @@ package org.zwobble.couscous.interpreter.values; import org.zwobble.couscous.interpreter.types.InterpreterType; import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; -import org.zwobble.couscous.values.BooleanValue; -import org.zwobble.couscous.values.ObjectValues; +import org.zwobble.couscous.types.Types; import static org.zwobble.couscous.util.ExtraLists.list; public class InternalCouscousInterpreterValue { public static final InterpreterType TYPE = IntrinsicInterpreterType.classBuilder("_couscous") - .staticMethod("same", list(ObjectValues.OBJECT, ObjectValues.OBJECT), BooleanValue.REF, + .staticMethod("same", list(Types.OBJECT, Types.OBJECT), Types.BOOLEAN, (environment, arguments) -> BooleanInterpreterValue.of(arguments.get(0) == arguments.get(1))) diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java index 2fe72d7..bd4d6ba 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java @@ -4,6 +4,7 @@ import org.zwobble.couscous.ast.Operator; import org.zwobble.couscous.interpreter.errors.NoSuchField; import org.zwobble.couscous.interpreter.types.InterpreterType; import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; +import org.zwobble.couscous.types.Types; import org.zwobble.couscous.values.*; import java.util.Optional; @@ -11,25 +12,25 @@ import java.util.Optional; import static org.zwobble.couscous.util.ExtraLists.list; public final class StringInterpreterValue implements InterpreterValue { - public static final InterpreterType TYPE = IntrinsicInterpreterType.builder(StringInterpreterValue.class, StringValue.REF) - .method("length", list(), IntegerValue.REF, (environment, arguments) -> + public static final InterpreterType TYPE = IntrinsicInterpreterType.builder(StringInterpreterValue.class, Types.STRING) + .method("length", list(), Types.INT, (environment, arguments) -> new IntegerInterpreterValue(arguments.getReceiver().value.length())) - .method("substring", list(IntegerValue.REF, IntegerValue.REF), StringValue.REF, (environment, arguments) -> { + .method("substring", list(Types.INT, Types.INT), Types.STRING, (environment, arguments) -> { IntegerInterpreterValue startIndex = (IntegerInterpreterValue)arguments.get(0); IntegerInterpreterValue endIndex = (IntegerInterpreterValue)arguments.get(1); return of(arguments.getReceiver().value.substring(startIndex.getValue(), endIndex.getValue())); }) - .method(Operator.ADD.getSymbol(), list(StringValue.REF), StringValue.REF, (environment, arguments) -> { + .method(Operator.ADD.getSymbol(), list(Types.STRING), Types.STRING, (environment, arguments) -> { StringInterpreterValue right = (StringInterpreterValue)arguments.get(0); return of(arguments.getReceiver().value + right.value); }) - .method("toLowerCase", list(), StringValue.REF, (environment, arguments) -> + .method("toLowerCase", list(), Types.STRING, (environment, arguments) -> of(arguments.getReceiver().value.toLowerCase())) - .method("equals", list(ObjectValues.OBJECT), BooleanValue.REF, (environment, arguments) -> { + .method("equals", list(Types.OBJECT), Types.BOOLEAN, (environment, arguments) -> { InterpreterValue right = arguments.get(0); if (right instanceof StringInterpreterValue) { return BooleanInterpreterValue.of(arguments.getReceiver().value.equals(((StringInterpreterValue)right).value)); diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java index b460d00..f941652 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java @@ -4,7 +4,7 @@ import org.zwobble.couscous.types.ScalarType; import org.zwobble.couscous.interpreter.errors.NoSuchField; import org.zwobble.couscous.interpreter.types.InterpreterType; import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; -import org.zwobble.couscous.values.ObjectValues; +import org.zwobble.couscous.types.Types; import org.zwobble.couscous.values.PrimitiveValue; import org.zwobble.couscous.values.PrimitiveValues; @@ -12,7 +12,7 @@ import java.util.Optional; public class TypeInterpreterValue implements InterpreterValue { public static final InterpreterType TYPE = IntrinsicInterpreterType - .builder(TypeInterpreterValue.class, ObjectValues.CLASS) + .builder(TypeInterpreterValue.class, Types.CLASS) .build(); public static InterpreterValue of(ScalarType type) { |
