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; }
extern long long strtoll(__const__ char*s,char**e,int r){return _strtoll(s,e,r);}