diff options
Diffstat (limited to 'src/main/java/org/zwobble')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java | 28 |
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 ); } |
