From 8d6f1b04a1f326e3668fd1b2aa0978c2bb38b3ff Mon Sep 17 00:00:00 2001 From: Takashi Sogabe Date: Wed, 17 Oct 2012 12:55:50 +0900 Subject: Fix disappearance of a local variable when return statement is called Commit of #18dd60c causes disappearance of a local variable if return statement is called without arguments. This patch fixes incorrect value of stack pointer. test program: def test_return_cond return if nil obj = 123 p obj p obj.class end test_return_cond output(commit #18dd60c): main Object output(includes this patch): 123 Fixnum --- src/codegen.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/codegen.c b/src/codegen.c index f195c378a..27f217ebe 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1490,6 +1490,7 @@ codegen(codegen_scope *s, node *tree, int val) else { genop_peep(s, MKOP_AB(OP_RETURN, cursp(), OP_R_NORMAL), NOVAL); } + push(); break; case NODE_YIELD: -- cgit v1.2.3 From e84dfd43375f1b144ae7dd1b054e9944bdf2552f Mon Sep 17 00:00:00 2001 From: Masaki Muranaka Date: Wed, 17 Oct 2012 21:23:42 +0900 Subject: Fix degrades by #490. (Some changes are reverted.) --- src/load.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/load.c b/src/load.c index a960e883a..a2ae4100b 100644 --- a/src/load.c +++ b/src/load.c @@ -111,22 +111,22 @@ load_rite_header(FILE* fp, rite_binary_header* bin_header, unsigned char* hcrc) if (fread(&file_header, 1, sizeof(file_header), fp) < sizeof(file_header)) { return MRB_DUMP_READ_FAULT; } - *bin_header->rbfi = *file_header.rbfi; + memcpy(bin_header->rbfi, file_header.rbfi, sizeof(file_header.rbfi)); if (memcmp(bin_header->rbfi, RITE_FILE_IDENFIFIER, sizeof(bin_header->rbfi)) != 0) { return MRB_DUMP_INVALID_FILE_HEADER; //File identifier error } - *bin_header->rbfv = *file_header.rbfv; + memcpy(bin_header->rbfv, file_header.rbfv, sizeof(file_header.rbfv)); if (memcmp(bin_header->rbfv, RITE_FILE_FORMAT_VER, sizeof(bin_header->rbfv)) != 0) { return MRB_DUMP_INVALID_FILE_HEADER; //File format version error } - *bin_header->risv = *file_header.risv; - *bin_header->rct = *file_header.rct; - *bin_header->rcv = *file_header.rcv; + memcpy(bin_header->risv, file_header.risv, sizeof(file_header.risv)); + memcpy(bin_header->rct, file_header.rct, sizeof(file_header.rct)); + memcpy(bin_header->rcv, file_header.rcv, sizeof(file_header.rcv)); hex_to_bin32(bin_header->rbds, file_header.rbds); hex_to_bin16(bin_header->nirep, file_header.nirep); hex_to_bin16(bin_header->sirep, file_header.sirep); - *bin_header->rsv = *file_header.rsv; - *hcrc = *file_header.hcrc; + memcpy(bin_header->rsv, file_header.rsv, sizeof(file_header.rsv)); + memcpy(hcrc, file_header.hcrc, sizeof(file_header.hcrc)); return MRB_DUMP_OK; } -- cgit v1.2.3