summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c16
1 files changed, 16 insertions, 0 deletions
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);