Skip to content

Commit

Permalink
parser: fix integer literals
Browse files Browse the repository at this point in the history
  • Loading branch information
azenla committed Sep 12, 2023
1 parent 1b363dc commit f64a54f
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 8 deletions.
4 changes: 2 additions & 2 deletions parser/src/main/kotlin/gay/pizza/pork/parser/Parser.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ class Parser(source: PeekableSource<Token>, val attribution: NodeAttribution) {
} else {
val integer = it.text.toIntOrNull()
if (integer != null) {
IntegerLiteral(integer)
return@expect IntegerLiteral(integer)
}
val long = it.text.toLongOrNull()
if (long != null) {
LongLiteral(long)
return@expect LongLiteral(long)
}
throw ParseError("Illegal integer value")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,6 @@ object PorkElementTypes {

fun elementTypeFor(nodeType: NodeType): IElementType =
nodeTypeToElementType[nodeType]!!

val FailedToParse: IElementType = IElementType("FailedToParse", PorkLanguage)
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,7 @@ class PorkParser : PsiParser {
return builder.treeBuilt
}

class ExitParser(val error: String) : RuntimeException("Exit Parser: $error")
class ExitParser(val error: String? = null) : RuntimeException(
if (error == null) "Fast Exit" else "Exit Parser: $error"
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,20 @@ class PsiBuilderMarkAttribution(val builder: PsiBuilder) : ParserNodeAttribution
while (!builder.eof()) {
builder.advanceLexer()
}
throw PorkParser.ExitParser(e.error)
throw PorkParser.ExitParser()
} catch (e: ParseError) {
marker.error(e.error)
while (!builder.eof()) {
builder.advanceLexer()
}
marker.error(e.error)
throw PorkParser.ExitParser(e.error)
throw PorkParser.ExitParser()
} catch (e: PorkParser.ExitParser) {
marker.error(e.error)
throw e
if (e.error != null) {
marker.error(e.error)
} else {
marker.done(PorkElementTypes.FailedToParse)
}
throw PorkParser.ExitParser()
}
}
}

0 comments on commit f64a54f

Please sign in to comment.