diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-09-03 15:34:22 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-09-03 15:34:22 +0900 |
| commit | dabe3ca0c72cdddd18faf184203387c732dd696c (patch) | |
| tree | 359afea6fabf9ebdd43cf7f45aba35e10f654ef8 | |
| parent | 4e8317f5df061db63600113123a83c6572f6c63f (diff) | |
| download | mruby-dabe3ca0c72cdddd18faf184203387c732dd696c.tar.gz mruby-dabe3ca0c72cdddd18faf184203387c732dd696c.zip | |
mirb would terminate on quit in the continuing line
| -rw-r--r-- | tools/mirb/mirb.c | 65 |
1 files changed, 32 insertions, 33 deletions
diff --git a/tools/mirb/mirb.c b/tools/mirb/mirb.c index b3b86f013..d510f413b 100644 --- a/tools/mirb/mirb.c +++ b/tools/mirb/mirb.c @@ -182,7 +182,7 @@ main(void) last_code_line[char_index] = '\0'; if ((strcmp(last_code_line, "quit") == 0) || (strcmp(last_code_line, "exit") == 0)) { - if (!code_block_open || !parser->sterm){ + if (!code_block_open) { break; } else{ @@ -191,7 +191,6 @@ main(void) strcat(ruby_code, last_code_line); } } - else { if (code_block_open) { strcat(ruby_code, "\n"); @@ -201,46 +200,46 @@ main(void) memset(ruby_code, 0, sizeof(*ruby_code)); strcat(ruby_code, last_code_line); } + } - /* parse code */ - parser = mrb_parser_new(mrb); - parser->s = ruby_code; - parser->send = ruby_code + strlen(ruby_code); - parser->lineno = 1; - mrb_parser_parse(parser, cxt); - code_block_open = is_code_block_open(parser); + /* parse code */ + parser = mrb_parser_new(mrb); + parser->s = ruby_code; + parser->send = ruby_code + strlen(ruby_code); + parser->lineno = 1; + mrb_parser_parse(parser, cxt); + code_block_open = is_code_block_open(parser); - if (code_block_open) { - /* no evaluation of code */ + if (code_block_open) { + /* no evaluation of code */ + } + else { + if (0 < parser->nerr) { + /* syntax error */ + printf("line %d: %s\n", parser->error_buffer[0].lineno, parser->error_buffer[0].message); } else { - if (0 < parser->nerr) { - /* syntax error */ - printf("line %d: %s\n", parser->error_buffer[0].lineno, parser->error_buffer[0].message); - } - else { - /* generate bytecode */ - n = mrb_generate_code(mrb, parser); + /* generate bytecode */ + n = mrb_generate_code(mrb, parser); - /* evaluate the bytecode */ - result = mrb_run(mrb, + /* evaluate the bytecode */ + result = mrb_run(mrb, /* pass a proc for evaulation */ mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); - /* did an exception occur? */ - if (mrb->exc) { - p(mrb, mrb_obj_value(mrb->exc)); - mrb->exc = 0; - } - else { - /* no */ - printf(" => "); - p(mrb, result); - } - } - memset(ruby_code, 0, sizeof(*ruby_code)); - memset(ruby_code, 0, sizeof(*last_code_line)); + /* did an exception occur? */ + if (mrb->exc) { + p(mrb, mrb_obj_value(mrb->exc)); + mrb->exc = 0; + } + else { + /* no */ + printf(" => "); + p(mrb, result); + } } + memset(ruby_code, 0, sizeof(*ruby_code)); + memset(ruby_code, 0, sizeof(*last_code_line)); mrb_parser_free(parser); } } |
