Commit graph

611 commits

Author SHA1 Message Date
Jeremy Evans
fd2ef1a9bf Add VM_NO_KEYWORDS
I think this is easier to read than using literal 0 with comments
in every case where it is used.
2019-09-05 17:47:12 -07:00
Yusuke Endoh
ce04392d8d Propagate kw_splat information
The kw_splat flag is whether the original call passes keyword or not.
Some types of methods (e.g., bmethod and sym_proc) drops the
information.  This change tries to propagate the flag to the final
callee, as far as I can.
2019-09-05 17:47:12 -07:00
Jeremy Evans
60a08d9a6c Add rb_iseq_location
This wraps iseq_location and should fix the leaked global test.
2019-08-30 22:11:00 -07:00
Jeremy Evans
ec6206a81a Use more accurate source location in keyword argument separation warnings
This shows locations in places it didn't before, such as for
proc calls, and fixes the location for super calls.

This requires making iseq_location non-static and MJIT exported,
which I hope will not cause problems.
2019-08-30 21:56:50 -07:00
Yusuke Endoh
16c6984bb9 Separate keyword arguments from positional arguments
And, allow non-symbol keys as a keyword arugment
2019-08-30 12:39:31 -07:00
Kazuhiro NISHIYAMA
1680bd4e4f
[DOC] Return obj may be different from 1st argument [ci skip] 2019-08-30 12:03:50 +09:00
Yusuke Endoh
83c6a1ef45 proc.c: Add UnboundMethod#bind_call
`umethod.bind_call(obj, ...)` is semantically equivalent to
`umethod.bind(obj).call(...)`.  This idiom is used in some libraries to
call a method that is overridden.  The added method does the same
without allocation of intermediate Method object.  [Feature #15955]

```
class Foo
  def add_1(x)
    x + 1
  end
end
class Bar < Foo
  def add_1(x) # override
    x + 2
  end
end

obj = Bar.new
p obj.add_1(1) #=> 3
p Foo.instance_method(:add_1).bind(obj).call(1) #=> 2
p Foo.instance_method(:add_1).bind_call(obj, 1) #=> 2
```
2019-08-30 11:13:00 +09:00
卜部昌平
0766f67168 move docs around [ci skip]
To properly generate documents.
2019-08-29 18:34:09 +09:00
卜部昌平
7bcfd9189a drop-in type check for rb_define_global_function
We can check the function pointer passed to rb_define_global_function
like we do so in rb_define_method.  It turns out that almost anybody
is misunderstanding the API.
2019-08-29 18:34:09 +09:00
卜部昌平
bc3e7924bc rb_proc_new / rb_fiber_new now free from ANYARGS
After 5e86b005c0, I now think ANYARGS is
dangerous and should be extinct.  This commit deletes ANYARGS from
rb_proc_new / rb_fiber_new, and applies RB_BLOCK_CALL_FUNC_ARGLIST
wherever necessary.
2019-08-27 15:52:26 +09:00
卜部昌平
b8fd2e83e7 decouple compile.c usage of imemo_ifunc
After 5e86b005c0, I now think ANYARGS is
dangerous and should be extinct.  This commit deletes ANYARGS from
struct vm_ifunc, but in doing so we also have to decouple the usage
of this struct in compile.c, which (I think) is an abuse of ANYARGS.
2019-08-27 15:52:26 +09:00
OKURA Masafumi
74726691ba Add details about parameters to define_method doc (#2165)
When we use `define_method` and `define_singleton_method`,
if we supply block parameters to a block then a generated
method has corresponding parameters.
However, the doc doesn't mention it, so this info has been added.
2019-08-16 02:21:17 +09:00
git
0971460e31 * expand tabs. 2019-08-14 16:25:32 +09:00
Koichi Sasada
182a408c2c
change Proc#to_s format ('@...' -> ' ...') (#2362)
Now Proc#to_s returns
"#<Proc:0x00000237a0f5f170@t.rb:1>".
However, it is convenient to select a file name by (double-)clicking
on some terminals by separating ' ' instead of '@' like
"#<Proc:0x00000237a0f5f170 t.rb:1>"
[Feature #16101]
2019-08-14 16:25:15 +09:00
Aaron Patterson
aac4d9d6c7
Rename rb_gc_mark_no_pin -> rb_gc_mark_movable
Renaming this function.  "No pin" leaks some implementation details.  We
just want users to know that if they mark this object, the reference may
move and they'll need to update the reference accordingly.
2019-08-12 16:44:54 -04:00
Tanaka Akira
b7ec77f361 fix typos. 2019-07-14 22:04:27 +09:00
Koichi Sasada
47b04557b0 Method#inspect with source location.
Method#inspect shows with source location.
[Feature #14145]
2019-07-14 15:46:07 +09:00
Tanaka Akira
357f295a0e Describe lambda-ness of Proc more. 2019-07-14 15:01:39 +09:00
git
23e3c1704b * expand tabs. 2019-06-12 01:16:45 +09:00
Aaron Patterson
6db2d6d852
Add compaction support for more types.
This commit adds compaction support for:

* Fibers
* Continuations
* Autoload Constants
2019-06-11 09:16:14 -07:00
Aaron Patterson
4eb1c2365c
Unpin objects that proc references
This commit adds compaction support to method and proc objects.  It just
unpins references and implements the "compact" callback and updates
references.
2019-06-03 13:38:47 -07:00
okuramasafumi
7fe04850d2
Add class ref to UnboundMethod#owner doc
It refers to `Method#receiver` in the doc, but
there's no class reference in current doc.
Some tools automatically make it a link so it's useful.

Closes: https://github.com/ruby/ruby/pull/2156
2019-04-27 12:35:41 +09:00
Kazuhiro NISHIYAMA
6fbf4e22c8
Adds a reference to TracePoint to binding docs
This change adds an explicit reference to `TracePoint` in the
documentation for `binding`. Currently it only refers to the now
deprecated `Kernel#set_trace_func`. This reference is left alone for
continuity in the documentation.
[Fix GH-2079]

Co-authored-by: Brandon Weaver <baweaver@squareup.com>
2019-04-22 23:11:32 +09:00
svn
a73dae4c53 * expand tabs.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67520 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-04-13 00:56:14 +00:00
marcandre
d3da5fbd30 Proc.new: change deprecation warning for clarity (issue #15539)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67519 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-04-13 00:56:12 +00:00
nobu
b5baceda18 range.c: force hash values fixable
* range.c (method_hash): force hash values fixable on LLP64
  environment.  [ruby-core:92191] [Bug #15756]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67467 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-04-08 03:26:28 +00:00
nobu
de0ef1a9df [DOC] fix markups [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67354 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-03-28 03:33:35 +00:00
nobu
7fed9a2df5 proc.c: call respond_to_missing? with a symbol
[ruby-core:91683] [Bug #15640]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67185 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-03-06 11:16:34 +00:00
svn
b5f906136d * expand tabs.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66936 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-28 11:45:24 +00:00
nobu
2a4c87dc31 Add refinements support to method/instance_method.
[Fix GH-2034]

From: manga_osyo <manga.osyo@gmail.com>

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66935 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-28 11:45:21 +00:00
nobu
9f1fb0a17f proc.c: proc without block
* proc.c (proc_new): promoted lambda/proc/Proc.new with no block
  in a method called with a block to a warning/error.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66772 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-10 08:19:14 +00:00
nobu
33a75edd3c proc.c: check if callable
* proc.c: check the argument at composition, expect a Proc,
  Method, or callable object.  [ruby-core:90591] [Bug #15428]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66769 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-10 06:01:32 +00:00
stomar
4113b30356 proc.c: [DOC] fix typos
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66402 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-14 15:18:14 +00:00
svn
69ab98ffb5 * remove trailing spaces. [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66399 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-14 05:44:43 +00:00
duerst
5a5dafb78e tweak syntax of Proc documentation [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66398 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-14 05:44:41 +00:00
stomar
1b8f31409c proc.c: [DOC] fix typos
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66385 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-13 20:24:23 +00:00
kazu
069b730f96 [DOC] Fix typos [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66383 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-13 09:51:05 +00:00
duerst
57a67eb8a4 Enhance Proc docs [Misc #14610]
From: Victor Shepelev <zverok.offline@gmail.com>


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66355 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-12 07:37:16 +00:00
nobu
98e65d9d92 Prefer rb_check_arity when 0 or 1 arguments
Especially over checking argc then calling rb_scan_args just to
raise an ArgumentError.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66238 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-06 07:49:24 +00:00
svn
61c8247d55 * expand tabs.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66004 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-26 18:16:54 +00:00
ko1
96990203b7 Support targetting TracePoint [Feature #15289]
* vm_trace.c (rb_tracepoint_enable_for_target): support targetting
  TracePoint. [Feature #15289]

  Tragetting TracePoint is only enabled on specified method, proc
  and so on, example: `tp.enable(target: code)`.

  `code` should be consisted of InstructionSeuqnece (iseq)
  (RubyVM::InstructionSeuqnece.of(code) should not return nil)
  If code is a tree of iseq, TracePoint is enabled on all of
  iseqs in a tree.

  Enabled tragetting TracePoints can not enabled again with
  and without target.

* vm_core.h (rb_iseq_t): introduce `rb_iseq_t::local_hooks`
  to store local hooks.
  `rb_iseq_t::aux::trace_events` is renamed to
  `global_trace_events` to contrast with `local_hooks`.

* vm_core.h (rb_hook_list_t): add `rb_hook_list_t::running`
  to represent how many Threads/Fibers are used this list.
  If this field is 0, nobody using this hooks and we can
  delete it.

  This is why we can remove code from cont.c.

* vm_core.h (rb_vm_t): because of above change, we can eliminate
  `rb_vm_t::trace_running` field.
  Also renamed from `rb_vm_t::event_hooks` to `global_hooks`.

* vm_core.h, vm.c (ruby_vm_event_enabled_global_flags): renamed
  from `ruby_vm_event_enabled_flags.

* vm_core.h, vm.c (ruby_vm_event_local_num): added to count
  enabled targetting TracePoints.

* vm_core.h, vm_trace.c (rb_exec_event_hooks): accepts
  hook list.

* vm_core.h (rb_vm_global_hooks): added for convinience.

* method.h (rb_method_bmethod_t): added to maintain Proc
  and `rb_hook_list_t` for bmethod (defined by define_method).

* prelude.rb (TracePoint#enable): extracet a keyword parameter
  (because it is easy than writing in C).
  It calls `TracePoint#__enable` internal method written in C.

* vm_insnhelper.c (vm_trace): check also iseq->local_hooks.

* vm.c (invoke_bmethod): check def->body.bmethod.hooks.

* vm.c (hook_before_rewind): check iseq->local_hooks
  and def->body.bmethod.hooks before rewind by exception.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66003 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-26 18:16:39 +00:00
nobu
a93ce3e1b8 proc.c: [DOC] refine proc-compistion examples [ci skip]
* proc.c: [DOC] refine proc-compistion examples by using same
  Proc/Method and different composition orders.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65935 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-23 11:42:50 +00:00
nobu
c71cc2db7f Proc#<< and Proc#>>
[Feature #6284]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65914 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-22 05:51:43 +00:00
nobu
3b7b70650c proc.c: Support any callable when composing Procs
* proc.c (proc_compose): support any object with a call method rather
  than supporting only procs. [Feature #6284]

* proc.c (compose): use the function call on the given object rather
  than rb_proc_call_with_block in order to support any object.

* test/ruby/test_proc.rb: Add test cases for composing Procs with
  callable objects.

* test/ruby/test_method.rb: Add test cases for composing Methods with
  callable objects.

From: Paul Mucur <paul@altmetric.com>

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-22 05:51:42 +00:00
nobu
4eaf22cc3f proc.c: Implement Method#* for Method composition
* proc.c (rb_method_compose): Implement Method#* for Method composition,
  which delegates to Proc#*.

* test/ruby/test_method.rb: Add test cases for Method composition.

From: Paul Mucur <mudge@mudge.name>

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65912 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-22 05:51:41 +00:00
nobu
a43e967b8d proc.c: Implement Proc#* for Proc composition
* proc.c (proc_compose): Implement Proc#* for Proc composition, enabling
  composition of Procs and Methods. [Feature #6284]

* test/ruby/test_proc.rb: Add test cases for Proc composition.

From: Paul Mucur <mudge@mudge.name>

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65911 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-22 05:51:40 +00:00
stomar
f889eba1d4 proc.c: [DOC] improve docs for {Method,Proc}#===
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65379 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-10-26 12:23:25 +00:00
stomar
96353b97a5 proc.c: [DOC] fix grammar in doc for Method#to_s
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65378 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-10-26 12:21:22 +00:00
aycabta
2f7880e18a Improve docs of Proc / Method
* proc.c: Add descriptions and code examples.

[ruby-core:85600] [Bug #14483]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65283 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-10-21 15:33:30 +00:00
nobu
fa8b08b424 Prefer rb_fstring_lit over rb_fstring_cstr
The former states explicitly that the argument must be a literal,
and can optimize away `strlen` on all compilers.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65059 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-10-13 09:59:22 +00:00