aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/values/StringValue.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-09-30 19:47:38 +0100
committerMichael Williamson <mike@zwobble.org>2015-09-30 19:47:38 +0100
commitc1de40d3615a8efc852fd1a12832437ee3ce4318 (patch)
treef2a19503d7b38f1cea01390a3c8567e4480364fb /src/main/java/org/zwobble/couscous/values/StringValue.java
parent7c48c6b29d562ac5d3cb82b253e75e92a4b86a93 (diff)
Define methods once per type
Diffstat (limited to 'src/main/java/org/zwobble/couscous/values/StringValue.java')
-rw-r--r--src/main/java/org/zwobble/couscous/values/StringValue.java27
1 files changed, 13 insertions, 14 deletions
diff --git a/src/main/java/org/zwobble/couscous/values/StringValue.java b/src/main/java/org/zwobble/couscous/values/StringValue.java
index 3f4b2b0..da45f02 100644
--- a/src/main/java/org/zwobble/couscous/values/StringValue.java
+++ b/src/main/java/org/zwobble/couscous/values/StringValue.java
@@ -1,26 +1,25 @@
package org.zwobble.couscous.values;
-import java.util.Optional;
-
import lombok.Value;
import lombok.val;
@Value
public class StringValue implements InterpreterValue {
+ private static final ConcreteType<?> TYPE = ConcreteType.<StringValue>builder()
+ .method("length", (receiver, arguments) -> new IntegerValue(receiver.value.length()))
+
+ .method("substring", (receiver, arguments) -> {
+ val startIndex = arguments.pop(IntegerValue.class);
+ val endIndex = arguments.pop(IntegerValue.class);
+ return new StringValue(receiver.value.substring(startIndex.getValue(), endIndex.getValue()));
+ })
+
+ .build();
+
String value;
@Override
- public Optional<MethodValue> getMethod(String methodName) {
- if (methodName == "length") {
- return Optional.of(arguments -> new IntegerValue(value.length()));
- } else if (methodName == "substring") {
- return Optional.of(arguments -> {
- val startIndex = (IntegerValue)arguments.get(0);
- val endIndex = (IntegerValue)arguments.get(1);
- return new StringValue(value.substring(startIndex.getValue(), endIndex.getValue()));
- });
- } else {
- return Optional.empty();
- }
+ public ConcreteType<?> getType() {
+ return TYPE;
}
}