language: introduce the requirement to use return to return a value from a function

This commit is contained in:
2023-11-21 04:28:46 -08:00
parent 5540918e7c
commit 0a2d029c5c
27 changed files with 115 additions and 19 deletions

View File

@ -38,6 +38,7 @@ class Parser(source: TokenSource, attribution: NodeAttribution) :
TokenType.Break -> parseBreak()
TokenType.Continue -> parseContinue()
TokenType.None -> parseNoneLiteral()
TokenType.Return -> parseReturn()
else -> {
throw ParseError(
@ -332,6 +333,10 @@ class Parser(source: TokenSource, attribution: NodeAttribution) :
PrefixOperation(ParserHelpers.convertPrefixOperator(it), parseExpression())
}
override fun parseReturn(): Return = expect(NodeType.Return, TokenType.Return) {
Return(parseExpression())
}
override fun parseSetAssignment(): SetAssignment = produce(NodeType.SetAssignment) {
val symbol = parseSymbol()
expect(TokenType.Equals)

View File

@ -154,6 +154,11 @@ class Printer(buffer: StringBuilder) : NodeVisitor<Unit> {
visit(node.expression)
}
override fun visitReturn(node: Return) {
append("return ")
visit(node.value)
}
override fun visitSuffixOperation(node: SuffixOperation) {
visit(node.reference)
append(node.op.token)