1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

ripper: fix escaped space

* parse.y: use tSP same as ripper instead of tSPACE.
  [ruby-core:86080] [Bug #14597]

* ext/ripper/eventids2.c: tSP is defined in ripper.c now.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62727 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2018-03-12 07:55:17 +00:00
parent 26eb7b3d8e
commit 7773cfa496
3 changed files with 17 additions and 11 deletions

View file

@ -1,12 +1,13 @@
#define tIGNORED_NL (tLAST_TOKEN + 1)
#define tCOMMENT (tLAST_TOKEN + 2)
#define tEMBDOC_BEG (tLAST_TOKEN + 3)
#define tEMBDOC (tLAST_TOKEN + 4)
#define tEMBDOC_END (tLAST_TOKEN + 5)
#define tSP (tLAST_TOKEN + 6)
#define tHEREDOC_BEG (tLAST_TOKEN + 7)
#define tHEREDOC_END (tLAST_TOKEN + 8)
#define k__END__ (tLAST_TOKEN + 9)
enum {
tIGNORED_NL = tLAST_TOKEN + 1,
tCOMMENT,
tEMBDOC_BEG,
tEMBDOC,
tEMBDOC_END,
tHEREDOC_BEG,
tHEREDOC_END,
k__END__
};
typedef struct {
ID ripper_id_backref;

View file

@ -838,7 +838,7 @@ static void token_info_pop(struct parser_params*, const char *token, const rb_co
%token <id> '.'
/* escaped chars, should be ignored otherwise */
%token <id> '\\' "backslash"
%token tSPACE "escaped space"
%token tSP "escaped space"
%token <id> '\t' "escaped horizontal tab"
%token <id> '\f' "escaped form feed"
%token <id> '\r' "escaped carriage return"
@ -8106,7 +8106,7 @@ parser_yylex(struct parser_params *p)
dispatch_scan_event(p, tSP);
goto retry; /* skip \\n */
}
if (c == ' ') return tSPACE;
if (c == ' ') return tSP;
if (ISSPACE(c)) return c;
pushback(p, c);
return '\\';

View file

@ -840,6 +840,11 @@ class TestRipper::ScannerEvents < Test::Unit::TestCase
scan('sp', "%w( w )")
assert_equal [],
scan('sp', "p(/ /)")
assert_equal ["\\\n"],
scan('sp', "\\\n")
assert_equal ['\ '],
scan('sp', '\ ')
end
# `nl' event always means End-Of-Statement.