[ruby-cvs:78235] 71fee9bc72 (master): vm_invoke_builtin_delegate with start index.

"Koichi Sasada" <[email protected]>
Newsgroups gmane.comp.lang.ruby.cvs
Message-ID <[email protected]>
Koichi Sasada	2019-11-15 17:49:49 +0900 (Fri, 15 Nov 2019)

  New Revision: 71fee9bc72

  https://github.com/ruby/ruby/commit/71fee9bc72

  Log:
    vm_invoke_builtin_delegate with start index.
    
    opt_invokebuiltin_delegate and opt_invokebuiltin_delegate_leave
    invokes builtin functions with same parameters of the method.
    This technique eliminate stack push operations. However, delegation
    parameters should be completely same as given parameters.
    (e.g. `def foo(a, b, c) __builtin_foo(a, b, c)` is okay, but
    __builtin_foo(b, c) is not allowed)
    
    This patch relaxes this restriction. ISeq has a local variables
    table which includes parameters. For example, the method defined
    as `def foo(a, b, c) x=y=nil`, then local variables table contains
    [a, b, c, x, y]. If calling builtin-function with arguments which
    are sub-array of the lvar table, use opt_invokebuiltin_delegate
    instruction with start index. For example, `__builtin_foo(b, c)`,
    `__builtin_bar(c, x, y)` is okay, and so on.

  Modified files:
    compile.c
    insns.def
    mini_builtin.c
    vm_insnhelper.c
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.