@@ -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