Ejemplo n.º 1
0
int
orc_program_add_constant_str (OrcProgram *program, int size,
    const char *value, const char *name)
{
  int i;
  char *end;
  orc_int64 val_i;
  double val_d;
  int j;

  i = ORC_VAR_C1 + program->n_const_vars;

  if (program->n_const_vars >= ORC_MAX_CONST_VARS) {
    orc_program_set_error (program, "too many constants allocated");
    return 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);

    if (end[0] == 0) {
      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;
    }
  }

  for(j=0;j<program->n_const_vars;j++){
    if (program->vars[ORC_VAR_C1 + j].value.i == program->vars[i].value.i &&
        program->vars[ORC_VAR_C1 + j].size == size) {
      return ORC_VAR_C1 + j;
    }
  }

  program->vars[i].vartype = ORC_VAR_TYPE_CONST;
  program->vars[i].size = size;
  program->vars[i].name = strdup(name);
  program->n_const_vars++;

  return i;
}
Ejemplo n.º 2
0
	extern long long 
strtoll(__const__ char*s,char**e,int r){return _strtoll(s,e,r);}