From: s.wanabe@... Date: 2019-10-06T07:56:03+00:00 Subject: [ruby-core:95243] [Ruby master Feature#15824] respond_to pattern for pattern match Issue #15824 has been updated by wanabe (_ wanabe). The implementation can be very simple. (I don't know whether `NODE_METHREF` is suitable.) ```diff diff --git a/compile.c b/compile.c index 7a88f81daa..f6eafb0ac2 100644 --- a/compile.c +++ b/compile.c @@ -5888,6 +5888,11 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c ADD_LABEL(ret, fin); break; } + case NODE_METHREF: { + ADD_INSN1(ret, line, putobject, ID2SYM(node->nd_mid)); + ADD_SEND(ret, line, idRespond_to, INT2FIX(1)); + break; + } default: UNKNOWN_NODE("NODE_IN", node, COMPILE_NG); } diff --git a/parse.y b/parse.y index 287704e14f..dd305479f5 100644 --- a/parse.y +++ b/parse.y @@ -3904,6 +3904,10 @@ p_expr_basic : p_value { $$ = $2; } + | '.' operation2 + { + $$ = NEW_METHREF(Qundef, $2, &@$); + } ; p_args : p_expr ``` By the way, missing "& pattern" seems to be intended. see [ruby-core:88036] https://bugs.ruby-lang.org/issues/14912#note-7 . ---------------------------------------- Feature #15824: respond_to pattern for pattern match https://bugs.ruby-lang.org/issues/15824#change-81917 * Author: fukajun (Jun Fukaya) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- ruby������������������������������������������������������������������... Interger, Array ������ constant������������������������������������������������������������������������������������������������������������������������ duck typing������������������������������������������������������������ruby������������������������������������������������������������������������������������������ respond_to pattern ```ruby class Runner def run end def stop end end runner = Runner.new case runner in .run & .stop :reachable in .start & .stop :unreachable end ``` -- https://bugs.ruby-lang.org/ Unsubscribe: