diff options
| author | Yukihiro Matz Matsumoto <[email protected]> | 2013-01-10 01:06:51 +0900 |
|---|---|---|
| committer | Yukihiro Matz Matsumoto <[email protected]> | 2013-01-10 01:06:51 +0900 |
| commit | f134e8e1bf1b3a4885f33cc954a39b4250b776e1 (patch) | |
| tree | 476d460d0d5b0f4782457fdfd6fcca1b1846e9ae /src | |
| parent | eab894e5be20babfc5761835a6d085ec077095c0 (diff) | |
| download | mruby-f134e8e1bf1b3a4885f33cc954a39b4250b776e1.tar.gz mruby-f134e8e1bf1b3a4885f33cc954a39b4250b776e1.zip | |
jump address error when value taken from if statement without else clause; close #712
Diffstat (limited to 'src')
| -rw-r--r-- | src/codegen.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/codegen.c b/src/codegen.c index c1a62320d..246101f24 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1106,18 +1106,24 @@ codegen(codegen_scope *s, node *tree, int val) if (e) { if (val) pop(); pos2 = new_label(s); - genop(s, MKOP_sBx(OP_JMP, 0)); - dispatch(s, pos1); + genop(s, MKOP_sBx(OP_JMP, 0)); + dispatch(s, pos1); codegen(s, e, val); dispatch(s, pos2); } else { if (val) { pop(); + pos2 = new_label(s); + genop(s, MKOP_sBx(OP_JMP, 0)); + dispatch(s, pos1); genop(s, MKOP_A(OP_LOADNIL, cursp())); + dispatch(s, pos2); push(); } - dispatch(s, pos1); + else { + dispatch(s, pos1); + } } } break; |
