Commit graph

1367 commits

Author SHA1 Message Date
nobu
448d1d147d parse.y: last content of heredoc
* parse.y (parser_here_document): store dispatched result of
  on_tstring_content at the last fragment of a here document.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52777 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-28 10:33:58 +00:00
nobu
6c0cf1848e parse.y: reduce ifdefs
* parse.y (dispatch_ignored_scan_event, has_delayed_token): more
  macros to reduce ifdefs.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52763 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-27 02:22:57 +00:00
nobu
b0fb3ff1b2 parse.y: ripper for warnings
* parse.y (parser_yylex): deal with magic comment warnings also in
  ripper.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52734 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-24 07:12:56 +00:00
nobu
70d2b335f2 parse.y: fix dispatch_scan_event
* parse.y (dispatch_scan_event): fix wrong macro at r52547.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52733 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-24 07:12:43 +00:00
nobu
7dc4929214 compile.c: move logop DCE
* compile.c (iseq_peephole_optimize): remove unreachable code
  chunk after jump/leave.
* parse.y: move dead code elimination of logical operation to
  compile.c.  not to warn logical operation of literal constants.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52711 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-22 07:53:37 +00:00
nobu
aa4ab1814d parse.y: optimize condition for unless
* parse.y (new_unless): optimize constant condition for `unless`
  as well as `if`.  [Fix GH-1092]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52553 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-13 01:36:42 +00:00
