diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-25 22:14:56 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-25 22:14:56 +0100 |
| commit | dcfcdb2b408f05ab6b5d5ca8713c10af4ff80495 (patch) | |
| tree | 305df9df1bb4dc6367a325c2ef34be002692ff45 /src/main/java | |
| parent | 452e8a4775c6524f2985834cf278fc1ad2d1127f (diff) | |
Clarify declaration vs definition
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 10 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java | 8 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/Variable.java | 2 | ||||
| -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.java | 17 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/errors/VariableIsAlreadyDefinedError.java | 17 |
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; - } -} |
