Use strtoll() when parsing constants and support 64 bit intermediates
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Sun, 5 Sep 2010 12:49:49 +0000 (14:49 +0200)
committerDavid Schleef <ds@schleef.org>
Mon, 6 Sep 2010 07:06:50 +0000 (00:06 -0700)
orc/orcparse.c
orc/orcprogram.c

index 98cb6db..e0b0806 100644 (file)
@@ -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]);
           }
         }
index 22cd69f..cf7b531 100644 (file)
@@ -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;
     }