From 7c6c4ebb56a17c291806c7961f6ca2abc7da4546 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 24 Sep 2021 11:38:02 +0900 Subject: codegen.c: add short circuit constant folding for `NODE_AND`, `NODE_OR`. --- mrbgems/mruby-compiler/core/codegen.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'mrbgems/mruby-compiler') diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 7b636650c..24d23c1be 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -2224,6 +2224,14 @@ codegen(codegen_scope *s, node *tree, int val) { uint32_t pos; + if (true_always(tree->car)) { + codegen(s, tree->cdr, val); + goto exit; + } + if (false_always(tree->car)) { + codegen(s, tree->car, val); + goto exit; + } codegen(s, tree->car, VAL); pop(); pos = genjmp2_0(s, OP_JMPNOT, cursp(), val); @@ -2236,6 +2244,14 @@ codegen(codegen_scope *s, node *tree, int val) { uint32_t pos; + if (true_always(tree->car)) { + codegen(s, tree->car, val); + goto exit; + } + if (false_always(tree->car)) { + codegen(s, tree->cdr, val); + goto exit; + } codegen(s, tree->car, VAL); pop(); pos = genjmp2_0(s, OP_JMPIF, cursp(), val); -- cgit v1.2.3