mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[Feature #16254] Allow Primitive.func
style
This commit is contained in:
parent
d863f4bccd
commit
49f0fd21e4
Notes:
git
2020-06-19 18:47:19 +09:00
2 changed files with 17 additions and 3 deletions
15
compile.c
15
compile.c
|
@ -7045,7 +7045,8 @@ iseq_builtin_function_name(const enum node_type type, const NODE *recv, ID mid)
|
||||||
static const char prefix[] = "__builtin_";
|
static const char prefix[] = "__builtin_";
|
||||||
const size_t prefix_len = sizeof(prefix) - 1;
|
const size_t prefix_len = sizeof(prefix) - 1;
|
||||||
|
|
||||||
if (type == NODE_CALL) {
|
switch (type) {
|
||||||
|
case NODE_CALL:
|
||||||
if (recv) {
|
if (recv) {
|
||||||
switch (nd_type(recv)) {
|
switch (nd_type(recv)) {
|
||||||
case NODE_VCALL:
|
case NODE_VCALL:
|
||||||
|
@ -7053,14 +7054,22 @@ iseq_builtin_function_name(const enum node_type type, const NODE *recv, ID mid)
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NODE_CONST:
|
||||||
|
if (recv->nd_vid == rb_intern("Primitive")) {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
else if (type == NODE_VCALL || type == NODE_FCALL) {
|
case NODE_VCALL:
|
||||||
|
case NODE_FCALL:
|
||||||
if (UNLIKELY(strncmp(prefix, name, prefix_len) == 0)) {
|
if (UNLIKELY(strncmp(prefix, name, prefix_len) == 0)) {
|
||||||
return &name[prefix_len];
|
return &name[prefix_len];
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,6 +113,11 @@ def collect_builtin base, tree, name, bs, inlines, params = nil
|
||||||
if recv
|
if recv
|
||||||
func_name = nil
|
func_name = nil
|
||||||
case recv.first
|
case recv.first
|
||||||
|
when :var_ref
|
||||||
|
_, recv = recv
|
||||||
|
if recv.first == :@const and recv[1] == "Primitive"
|
||||||
|
func_name = mid.to_s
|
||||||
|
end
|
||||||
when :vcall
|
when :vcall
|
||||||
_, recv = recv
|
_, recv = recv
|
||||||
if recv.first == :@ident and recv[1] == "__builtin"
|
if recv.first == :@ident and recv[1] == "__builtin"
|
||||||
|
|
Loading…
Reference in a new issue