Commit graph

1182 commits

Author SHA1 Message Date
nobu
a80d546264 parse.y: predefined ID
* parse.y (reg_named_capture_assign_gen): use predefined ID
  instead of rb_intern.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48502 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-19 16:01:02 +00:00
nobu
595ce95d3c parse.y: append directly to delayed content
* parse.y (parser_here_document): append byte sequence directly to
  the delayed content instead of creating an intermediate string
  object.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48500 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-19 15:26:41 +00:00
nobu
5023492957 parse.y: fix literal symbol list node type
* parse.y (symbol_list): fix the node type of literal symbol list
  with no interpolation.  [ruby-core:66343]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48484 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-18 19:16:27 +00:00
ko1
fbebd502f9 * rewrite method/block parameter fitting logic to optimize
keyword arguments/parameters and a splat argument.
  [Feature #10440] (Details are described in this ticket)
  Most of complex part is moved to vm_args.c.
  Now, ISeq#to_a does not catch up new instruction format.
* vm_core.h: change iseq data structures.
  * introduce rb_call_info_kw_arg_t to represent keyword arguments.
  * add rb_call_info_t::kw_arg.
  * rename rb_iseq_t::arg_post_len to rb_iseq_t::arg_post_num.
  * rename rb_iseq_t::arg_keywords to arg_keyword_num.
  * rename rb_iseq_t::arg_keyword to rb_iseq_t::arg_keyword_bits.
    to represent keyword bitmap parameter index.
    This bitmap parameter shows that which keyword parameters are given
    or not given (0 for given).
    It is refered by `checkkeyword' instruction described bellow.
  * rename rb_iseq_t::arg_keyword_check to rb_iseq_t::arg_keyword_rest
    to represent keyword rest parameter index.
  * add rb_iseq_t::arg_keyword_default_values to represent default
    keyword values.
  * rename VM_CALL_ARGS_SKIP_SETUP to VM_CALL_ARGS_SIMPLE
    to represent
      (ci->flag & (SPLAT|BLOCKARG)) &&
      ci->blockiseq == NULL &&
      ci->kw_arg == NULL.
* vm_insnhelper.c, vm_args.c: rewrite with refactoring.
  * rewrite splat argument code.
  * rewrite keyword arguments/parameters code.
  * merge method and block parameter fitting code into one code base.
* vm.c, vm_eval.c: catch up these changes.
* compile.c (new_callinfo): callinfo requires kw_arg parameter.
* compile.c (compile_array_): check the last argument Hash object or
  not. If Hash object and all keys are Symbol literals, they are
  compiled to keyword arguments.
* insns.def (checkkeyword): add new instruction.
  This instruction check the availability of corresponding keyword.
  For example, a method "def foo k1: 'v1'; end" is cimpiled to the
  following instructions.
    0000 checkkeyword     2, 0  # check k1 is given.
    0003 branchif         9     # if given, jump to address #9
    0005 putstring        "v1"
    0007 setlocal_OP__WC__0 3   # k1 = 'v1'
    0009 trace            8
    0011 putnil
    0012 trace            16
    0014 leave
* insns.def (opt_send_simple): removed and add new instruction
  "opt_send_without_block".
* parse.y (new_args_tail_gen): reorder variables.
  Before this patch, a method "def foo(k1: 1, kr1:, k2: 2, **krest, &b)"
  has parameter variables "k1, kr1, k2, &b, internal_id, krest",
  but this patch reorders to "kr1, k1, k2, internal_id, krest, &b".
  (locate a block variable at last)
* parse.y (vtable_pop): added.
  This function remove latest `n' variables from vtable.
* iseq.c: catch up iseq data changes.
* proc.c: ditto.
* class.c (keyword_error): export as rb_keyword_error().
* common.mk: depend vm_args.c for vm.o.
* hash.c (rb_hash_has_key): export.
* internal.h: ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48239 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-02 18:02:55 +00:00
nobu
119afd7531 parse.y: separate error messages
* parse.y (parse_atmark): separate error messages for sigil types,
  and make more descriptive

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48221 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-01 06:59:43 +00:00
nobu
b5ba1dcdf0 parse.y: invalid instance/class variable names
* parse.y (parse_atmark): mere atmark and two atmarks without
  succeeding identifiers are invalid as instance/class variable
  names.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48220 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-01 06:45:17 +00:00
nobu
049bbd72e3 parse.y: reset current_arg after block var
* parse.y (block_param_def): reset current_arg after block
  parameter definition, not to warn references in that block body.
  [ruby-core:65990] [Bug #10314]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48190 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-29 15:01:49 +00:00
nobu
6fe9b2b794 parse.y: warn iside a block
* parse.y (gettable_gen): also warn circular argument reference even
  inside a block.  [ruby-core:65990] [Bug #10314]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-29 14:24:24 +00:00
nobu
98ea627561 parse.y: warn circular argument reference
* parse.y (gettable_gen): warn circular argument reference, for
  transition from 2.1 and earlier.  [ruby-core:65990] [Bug #10314]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48188 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-29 12:13:26 +00:00
nobu
d8270efcc9 parse.y: unused member
* parse.y (parser_params): remove unused member `cur_mid`.
  this has been taken over by `in_def` since 1.6.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48187 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-29 11:41:03 +00:00
nobu
92c61ca747 ripper/tools/generate.rb: shorten generated source
* ext/ripper/tools/generate.rb (generate_eventids1): shorten
  generated source.

* ext/ripper/tools/generate.rb (generate_eventids2): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-27 06:38:09 +00:00
nobu
d8e1bf2760 id.h.tmpl: ANDOP and OROP
* template/id.h.tmpl (token_op_ids): define && and || for ripper.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48154 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-27 06:25:59 +00:00
nobu
5a277b4070 parse.y: optimize IDs in ripper
* parse.y: optimize ripper_intern calls, ::, **, -@, +@, <=>, >=,
  <=, ==, ===, !=, =~, !~, <<, >>, and call.

* parse.y: use initialized IDs, warn and warning.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48153 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-27 06:23:09 +00:00
nobu
d1ec43ae7a parse.y: Ripper.sexp returns error
* ext/ripper/lib/ripper/sexp.rb (Ripper.sexp, Ripper.sexp_raw):
  return nil on error.  [ruby-dev:48678] [Bug #10405]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48144 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-26 03:24:18 +00:00
nobu
5940b1f6fc parse.y: fix fluent interface identifier
* parse.y (parser_yylex): dispatch newline and space at fluent
  interface, so that the following identifier does not include the
  space.  [ruby-dev:48684] [Bug #10411]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48126 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-24 13:49:44 +00:00
nobu
fe4ed311d1 parse.y: indent
* parse.y (parser_yylex): adjust indent.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48125 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-24 13:33:06 +00:00
nobu
04e5c65ff7 parse.y: do not use disposed string
* parse.y (parser_here_document): do not append already appended
  and disposed code fragment.  [ruby-dev:48647] [Bug #10392]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-16 06:05:03 +00:00
nobu
4a883ff9a8 parse.y: keep nodes linking
* parse.y (remove_duplicate_keys): should keep nodes linking not
  to be collected.  [Bug #10315]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47898 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-13 00:40:32 +00:00
nobu
37d0c873f6 parse.y: should not eliminate value nodes
* parse.y (remove_duplicate_keys): should not simply eliminate all
  value nodes, which may have side effects.
  [ruby-core:65625] [Bug #10315]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47894 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-12 17:39:29 +00:00
nobu
5fa4d56263 parse.y: remove duplicate keys
* parse.y (remove_duplicate_keys): remove duplicate literal keys,
  i.e., symbols and strings.  [ruby-core:65368] [Bug #10315]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47879 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-11 04:47:06 +00:00
nobu
1571682719 parse.y: precedence of duplicated keys
* parse.y (assocs): concatenate splatted literal hashes.  the
  former key has precedence even if duplicated literal keys
  follow.  [ruby-core:65368] [Bug #10315]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47877 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-11 04:46:42 +00:00
nobu
bc512a375d parse.y: remove unused argument
* parse.y (list_concat): remove unused argument parser, since
  never allocates new node.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47789 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-04 15:07:51 +00:00
nobu
ffe920d674 parse.y: separate ripper data type
* parse.y (parser_data_type): separate ripper data type for from
  parser.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47747 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-30 13:25:28 +00:00
nobu
08248c937c parse.y: label cannot be followed by a modifier
* parse.y (parse_ident): just after a label, new expression should
  start, cannot be a modifier.  [ruby-core:65211] [Bug #10279]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47696 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-23 13:00:27 +00:00
nari
5390e32119 * parse.y (parser_class_nest): unused variable after YARV
merged (r11439).

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47674 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-21 09:52:37 +00:00
nobu
b0c03f63e5 parse.y: quoted ID key
* parse.y (assoc): allow quoted ID as a key of a hash literal.
  [ruby-core:34453] [Feature #4276]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47649 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-20 01:48:43 +00:00
nobu
da7475b00d parse.y: intern_cstr
* parse.y (intern_cstr): remove `_without_pindown` suffix and use
  rb_intern3() as well as RIPPER, for the time being.
  [ruby-core:65009] [Bug #10206]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47569 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-13 01:28:57 +00:00
nobu
3fd37d0824 parse.y: fix warning message
* parse.y (arg_ambiguous_gen): fix warning message, "even" does
  not mean the number of spaces here.  state the place to put a
  space and the operator.  [ruby-core:64790] [Bug #10204]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47431 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-06 02:08:45 +00:00
nobu
66c2bbdea3 parse.y: use rb_ary_tmp_new_fill
* parse.y (coverage): use rb_ary_tmp_new_fill() instead of setting
  internal structure directly.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47296 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-08-27 02:10:22 +00:00
nobu
bef5ddbb71 parser.y: warning with VALUE for ripper
* parse.y (ripper_warnV, ripper_warningV): add versions using
  VALUE for ripper.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47184 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-08-14 23:32:06 +00:00
nobu
02c86ce1ee parse.y: preserve encodings
* parse.y (shadowing_lvar, warn_unused_var),
  (reg_named_capture_assign_iter): preserve encodings in warning
  messages.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47171 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-08-13 12:20:13 +00:00
nobu
a7c4146d9c parse.y: fix invalid char in eval
* parse.y (parser_yylex): fix invalid char in eval, should raise
  an syntax error too, as well as directly coded.
  [ruby-core:64243] [Bug #10117]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47098 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-08-07 16:07:25 +00:00
nobu
2bd1ae1e67 parse.y: preserve encoding
* parse.y (parser_yyerror): preserve source code encoding in
  syntax error messages.  [ruby-core:64228] [Bug #10114]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47090 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-08-06 21:04:52 +00:00
normal
6358bae370 struct parse_params: trivial packing
* parse.y (struct parse_params): shrink to 320 to 304 bytes on 64-bit

Some elements may be removed/resized as well, but not as important
as reducing more-frequently allocated structures.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46954 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-25 21:47:20 +00:00
normal
48a2b96d2b introduce ZALLOC{,_N} to replace ALLOC{,_N}+MEMZERO use
Using calloc where possible reduces code and binary sizes.

* include/ruby/ruby.h (ZALLOC, ZALLOC_N): implement
  (Data_Make_Struct, TypedData_Make_Struct):
  ZALLOC replaces ALLOC+memset
* compile.c (iseq_seq_sequence): ZALLOC_N replaces ALLOC_N+MEMZERO
* cont.c (fiber_t_alloc): ZALLOC replaces ALLOC+MEMZERO
* io.c (rb_io_reopen): ditto
* iseq.c (prepare_iseq_build): ditto
* parse.y (new_args_tail_gen, parser_new, ripper_s_allocate): ditto
* re.c (match_alloc): ditto
* variable.c (rb_const_set): ditto
* ext/socket/raddrinfo.c (get_addrinfo): ditto
* ext/strscan/strscan.c (strscan_s_allocate): ditto
* gc.c (rb_objspace_alloc): calloc replaces malloc+MEMZERO

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-25 21:34:35 +00:00
nobu
be7c04e197 parse.y: dynamic const assign_error in ripper
* parse.y (mlhs_node): dynamic constant assignment in massign
  should cause assign_error, like as single assign and backref
  assignment in massign.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46931 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-24 15:28:14 +00:00
nobu
418c46f284 parse.y: move common code
* parse.y (arg, primary): move common code shared with ripper.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-24 15:28:01 +00:00
nobu
4cd0471178 parse.y: remove garbage
* parse.y (assoc): remove garbage semicolon added by r35489.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46926 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-24 08:22:17 +00:00
nobu
25a2e870d4 parse.y: separate from parse_ident
* parse.y (tokadd_ident, tokenize_ident): extract from
  parse_ident().

* parse.y (parse_gvar, parse_atmark): move tokenization from
  parse_ident().

* parse.y (parse_ident): now deals with non-sigil names only.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46850 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-17 04:30:44 +00:00
nobu
27e1b24776 parse.y: parse_atmark
* parse.y (parse_atmark): extract from parser_yylex().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46849 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-17 04:30:38 +00:00
nobu
db155640b7 parse.y: parse_ident
* parse.y (parse_ident): extract from parser_yylex().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46848 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-17 04:30:34 +00:00
nobu
5faf8f07e9 parse.y: parse_gvar
* parse.y (parse_gvar): extract from parser_yylex().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46847 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-17 04:30:31 +00:00
nobu
d41b3e8874 parse.y: parse_percent
* parse.y (parse_percent): extract from parser_yylex().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46846 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-17 04:30:27 +00:00
nobu
c42029f34a parse.y: parse_qmark
* parse.y (parse_qmark): extract from parser_yylex().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-17 04:30:24 +00:00
nobu
9e09b370c1 parse.y: parse_rational
* parse.y (parse_rational): extract from parse_numeric().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46844 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-17 04:30:21 +00:00
nobu
5000ed38f4 parse.y: parse_numeric
* parse.y (parse_numeric): extract from parser_yylex().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46842 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-17 04:30:13 +00:00
nobu
88d4f46f5e parse.y: negate_lit
* parse.y (negate_lit): alter only literal object itself, not NODE.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-17 04:30:04 +00:00
nobu
d33d22c7a0 parse.y: rename Init_parser
* parse.y (rb_init_parse): rename to get rid of name clash with
  json/parser at statically linking.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46787 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-11 13:52:47 +00:00
nobu
94ce481263 symbol.c, symbol.h: split from parse.y
* symbol.c, symbol.h: Symbol class implementation and internals,
  split from parse.y.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46768 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-09 08:07:32 +00:00
nobu
d299250afa parse.y: adjust argument types
* parse.y (symbols_i): adjust argument types for st_foreach()
  using st_data_t.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46767 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-09 07:31:42 +00:00