4949 # JSON JsonParser
5050 #
5151 JsonTokenKind * = enum
52- # # Token kinds for JSON parsing
52+ # # JsonToken kinds for JSON parsing
5353 jtkEof = " <EOF>"
5454 jtkLBrace = " {"
5555 jtkRBrace = " }"
6363 jtkFalse = " <false>"
6464 jtkNull = " <null>"
6565
66- Lexer = ref object
66+ JsonLexer = ref object
6767 input: string
6868 data: ptr UncheckedArray [char ]
6969 len: int
7070 pos: int
7171 line, col: int
7272 current: char
7373
74- Token * = ref object
74+ JsonToken * = ref object
7575 kind* : JsonTokenKind
7676 value* : string
7777 line* , col* , pos* : int
7878
7979 JsonParser * = object
80- lexer: Lexer
81- prev* , curr* , next* : Token
80+ lexer: JsonLexer
81+ prev* , curr* , next* : JsonToken
8282 currentField* : Option [string ] # for context-aware parseHooks
8383 # # The name of the current field being parsed, if applicable. This is set
8484 # # before calling parseHook for a field value, allowing parseHooks to have
@@ -97,11 +97,11 @@ const
9797 unexpectedTokenExpected = " Got `$1`, expected $2"
9898 unexpectedChar = " Unexpected character `$1`"
9999
100- proc charAt (l: Lexer , idx: int ): char {.inline .} =
100+ proc charAt (l: JsonLexer , idx: int ): char {.inline .} =
101101 if idx < 0 or idx >= l.len: return '\0 '
102102 if l.data != nil : l.data[idx] else : l.input[idx]
103103
104- proc getContext (l: Lexer , posOverride: int = - 1 ): string =
104+ proc getContext (l: JsonLexer , posOverride: int = - 1 ): string =
105105 # Show the full current line and place caret at exact token position.
106106 let rawPos = if posOverride >= 0 : posOverride else : l.pos
107107 let atPos = max (0 , min (rawPos, l.len))
@@ -125,7 +125,7 @@ proc getContext(l: Lexer, posOverride: int = -1): string =
125125 let markerPos = max (0 , min (snippet.len, atPos - lineStart))
126126 result = snippet & " \n " & " " .repeat (markerPos) & " ^"
127127
128- proc error (l: var Lexer , msg: string ) =
128+ proc error (l: var JsonLexer , msg: string ) =
129129 # Raise a lexer error
130130 let context = getContext (l)
131131 raise newException (OpenParserJsonError , (" \n " & context & " \n " & " Error ($1:$2) " % [$ l.line, $ l.col]) & msg)
@@ -524,25 +524,25 @@ proc arrayToJson*(v, valImpl: NimNode, opts: JsonOptions = nil): NimNode =
524524 move (str) # return the JSON string
525525
526526#
527- # Lexer API
527+ # JsonLexer API
528528#
529- proc `$` (tk: Token ): string =
530- # # Convert Token to string
529+ proc `$` (tk: JsonToken ): string =
530+ # # Convert JsonToken to string
531531 result = " TOKEN<kind: " & $ tk.kind &
532532 (if tk.value.len > 0 : " , value:" & tk.value else : " " ) &
533533 " , line:" & $ tk.line & " , col:" & $ tk.col & " >"
534534
535- proc nextToken (parser: var JsonParser ): Token {.discardable .}
535+ proc nextToken (parser: var JsonParser ): JsonToken {.discardable .}
536536
537- proc newLexer (input: string ): Lexer =
538- result = Lexer (input: input, data: nil , len: input.len, pos: 0 , line: 1 , col: 1 )
537+ proc newJsonLexer (input: string ): JsonLexer =
538+ result = JsonLexer (input: input, data: nil , len: input.len, pos: 0 , line: 1 , col: 1 )
539539 result .current = result .charAt (0 )
540540
541- proc newLexer (mem: pointer , size: int ): Lexer =
542- result = Lexer (data: cast [ptr UncheckedArray [char ]](mem), len: size, pos: 0 , line: 1 , col: 1 )
541+ proc newJsonLexer (mem: pointer , size: int ): JsonLexer =
542+ result = JsonLexer (data: cast [ptr UncheckedArray [char ]](mem), len: size, pos: 0 , line: 1 , col: 1 )
543543 result .current = result .charAt (0 )
544544
545- proc advance (l: var Lexer ) =
545+ proc advance (l: var JsonLexer ) =
546546 if l.pos < l.len - 1 :
547547 inc l.pos
548548 l.current = l.charAt (l.pos)
@@ -551,7 +551,7 @@ proc advance(l: var Lexer) =
551551 l.pos = l.len
552552 l.current = '\0 '
553553
554- proc matchKeyword (l: var Lexer , kw: string ): bool =
554+ proc matchKeyword (l: var JsonLexer , kw: string ): bool =
555555 if l.pos + kw.len > l.len: return false
556556 for i, c in kw:
557557 if l.charAt (l.pos + i) != c:
@@ -560,7 +560,7 @@ proc matchKeyword(l: var Lexer, kw: string): bool =
560560 advance (l)
561561 result = true
562562
563- proc skipWhitespace (l: var Lexer ) =
563+ proc skipWhitespace (l: var JsonLexer ) =
564564 while true :
565565 case l.current
566566 of {' ' , '\t ' , '\n ' , '\r ' }:
@@ -570,7 +570,7 @@ proc skipWhitespace(l: var Lexer) =
570570 advance (l)
571571 else : break
572572
573- proc readString (l: var Lexer ): string =
573+ proc readString (l: var JsonLexer ): string =
574574 result = " "
575575 while true :
576576 case l.current
@@ -611,7 +611,7 @@ proc readString(l: var Lexer): string =
611611 result .add (l.current)
612612 advance (l)
613613
614- proc readNumber (l: var Lexer ): string =
614+ proc readNumber (l: var JsonLexer ): string =
615615 result = " "
616616 if l.current == '-' :
617617 result .add ('-' )
@@ -639,10 +639,10 @@ proc readNumber(l: var Lexer): string =
639639#
640640# JSON Parsing implementation to Nim objects
641641#
642- proc nextToken (parser: var JsonParser ): Token =
642+ proc nextToken (parser: var JsonParser ): JsonToken =
643643 # Get the next token from the lexer
644644 skipWhitespace (parser.lexer)
645- result = Token (
645+ result = JsonToken (
646646 line: parser.lexer.line,
647647 col: parser.lexer.col,
648648 pos: parser.lexer.pos
@@ -708,7 +708,7 @@ proc parseHook*[T: Integers](parser: var JsonParser, v: var T)
708708proc parseHook * [T: tuple ](parser: var JsonParser , v: var T)
709709proc skipValue * (parser: var JsonParser )
710710
711- proc advance * (parser: var JsonParser ): Token {.discardable .} =
711+ proc advance * (parser: var JsonParser ): JsonToken {.discardable .} =
712712 # Advance to the next token and return it
713713 parser.prev = parser.curr
714714 parser.curr = parser.next
@@ -1121,7 +1121,7 @@ proc parseArray(parser: var JsonParser, arr: var JsonNode) =
11211121 parser.error (unexpectedToken % [$ token.kind])
11221122 parser.advance () # consume the closing ']'
11231123
1124- proc initParser (lexer: Lexer ): JsonParser =
1124+ proc initParser (lexer: JsonLexer ): JsonParser =
11251125 result = JsonParser (lexer: lexer)
11261126 result .curr = result .nextToken ()
11271127 result .next = result .nextToken ()
@@ -1154,22 +1154,22 @@ proc parseAnyRootL(parser: var JsonParser): JsonNode =
11541154
11551155proc fromJson * (str: string ): JsonNode =
11561156 # # Parse a JSON from `str` and returns the standard `JsonNode`
1157- var parser = initParser (newLexer (str))
1157+ var parser = initParser (newJsonLexer (str))
11581158 result = parseAnyRoot (parser)
11591159
11601160proc fromJsonL * (str: string ): JsonNode =
11611161 # # Parse line-delimited JSON from `str` and returns a `JsonNode` array
1162- var parser = initParser (newLexer (str))
1162+ var parser = initParser (newJsonLexer (str))
11631163 result = parseAnyRootL (parser)
11641164
11651165proc fromJson * (mapped: MemFile ): JsonNode =
11661166 # # Parse JSON directly from mapped memory.
1167- var parser = initParser (newLexer (mapped.mem, mapped.size))
1167+ var parser = initParser (newJsonLexer (mapped.mem, mapped.size))
11681168 result = parseAnyRoot (parser)
11691169
11701170proc fromJsonL * (mapped: MemFile ): JsonNode =
11711171 # # Parse line-delimited JSON directly from mapped memory.
1172- var parser = initParser (newLexer (mapped.mem, mapped.size))
1172+ var parser = initParser (newJsonLexer (mapped.mem, mapped.size))
11731173 result = parseAnyRootL (parser)
11741174
11751175proc fromJsonFile * (filename: string ): JsonNode =
@@ -1214,7 +1214,7 @@ macro fromJsonMacro(x: typed, str: typed): untyped =
12141214 add blockStmtList, quote do :
12151215 var
12161216 tmp = `objIdent` ()
1217- parser = JsonParser (lexer: newLexer (`str`))
1217+ parser = JsonParser (lexer: newJsonLexer (`str`))
12181218 parser.curr = parser.nextToken ()
12191219 parser.next = parser.nextToken ()
12201220 parser.parseJson (tmp)
0 commit comments