nobu
d674e6dfec parse.y: exact magic comment name
* parse.y (parser_magic_comment): should match exactly.
  [ruby-core:71460] [Bug #11679]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52550 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-12 09:44:29 +00:00
nobu
68e16ddd79 parse.y: ANDDOT fluent interface
* parse.y (parser_yylex): ANDDOT at the head of the line denote
  line continuation from previous one to support fluent interface,
  as well as single dot.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52548 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-12 05:17:06 +00:00
nobu
88edab89f4 parse.y: simplify
* parse.y (parser_yylex): reduce RIPPER ifdefs.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52547 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-12 05:16:03 +00:00
nobu
a01b6453eb Rename DOTQ to ANDDOT
* defs/id.def, parse.y: Switch internal token name to reflect
  current form of safe-call operator.  [Fix GH-1090]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52525 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-10 09:42:27 +00:00
nobu
837babd564 change DOTQ
* defs/id.def (token_ops), parse.y (parser_yylex): change DOTQ
  from ".?" to "&.".  [ruby-core:71363] [Feature #11537]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52462 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-06 03:39:23 +00:00
nobu
dfa75017be parse.y: fix segv after invalid keyword argument
* parse.y (kwd_append): fix segv after invalid keyword argument,
  preceding keyword list is NULL when syntax error is there.
  [ruby-core:71356] [Bug #11663]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52461 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-06 00:01:29 +00:00
nobu
fcd1535232 parse.y: CALL_Q_P
* parse.y (CALL_Q_P): extract common condition for safe-call
  token.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52457 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-05 01:24:18 +00:00
nobu
a3ee54f8a6 parse.y: revert lbracket
* parse.y (lbracket): remove .? before aref.  [Feature #11537]
  revert r52422 and r52424

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52430 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-03 00:27:04 +00:00
ngoto
71c972c05b * parse.y (NO_QCALL): fix type mismatch of operands that causes
compile error with Oracle Solaris Studio on Solaris.
  [Bug #11645] [ruby-dev:49327]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52424 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-02 17:10:38 +00:00
nobu
dbf73f6fc2 parse.y: lbracket
* parse.y (lbracket): support .? before aref.  [Feature #11537]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52422 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-02 11:07:13 +00:00
nobu
7484d07ca7 parse.y: invalid symbol
* parse.y (parser_yylex): ':' separated by a comment and a newline
  is not valid as symbol.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52418 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-01 00:12:12 +00:00
nobu
9d64a54209 internal.h: RUBY_DTRACE_HOOK
* internal.h (RUBY_DTRACE_HOOK): extract from
  RUBY_DTRACE_CREATE_HOOK for other type hooks.

* gc.c (RUBY_DTRACE_GC_HOOK): ditto.

* parse.y (RUBY_DTRACE_PARSE_HOOK): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52399 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-31 01:02:29 +00:00
nobu
107b0dc8cd parse.y: fix op_assign type
* parse.y (new_attr_op_assign): fix op_assign type, which is
  already an ID since r52284.  [Feature #11537]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-28 04:29:41 +00:00
nobu
506e50b430 parse.y: fix ripper
* parse.y (call_op, call_op2): fix values on ripper.  [Feature #11537]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52284 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-26 08:11:55 +00:00
nobu
603b000dd0 parse.y: call_op2
* parse.y (call_op2): separate from call_op and also allow "::",
  while dot_or_colon should not allow ".?".  [Feature #11537]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52282 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-26 03:55:08 +00:00
nobu
11ec42e377 parse.y: canonical name
* parse.y (parser_magic_comment): intern canonical name.
  InstructionSequence.compile_options are case-sensitive while
  pragma names are case-insensitive.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52260 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-23 22:41:06 +00:00
nobu
0b7d473734 safe navigation attrset
* compile.c (iseq_compile_each): support safe navigation of simple
  attribute assignment.  [Feature #11537]
* parse.y (mlhs_node, lhs, attrset_gen): ditto.  keep mid
  non-attrset as the sign of safe navigation.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52234 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-23 01:49:38 +00:00
nobu
a356fe1c35 Safe navigation operator
* compile.c (iseq_peephole_optimize): peephole optimization for
  branchnil jumps.
* compile.c (iseq_compile_each): generate save navigation operator
  code.
* insns.def (branchnil): new opcode to pop the tos and branch if
  it is nil.
* parse.y (NEW_QCALL, call_op, parser_yylex): parse token '.?'.
  [Feature #11537]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52214 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-22 06:30:12 +00:00
nobu
a76fdea9fc parse.y: magic comment w/o indicators
* parse.y (parser_magic_comment): allow a sole magic comment without
  indicators, neither other non-space comments.  [Feature #8976]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52208 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-21 09:34:09 +00:00
nobu
e21f1875b7 parse.y: fix ripper warnings
* parse.y (parser_nextc): send a warning to ripper, not to STDERR
  always.
* parse.y (rb_warn1, rb_warning1): move argument conversions to
  callers.  PRIsVALUE is not valid in String#%.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52122 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-14 04:58:47 +00:00
nobu
b0e372a867 parse.y: move ripper_id2sym
* parse.y (new_attr_op_assign): move ripper_id2sym from each
  rules.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52115 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-12 03:26:24 +00:00
nobu
c2310baf9a parse.y: reorder conditions
* parse.y (token_info_pop): scan lex buffer only when token info
  is enabled.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51984 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-29 16:47:13 +00:00
nobu
aad3a8679f parse.y: token length
* parse.y (token_info_push, token_info_push): add token length
  parameter instead of strlen.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51983 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-29 16:38:02 +00:00
nobu
17ff3b9b85 parse.y: fix memory leak
* parse.y (parser_free): fix memory leak at syntax error when
  warn-indent is enabled.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51981 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-29 16:34:37 +00:00
eregon
b881747bbd * parse.y: fix minor typo. [ci skip][fix GH-1038].
Patch by @ltratt.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51980 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-29 13:29:44 +00:00
nobu
13d53f9ae9 parse.y: mark
* parse.y (parser_mark): mark compile option hash.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-29 12:13:30 +00:00
nobu
859337b17b fronzen-string-literal pragma
* compile.c (iseq_compile_each): override compile option by option
  given by pragma.
* iseq.c (rb_iseq_make_compile_option): extract a function to
  overwrite rb_compile_option_t.
* parse.y (parser_set_compile_option_flag): introduce pragma to
  override compile options.
* parse.y (magic_comments): new pragma "fronzen-string-literal".
  [Feature #8976]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51953 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-27 06:44:02 +00:00
nobu
3fa061cd57 parse.y: fix token
* parse.y (paren_args): fix separator token at `foo::bar()` in
  ripper.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51927 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-24 08:25:11 +00:00
nobu
6628cd6b37 parse.y: simplify ripper_id2sym
* parse.y (ripper_id2sym): remove unnecessary comparison as
  rb_ispunct has stricter condition, and cast explicitly to
  suppress warnings.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51905 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-19 23:04:48 +00:00
nobu
b4efab9ed9 parse.y: keep literal encoding
* parse.y (literal_concat_gen, evstr2dstr_gen): keep literal
  encoding beginning with an interpolation same as the source file
  encoding.  [ruby-core:70703] [Bug #11519]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51820 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-10 13:48:51 +00:00
nobu
0958af2ad4 parse.y: fix labelarg
* parse.y (IS_BEG): include labeled argument state, which was
  EXPR_LABELARG.  [ruby-dev:49221] [Bug #11456]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51624 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-18 08:19:24 +00:00
nobu
94b1db5d67 parse.y: fix block after conditional
* parse.y: fix syntax error at do-block after a conditional
  operator.  separate label-allowed and after-a-label states from
  others as bit flags.  [ruby-dev:48790] [Bug #10653]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51617 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-17 11:56:55 +00:00
nobu
23352f62a7 parse.y: revert arg in r47649
* parse.y (arg): revert a part of r47649.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51616 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-17 11:56:31 +00:00
normal
2c80c9495e rb_parser_compile_*: remove volatile arg
RB_GC_GUARD is sufficient to prevent tail call optimization from
making the object invisible from GC., and we don't need to
encourage more volatile usage.

* parse.y (rb_parser_compile_cstr): remove volatile arg
  (rb_parser_compile_string): ditto
  (rb_parser_compile_file): ditto
  (rb_parser_compile_string_path): ditto
  (rb_parser_compile_file_path): ditto
  [ruby-core:70323] [Misc #11431]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51537 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-11 20:35:12 +00:00
nobu
d311b7d0eb parse.y: optional superclass
* parse.y (superclass): make superclass rule optional and allow
  any contents without a terminator.  [EXPERIMENTAL]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51529 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-11 02:53:31 +00:00
nobu
48baa71ec6 parse.y: shrink parser_params
* parse.y (parser_params): turn in_def and in_single into bit
  flags and reduce the size by 2-words.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51505 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-07 12:04:22 +00:00
nobu
ebdf35e1e4 parse.y: remove prefixes
* parse.y (parser_params): remove redundant prefixes.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51504 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-07 08:30:22 +00:00
nobu
3168ffbd54 parse.y: require pure parser
* parse.y (yylex): non-pure parser has not been supported since
  merger of ripper.  change argument types from void pointers.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51503 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-07 08:23:09 +00:00
nobu
dfec9d9788 parse.y: pop cmdarg
* parse.y (lambda_body): pop cmdarg stack for lookahead
  token.  [ruby-core:70067] [Bug #11380]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51350 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-23 00:05:30 +00:00
nobu
da4d4c0024 parse.y: call rb_intern2
* parse.y (parse_ident): call rb_intern2 with the known length
  instead of strlen().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51332 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-22 00:36:09 +00:00
normal
8754f619d5 parse.y (parser_initialize): avoid redundant zero-ing
TypedData_Make_Struct already initializes fields to zero by default,
so there's no need to waste code re-zeroing them.

Size reduction on 32-bit x86:

  text    data     bss     dec     hex filename
 187231    2372      80  189683   2e4f3 parse.o.before
 186939    2372      80  189391   2e3cf parse.o

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51304 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-20 06:05:08 +00:00
normal
12652453b2 parse.y (ripper_initialize): fixup r51302
Missed eofp bitfield change in ripper_initialize in r51302 :x
("parse.y (struct parser_params): pack to 4 cache lines on x86-64")

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51303 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-20 03:27:50 +00:00
normal
3114f4a2ca parse.y (struct parser_params): pack to 4 cache lines on x86-64
This reduces the struct from 256 (from 288) bytes on my x86-64
system, allowing the struct to fit cleanly into 4 cache lines
(if a malloc implementation allows it).

* parse.y (struct parser_params): pack: 88 => 256 bytes on 64-bit
  [ruby-core:70034] [Feature #11371]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51302 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-20 03:21:58 +00:00
zzak
d5e6c16762 * parse.y: Improve duplicate key warning with patch by @andremedeiros
[Fix GH-938] https://github.com/ruby/ruby/pull/938 [Bug #11327]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51196 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-09 00:27:04 +00:00