diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-14 05:27:02 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-14 05:27:02 +0000 |
commit | 33adf313bdae2b427a72e8b642962b91cdaf6523 (patch) | |
tree | 787002814cee9110d387332bca69770f62394e40 /parse.y | |
parent | 0391381caaa3d4f580e862299f662df107435100 (diff) | |
download | ruby-33adf313bdae2b427a72e8b642962b91cdaf6523.tar.gz |
Introduce NODE_UNLESS for branch coverage
`unless` statement was a syntactic sugar for `if` statement,
which made the result of branch coverage hard to understand.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59889 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -352,7 +352,8 @@ static NODE *cond_gen(struct parser_params*,NODE*,int); #define new_nil() NEW_NIL() static NODE *new_if_gen(struct parser_params*,NODE*,NODE*,NODE*); #define new_if(cc,left,right) new_if_gen(parser, (cc), (left), (right)) -#define new_unless(cc,left,right) new_if_gen(parser, (cc), (right), (left)) +static NODE *new_unless_gen(struct parser_params*,NODE*,NODE*,NODE*); +#define new_unless(cc,left,right) new_unless_gen(parser, (cc), (left), (right)) static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*); #define logop(id,node1,node2) \ logop_gen(parser, ((id)==idAND||(id)==idANDOP)?NODE_AND:NODE_OR, \ @@ -9533,6 +9534,7 @@ value_expr_gen(struct parser_params *parser, NODE *node) break; case NODE_IF: + case NODE_UNLESS: if (!node->nd_body) { node = node->nd_else; break; @@ -9711,6 +9713,7 @@ reduce_nodes_gen(struct parser_params *parser, NODE **body) body = &node->nd_end->nd_head; break; case NODE_IF: + case NODE_UNLESS: if (subnodes(nd_body, nd_else)) break; return; case NODE_CASE: @@ -9914,6 +9917,14 @@ new_if_gen(struct parser_params *parser, NODE *cc, NODE *left, NODE *right) } static NODE* +new_unless_gen(struct parser_params *parser, NODE *cc, NODE *left, NODE *right) +{ + if (!cc) return right; + cc = cond0(parser, cc, FALSE); + return newline_node(NEW_UNLESS(cc, left, right)); +} + +static NODE* logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right) { value_expr(left); |