diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-09-05 16:49:49 +0400 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2010-09-06 11:06:50 +0400 |
commit | 69c114bb55843ef9005b863c026e83173dcabe83 (patch) | |
tree | 729935cec9671e104816b5c8fa68c5b6eb3ac158 /orc | |
parent | f96cc0af525dc6945164bda3e93b5f85c2929012 (diff) |
Use strtoll() when parsing constants and support 64 bit intermediates
Diffstat (limited to 'orc')
-rw-r--r-- | orc/orcparse.c | 2 | ||||
-rw-r--r-- | orc/orcprogram.c | 12 |
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; } |