summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2010-09-05 14:49:49 +0200
committerDavid Schleef <ds@schleef.org>2010-09-06 00:06:50 -0700
commit69c114bb55843ef9005b863c026e83173dcabe83 (patch)
tree729935cec9671e104816b5c8fa68c5b6eb3ac158
parentf96cc0af525dc6945164bda3e93b5f85c2929012 (diff)
Use strtoll() when parsing constants and support 64 bit intermediates
-rw-r--r--orc/orcparse.c2
-rw-r--r--orc/orcprogram.c12
2 files changed, 11 insertions, 3 deletions
diff --git a/orc/orcparse.c b/orc/orcparse.c
index 98cb6db..e0b0806 100644
--- a/orc/orcparse.c
+++ b/orc/orcparse.c
@@ -225,7 +225,7 @@ orc_parse_full (const char *code, OrcProgram ***programs, char **log)
double d;
d = strtod (token[i], &end);
if (end != token[i]) {
- orc_program_add_constant_str (parser->program, 4, token[i],
+ orc_program_add_constant_str (parser->program, 0, token[i],
token[i]);
}
}
diff --git a/orc/orcprogram.c b/orc/orcprogram.c
index 22cd69f..cf7b531 100644
--- a/orc/orcprogram.c
+++ b/orc/orcprogram.c
@@ -398,17 +398,21 @@ orc_program_add_constant_str (OrcProgram *program, int size,
{
int i;
char *end;
- int val_i;
+ orc_int64 val_i;
double val_d;
int j;
i = ORC_VAR_C1 + program->n_const_vars;
- val_i = strtol (value, &end, 0);
+ val_i = _strtoll (value, &end, 0);
if (end[0] == 0) {
program->vars[i].value.i = val_i;
+ if (size == 0)
+ size = 4;
} else if ((end[0] == 'l' || end[0] == 'L') && end[1] == 0) {
program->vars[i].value.i = val_i;
+ if (size == 0)
+ size = 8;
} else {
val_d = strtod (value, &end);
@@ -416,8 +420,12 @@ orc_program_add_constant_str (OrcProgram *program, int size,
orc_union32 u;
u.f = val_d;
program->vars[i].value.i = u.i;
+ if (size == 0)
+ size = 4;
} else if ((end[0] == 'l' || end[0] == 'L') && end[1] == 0) {
program->vars[i].value.f = val_d;
+ if (size == 0)
+ size = 8;
} else {
return -1;
}