Skip to content

Commit 5c54147

Browse files
committed
Double-bar allow for codes
1 parent 2912ccf commit 5c54147

File tree

2 files changed

+21
-66
lines changed

2 files changed

+21
-66
lines changed

src/internal.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -791,7 +791,6 @@ struct parser_ {
791791
unsigned depth, read_term_slots, num_vars;
792792
unsigned nesting_parens, nesting_braces, nesting_brackets;
793793
int quote_char, entered;
794-
int8_t dq_consing;
795794
bool error, if_depth[MAX_IF_DEPTH];
796795
bool was_consing:1;
797796
bool was_string:1;

src/parser.c

Lines changed: 21 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,6 @@ void parser_reset(parser *p)
363363
p->num_vars = 0;
364364
p->start_term = true;
365365
p->error = false;
366-
p->dq_consing = 0;
367366
p->error_desc = NULL;
368367
p->cl->cidx = 0;
369368
p->flags = p->m->flags;
@@ -3130,46 +3129,6 @@ bool get_token(parser *p, bool last_op, bool was_postfix)
31303129
p->v.num_cells = 1;
31313130
p->quote_char = 0;
31323131
p->was_string = p->is_string = p->is_quoted = p->is_var = p->is_op = p->is_symbol = false;
3133-
3134-
if (p->dq_consing && (*src == '"') && (src[1] == '"')) {
3135-
src++;
3136-
} else if (p->dq_consing && (*src == '"')) {
3137-
SB_strcat(p->token, "]");
3138-
p->srcptr = (char*)++src;
3139-
p->dq_consing = 0;
3140-
return true;
3141-
}
3142-
3143-
if (p->dq_consing < 0) {
3144-
SB_strcat(p->token, ",");
3145-
p->dq_consing = 1;
3146-
return true;
3147-
}
3148-
3149-
if (p->dq_consing) {
3150-
int ch = get_char_utf8(&src);
3151-
3152-
if ((ch == '\\') && p->flags.character_escapes) {
3153-
ch = get_escape(p, &src, &p->error, false);
3154-
3155-
if (p->error) {
3156-
if (!p->do_read_term)
3157-
fprintf(stderr, "Error: syntax error, illegal character escape <<%s>>, %s:%d\n", p->srcptr, get_loaded(p->m, p->m->filename), p->line_num);
3158-
3159-
p->error_desc = "illegal_character_escape";
3160-
p->error = true;
3161-
return false;
3162-
}
3163-
}
3164-
3165-
SB_sprintf(p->token, "%u", ch);
3166-
p->srcptr = (char*)src;
3167-
set_smallint(&p->v, ch);
3168-
p->v.tag = TAG_INT;
3169-
p->dq_consing = -1;
3170-
return true;
3171-
}
3172-
31733132
src = eat_space(p);
31743133

31753134
if (!src || !*src) {
@@ -3219,21 +3178,9 @@ bool get_token(parser *p, bool last_op, bool was_postfix)
32193178
p->quote_char = *src++;
32203179
p->is_quoted = true;
32213180

3222-
if ((p->quote_char == '"') && p->flags.double_quote_codes) {
3223-
SB_strcpy(p->token, "[");
3224-
3225-
if ((*src == '"') && (src[1] != '"')) {
3226-
SB_strcat(p->token, "]");
3227-
p->srcptr = (char*)++src;
3228-
return true;
3229-
}
3230-
3231-
p->dq_consing = 1;
3232-
p->quote_char = 0;
3233-
p->srcptr = (char*)src;
3234-
return true;
3235-
} else if ((p->quote_char == '"') && p->flags.double_quote_chars)
3181+
if ((p->quote_char == '"') && !p->flags.double_quote_atom) {
32363182
p->is_string = true;
3183+
}
32373184

32383185
for (;;) {
32393186
int ch = 0;
@@ -3284,9 +3231,9 @@ bool get_token(parser *p, bool last_op, bool was_postfix)
32843231
ch = *src;
32853232

32863233
if (iswalnum(ch) || (ch == '_') || (ch == '!')
3287-
|| (ch == '(') || ch == ')'
3288-
|| (ch == '[') || ch == ']'
3289-
|| (ch == '{') || ch == '}'
3234+
|| (ch == '(') || (ch == ')')
3235+
|| (ch == '[') || (ch == ']')
3236+
|| (ch == '{') || (ch == '}')
32903237
|| (ch == '-')
32913238
) {
32923239
src = (char*)src;
@@ -3303,18 +3250,26 @@ bool get_token(parser *p, bool last_op, bool was_postfix)
33033250
if (any)
33043251
SB_putchar(p->token, ',');
33053252

3306-
SB_putchar(p->token, '\'');
3253+
if (p->flags.double_quote_chars) {
3254+
SB_putchar(p->token, '\'');
3255+
}
33073256

33083257
char *ptr = strchr(g_escapes, ch);
33093258

3310-
if (ptr) {
3259+
if (ptr && p->flags.double_quote_chars) {
33113260
size_t n = ptr - g_escapes;
33123261
SB_putchar(p->token, '\\');
33133262
SB_putchar(p->token, g_anti_escapes[n]);
3314-
} else
3263+
} else if (p->flags.double_quote_codes) {
3264+
SB_sprintf(p->token, "%u", ch);
3265+
} else {
33153266
SB_putchar(p->token, ch);
3267+
}
3268+
3269+
if (p->flags.double_quote_chars) {
3270+
SB_putchar(p->token, '\'');
3271+
}
33163272

3317-
SB_putchar(p->token, '\'');
33183273
any = true;
33193274
}
33203275

@@ -3380,6 +3335,7 @@ bool get_token(parser *p, bool last_op, bool was_postfix)
33803335
p->quote_char = 0;
33813336
break;
33823337
}
3338+
33833339
src++;
33843340
continue;
33853341
}
@@ -3415,9 +3371,6 @@ bool get_token(parser *p, bool last_op, bool was_postfix)
34153371
}
34163372

34173373
SB_putchar(p->token, ch);
3418-
3419-
if (!*src)
3420-
break;
34213374
}
34223375

34233376
if (p->quote_char && p->fp) {
@@ -4385,6 +4338,9 @@ unsigned tokenize(parser *p, bool is_arg_processing, bool is_consing)
43854338
c->val_chr[toklen] = '\0';
43864339
c->chr_len = toklen;
43874340
} else {
4341+
if (p->is_string && p->flags.double_quote_codes)
4342+
c->flags |= FLAG_CSTR_CODES;
4343+
43884344
if (p->is_string) {
43894345
c->flags |= FLAG_CSTR_STRING;
43904346
c->arity = 2;

0 commit comments

Comments
 (0)