diff options
author | ktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-04-17 06:48:03 +0000 |
---|---|---|
committer | ktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-04-17 06:48:03 +0000 |
commit | 9738f96fcfe50b2a605e350bdd40bd7a85665f54 (patch) | |
tree | a8495fa0a315ef4015f01db4d158b74987d18277 /node.c | |
parent | b077654a2c89485c086e77c337d30a11ff3781c3 (diff) |
Introduce pattern matching [EXPERIMENTAL]
[ruby-core:87945] [Feature #14912]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67586 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'node.c')
-rw-r--r-- | node.c | 37 |
1 files changed, 37 insertions, 0 deletions
@@ -195,6 +195,14 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) LAST_NODE; F_NODE(nd_body, "when clauses"); return; + case NODE_CASE3: + ANN("case statement (pattern matching)"); + ANN("format: case [nd_head]; [nd_body]; end"); + ANN("example: case x; in 1; foo; in 2; bar; else baz; end"); + F_NODE(nd_head, "case expr"); + LAST_NODE; + F_NODE(nd_body, "in clauses"); + return; case NODE_WHEN: ANN("when clause"); @@ -206,6 +214,16 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) F_NODE(nd_next, "next when clause"); return; + case NODE_IN: + ANN("in clause"); + ANN("format: in [nd_head]; [nd_body]; (when or else) [nd_next]"); + ANN("example: case x; in 1; foo; in 2; bar; else baz; end"); + F_NODE(nd_head, "in value"); + F_NODE(nd_body, "in body"); + LAST_NODE; + F_NODE(nd_next, "next in clause"); + return; + case NODE_WHILE: ANN("while statement"); ANN("format: while [nd_cond]; [nd_body]; end"); @@ -1017,6 +1035,25 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) F_NODE(nd_body, "body"); return; + case NODE_ARYPTN: + ANN("array pattern"); + ANN("format: [nd_pconst]([pre_args], ..., *[rest_arg], [post_args], ...)"); + F_NODE(nd_pconst, "constant"); + F_NODE(nd_apinfo->pre_args, "pre arguments"); + F_NODE(nd_apinfo->rest_arg, "rest argument"); + LAST_NODE; + F_NODE(nd_apinfo->post_args, "post arguments"); + return; + + case NODE_HSHPTN: + ANN("hash pattern"); + ANN("format: [nd_pconst]([nd_pkwargs], ..., **[nd_pkwrestarg])"); + F_NODE(nd_pconst, "constant"); + F_NODE(nd_pkwargs, "keyword arguments"); + LAST_NODE; + F_NODE(nd_pkwrestarg, "keyword rest argument"); + return; + case NODE_ARGS_AUX: case NODE_LAST: break; |