summaryrefslogtreecommitdiffhomepage
path: root/tools/mirb/mirb.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/mirb/mirb.c')
-rw-r--r--tools/mirb/mirb.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/tools/mirb/mirb.c b/tools/mirb/mirb.c
index 35558acfb..8b36cb5a6 100644
--- a/tools/mirb/mirb.c
+++ b/tools/mirb/mirb.c
@@ -132,23 +132,24 @@ main(void)
{
char last_char, ruby_code[1024], last_code_line[1024];
int char_index;
+ mrbc_context *cxt;
struct mrb_parser_state *parser;
- mrb_state *mrb_interpreter;
- mrb_value mrb_return_value;
- int byte_code;
+ mrb_state *mrb;
+ mrb_value result;
+ int n;
int code_block_open = FALSE;
print_hint();
/* new interpreter instance */
- mrb_interpreter = mrb_open();
- if (mrb_interpreter == NULL) {
- fprintf(stderr, "Invalid mrb_interpreter, exiting mirb");
+ mrb = mrb_open();
+ if (mrb == NULL) {
+ fprintf(stderr, "Invalid mrb interpreter, exiting mirb");
return EXIT_FAILURE;
}
- /* new parser instance */
- parser = mrb_parser_new(mrb_interpreter);
+ cxt = mrbc_context_new(mrb);
+ cxt->capture_errors = 1;
memset(ruby_code, 0, sizeof(*ruby_code));
memset(last_code_line, 0, sizeof(*last_code_line));
@@ -192,11 +193,11 @@ main(void)
}
/* parse code */
+ parser = mrb_parser_new(mrb);
parser->s = ruby_code;
parser->send = ruby_code + strlen(ruby_code);
- parser->capture_errors = 1;
parser->lineno = 1;
- mrb_parser_parse(parser);
+ mrb_parser_parse(parser, cxt);
code_block_open = is_code_block_open(parser);
if (code_block_open) {
@@ -209,31 +210,32 @@ main(void)
}
else {
/* generate bytecode */
- byte_code = mrb_generate_code(mrb_interpreter, parser->tree);
+ n = mrb_generate_code(mrb, parser->tree);
/* evaluate the bytecode */
- mrb_return_value = mrb_run(mrb_interpreter,
+ result = mrb_run(mrb,
/* pass a proc for evaulation */
- mrb_proc_new(mrb_interpreter, mrb_interpreter->irep[byte_code]),
- mrb_top_self(mrb_interpreter));
+ mrb_proc_new(mrb, mrb->irep[n]),
+ mrb_top_self(mrb));
/* did an exception occur? */
- if (mrb_interpreter->exc) {
- mrb_p(mrb_interpreter, mrb_obj_value(mrb_interpreter->exc));
- mrb_interpreter->exc = 0;
+ if (mrb->exc) {
+ mrb_p(mrb, mrb_obj_value(mrb->exc));
+ mrb->exc = 0;
}
else {
/* no */
printf(" => ");
- mrb_p(mrb_interpreter, mrb_return_value);
+ mrb_p(mrb, result);
}
}
-
memset(ruby_code, 0, sizeof(*ruby_code));
memset(ruby_code, 0, sizeof(*last_code_line));
}
+ mrb_parser_free(parser);
}
}
- mrb_close(mrb_interpreter);
+ mrbc_context_free(mrb, cxt);
+ mrb_close(mrb);
return 0;
}