diff options
Diffstat (limited to 'src')
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; } } |
