summaryrefslogtreecommitdiffhomepage
path: root/src/codegen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen.c')
-rw-r--r--src/codegen.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/codegen.c b/src/codegen.c
index 4c0f98295..5f8d17314 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -12,6 +12,7 @@
#include "mruby/irep.h"
#include "mruby/proc.h"
#include "mruby/compile.h"
+#include "mruby/numeric.h"
#include "opcode.h"
#include "node.h"
#include <string.h>
@@ -1574,10 +1575,10 @@ codegen(codegen_scope *s, node *tree, int val)
if (val) {
char *p = (char*)tree->car;
int base = (intptr_t)tree->cdr->car;
- int i = readint(p, base);
+ long i = readint(p, base);
mrb_code co;
- if (i == LONG_MAX && errno == ERANGE) {
+ if ((i == LONG_MAX && errno == ERANGE) || !FIXABLE(i)) {
mrb_float f = readint_float(s, p, base);
int off = new_lit(s, mrb_float_value(f));
@@ -1628,10 +1629,10 @@ codegen(codegen_scope *s, node *tree, int val)
{
char *p = (char*)tree->car;
int base = (intptr_t)tree->cdr->car;
- int i = readint(p, base);
+ long i = readint(p, base);
mrb_code co;
- if (i == LONG_MAX && errno == ERANGE) {
+ if ((i == LONG_MAX && errno == ERANGE) || !FIXABLE(i)) {
mrb_float f = readint_float(s, p, base);
int off = new_lit(s, mrb_float_value(-f));