aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/shedlang/compiler/parser
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-22 12:51:37 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-22 12:51:37 +0100
commit21c2c5075467151be765b4e77e59d876d258b0c1 (patch)
tree9761b85d05c4562a0f726c8b2d097f95b0eb4494 /src/main/java/org/shedlang/compiler/parser
parent6076b1efa2bf16d1c746e250aa269da401289431 (diff)
Parse visibility of functions
Diffstat (limited to 'src/main/java/org/shedlang/compiler/parser')
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Parser.java17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java
index 2122c97c..abc15441 100644
--- a/src/main/java/org/shedlang/compiler/parser/Parser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Parser.java
@@ -5,6 +5,7 @@ import org.shedlang.compiler.sources.Source;
import org.shedlang.compiler.tokeniser.TokenIterator;
import org.shedlang.compiler.tokeniser.UnexpectedTokenException;
import org.shedlang.compiler.types.NamespaceName;
+import org.shedlang.compiler.types.Visibility;
import java.math.BigInteger;
import java.util.ArrayList;
@@ -279,6 +280,9 @@ public class Parser {
private static UntypedNamespaceStatementNode parseFunctionDefinition(TokenIterator<TokenType> tokens) {
var start = tokens.position();
+ var isPublic = tokens.trySkip(TokenType.KEYWORD_PUB);
+ var visibility = isPublic ? Visibility.PUBLIC : Visibility.PRIVATE;
+
tokens.skip(TokenType.KEYWORD_FUN);
var name = tokens.nextValue(TokenType.IDENTIFIER);
@@ -303,6 +307,7 @@ public class Parser {
return new UntypedFunctionDefinitionNode(
name,
+ visibility,
params,
effect,
returnType,
@@ -500,6 +505,10 @@ public class Parser {
case KEYWORD_FUN ->
parseFunctionDefinition(tokens);
+ case KEYWORD_PUB ->
+ // TODO: handle other public things
+ parseFunctionDefinition(tokens);
+
case KEYWORD_STRUCT ->
parseStructDefinition(tokens);
@@ -554,13 +563,13 @@ public class Parser {
return switch (tokens.peek().tokenType()) {
case IDENTIFIER -> parseReference(tokens);
-
+
case INT -> parseInt(tokens);
-
+
case KEYWORD_IF -> parseIf(tokens);
case KEYWORD_FALSE, KEYWORD_TRUE -> parseBoolLiteral(tokens);
-
+
case KEYWORD_WHEN -> parseWhen(tokens);
case STRING -> parseStringLiteral(tokens);
@@ -700,7 +709,7 @@ public class Parser {
NamespaceName namespaceName
) {
var start = tokens.position();
-
+
var imports = parseMany(
() -> !tokens.isNext(TokenType.KEYWORD_IMPORT),
() -> parseImport(tokens),