diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-22 13:27:31 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-22 13:27:31 +0100 |
| commit | 296fa6ee9ee63089603c8bb13bb7d3346f85a037 (patch) | |
| tree | 0754151b4533fd9c9c315ef361879fdc12160cdd /src/main/java | |
| parent | 5831a308f4d8f9e83821fffff67a2141cc76d26b (diff) | |
Add explicit visibility
Diffstat (limited to 'src/main/java')
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()) |
