diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2024-07-22 08:07:19 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2024-07-22 08:07:19 -0700 |
commit | e5a6c31be5da033320f6414fab0b31ef88f3260c (patch) | |
tree | a2f55843aab915431f18ee0946b0eae84a9dbfcd /parser.c | |
parent | 74d7277b99dfe15797464f41adc5204c728eca6b (diff) | |
download | txr-e5a6c31be5da033320f6414fab0b31ef88f3260c.tar.gz txr-e5a6c31be5da033320f6414fab0b31ef88f3260c.tar.bz2 txr-e5a6c31be5da033320f6414fab0b31ef88f3260c.zip |
json: new *read-json-int* variable.
* parser.h (struct parser): New member, read_json_int.
* parser.c (read_json_int_s): New symbol variable
for *read-json-int* symbol.
(parser_common_init): Look up value of *read-json-int*
and store in read_json_int struct member.
(parse_init): Initialize read_json_int_s with interned
symbol and also register the dynamic variable.
* parser.l (grammar): Extend the {JNUM} rule to check
the read_json_int flag and produce an integer value if
the lexeme does not contain a decimal point, e or E.
* tests/010/json.tl: New tests.
* txr.1: Documented.
* lex.yy.c.shipped: Regenerated.
Diffstat (limited to 'parser.c')
-rw-r--r-- | parser.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -77,7 +77,7 @@ val parser_s, unique_s, circref_s; val listener_hist_len_s, listener_multi_line_p_s, listener_sel_inclusive_p_s; val listener_pprint_s, listener_greedy_eval_s, listener_auto_compound_s; -val rec_source_loc_s, read_unknown_structs_s, read_bad_json_s; +val rec_source_loc_s, read_unknown_structs_s, read_bad_json_s, read_json_int_s; val json_s; val intr_s; @@ -131,6 +131,7 @@ void parser_common_init(parser_t *p) val rec_source_loc_var = lookup_var(nil, rec_source_loc_s); val read_unknown_structs_var = lookup_var(nil, read_unknown_structs_s); val read_bad_json_var = lookup_var(nil, read_bad_json_s); + val read_json_int = lookup_var(nil, read_json_int_s); p->parser = nil; p->lineno = 1; @@ -159,6 +160,7 @@ void parser_common_init(parser_t *p) p->rec_source_loc = !nilp(cdr(rec_source_loc_var)); p->read_unknown_structs = !nilp(cdr(read_unknown_structs_var)); p->read_bad_json = !nilp(cdr(read_bad_json_var)); + p->read_json_int = !nilp(cdr(read_json_int)); } void parser_cleanup(parser_t *p) @@ -2068,6 +2070,7 @@ void parse_init(void) rec_source_loc_s = intern(lit("*rec-source-loc*"), user_package); read_unknown_structs_s = intern(lit("*read-unknown-structs*"), user_package); read_bad_json_s = intern(lit("*read-bad-json*"), user_package); + read_json_int_s = intern(lit("*read-json-int*"), user_package); json_s = intern(lit("json"), user_package); unique_s = gensym(nil); @@ -2092,6 +2095,7 @@ void parse_init(void) reg_var(rec_source_loc_s, nil); reg_var(read_unknown_structs_s, nil); reg_var(read_bad_json_s, nil); + reg_var(read_json_int_s, nil); reg_fun(circref_s, func_n1(circref)); reg_fun(intern(lit("parse-errors"), user_package), func_n1(parse_errors)); reg_fun(intern(lit("repl"), system_package), func_n4(repl)); |