aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-22 13:27:31 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-22 13:27:31 +0100
commit296fa6ee9ee63089603c8bb13bb7d3346f85a037 (patch)
tree0754151b4533fd9c9c315ef361879fdc12160cdd /src/main/java
parent5831a308f4d8f9e83821fffff67a2141cc76d26b (diff)
Add explicit visibility
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNode.java12
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/DeclaredVariable.java2
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java7
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java5
4 files changed, 25 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNode.java
index 65e4f84c..c81a4409 100644
--- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNode.java
+++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNode.java
@@ -121,5 +121,17 @@ public record UntypedFunctionDefinitionNode(
this.body.plus(statement)
);
}
+
+ public Builder withVisibility(Visibility visibility) {
+ return new Builder(
+ this.name,
+ visibility,
+ this.positionalParams,
+ this.namedParams,
+ this.effect,
+ this.returnType,
+ this.body
+ );
+ }
}
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariable.java b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariable.java
index 08d45542..bed7501e 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariable.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariable.java
@@ -1,10 +1,12 @@
package org.shedlang.compiler.typechecker;
import org.shedlang.compiler.sources.Source;
+import org.shedlang.compiler.types.Visibility;
public record DeclaredVariable(
String name,
VariableType variableType,
+ Visibility visibility,
Source source
) {
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java
index 2950b170..f9878a53 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java
@@ -2,6 +2,7 @@ package org.shedlang.compiler.typechecker;
import org.pcollections.PVector;
import org.shedlang.compiler.ast.untyped.*;
+import org.shedlang.compiler.types.Visibility;
import java.util.List;
@@ -53,6 +54,7 @@ class DeclaredVariables {
return variables.plus(new DeclaredVariable(
import_.variableName(),
VariableType.IMPORT,
+ Visibility.PRIVATE,
import_.source()
));
}
@@ -91,6 +93,7 @@ class DeclaredVariables {
variables.plus(new DeclaredVariable(
functionDefinition.name(),
VariableType.CONSTANT,
+ functionDefinition.visibility(),
functionDefinition.source()
));
@@ -98,6 +101,7 @@ class DeclaredVariables {
variables.plus(new DeclaredVariable(
struct.name(),
VariableType.CONSTANT,
+ Visibility.PRIVATE,
struct.source()
));
@@ -105,6 +109,7 @@ class DeclaredVariables {
variables.plus(new DeclaredVariable(
sumType.name(),
VariableType.CONSTANT,
+ Visibility.PRIVATE,
sumType.source()
));
};
@@ -129,6 +134,7 @@ class DeclaredVariables {
variables.plus(new DeclaredVariable(
var.name(),
VariableType.VAR,
+ Visibility.PRIVATE,
var.source()
));
@@ -136,6 +142,7 @@ class DeclaredVariables {
variables.plus(new DeclaredVariable(
val.name(),
VariableType.VAL,
+ val.visibility(),
val.source()
));
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index 9040f9df..f4033702 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -787,7 +787,6 @@ public class TypeChecker {
var declaredVariables = DeclaredVariables.forImports(untyped.imports(), P.vector());
declaredVariables = DeclaredVariables.forNamespaceStatements(untyped.body(), declaredVariables);
- // TODO: explicit exports
var namespaceFinalContext = context;
var fieldTypes = declaredVariables.stream()
@@ -798,6 +797,10 @@ public class TypeChecker {
case VAL -> true;
case VAR -> false;
})
+ .filter(variable -> switch (variable.visibility()) {
+ case PUBLIC -> true;
+ case PRIVATE -> false;
+ })
.map(variable -> Map.entry(
variable.name(),
namespaceFinalContext.compileTimeLookup(variable.name())