summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/codegen.c19
-rw-r--r--src/parse.y16
2 files changed, 25 insertions, 10 deletions
diff --git a/src/codegen.c b/src/codegen.c
index 5b86c90a9..e8fcce5c2 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -1848,12 +1848,13 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_BACK_REF:
{
- char buf[4];
- int len;
+ char buf[2] = { '$' };
+ mrb_value str;
int sym;
- len = snprintf(buf, sizeof(buf), "$%c", (int)(intptr_t)tree);
- sym = new_sym(s, mrb_intern2(s->mrb, buf, len));
+ buf[1] = (char)(intptr_t)tree;
+ str = mrb_str_new(s->mrb, buf, 2);
+ sym = new_sym(s, mrb_intern_str(s->mrb, str));
genop(s, MKOP_ABx(OP_GETGLOBAL, cursp(), sym));
push();
}
@@ -1861,12 +1862,14 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_NTH_REF:
{
- char buf[4];
- int len;
int sym;
+ mrb_state *mrb = s->mrb;
+ mrb_value fix = mrb_fixnum_value((intptr_t)tree);
+ mrb_value str = mrb_str_buf_new(mrb, 4);
- len = snprintf(buf, sizeof(buf), "$%d", (int)(intptr_t)tree);
- sym = new_sym(s, mrb_intern2(s->mrb, buf, len));
+ mrb_str_buf_cat(mrb, str, "$", 1);
+ mrb_str_buf_append(mrb, str, mrb_fix2str(mrb, fix, 10));
+ sym = new_sym(s, mrb_intern_str(mrb, str));
genop(s, MKOP_ABx(OP_GETGLOBAL, cursp(), sym));
push();
}
diff --git a/src/parse.y b/src/parse.y
index 29ea34c59..bdb646799 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -3241,12 +3241,15 @@ nextc(parser_state *p)
cons_free(tmp);
}
else {
+#ifdef ENABLE_STDIO
if (p->f) {
if (feof(p->f)) return -1;
c = fgetc(p->f);
if (c == EOF) return -1;
}
- else if (!p->s || p->s >= p->send) {
+ else
+#endif
+ if (!p->s || p->s >= p->send) {
return -1;
}
else {
@@ -3304,6 +3307,7 @@ peeks(parser_state *p, const char *s)
{
int len = strlen(s);
+#ifdef ENABLE_STDIO
if (p->f) {
int n = 0;
while (*s) {
@@ -3311,7 +3315,9 @@ peeks(parser_state *p, const char *s)
}
return TRUE;
}
- else if (p->s && p->s + len >= p->send) {
+ else
+#endif
+ if (p->s && p->s + len >= p->send) {
if (memcmp(p->s, s, len) == 0) return TRUE;
}
return FALSE;
@@ -5079,7 +5085,9 @@ mrb_parser_new(mrb_state *mrb)
p->in_def = p->in_single = 0;
p->s = p->send = NULL;
+#ifdef ENABLE_STDIO
p->f = NULL;
+#endif
p->cmd_start = TRUE;
p->in_def = p->in_single = FALSE;
@@ -5132,6 +5140,7 @@ mrbc_filename(mrb_state *mrb, mrbc_context *c, const char *s)
return c->filename;
}
+#ifdef ENABLE_STDIO
parser_state*
mrb_parse_file(mrb_state *mrb, FILE *f, mrbc_context *c)
{
@@ -5145,6 +5154,7 @@ mrb_parse_file(mrb_state *mrb, FILE *f, mrbc_context *c)
mrb_parser_parse(p, c);
return p;
}
+#endif
parser_state*
mrb_parse_nstring(mrb_state *mrb, const char *s, int len, mrbc_context *c)
@@ -5208,6 +5218,7 @@ load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c)
return v;
}
+#ifdef ENABLE_STDIO
mrb_value
mrb_load_file_cxt(mrb_state *mrb, FILE *f, mrbc_context *c)
{
@@ -5219,6 +5230,7 @@ mrb_load_file(mrb_state *mrb, FILE *f)
{
return mrb_load_file_cxt(mrb, f, NULL);
}
+#endif
mrb_value
mrb_load_nstring_cxt(mrb_state *mrb, const char *s, int len, mrbc_context *c)