aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-25 22:14:56 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-25 22:14:56 +0100
commitdcfcdb2b408f05ab6b5d5ca8713c10af4ff80495 (patch)
tree305df9df1bb4dc6367a325c2ef34be002692ff45 /src/main/java
parent452e8a4775c6524f2985834cf278fc1ad2d1127f (diff)
Clarify declaration vs definition
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java10
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java8
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/Variable.java2
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/errors/CannotDeclareTypeOfVariableDeclaredInOuterScopeError.java (renamed from src/main/java/org/shedlang/compiler/typechecker/errors/CannotDefineVariableDeclaredInOuterScopeError.java)6
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/errors/VariableAlreadyHasTypeError.java17
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/errors/VariableIsAlreadyDefinedError.java17
6 files changed, 30 insertions, 30 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index 1c763bba..fe1f41a9 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -563,7 +563,7 @@ public class TypeChecker {
var typedSignature = typeCheckFunctionSignature(untyped.signature(), context);
return context
- .define(untyped.name(), typedSignature.type(), untyped.source())
+ .declareVariableType(untyped.name(), typedSignature.type(), untyped.source())
.addLexicalState(untyped.name(), typedSignature);
}
@@ -983,7 +983,7 @@ public class TypeChecker {
context = context.addLexicalState(untyped.name(), type);
- return context.define(untyped.name(), Types.metaType(type), untyped.source());
+ return context.declareVariableType(untyped.name(), Types.metaType(type), untyped.source());
}
@Override
@@ -1038,7 +1038,7 @@ public class TypeChecker {
context = context.addLexicalState(untyped.name(), type);
- return context.define(untyped.name(), Types.metaType(type), untyped.source());
+ return context.declareVariableType(untyped.name(), Types.metaType(type), untyped.source());
}
@Override
@@ -1253,7 +1253,7 @@ public class TypeChecker {
}
case UntypedTargetNode.Val val -> {
- context = context.define(
+ context = context.declareVariableType(
val.name(),
expressionType,
target.source()
@@ -1263,7 +1263,7 @@ public class TypeChecker {
}
case UntypedTargetNode.Var var -> {
- context = context.define(
+ context = context.declareVariableType(
var.name(),
expressionType,
target.source()
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java b/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java
index d98579a1..030586b1 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java
@@ -286,7 +286,7 @@ public class TypeCheckerContext {
return clazz.cast(state);
}
- public TypeCheckerContext define(
+ public TypeCheckerContext declareVariableType(
String name,
Type type,
Source source
@@ -297,12 +297,12 @@ public class TypeCheckerContext {
throw new UnknownVariableError(name, source);
}
- if (variable.isDefined()) {
- throw new VariableIsAlreadyDefinedError(name, source);
+ if (variable.hasType()) {
+ throw new VariableAlreadyHasTypeError(name, source);
}
if (!this.boundVariables().contains(name)) {
- throw new CannotDefineVariableDeclaredInOuterScopeError(name, source);
+ throw new CannotDeclareTypeOfVariableDeclaredInOuterScopeError(name, source);
}
return this.updateLexicalContext(
diff --git a/src/main/java/org/shedlang/compiler/typechecker/Variable.java b/src/main/java/org/shedlang/compiler/typechecker/Variable.java
index 5c820159..fc06acc9 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/Variable.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/Variable.java
@@ -13,7 +13,7 @@ public record Variable(Optional<Type> type, VariableType variableType) {
return new Variable(Optional.empty(), variableType);
}
- public boolean isDefined() {
+ public boolean hasType() {
return type.isPresent();
}
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/errors/CannotDefineVariableDeclaredInOuterScopeError.java b/src/main/java/org/shedlang/compiler/typechecker/errors/CannotDeclareTypeOfVariableDeclaredInOuterScopeError.java
index 7002c637..d193481e 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/errors/CannotDefineVariableDeclaredInOuterScopeError.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/errors/CannotDeclareTypeOfVariableDeclaredInOuterScopeError.java
@@ -3,11 +3,11 @@ package org.shedlang.compiler.typechecker.errors;
import org.shedlang.compiler.errors.SourceError;
import org.shedlang.compiler.sources.Source;
-public class CannotDefineVariableDeclaredInOuterScopeError extends SourceError {
+public class CannotDeclareTypeOfVariableDeclaredInOuterScopeError extends SourceError {
private final String variableName;
- public CannotDefineVariableDeclaredInOuterScopeError(String variableName, Source source) {
- super("Cannot define variable declared in outer scope: " + variableName, source);
+ public CannotDeclareTypeOfVariableDeclaredInOuterScopeError(String variableName, Source source) {
+ super("Cannot declare type of variable declared in outer scope: " + variableName, source);
this.variableName = variableName;
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/errors/VariableAlreadyHasTypeError.java b/src/main/java/org/shedlang/compiler/typechecker/errors/VariableAlreadyHasTypeError.java
new file mode 100644
index 00000000..20f3b9d2
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/typechecker/errors/VariableAlreadyHasTypeError.java
@@ -0,0 +1,17 @@
+package org.shedlang.compiler.typechecker.errors;
+
+import org.shedlang.compiler.errors.InternalCompilerError;
+import org.shedlang.compiler.sources.Source;
+
+public class VariableAlreadyHasTypeError extends InternalCompilerError {
+ private final String variableName;
+
+ public VariableAlreadyHasTypeError(String variableName, Source source) {
+ super("Variable already has type: " + variableName, source);
+ this.variableName = variableName;
+ }
+
+ public String variableName() {
+ return variableName;
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/errors/VariableIsAlreadyDefinedError.java b/src/main/java/org/shedlang/compiler/typechecker/errors/VariableIsAlreadyDefinedError.java
deleted file mode 100644
index e781d398..00000000
--- a/src/main/java/org/shedlang/compiler/typechecker/errors/VariableIsAlreadyDefinedError.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.shedlang.compiler.typechecker.errors;
-
-import org.shedlang.compiler.errors.SourceError;
-import org.shedlang.compiler.sources.Source;
-
-public class VariableIsAlreadyDefinedError extends SourceError {
- private final String variableName;
-
- public VariableIsAlreadyDefinedError(String variableName, Source source) {
- super("Variable is already defined: " + variableName, source);
- this.variableName = variableName;
- }
-
- public String variableName() {
- return variableName;
- }
-}