aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/MapBackedProject.java10
-rw-r--r--src/main/java/org/zwobble/couscous/Project.java4
-rw-r--r--src/main/java/org/zwobble/couscous/ast/AssignmentNode.java3
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNode.java4
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ExpressionNode.java3
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java4
-rw-r--r--src/main/java/org/zwobble/couscous/ast/LiteralNode.java3
-rw-r--r--src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java3
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodCallNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java7
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java3
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TypeName.java (renamed from src/main/java/org/zwobble/couscous/ast/ClassName.java)6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java4
-rw-r--r--src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java3
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java10
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java6
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java8
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonImportNode.java6
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Environment.java9
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Interpreter.java4
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/UnexpectedValueType.java6
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/Callable.java4
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java34
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/MethodValue.java4
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/StaticMethodValue.java4
-rw-r--r--src/main/java/org/zwobble/couscous/values/BooleanValue.java6
-rw-r--r--src/main/java/org/zwobble/couscous/values/IntegerValue.java6
-rw-r--r--src/main/java/org/zwobble/couscous/values/PrimitiveValue.java4
-rw-r--r--src/main/java/org/zwobble/couscous/values/StringValue.java6
-rw-r--r--src/main/java/org/zwobble/couscous/values/TypeReference.java8
-rw-r--r--src/main/java/org/zwobble/couscous/values/UnitValue.java6
31 files changed, 85 insertions, 108 deletions
diff --git a/src/main/java/org/zwobble/couscous/MapBackedProject.java b/src/main/java/org/zwobble/couscous/MapBackedProject.java
index e452bb8..10f2ba1 100644
--- a/src/main/java/org/zwobble/couscous/MapBackedProject.java
+++ b/src/main/java/org/zwobble/couscous/MapBackedProject.java
@@ -2,7 +2,7 @@ package org.zwobble.couscous;
import java.util.Map;
-import org.zwobble.couscous.ast.ClassName;
+import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.interpreter.values.ConcreteType;
import com.google.common.collect.ImmutableMap;
@@ -13,7 +13,7 @@ public class MapBackedProject implements Project {
}
public static class Builder {
- private final ImmutableMap.Builder<ClassName, ConcreteType<?>> classes;
+ private final ImmutableMap.Builder<TypeName, ConcreteType<?>> classes;
private Builder() {
classes = ImmutableMap.builder();
@@ -29,14 +29,14 @@ public class MapBackedProject implements Project {
}
}
- private Map<ClassName, ConcreteType<?>> classes;
+ private Map<TypeName, ConcreteType<?>> classes;
- public MapBackedProject(Map<ClassName, ConcreteType<?>> classes) {
+ public MapBackedProject(Map<TypeName, ConcreteType<?>> classes) {
this.classes = classes;
}
@Override
- public ConcreteType<?> findClass(ClassName name) {
+ public ConcreteType<?> findClass(TypeName name) {
return classes.get(name);
}
}
diff --git a/src/main/java/org/zwobble/couscous/Project.java b/src/main/java/org/zwobble/couscous/Project.java
index b1edb22..fee0cd2 100644
--- a/src/main/java/org/zwobble/couscous/Project.java
+++ b/src/main/java/org/zwobble/couscous/Project.java
@@ -1,8 +1,8 @@
package org.zwobble.couscous;
-import org.zwobble.couscous.ast.ClassName;
+import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.interpreter.values.ConcreteType;
public interface Project {
- ConcreteType<?> findClass(ClassName name);
+ ConcreteType<?> findClass(TypeName name);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java b/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java
index 349b492..d7ea09f 100644
--- a/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java
@@ -1,7 +1,6 @@
package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
-import org.zwobble.couscous.values.TypeReference;
import static org.zwobble.couscous.ast.VariableReferenceNode.reference;
@@ -22,7 +21,7 @@ public class AssignmentNode implements ExpressionNode {
}
@Override
- public TypeReference getType() {
+ public TypeName getType() {
return value.getType();
}
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNode.java b/src/main/java/org/zwobble/couscous/ast/ClassNode.java
index f1cbcc2..5f08d38 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ClassNode.java
@@ -30,11 +30,11 @@ public class ClassNode implements Node {
}
public ClassNode build() {
- return new ClassNode(ClassName.of(name), methods.build());
+ return new ClassNode(TypeName.of(name), methods.build());
}
}
- ClassName name;
+ TypeName name;
@Singular
List<MethodNode> methods;
diff --git a/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java b/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java
index 297133d..5add277 100644
--- a/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java
@@ -2,10 +2,9 @@ package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeVisitor;
-import org.zwobble.couscous.values.TypeReference;
public interface ExpressionNode extends Node {
- TypeReference getType();
+ TypeName getType();
<T> T accept(ExpressionNodeMapper<T> visitor);
@Override
diff --git a/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java b/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java
index 736322e..d1d521e 100644
--- a/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java
@@ -1,14 +1,12 @@
package org.zwobble.couscous.ast;
-import org.zwobble.couscous.values.TypeReference;
-
import lombok.Value;
@Value(staticConstructor="formalArg")
public class FormalArgumentNode implements VariableNode {
VariableDeclaration declaration;
- public TypeReference getType() {
+ public TypeName getType() {
return declaration.getType();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/LiteralNode.java b/src/main/java/org/zwobble/couscous/ast/LiteralNode.java
index a608104..cd92291 100644
--- a/src/main/java/org/zwobble/couscous/ast/LiteralNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/LiteralNode.java
@@ -5,7 +5,6 @@ import org.zwobble.couscous.values.BooleanValue;
import org.zwobble.couscous.values.IntegerValue;
import org.zwobble.couscous.values.PrimitiveValue;
import org.zwobble.couscous.values.StringValue;
-import org.zwobble.couscous.values.TypeReference;
import static org.zwobble.couscous.values.PrimitiveValues.value;
@@ -30,7 +29,7 @@ public class LiteralNode implements ExpressionNode {
}
PrimitiveValue value;
- TypeReference type;
+ TypeName type;
@Override
public <T> T accept(ExpressionNodeMapper<T> visitor) {
diff --git a/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java b/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
index 2b5c63a..66d06aa 100644
--- a/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
@@ -1,7 +1,6 @@
package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
-import org.zwobble.couscous.values.TypeReference;
import static org.zwobble.couscous.ast.VariableDeclaration.var;
@@ -12,7 +11,7 @@ public class LocalVariableDeclarationNode implements VariableNode, StatementNode
public static LocalVariableDeclarationNode localVariableDeclaration(
int id,
String name,
- TypeReference type,
+ TypeName type,
ExpressionNode initialValue) {
return localVariableDeclaration(var(id, name, type), initialValue);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
index e1358c2..aa81c6c 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
@@ -3,7 +3,6 @@ package org.zwobble.couscous.ast;
import java.util.List;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
-import org.zwobble.couscous.values.TypeReference;
import lombok.Value;
@@ -12,13 +11,13 @@ public class MethodCallNode implements ExpressionNode {
ExpressionNode receiver;
String methodName;
List<ExpressionNode> arguments;
- TypeReference type;
+ TypeName type;
public static MethodCallNode methodCall(
ExpressionNode receiver,
String methodName,
List<ExpressionNode> arguments,
- TypeReference type) {
+ TypeName type) {
return new MethodCallNode(receiver, methodName, arguments, type);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java
index 235566f..e0566cf 100644
--- a/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java
@@ -3,7 +3,6 @@ package org.zwobble.couscous.ast;
import java.util.List;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
-import org.zwobble.couscous.values.TypeReference;
import static java.util.Arrays.asList;
@@ -16,10 +15,10 @@ public class StaticMethodCallNode implements ExpressionNode {
}
public static StaticMethodCallNode staticMethodCall(String className, String methodName, List<ExpressionNode> arguments) {
- return staticMethodCall(ClassName.of(className), methodName, arguments);
+ return staticMethodCall(TypeName.of(className), methodName, arguments);
}
- ClassName className;
+ TypeName className;
String methodName;
List<ExpressionNode> arguments;
@@ -29,7 +28,7 @@ public class StaticMethodCallNode implements ExpressionNode {
}
@Override
- public TypeReference getType() {
+ public TypeName getType() {
throw new UnsupportedOperationException();
}
}
diff --git a/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java b/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java
index 99b5f60..a6ffad3 100644
--- a/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java
@@ -1,7 +1,6 @@
package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
-import org.zwobble.couscous.values.TypeReference;
import lombok.Value;
@@ -17,7 +16,7 @@ public class TernaryConditionalNode implements ExpressionNode {
}
@Override
- public TypeReference getType() {
+ public TypeName getType() {
return ifTrue.getType();
}
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassName.java b/src/main/java/org/zwobble/couscous/ast/TypeName.java
index 7358cf7..ce80f82 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassName.java
+++ b/src/main/java/org/zwobble/couscous/ast/TypeName.java
@@ -6,9 +6,9 @@ import lombok.Value;
@Value
@AllArgsConstructor(access=AccessLevel.PRIVATE)
-public class ClassName {
- public static ClassName of(String qualifiedName) {
- return new ClassName(
+public class TypeName {
+ public static TypeName of(String qualifiedName) {
+ return new TypeName(
qualifiedName,
qualifiedName.substring(qualifiedName.lastIndexOf(".") + 1));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java b/src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java
index 3a60412..009dea4 100644
--- a/src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java
+++ b/src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java
@@ -1,12 +1,10 @@
package org.zwobble.couscous.ast;
-import org.zwobble.couscous.values.TypeReference;
-
import lombok.Value;
@Value(staticConstructor="var")
public class VariableDeclaration {
int id;
String name;
- TypeReference type;
+ TypeName type;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
index fe47a84..a07006e 100644
--- a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
@@ -1,7 +1,6 @@
package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
-import org.zwobble.couscous.values.TypeReference;
import lombok.Value;
@@ -23,7 +22,7 @@ public class VariableReferenceNode implements ExpressionNode {
}
@Override
- public TypeReference getType() {
+ public TypeName getType() {
return referent.getType();
}
}
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
index 67f66ea..02db3b2 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
@@ -4,9 +4,9 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
+import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.backends.python.ast.PythonExpressionNode;
import org.zwobble.couscous.values.StringValue;
-import org.zwobble.couscous.values.TypeReference;
import com.google.common.collect.ImmutableMap;
@@ -29,16 +29,16 @@ public class PrimitiveMethods {
.build();
- private static final Map<TypeReference, Map<String, PrimitiveMethodGenerator>> METHODS =
- ImmutableMap.<TypeReference, Map<String, PrimitiveMethodGenerator>>builder()
+ private static final Map<TypeName, Map<String, PrimitiveMethodGenerator>> METHODS =
+ ImmutableMap.<TypeName, Map<String, PrimitiveMethodGenerator>>builder()
.put(StringValue.REF, STRING_METHODS)
.build();
- public static boolean isPrimitive(TypeReference type) {
+ public static boolean isPrimitive(TypeName type) {
return METHODS.containsKey(type);
}
- public static Optional<PrimitiveMethodGenerator> getPrimitiveMethod(TypeReference type, String methodName) {
+ public static Optional<PrimitiveMethodGenerator> getPrimitiveMethod(TypeName type, String methodName) {
return Optional.ofNullable(METHODS.get(type))
.flatMap(methodsForType -> Optional.ofNullable(methodsForType.get(methodName)));
}
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
index d0024de..1524be7 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
@@ -7,7 +7,7 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.zwobble.couscous.ast.AssignmentNode;
-import org.zwobble.couscous.ast.ClassName;
+import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
@@ -83,8 +83,8 @@ public class PythonCodeGenerator {
.map(name -> pythonImport(name));
}
- private static Set<ClassName> findReferencedClasses(ClassNode classNode) {
- val imports = ImmutableSet.<ClassName>builder();
+ private static Set<TypeName> findReferencedClasses(ClassNode classNode) {
+ val imports = ImmutableSet.<TypeName>builder();
NodeVisitors.visitAll(classNode, new NodeVisitorWithEmptyDefaults() {
@Override
public void visit(StaticMethodCallNode staticMethodCall) {
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java
index 67e24cc..1fb9149 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java
@@ -5,7 +5,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
-import org.zwobble.couscous.ast.ClassName;
+import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.ast.ClassNode;
import static java.util.Arrays.asList;
@@ -26,14 +26,14 @@ public class PythonCompiler {
for (val classNode : classes) {
compileClass(classNode);
}
- writeClass(ClassName.of("java.lang.Integer"),
+ writeClass(TypeName.of("java.lang.Integer"),
"class Integer(object):\n" +
" def parseInt(value):\n" +
" return int(value)"
);
}
- private Path pathForClass(ClassName className) {
+ private Path pathForClass(TypeName className) {
return root.resolve(className.getQualifiedName().replace(".", File.separator) + ".py");
}
@@ -42,7 +42,7 @@ public class PythonCompiler {
}
@SneakyThrows
- private void writeClass(ClassName name, String contents) {
+ private void writeClass(TypeName name, String contents) {
val path = pathForClass(name);
Files.createDirectories(path.getParent());
Files.write(path, asList(contents));
diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonImportNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonImportNode.java
index d8b97ad..eb6f743 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonImportNode.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonImportNode.java
@@ -1,6 +1,6 @@
package org.zwobble.couscous.backends.python.ast;
-import org.zwobble.couscous.ast.ClassName;
+import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.backends.python.ast.visitors.PythonNodeVisitor;
import lombok.Value;
@@ -8,10 +8,10 @@ import lombok.Value;
@Value(staticConstructor="pythonImport")
public class PythonImportNode implements PythonStatementNode {
public static PythonImportNode pythonImport(String name) {
- return pythonImport(ClassName.of(name));
+ return pythonImport(TypeName.of(name));
}
- ClassName name;
+ TypeName name;
@Override
public void accept(PythonNodeVisitor visitor) {
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Environment.java b/src/main/java/org/zwobble/couscous/interpreter/Environment.java
index 0c226d1..37df9f5 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Environment.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Environment.java
@@ -4,12 +4,11 @@ import java.util.Map;
import java.util.Optional;
import org.zwobble.couscous.Project;
-import org.zwobble.couscous.ast.ClassName;
+import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.ast.VariableDeclaration;
import org.zwobble.couscous.ast.VariableNode;
import org.zwobble.couscous.interpreter.values.ConcreteType;
import org.zwobble.couscous.interpreter.values.InterpreterValue;
-import org.zwobble.couscous.values.TypeReference;
import static java.util.stream.Collectors.toMap;
@@ -47,7 +46,7 @@ public class Environment {
put(variable.getDeclaration().getId(), value);
}
- public ConcreteType<?> findClass(ClassName className) {
+ public ConcreteType<?> findClass(TypeName className) {
// TODO: handle missing classes
return project.findClass(className);
}
@@ -64,7 +63,7 @@ public class Environment {
private void checkVariableType(int variableId, InterpreterValue value) {
val variableType = stackFrame.get(variableId).getType();
- val valueType = value.getType().getReference();
+ val valueType = value.getType().getName();
if (!variableType.equals(valueType)) {
throw new UnexpectedValueType(variableType, valueType);
}
@@ -74,7 +73,7 @@ public class Environment {
@Getter
@Setter
private static class VariableEntry {
- private final TypeReference type;
+ private final TypeName type;
private Optional<InterpreterValue> value;
}
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java
index 10153c8..38ea2ac 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java
@@ -4,7 +4,7 @@ import java.util.List;
import java.util.stream.Collectors;
import org.zwobble.couscous.Project;
-import org.zwobble.couscous.ast.ClassName;
+import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.interpreter.values.InterpreterValue;
@@ -23,7 +23,7 @@ public class Interpreter {
this.project = project;
}
- public InterpreterValue run(ClassName className, String methodName, List<InterpreterValue> arguments) {
+ public InterpreterValue run(TypeName className, String methodName, List<InterpreterValue> arguments) {
val argumentExpressions = arguments
.stream()
.<ExpressionNode>map(argument -> literal(argument.toPrimitiveValue().get()))
diff --git a/src/main/java/org/zwobble/couscous/interpreter/UnexpectedValueType.java b/src/main/java/org/zwobble/couscous/interpreter/UnexpectedValueType.java
index 8ae32c3..827b9e9 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/UnexpectedValueType.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/UnexpectedValueType.java
@@ -1,6 +1,6 @@
package org.zwobble.couscous.interpreter;
-import org.zwobble.couscous.values.TypeReference;
+import org.zwobble.couscous.ast.TypeName;
import lombok.EqualsAndHashCode;
import lombok.Value;
@@ -10,6 +10,6 @@ import lombok.Value;
public class UnexpectedValueType extends InterpreterException {
private static final long serialVersionUID = 1L;
- TypeReference expected;
- TypeReference actual;
+ TypeName expected;
+ TypeName actual;
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/Callable.java b/src/main/java/org/zwobble/couscous/interpreter/values/Callable.java
index dc372bb..f96ba9a 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/Callable.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/Callable.java
@@ -2,8 +2,8 @@ package org.zwobble.couscous.interpreter.values;
import java.util.List;
-import org.zwobble.couscous.values.TypeReference;
+import org.zwobble.couscous.ast.TypeName;
public interface Callable {
- List<TypeReference> getArgumentTypes();
+ List<TypeName> getArgumentTypes();
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java b/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java
index 04156d5..52cd14a 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java
@@ -5,20 +5,18 @@ import java.util.Map;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
-import org.zwobble.couscous.ast.ClassName;
import org.zwobble.couscous.ast.ClassNode;
+import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.interpreter.Arguments;
import org.zwobble.couscous.interpreter.Environment;
import org.zwobble.couscous.interpreter.Executor;
import org.zwobble.couscous.interpreter.NoSuchMethod;
import org.zwobble.couscous.interpreter.UnexpectedValueType;
import org.zwobble.couscous.interpreter.WrongNumberOfArguments;
-import org.zwobble.couscous.values.TypeReference;
import com.google.common.collect.ImmutableMap;
import static java.util.stream.Collectors.toMap;
-import static org.zwobble.couscous.values.TypeReference.typeRef;
import lombok.val;
@@ -28,15 +26,15 @@ public class ConcreteType<T> {
ImmutableMap.builder();
private final ImmutableMap.Builder<String, StaticMethodValue> staticMethods =
ImmutableMap.builder();
- private final ClassName name;
+ private final TypeName name;
- public Builder(ClassName name) {
+ public Builder(TypeName name) {
this.name = name;
}
public Builder<T> method(
String name,
- List<TypeReference> argumentsTypes,
+ List<TypeName> argumentsTypes,
BiFunction<T, Arguments, InterpreterValue> method) {
methods.put(name, new MethodValue<T>(argumentsTypes, method));
return this;
@@ -44,7 +42,7 @@ public class ConcreteType<T> {
public Builder<T> staticMethod(
String name,
- List<TypeReference> argumentsTypes,
+ List<TypeName> argumentsTypes,
BiFunction<Environment, Arguments, InterpreterValue> method) {
staticMethods.put(name, new StaticMethodValue(argumentsTypes, method));
return this;
@@ -62,7 +60,7 @@ public class ConcreteType<T> {
.collect(toMap(
method -> method.getName(),
method -> {
- List<TypeReference> argumentTypes = method.getArguments()
+ List<TypeName> argumentTypes = method.getArguments()
.stream()
.map(arg -> arg.getType())
.collect(Collectors.toList());
@@ -76,12 +74,12 @@ public class ConcreteType<T> {
staticMethods);
}
- private ClassName name;
+ private TypeName name;
private Map<String, MethodValue<T>> methods;
private Map<String, StaticMethodValue> staticMethods;
public ConcreteType(
- ClassName name,
+ TypeName name,
Map<String, MethodValue<T>> methods,
Map<String, StaticMethodValue> staticMethods) {
this.name = name;
@@ -89,16 +87,16 @@ public class ConcreteType<T> {
this.staticMethods = staticMethods;
}
- public ClassName getName() {
+ public TypeName getName() {
return name;
}
- public static <T> ConcreteType.Builder<T> builder(TypeReference reference) {
- return builder(reference.getName());
+ public static <T> ConcreteType.Builder<T> builder(TypeName reference) {
+ return new Builder<>(reference);
}
public static <T> ConcreteType.Builder<T> builder(String name) {
- return new Builder<>(ClassName.of(name));
+ return builder(TypeName.of(name));
}
@SuppressWarnings("unchecked")
@@ -124,17 +122,13 @@ public class ConcreteType<T> {
for (int index = 0; index < arguments.size(); index++) {
val formalArgumentType = method.getArgumentTypes().get(index);
val actualArgumentType = arguments.get(index).getType();
- if (!formalArgumentType.equals(actualArgumentType.getReference())) {
- throw new UnexpectedValueType(formalArgumentType, actualArgumentType.getReference());
+ if (!formalArgumentType.equals(actualArgumentType.getName())) {
+ throw new UnexpectedValueType(formalArgumentType, actualArgumentType.getName());
}
}
return method;
}
- public TypeReference getReference() {
- return typeRef(name.getQualifiedName());
- }
-
@Override
public String toString() {
return "ConcreteType<" + name + ">";
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/MethodValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/MethodValue.java
index ea76870..f2e2cc1 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/MethodValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/MethodValue.java
@@ -3,8 +3,8 @@ package org.zwobble.couscous.interpreter.values;
import java.util.List;
import java.util.function.BiFunction;
+import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.interpreter.Arguments;
-import org.zwobble.couscous.values.TypeReference;
import lombok.AccessLevel;
import lombok.Getter;
@@ -12,7 +12,7 @@ import lombok.Value;
@Value
public class MethodValue<T> implements Callable {
- List<TypeReference> argumentTypes;
+ List<TypeName> argumentTypes;
@Getter(value=AccessLevel.NONE)
BiFunction<T, Arguments, InterpreterValue> apply;
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/StaticMethodValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/StaticMethodValue.java
index 21697b1..4754d80 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/StaticMethodValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/StaticMethodValue.java
@@ -3,9 +3,9 @@ package org.zwobble.couscous.interpreter.values;
import java.util.List;
import java.util.function.BiFunction;
+import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.interpreter.Arguments;
import org.zwobble.couscous.interpreter.Environment;
-import org.zwobble.couscous.values.TypeReference;
import lombok.AccessLevel;
import lombok.Getter;
@@ -13,7 +13,7 @@ import lombok.Value;
@Value
public class StaticMethodValue implements Callable {
- List<TypeReference> argumentTypes;
+ List<TypeName> argumentTypes;
@Getter(value=AccessLevel.NONE)
BiFunction<Environment, Arguments, InterpreterValue> apply;
diff --git a/src/main/java/org/zwobble/couscous/values/BooleanValue.java b/src/main/java/org/zwobble/couscous/values/BooleanValue.java
index 76f828e..e733e44 100644
--- a/src/main/java/org/zwobble/couscous/values/BooleanValue.java
+++ b/src/main/java/org/zwobble/couscous/values/BooleanValue.java
@@ -1,6 +1,6 @@
package org.zwobble.couscous.values;
-import static org.zwobble.couscous.values.TypeReference.typeRef;
+import org.zwobble.couscous.ast.TypeName;
import lombok.AccessLevel;
import lombok.Getter;
@@ -8,7 +8,7 @@ import lombok.Value;
@Value
public class BooleanValue implements PrimitiveValue {
- public static final TypeReference REF = typeRef("java.lang.Boolean");
+ public static final TypeName REF = TypeName.of("java.lang.Boolean");
@Getter(value = AccessLevel.NONE)
boolean value;
@@ -23,7 +23,7 @@ public class BooleanValue implements PrimitiveValue {
}
@Override
- public TypeReference getType() {
+ public TypeName getType() {
return REF;
}
}
diff --git a/src/main/java/org/zwobble/couscous/values/IntegerValue.java b/src/main/java/org/zwobble/couscous/values/IntegerValue.java
index 5c272a0..e65408a 100644
--- a/src/main/java/org/zwobble/couscous/values/IntegerValue.java
+++ b/src/main/java/org/zwobble/couscous/values/IntegerValue.java
@@ -1,12 +1,12 @@
package org.zwobble.couscous.values;
-import static org.zwobble.couscous.values.TypeReference.typeRef;
+import org.zwobble.couscous.ast.TypeName;
import lombok.Value;
@Value
public class IntegerValue implements PrimitiveValue {
- public static final TypeReference REF = typeRef("java.lang.Integer");
+ public static final TypeName REF = TypeName.of("java.lang.Integer");
int value;
@@ -16,7 +16,7 @@ public class IntegerValue implements PrimitiveValue {
}
@Override
- public TypeReference getType() {
+ public TypeName getType() {
return REF;
}
}
diff --git a/src/main/java/org/zwobble/couscous/values/PrimitiveValue.java b/src/main/java/org/zwobble/couscous/values/PrimitiveValue.java
index 56da066..aefff21 100644
--- a/src/main/java/org/zwobble/couscous/values/PrimitiveValue.java
+++ b/src/main/java/org/zwobble/couscous/values/PrimitiveValue.java
@@ -1,6 +1,8 @@
package org.zwobble.couscous.values;
+import org.zwobble.couscous.ast.TypeName;
+
public interface PrimitiveValue {
<T> T accept(PrimitiveValueVisitor<T> visitor);
- TypeReference getType();
+ TypeName getType();
}
diff --git a/src/main/java/org/zwobble/couscous/values/StringValue.java b/src/main/java/org/zwobble/couscous/values/StringValue.java
index ba0b1b5..bd95eb8 100644
--- a/src/main/java/org/zwobble/couscous/values/StringValue.java
+++ b/src/main/java/org/zwobble/couscous/values/StringValue.java
@@ -1,12 +1,12 @@
package org.zwobble.couscous.values;
-import static org.zwobble.couscous.values.TypeReference.typeRef;
+import org.zwobble.couscous.ast.TypeName;
import lombok.Value;
@Value
public class StringValue implements PrimitiveValue {
- public static final TypeReference REF = typeRef("java.lang.String");
+ public static final TypeName REF = TypeName.of("java.lang.String");
String value;
@@ -16,7 +16,7 @@ public class StringValue implements PrimitiveValue {
}
@Override
- public TypeReference getType() {
+ public TypeName getType() {
return REF;
}
}
diff --git a/src/main/java/org/zwobble/couscous/values/TypeReference.java b/src/main/java/org/zwobble/couscous/values/TypeReference.java
deleted file mode 100644
index 9eb4783..0000000
--- a/src/main/java/org/zwobble/couscous/values/TypeReference.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.zwobble.couscous.values;
-
-import lombok.Value;
-
-@Value(staticConstructor="typeRef")
-public class TypeReference {
- String name;
-}
diff --git a/src/main/java/org/zwobble/couscous/values/UnitValue.java b/src/main/java/org/zwobble/couscous/values/UnitValue.java
index b4f6974..9d48b9e 100644
--- a/src/main/java/org/zwobble/couscous/values/UnitValue.java
+++ b/src/main/java/org/zwobble/couscous/values/UnitValue.java
@@ -1,7 +1,9 @@
package org.zwobble.couscous.values;
+import org.zwobble.couscous.ast.TypeName;
+
public class UnitValue implements PrimitiveValue {
- public static final TypeReference REF = TypeReference.typeRef("org.zwobble.couscous.runtime.Unit");
+ public static final TypeName REF = TypeName.of("org.zwobble.couscous.runtime.Unit");
static final UnitValue UNIT = new UnitValue();
@@ -14,7 +16,7 @@ public class UnitValue implements PrimitiveValue {
}
@Override
- public TypeReference getType() {
+ public TypeName getType() {
return REF;
}
}