summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java
index 88b0c5c..49464b6 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java
@@ -49,8 +49,10 @@ public class Parser {
static UntypedNamespaceStatementNode parseNamespaceStatement(
TokenIterator tokens
) {
+ var docComment = parseDocComment(tokens);
+
if (tokens.isNext(TokenType.KEYWORD_STRUCT)) {
- return parseStructDefinition(tokens);
+ return parseStructDefinition(tokens, docComment);
} else if (tokens.isNext(TokenType.KEYWORD_SUM)) {
return parseSumDefinition(tokens);
} else {
@@ -58,8 +60,28 @@ public class Parser {
}
}
+ private static String parseDocComment(TokenIterator tokens) {
+ var docComment = new StringBuilder();
+
+ while (tokens.isNext(TokenType.DOC_COMMENT)) {
+ var docCommentToken = tokens.next(TokenType.DOC_COMMENT);
+ var docCommentLine = docCommentToken.charSequence();
+
+ var firstCharIndex = 3;
+ while (docCommentLine.charAt(firstCharIndex) == ' ') {
+ firstCharIndex++;
+ }
+
+ var docCommentContents = docCommentLine.subSequence(firstCharIndex, docCommentLine.length());
+ docComment.append(docCommentContents);
+ }
+
+ return docComment.toString();
+ }
+
private static UntypedStructDefinitionNode parseStructDefinition(
- TokenIterator tokens
+ TokenIterator tokens,
+ String docComment
) {
var start = tokens.startPosition();
@@ -81,7 +103,7 @@ public class Parser {
return new UntypedStructDefinitionNode(
name.charSequence().toString(),
fields,
- "",
+ docComment,
source
);
}