Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
Signed-off-by: George Lemon <[email protected]>
  • Loading branch information
georgelemon committed Jul 24, 2023
1 parent f91f5c4 commit 5a05234
Showing 1 changed file with 15 additions and 9 deletions.
24 changes: 15 additions & 9 deletions src/toktok/lexer.nim
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,10 @@ type
keepUnknown*: bool
## Whether to keep unknown tokens (default false).
## This is useful when building a Markdown parser (for example)
enableCustomIdent*: bool
## If enabled you can bring your own string-based handler
useDefaultIdent*: bool
## Disable default string-based handler
useDefaultInt*: bool
## Disable default `int` handler
enableStaticGen: bool
## Generate a static `lexer.nim` file (default false)
## Use `-d:toktokStatic` to (re)generate lexer file.
Expand Down Expand Up @@ -280,7 +282,7 @@ const defaultSettings* =
lexerTuple: "TokenTuple",
lexerTokenKind: "TokenKind",
tkModifier: defaultTokenModifier,
enableCustomIdent: false,
useDefaultIdent: true,
enableStaticGen: toktokStatic.len > 0,
keepUnknown: true,
keepChar: false,
Expand Down Expand Up @@ -420,8 +422,13 @@ macro registerTokens*(settings: static Settings, tokens: untyped) =
body: newCall(tkNode.handlerName, ident("lex"), tkIdent)
))
else:
# a string based custom handler
discard
identBranches.add((
cond: newLit(tkNode.handlerToken.strVal),
body: newStmtList(
newCall(tkNode.handlerName, ident("lex"), tkIdent),
newDotExpr(ident("lex"), ident("kind"))
)
))
of tDeferred:
tkEnum.addField(tkIdent)

Expand Down Expand Up @@ -784,10 +791,10 @@ macro registerTokens*(settings: static Settings, tokens: untyped) =
# Create `handleIdentCase` compile-time procedure
let caseOfIdent = newDotExpr(ident "lex", ident "token")
let identElseBranch =
if tok.settings.enableCustomIdent:
newStmtList(newCall(newDotExpr(ident("lex"), ident("handleCustomIdent"))))
else:
if tok.settings.useDefaultIdent:
newStmtList(tok.getIdent(newLit tkIdentDefault))
else:
newStmtList(newCall(newDotExpr(ident("lex"), ident("handleCustomIdent"))))
result.add newProc(
id = "handleIdentCase",
params = [("lex", tok.settings.lexerName, true)],
Expand All @@ -796,7 +803,6 @@ macro registerTokens*(settings: static Settings, tokens: untyped) =
newCaseStmt(caseOfIdent, identBranches, identElseBranch)
)
)

result.add quote do:
proc handleIdent(lex: var `LexerName`) =
## Handle string-based identifiers
Expand Down

0 comments on commit 5a05234

Please sign in to comment.