case PSI_T_NUMBER:
case PSI_T_NSNAME:
case PSI_T_DEFINE:
- exp->data.numb = strdup(num);
+ exp->data.numb = zend_string_copy(num);
break;
case PSI_T_NAME:
exp->data.dvar = num;
case PSI_T_NSNAME:
case PSI_T_DEFINE:
case PSI_T_QUOTED_CHAR:
- num->data.numb = strdup(num->data.numb);
+ num->data.numb = zend_string_copy(num->data.numb);
break;
case PSI_T_NAME:
num->data.dvar = psi_decl_var_copy(num->data.dvar);
case PSI_T_NUMBER:
case PSI_T_DEFINE:
case PSI_T_QUOTED_CHAR:
- free(exp->data.numb);
+ zend_string_release(exp->data.numb);
break;
case PSI_T_NAME:
psi_decl_var_free(&exp->data.dvar);
unsigned pl = exp->data.dvar->pointer_level - !!exp->data.dvar->array_size;
while (pl--) {
-
- ntoken = psi_token_init(PSI_T_POINTER, "*", 1, ntoken->col+ntoken->size, ntoken->line, ntoken->file);
+ ntoken = psi_token_init(PSI_T_POINTER, "*", 1, ntoken->col+ntoken->text->len, ntoken->line, ntoken->file);
list = psi_plist_add(list, &ntoken);
}
ntoken = temp;
if (exp->data.dvar->array_size) {
char buf[0x20], *ptr;
- ntoken = psi_token_init(PSI_T_LBRACKET, "[", 1, ntoken->col+ntoken->size, ntoken->line, ntoken->file);
+ ntoken = psi_token_init(PSI_T_LBRACKET, "[", 1, ntoken->col+ntoken->text->len, ntoken->line, ntoken->file);
list = psi_plist_add(list, &ntoken);
ptr = zend_print_ulong_to_buf(&buf[sizeof(buf) - 1], exp->data.dvar->array_size);
- ntoken = psi_token_init(PSI_T_NUMBER, ptr, strlen(ptr), ntoken->col+ntoken->size, ntoken->line, ntoken->file);
+ ntoken = psi_token_init(PSI_T_NUMBER, ptr, strlen(ptr), ntoken->col+ntoken->text->len, ntoken->line, ntoken->file);
list = psi_plist_add(list, &ntoken);
}
break;
/* decl_type */
ntoken = psi_token_copy(exp->token);
list = psi_plist_add(list, &ntoken);
- ntoken = psi_token_init(PSI_T_LPAREN, "(", 1, ntoken->col+ntoken->size, ntoken->line, ntoken->file);
+ ntoken = psi_token_init(PSI_T_LPAREN, "(", 1, ntoken->col+ntoken->text->len, ntoken->line, ntoken->file);
list = psi_plist_add(list, &ntoken);
ntoken = psi_token_copy(exp->data.dtyp->token);
list = psi_plist_add(list, &ntoken);
- ntoken = psi_token_init(PSI_T_RPAREN, ")", 1, ntoken->col+ntoken->size, ntoken->line, ntoken->file);
+ ntoken = psi_token_init(PSI_T_RPAREN, ")", 1, ntoken->col+ntoken->text->len, ntoken->line, ntoken->file);
list = psi_plist_add(list, &ntoken);
break;
case PSI_T_NSNAME:
case PSI_T_DEFINE:
case PSI_T_QUOTED_CHAR:
- dprintf(fd, "%s", exp->data.numb);
+ dprintf(fd, "%s", exp->data.numb->val);
break;
case PSI_T_FUNCTION:
psi_cpp_macro_call_dump(fd, exp->data.call);
break;
case PSI_T_CONST:
- dprintf(fd, "%s", exp->data.cnst->name);
+ dprintf(fd, "%s", exp->data.cnst->name->val);
break;
case PSI_T_ENUM:
- dprintf(fd, "%s", exp->data.enm->name);
+ dprintf(fd, "%s", exp->data.enm->name->val);
break;
case PSI_T_NAME:
psi_decl_var_dump(fd, exp->data.dvar);
switch (exp->type) {
case PSI_T_NAME:
while (psi_plist_get(enm->items, i++, &itm)) {
- if (!strcmp(itm->name, exp->data.dvar->name)) {
+ if (zend_string_equals(itm->name, exp->data.dvar->name)) {
psi_decl_var_free(&exp->data.dvar);
exp->type = PSI_T_ENUM;
exp->data.enm = itm;
case PSI_T_DEFINE:
while (psi_plist_get(enm->items, i++, &itm)) {
- if (!strcmp(itm->name, exp->data.numb)) {
- free(exp->data.numb);
+ if (zend_string_equals(itm->name, exp->data.numb)) {
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_ENUM;
exp->data.enm = itm;
return psi_number_validate(data, exp, scope);
{
impl_val val = {0};
unsigned lvl = 1;
- token_t typ = validate_char(exp->data.numb, &val, &lvl);
+ token_t typ = validate_char(exp->data.numb->val, &val, &lvl);
if (!typ) {
return false;
}
- free(exp->data.numb);
+ zend_string_release(exp->data.numb);
exp->type = typ;
exp->data.ival = val;
return true;
switch (exp->flags & 0x0f00) {
case PSI_NUMBER_L:
default:
- tmp.i64 = strtol(exp->data.numb, NULL, 0);
- free(exp->data.numb);
+ tmp.i64 = strtol(exp->data.numb->val, NULL, 0);
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_INT64;
exp->data.ival.i64 = tmp.i64;
break;
case PSI_NUMBER_LL:
- tmp.i64 = strtoll(exp->data.numb, NULL, 0);
- free(exp->data.numb);
+ tmp.i64 = strtoll(exp->data.numb->val, NULL, 0);
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_INT64;
exp->data.ival.i64 = tmp.i64;
break;
case PSI_NUMBER_U:
case PSI_NUMBER_UL:
- tmp.u64 = strtoul(exp->data.numb, NULL, 0);
- free(exp->data.numb);
+ tmp.u64 = strtoul(exp->data.numb->val, NULL, 0);
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_UINT64;
exp->data.ival.u64 = tmp.u64;
break;
case PSI_NUMBER_ULL:
- tmp.u64 = strtoull(exp->data.numb, NULL, 0);
- free(exp->data.numb);
+ tmp.u64 = strtoull(exp->data.numb->val, NULL, 0);
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_UINT64;
exp->data.ival.u64 = tmp.u64;
break;
switch (exp->flags & 0x0ff00) {
case PSI_NUMBER_F:
case PSI_NUMBER_DF:
- tmp.fval = strtof(exp->data.numb, NULL);
- free(exp->data.numb);
+ tmp.fval = strtof(exp->data.numb->val, NULL);
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_FLOAT;
exp->data.ival.fval = tmp.fval;
break;
case PSI_NUMBER_L:
case PSI_NUMBER_DL:
#if HAVE_LONG_DOUBLE
- tmp.ldval = strtold(exp->data.numb, NULL);
- free(exp->data.numb);
+ tmp.ldval = strtold(exp->data.numb->val, NULL);
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_LONG_DOUBLE;
exp->data.ival.ldval = tmp.ldval;
break;
#endif
case PSI_NUMBER_DD:
default:
- tmp.dval = strtod(exp->data.numb, NULL);
- free(exp->data.numb);
+ tmp.dval = strtod(exp->data.numb->val, NULL);
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_DOUBLE;
exp->data.ival.dval = tmp.dval;
break;
break;
}
} else {
- switch (is_numeric_string(exp->data.numb, strlen(exp->data.numb), (zend_long *) &tmp, (double *) &tmp, 1)) {
+ switch (is_numeric_str_function(exp->data.numb, (zend_long *) &tmp, (double *) &tmp)) {
case IS_LONG:
- free(exp->data.numb);
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_INT64;
exp->data.ival.i64 = tmp.zend.lval;
return true;
case IS_DOUBLE:
- free(exp->data.numb);
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_DOUBLE;
exp->data.ival.dval = tmp.dval;
return true;
return true;
case PSI_T_NAME:
- if (scope && scope->defs && zend_hash_str_exists(scope->defs, exp->data.dvar->name, strlen(exp->data.dvar->name))) {
+ if (scope && scope->defs && zend_hash_exists(scope->defs, exp->data.dvar->name)) {
return true;
}
if (scope && scope->current_enum && psi_number_validate_enum(data, exp, scope)) {
}
data->error(data, exp->token, PSI_WARNING,
"Unknown variable '%s' in numeric expression",
- exp->data.dvar->name);
+ exp->data.dvar->name->val);
return false;
case PSI_T_FUNCTION:
- if (scope && scope->defs && zend_hash_str_exists(scope->defs, exp->data.numb, strlen(exp->data.numb))) {
+ if (scope && scope->defs && zend_hash_exists(scope->defs, exp->data.numb)) {
return true;
}
return false;
case PSI_T_DEFINE:
- if (scope && scope->defs && zend_hash_str_exists(scope->defs, exp->data.numb, strlen(exp->data.numb))) {
- if (!scope->macro || strcmp(scope->macro->token->text, exp->data.numb)) {
+ if (scope && scope->defs && zend_hash_exists(scope->defs, exp->data.numb)) {
+ if (!scope->macro || !zend_string_equals(scope->macro->token->text, exp->data.numb)) {
return true;
}
/* #define foo foo */
struct psi_decl_type *dtyp = exp->data.dtyp;
data->error(data, exp->token, PSI_WARNING,
- "Cannot compute sizeof(%s) (%u)", dtyp->name, dtyp->type);
+ "Cannot compute sizeof(%s) (%u)", dtyp->name->val, dtyp->type);
exp->type = PSI_T_UINT8;
exp->data.ival.u8 = 0;
{
zval *zc;
- if (*exp->data.numb == '\\') {
- zc = zend_get_constant_str(exp->data.numb + 1, strlen(exp->data.numb) - 1);
+ if (exp->data.numb->val[0] == '\\') {
+ zc = zend_get_constant_str(&exp->data.numb->val[1], exp->data.numb->len - 1);
} else {
- zc = zend_get_constant_str(exp->data.numb, strlen(exp->data.numb));
+ zc = zend_get_constant(exp->data.numb);
}
if (zc) {
switch (Z_TYPE_P(zc)) {
case IS_LONG:
- free(exp->data.numb);
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_INT64;
exp->data.ival.i64 = Z_LVAL_P(zc);
return true;
case IS_DOUBLE:
- free(exp->data.numb);
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_DOUBLE;
exp->data.ival.dval = Z_DVAL_P(zc);
return true;
}
}
while (psi_plist_get(data->consts, i++, &cnst)) {
- if (!strcmp(cnst->name, exp->data.numb)) {
- free(exp->data.numb);
+ if (zend_string_equals(cnst->name, exp->data.numb)) {
+ zend_string_release(exp->data.numb);
exp->type = PSI_T_CONST;
exp->data.cnst = cnst;
return true;
}
data->error(data, exp->token, PSI_WARNING,
"Unknown constant '%s' in numeric expression",
- exp->data.numb);
+ exp->data.numb->val);
return false;
case PSI_T_NUMBER:
{
switch (exp->data.cnst->type->type) {
case PSI_T_INT:
- res->i64 = zend_get_constant_str(exp->data.cnst->name,
- strlen(exp->data.cnst->name))->value.lval;
+ res->i64 = zend_get_constant(exp->data.cnst->name)->value.lval;
if (frame) PSI_DEBUG_PRINT(frame->context, " %" PRIi64, res->i64);
return PSI_T_INT64;
case PSI_T_FLOAT:
- res->dval = zend_get_constant_str(exp->data.cnst->name,
- strlen(exp->data.cnst->name))->value.dval;
+ res->dval = zend_get_constant(exp->data.cnst->name)->value.dval;
if (frame) PSI_DEBUG_PRINT(frame->context, " %" PRIdval, res->dval);
return PSI_T_DOUBLE;
default:
if (defs) {
struct psi_cpp_macro_decl *macro;
- macro = zend_hash_str_find_ptr(defs, exp->data.numb, strlen(exp->data.numb));
+ macro = zend_hash_find_ptr(defs, exp->data.numb);
if (macro && macro->exp && macro->exp != rec_guard) {
return psi_num_exp_exec(macro->exp, res, NULL, defs);
}
return PSI_T_INT64;
case PSI_T_NUMBER:
- res->i64 = atol(exp->data.numb);
+ res->i64 = atol(exp->data.numb->val);
return PSI_T_INT64;
case PSI_T_CONST: