diff --git a/ChangeLog b/ChangeLog index ba4cd1af18..b58aebdafa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sun Nov 1 09:12:10 2015 Nobuyoshi Nakada + + * parse.y (parser_yylex): ':' separated by a comment and a newline + is not valid as symbol. + Sat Oct 31 20:15:48 2015 SHIBATA Hiroshi * test/openssl/test_pair.rb: skipped tests if openssl doesn't support diff --git a/parse.y b/parse.y index 4f3d9554b4..bbfcad7bb9 100644 --- a/parse.y +++ b/parse.y @@ -8426,7 +8426,7 @@ parser_yylex(struct parser_params *parser) lex_state = EXPR_DOT; return tCOLON2; } - if (IS_END() || ISSPACE(c)) { + if (IS_END() || ISSPACE(c) || c == '#') { pushback(c); warn_balanced(":", "symbol literal"); lex_state = EXPR_BEG; diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index a047454513..552cf5cd00 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -612,6 +612,12 @@ eom end end + def test_invalid_symbol_space + assert_syntax_error(": foo", /unexpected ':'/) + assert_syntax_error(": #\n foo", /unexpected ':'/) + assert_syntax_error(":#\n foo", /unexpected ':'/) + end + private def not_label(x) @result = x; @not_label ||= nil end