From 8d73ce2e80a9c0f3b9c0ce5973995c0904f3a467 Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 17 Sep 2003 11:34:02 +0000 Subject: * parse.y (tokadd_string, parse_string, yylex): escaped terminator is now interpreted as is. [ruby-talk:82206] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@4565 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 11 ++++++++--- parse.y | 54 ++++++++---------------------------------------------- 2 files changed, 16 insertions(+), 49 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1c25f3c2f..c42ae387b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Sep 17 20:34:00 2003 Nobuyoshi Nakada + + * parse.y (tokadd_string, parse_string, yylex): escaped terminator + is now interpreted as is. [ruby-talk:82206] + Wed Sep 17 18:52:36 2003 Minero Aoki * test/fileutils/fileassertions.rb: new file. @@ -20,7 +25,7 @@ Wed Sep 17 18:03:30 2003 GOTOU Yuuzou * ext/openssl/extconf.rb: add check for assert.h. - * ext/openssl/ossl.c (ossl_buf2str): new function to convert + * ext/openssl/ossl.c (ossl_buf2str): new function to convert C buffer to String and free buffer. * ext/openssl/ossl.c (ossl_x509_ary2sk): new function to convert @@ -73,7 +78,7 @@ Mon Sep 15 19:02:52 2003 NAKAMURA, Hiroshi * lib/csv.rb: add extra pamameter to specify row(record) separater character. To parse Mac's CR separated CSV, do like this. - CSV.open("mac.csv", "r", ?,, ?\r) { |row| p row.to_a } + CSV.open("mac.csv", "r", ?,, ?\r) { |row| p row.to_a } The 3rd parameter in this example ?, is for column separater and the 4th ?\r is for row separater. Row separater is nil by default. Nil separater means "\r\n" or "\n". @@ -868,7 +873,7 @@ Fri Aug 15 01:34:23 2003 Michal Rokos * ext/openssl/ossl_pkey_{dh|dsa|rsa}.c: adapt to this cb * ext/openssl/openssl_missing.[ch]: add (0.9.6x, x diff --git a/parse.y b/parse.y index 259f211be..9671ff97f 100644 --- a/parse.y +++ b/parse.y @@ -108,10 +108,6 @@ static int in_single = 0; static int in_def = 0; static int compile_for_eval = 0; static ID cur_mid = 0; -static int quoted_term; -#define quoted_term_char ((unsigned char)quoted_term) -#define WHEN_QUOTED_TERM(x) ((quoted_term >= 0) && (x)) -#define QUOTED_TERM_P(c) WHEN_QUOTED_TERM((c) == quoted_term_char) static NODE *cond(); static NODE *logop(); @@ -174,7 +170,6 @@ static void top_local_setup(); #define NODE_STRTERM NODE_ZARRAY /* nothing to gc */ #define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */ -#define ESCAPED_TERM (1 << CHAR_BIT) #define SIGN_EXTEND(x,n) (((1<<(n))-1-((x)&~(~0<<(n))))^~(~0<<(n))) #define nd_func u1.id #if SIZEOF_SHORT == 2 @@ -263,7 +258,7 @@ static void top_local_setup(); %type mlhs mlhs_head mlhs_basic mlhs_entry mlhs_item mlhs_node %type fitem variable sym symbol operation operation2 operation3 %type cname fname op f_rest_arg -%type f_norm_arg f_arg term_push +%type f_norm_arg f_arg %token tUPLUS /* unary+ */ %token tUMINUS /* unary- */ %token tPOW /* ** */ @@ -2050,7 +2045,7 @@ string_content : tSTRING_CONTENT lex_strterm = $2; $$ = NEW_EVSTR($3); } - | tSTRING_DBEG term_push + | tSTRING_DBEG { $$ = lex_strterm; lex_strterm = 0; @@ -2058,11 +2053,10 @@ string_content : tSTRING_CONTENT } compstmt '}' { - quoted_term = $2; - lex_strterm = $3; - if (($$ = $4) && nd_type($$) == NODE_NEWLINE) { + lex_strterm = $2; + if (($$ = $3) && nd_type($$) == NODE_NEWLINE) { $$ = $$->nd_next; - rb_gc_force_recycle((VALUE)$4); + rb_gc_force_recycle((VALUE)$3); } $$ = new_evstr($$); } @@ -2074,16 +2068,6 @@ string_dvar : tGVAR {$$ = NEW_GVAR($1);} | backref ; -term_push : /* none */ - { - if (($$ = quoted_term) == -1 && - nd_type(lex_strterm) == NODE_STRTERM && - !nd_paren(lex_strterm)) { - quoted_term = nd_term(lex_strterm); - } - } - ; - symbol : tSYMBEG sym { lex_state = EXPR_END; @@ -2450,7 +2434,7 @@ static char *lex_pend; static int yyerror(msg) - char *msg; + const char *msg; { char *p, *pe, *buf; int len, i; @@ -2535,7 +2519,6 @@ yycompile(f, line) ruby_eval_tree = 0; heredoc_end = 0; lex_strterm = 0; - quoted_term = -1; ruby_current_node = 0; ruby_sourcefile = rb_source_filename(f); n = yyparse(); @@ -2993,10 +2976,6 @@ tokadd_string(func, term, paren, nest) } else if (c == '\\') { c = nextc(); - if (QUOTED_TERM_P(c)) { - pushback(c); - return c; - } switch (c) { case '\n': if (func & STR_FUNC_QWORDS) break; @@ -3068,9 +3047,7 @@ parse_string(quote) do {c = nextc();} while (ISSPACE(c)); space = 1; } - if ((c == term && !quote->nd_nest) || - (c == '\\' && WHEN_QUOTED_TERM(peek(quoted_term_char)) && - (c = nextc()) == term)) { + if (c == term && !quote->nd_nest) { if (func & STR_FUNC_QWORDS) { quote->nd_func = -1; return ' '; @@ -4095,13 +4072,6 @@ yylex() goto retry; /* skip \\n */ } pushback(c); - if (QUOTED_TERM_P(c)) { - if (!(quoted_term & ESCAPED_TERM)) { - rb_warn("escaped terminator '%c' inside string interpolation", c); - quoted_term |= ESCAPED_TERM; - } - goto retry; - } return '\\'; case '%': @@ -4111,14 +4081,6 @@ yylex() c = nextc(); quotation: - if (c == '\\' && WHEN_QUOTED_TERM(peek(quoted_term_char))) { - c = nextc(); - if (!(quoted_term & ESCAPED_TERM)) { - rb_warn("escaped terminator '%s%c' inside string interpolation", - (c == '\'' ? "\\" : ""), c); - quoted_term |= ESCAPED_TERM; - } - } if (!ISALNUM(c)) { term = c; c = 'Q'; @@ -4856,7 +4818,7 @@ assignable(id, val) return NEW_CVDECL(id, val); } else { - rb_compile_error("identifier %s is not valid", rb_id2name(id)); + rb_compile_error("identifier %s is not valid", rb_id2name(id)); } return 0; } -- cgit