summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorDaniel Bovensiepen <[email protected]>2012-12-05 17:45:24 +0800
committerDaniel Bovensiepen <[email protected]>2012-12-05 17:45:24 +0800
commitbe99d87ca49da86f1795bd1779f9ce82cf821a6e (patch)
tree1de9b778cd4414956f2864cbb8f0fca76f7c346b /src
parent471c00a31dcaa04d4658de9b59fc23b24479d2fd (diff)
parentb8e5a570479a2e45d8746d85df15f84b619466d6 (diff)
downloadmruby-be99d87ca49da86f1795bd1779f9ce82cf821a6e.tar.gz
mruby-be99d87ca49da86f1795bd1779f9ce82cf821a6e.zip
rename mrb_load_irep for mrbtest to be consistent to name change
Diffstat (limited to 'src')
-rw-r--r--src/load.c36
-rw-r--r--src/parse.y3
2 files changed, 36 insertions, 3 deletions
diff --git a/src/load.c b/src/load.c
index 142c6fdf7..3cd8d91b0 100644
--- a/src/load.c
+++ b/src/load.c
@@ -11,6 +11,7 @@
#ifdef ENABLE_REGEXP
#include "re.h"
#endif
+#include "mruby/proc.h"
#include "mruby/irep.h"
typedef struct _RiteFILE
@@ -28,7 +29,7 @@ const char hex2bin[256] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, //30-3f
0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, //40-4f
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //50-5f
- 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0 //60-6f
+ 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0 //60-6f
//70-ff
};
@@ -241,7 +242,7 @@ error_exit:
}
int
-mrb_load_irep(mrb_state *mrb, FILE* fp)
+mrb_read_irep_file(mrb_state *mrb, FILE* fp)
{
int ret, i;
uint32_t len, rlen = 0;
@@ -659,3 +660,34 @@ hex_to_str(char *hex, char *str, uint16_t *str_len)
}
return str;
}
+
+static void
+irep_error(mrb_state *mrb, int n)
+{
+ static const char msg[] = "irep load error";
+ mrb->exc = (struct RObject*)mrb_object(mrb_exc_new(mrb, E_SCRIPT_ERROR, msg, sizeof(msg) - 1));
+}
+
+mrb_value
+mrb_load_irep_file(mrb_state *mrb, FILE* fp)
+{
+ int n = mrb_read_irep_file(mrb, fp);
+
+ if (n < 0) {
+ irep_error(mrb, n);
+ return mrb_nil_value();
+ }
+ return mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
+}
+
+mrb_value
+mrb_load_irep(mrb_state *mrb, const char *bin)
+{
+ int n = mrb_read_irep(mrb, bin);
+
+ if (n < 0) {
+ irep_error(mrb, n);
+ return mrb_nil_value();
+ }
+ return mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
+}
diff --git a/src/parse.y b/src/parse.y
index bfea1f69c..19e6bf23e 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -3307,7 +3307,8 @@ read_escape(parser_state *p)
int buf[3];
int i;
- for (i=0; i<3; i++) {
+ buf[0] = c;
+ for (i=1; i<3; i++) {
buf[i] = nextc(p);
if (buf[i] == -1) goto eof;
if (buf[i] < '0' || '7' < buf[i]) {