Commit graph

100 commits

Author SHA1 Message Date
usa
b20ecf49d4 merge revision(s) 41343,41360,41386: [Backport #8531]
test/ruby/test_symbol.rb: tests for [Bug #8531]
	* include/ruby/ruby.h, vm_eval.c (rb_funcall_with_block):
	  new function to invoke a method with a block passed
	  as an argument.

	* string.c (sym_call): use the above function to avoid
	  a block sharing. [ruby-dev:47438] [Bug #8531]

	* vm_insnhelper.c (vm_yield_with_cfunc): don't set block
	  in the frame.

	* test/ruby/test_symbol.rb (TestSymbol#test_block_given_to_proc):
	  run related tests.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@41653 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-26 08:11:48 +00:00
usa
b91f5c75ed merge revision(s) 37270: [Backport #7185]
* vm.c (rb_vm_jump_tag_but_local_jump): pass through thrown objects.
	  [ruby-dev:46234] [Bug #7185]

	* vm_eval.c (rb_eval_cmd): if state is non-zero, val should be nil and
	  rb_vm_jump_tag_but_local_jump() just jump tag.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@37551 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-08 05:12:00 +00:00
nobu
e56eea5e37 merge revision(s) r34564:
* vm_eval.c (check_funcall):  Call respond_to? with matching arity for
	  legacy single-argument implementations.  [ruby-trunk - Bug #6000]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@34616 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-15 01:33:56 +00:00
nobu
afcd5562ae merge revision(s) r32855,r32857,r33493,r34554:
* vm_eval.c (check_funcall): try respond_to? first if redefined.
	  [Bug #5158]

	* test/ruby/test_object.rb: tests that respond_to? returns false.

	* vm_eval.c (check_funcall): set array elements one-by-one to fix
	  compile error with Fujitsu C Compiler 5.6 on Solaris 10 on Sparc.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@34615 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-15 01:29:34 +00:00
kosaki
4b295bb7ca merge revision(s) r34399:
* vm_eval.c (vm_call0): should pass block to enumerators.  patched
	  by Kazuki Tsujimoto.  [ruby-dev:44961][Bug #5731]

	* vm_eval.c (method_missing), vm_insnhelper.c (vm_call_method):
	  ditto.  patched by satoshi shiba.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@34450 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-06 20:03:14 +00:00
akr
7da3ea811e * method.h, internal.h iseq.h: declare internal functions.
* compile.c, eval.c, iseq.c, object.c, parse.y, proc.c, process.c,
  thread.c, vm.c, vm_eval.c, vm_insnhelper.c, vm_method.c: don't
  declare internal functions.

  Note that rb_method_entry_eq() is defined in vm_method.c but
  there was a declaration in proc.c with different const-ness.
  Now it is declared in method.h with same const-ness to the
  definition.

* object.c (rb_mod_module_exec): don't declare functions declared in
  include/ruby/intern.h.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32163 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-06-18 03:49:33 +00:00
matz
1df42597d1 cancel subversion backfire. sorry
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31046 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-03-07 08:44:45 +00:00
matz
eb807d42ec * gc.c (rb_gc_set_params): allow GC parameter configuration by
environment variables.  based on a patch from funny-falcon at
  https://gist.github.com/856296, but honors safe level.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31044 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-03-07 08:39:39 +00:00
naruse
18f4f08885 * class.c: fix camelCase to snake_case in documentation code examples.
patched by Andrew Grimm. fixes Bug #4469

* marshal.c: ditto.

* proc.c: ditto.

* sample/biorhythm.rb: ditto.

* vm_eval.c: ditto.

* vm_method.c: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31031 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-03-05 20:25:08 +00:00
nobu
e7c0a6e1d7 * prevent temporary objects from GC, and should not use
RSTRING_PTR() for function calls since it evaluates the argument
  a couple of times.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30922 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-02-20 07:23:55 +00:00
nagachika
ab083dc640 * vm_eval.c (rb_throw_obj): add GC guard to prevent intermediate
variable from GC. [Bug #4322] [ruby-dev:43108]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30657 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-01-26 13:34:20 +00:00
mame
e20d736467 * vm_eval.c (rb_funcall): ensure va_end after va_init_list. Coverity
Scan found this bug.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29798 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-11-15 13:48:37 +00:00
nobu
f5b0cb07e2 * string.c (sym_call), vm.c (invoke_block_from_c),
vm_insnhelper.c (vm_yield_with_cfunc): pass given block.
  [ruby-core:32075]

* vm_eval.c (rb_funcall_passing_block): new function to call
  method with passing given block.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29335 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-09-24 14:45:19 +00:00
nobu
fd0485acf7 * vm_eval.c (vm_call0): fix for VM_METHOD_TYPE_NOTIMPLEMENTED.
[ruby-dev:41953]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28895 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-08-07 04:33:33 +00:00
nobu
0f36e8fc03 * eval.c (frame_func_id), vm_eval.c (rb_iterate),
vm_insnhelper.c (vm_yield_with_cfunc): as the name of a C-level
  block, use the current method ID at the creation point.
  [ruby-dev:41852]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28642 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-07-14 11:23:10 +00:00
nobu
45f6fbf339 * removed trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28085 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-29 18:51:39 +00:00
mame
948185248c * vm_eval.c (rb_f_caller): update rdoc. a patch from Nobuhiro IMAI
<nov at yo.rim.or.jp> in [ruby-dev:41387].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27995 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-24 16:48:00 +00:00
nobu
b32e8a5911 * vm.c (vm_backtrace_each), vm_eval.c (rb_catch_obj): suppress
warnings.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27938 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-21 03:57:11 +00:00
mame
5c94d2d423 * vm_eval.c (rb_f_caller): update rdoc. a patch from Nobuhiro IMAI
<nov at yo.rim.or.jp> in [ruby-dev:41348].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27925 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-20 13:09:28 +00:00
mame
9219029d3c * vm.c (vm_backtrace_each): now takes an init function to distinguish
an empty stack from out of stack.  [ruby-dev:41366]

* vm_eval.c (print_backtrace, rb_thread_backtrace): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27924 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-20 13:07:58 +00:00
mame
56036e3514 * vm_eval.c (rb_f_caller): return [] instead of nil when the function
is called on toplevel.  [ruby-dev:41348]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27895 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-19 11:18:12 +00:00
marcandre
7729de4d91 * array.c: Documentation: change => in call-seq to ->.
Harmonize "#=>" in examples. [ruby-core:30206]

* bignum.c: ditto

* class.c: ditto

* compar.c: ditto

* cont.c: ditto

* dir.c: ditto

* encoding.c: ditto

* enum.c: ditto

* enumerator.c: ditto

* error.c: ditto

* eval.c: ditto

* file.c: ditto

* gc.c: ditto

* io.c: ditto

* load.c: ditto

* marshal.c: ditto

* math.c: ditto

* numeric.c: ditto

* object.c: ditto

* pack.c: ditto

* proc.c: ditto

* process.c: ditto

* random.c: ditto

* range.c: ditto

* re.c: ditto

* ruby.c: ditto

* signal.c: ditto

* sprintf.c: ditto

* string.c: ditto

* struct.c: ditto

* thread.c: ditto

* time.c: ditto

* transcode.c: ditto

* variable.c: ditto

* vm_eval.c: ditto

* vm_method.c: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27865 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-17 21:07:33 +00:00
mame
7e7420cc85 * proc.c (proc_binding): don't propagative filename and line_no of
binding that is created from C level.  [ruby-dev:41322]

* vm_eval.c (eval_string_with_cref): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27817 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-16 08:18:49 +00:00
marcandre
4afa9ed041 * array.c: Harmonize documentation, in particular regarding:
- methods returning enumerators
    - array methods and argument naming (array -> ary, an_array -> new_ary)
    - minor improvements, typo fixed and styling issues

  Other documentation errors fixed:
    - return value was self instead of a new array (or vice-versa) for
      Array#{pop,shift,permutation,repeated_permutation,keep_if}
    - Array#rindex was missing the form with a block.

* dir.c: ditto.

* enum.c: ditto. Modified Enumerable#reverse_each' documentation to clarify
  that #each will be finish before any element is yielded.

* error.c: ditto.

* gc.c: ditto.

* hash.c: ditto.

* io.c: ditto. IO#{codepoints,each_codepoint} fixed as per [ruby-core:23948]

* numeric.c: ditto.

* range.c: ditto.

* string.c: ditto.

* struct.c: ditto.

* vm_eval.c: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27777 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-13 05:49:55 +00:00
mame
b8571b4285 * vm_eval.c (eval_string_with_cref): propagative filename and line_no
of binding.  [ruby-dev:38767] [ruby-core:28307]

* vm_core.h (rb_binding_t), proc.c: add filename and line_no fields to
  preserve them.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27716 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-09 18:41:51 +00:00
nobu
584829aa81 * vm.c (vm_backtrace_each): get rid of use of malloc from signal
handler by using ruby_engine_name.  [ruby-core:29497]

* vm_eval.c (print_backtrace): file may be nil when segfaulted in
  very early stage.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27345 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-04-15 05:38:07 +00:00
wanabe
c46f71399a * proc.c (rb_method_location): return attr's location if it is setup.
[Feature #2084]

* NEWS: follow above.

* vm_method.c (rb_add_method): save attr's location.

* gc.c (mark_method_entry): mark attr's location.

* method.h (rb_method_definition_t): add member to save attr's location.

* vm_eval.c (vm_call0): follow above.

* vm_insnhelper.c (vm_call_method): ditto.

* vm_method.c (rb_method_definition_eq): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27016 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-03-22 11:44:01 +00:00
mame
6ff75042db * compile.c, iseq.c, ruby.c, vm.c, vm_core.h, vm_eval.c: add absolute
path field into rb_iseq_t.  The field contains a string representing
  a path to corresponding source file. or nil when the iseq is created
  from -e, stdin, eval, etc.  This field is used for require_relative.
  [ruby-dev:40004]

* load.c (rb_f_require_relative): add C implementation of
  require_relative.

* prelude.rb (require_relative): get rid of Ruby implementation of
  require_relative.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26959 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-03-16 17:40:00 +00:00
nobu
50c8982ea8 * vm_insnhelper.c (vm_call_cfunc): removed unused variable.
* vm.c (vm_frametype_name): define only when VMDEBUG.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26695 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-02-17 08:05:42 +00:00
mame
69eb602b02 * vm_eval.c (rb_backtrace): "circular require" warning was output to
stdout except the first line.  All line is output to stderr now.
  [ruby-dev:40147]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26443 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-01-27 13:29:01 +00:00
ko1
618445576f * eval.c, vm.c, vm_eval.c, vm_insnhelper.c: fix issues about
return and c-return trace.  This issue skips (c-)return event
  with global jump such as break or return.  This fix make vm invoke
  hooks at stack rewind timing.  fix [ruby-core:27606] [Bug #2610].
* test/ruby/test_settracefunc.rb: add a test for above.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26395 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-01-24 13:52:32 +00:00
mame
052f7f27f2 * vm_eval.c (rb_iterate): remove SEGV (retry).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26133 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-12-20 17:47:02 +00:00
mame
c8b20d0877 * vm_eval.c (rb_iterate): remove SEGV (use the original patch).
[ruby-dev:39874]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26130 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-12-20 14:20:46 +00:00
mame
ae8dc9b722 * vm_eval.c (rb_iterate): pass current block when the argument bl_proc
is NULL.  This behavior can be used to make enumerator faster
  [ruby-dev:39874]

* enumerator.c (enumerator_each): pass current block directly instead
  of trampoline block (enumerator_each_i).

* io.c (argf_each_line, argf_each_byte, argf_each_char): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26128 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-12-20 12:31:26 +00:00
nobu
93278f2387 * vm_eval.c (check_funcall): reset method_missing_reason before
trying the call.  based on a patch from Yehuda Katz in
  [ruby-core:27219].


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26124 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-12-19 00:58:13 +00:00
shugo
9071538179 * vm_eval.c (yield_under): yields self the same as 1.8.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26062 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-12-10 08:24:11 +00:00
shugo
78b2714b60 avoid SEGV in instance_eval without block.
instance_eval does not yield self.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25988 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-12-04 07:09:17 +00:00
shugo
7dbfe89630 * compile.c (compile_cpath, iseq_compile_each): reverted
constant/class variable lookup in instance_eval etc. to the
  behavior of 1.8.
* eval.c (rb_mod_nesting): ditto.
* insns.def (putspecialobject, defineclass): ditto.
* node.h (NODE_FL_CREF_PUSHED_BY_EVAL): ditto.
* vm_core.h (VM_SPECIAL_OBJECT_CONST_BASE): ditto.
* vm_eval.c (yield_under, eval_under): ditto.
* vm_insnhelper.c (vm_cref_push, vm_get_const_base,
  vm_get_ev_const, vm_get_cvar_base): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25984 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-12-03 18:25:57 +00:00
nobu
dd7264ac69 * vm_eval.c (check_funcall_failed): pass ID. [ruby-core:26934]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25959 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-29 07:56:25 +00:00
matz
be21eb5d0f * vm_eval.c (check_funcall_failed): should rescue user raised
NoMethodError.  rescue all NoMethodError if receiver does not
  respond to the method name.  [ruby-dev:39796]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25954 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-28 00:26:27 +00:00
akr
fe97646743 * vm_eval.c (rb_search_method_entry): refine error message.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25922 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-25 11:47:19 +00:00
akr
5181fa2a55 * vm_eval.c (rb_search_method_entry): show flags and klass value in
not implemented error message.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25882 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-21 09:49:30 +00:00
akr
0089bfe4dd * vm_eval.c (rb_search_method_entry): avoid trigraph.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25874 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-20 12:17:29 +00:00
akr
2038c0f360 * vm_eval.c (rb_search_method_entry): show the type of the hidden
object.
  (rb_type_str): new function for above.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25849 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-18 17:52:12 +00:00
shugo
3dc8a69df7 * vm_insnhelper.c (vm_call_method): protected singleton methods of
an object should not be able to called from other instances of the
  class of the object.  [ruby-core:26761]
* vm_eval.c (rb_method_call_status): ditto.
* test/ruby/test_module.rb (test_protected_singleton_method): ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25796 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-16 07:01:44 +00:00
akr
b9e0294eda fix typos.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25635 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-03 17:46:28 +00:00
matz
c0a0aa0c47 * enum.c (enum_count): remove optimization using #size.
revert r25560.

* vm_eval.c (rb_funcall_no_recursive): remove method.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25603 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-31 16:14:38 +00:00
matz
ab32fe26d9 * vm_eval.c (check_funcall): logic updated according to
[ruby-dev:39594].  search method entry, call if it exists;
  otherwise check method_missing, call if it was overridden,
  protecting exceptions; if NoMethodError happens, check method
  name.

* vm_eval.c (vm_call0): use idMethodMissing.

* vm_eval.c (rb_search_method_entry): typo fixed.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25601 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-31 15:32:22 +00:00
nobu
1932c59097 * vm_eval.c (enum call_type): get rid of last comma.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25574 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-30 08:01:48 +00:00
nobu
166a53c560 * vm_eval.c (vm_call0, vm_call_super, rb_f_send, rb_f_public_send):
fixed call_type.  [ruby-dev:39581]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-30 07:57:21 +00:00