diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-03-18 02:04:23 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-03-18 02:04:23 +0000 |
| commit | 27c6b1359784ff1ae4408d3bff4990789396a9eb (patch) | |
| tree | 6c76e08d5482d9a672d2433f22a49305dca25ea2 /parse.y | |
| parent | b1662e60bc5cae547594ece3d793636a5f5014ef (diff) | |
| download | ruby-27c6b1359784ff1ae4408d3bff4990789396a9eb.tar.gz ruby-27c6b1359784ff1ae4408d3bff4990789396a9eb.tar.xz ruby-27c6b1359784ff1ae4408d3bff4990789396a9eb.zip | |
* parse.y (parse_string): part of multi-byte sequence must not
match to paren.
* parse.y (parse_qstring): ditto.
* parse.y (parse_quotedwords): ditto.
* parse.y (str_extend): handle multi-byte characters.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@2218 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
| -rw-r--r-- | parse.y | 32 |
1 files changed, 20 insertions, 12 deletions
@@ -2608,6 +2608,10 @@ parse_string(func, term, paren) rb_compile_error("unterminated string meets end of file"); return 0; } + if (paren) { + if (c == paren) nest++; + if (c == term && nest-- == 0) break; + } if (ismbchar(c)) { int i, len = mbclen(c)-1; @@ -2635,10 +2639,6 @@ parse_string(func, term, paren) } continue; } - if (paren) { - if (c == paren) nest++; - if (c == term && nest-- == 0) break; - } tokadd(c); } @@ -2682,6 +2682,10 @@ parse_qstring(term, paren) rb_compile_error("unterminated string meets end of file"); return 0; } + if (paren) { + if (c == paren) nest++; + if (c == term && nest-- == 0) break; + } if (ismbchar(c)) { int i, len = mbclen(c)-1; @@ -2709,10 +2713,6 @@ parse_qstring(term, paren) tokadd('\\'); } } - if (paren) { - if (c == paren) nest++; - if (c == term && nest-- == 0) break; - } tokadd(c); } @@ -2743,6 +2743,10 @@ parse_quotedwords(term, paren) rb_compile_error("unterminated string meets end of file"); return 0; } + if (paren) { + if (c == paren) nest++; + if (c == term && nest-- == 0) break; + } if (ismbchar(c)) { int i, len = mbclen(c)-1; @@ -2782,10 +2786,6 @@ parse_quotedwords(term, paren) pushback(c); continue; } - if (paren) { - if (c == paren) nest++; - if (c == term && nest-- == 0) break; - } tokadd(c); } @@ -4107,6 +4107,14 @@ str_extend(list, term, paren) newtok(); return list; } + else if (ismbchar(c)) { + int i, len = mbclen(c)-1; + + for (i = 0; i < len; i++) { + tokadd(c); + c = nextc(); + } + } case '\n': tokadd(c); break; |
