#include "calc.h"
#include "marshal.h"
+#include <Zend/zend_smart_str.h>
+
struct psi_set_exp *psi_set_exp_init(enum psi_set_exp_kind kind, void *data)
{
struct psi_set_exp *val = calloc(1, sizeof(*val));
if (set->var) {
/* parsed, or generated */
if (set->var->token) {
- dprintf(fd, "%s = ", set->var->name);
+ dprintf(fd, "%s = ", set->var->name->val);
}
}
}
if (set->var) {
- dprintf(fd, "\t/* fqn=%s */", set->var->fqn);
+ dprintf(fd, "\t/* fqn=%s */", set->var->fqn->val);
}
}
{
if (!exp->var) {
struct psi_decl_var *dvar = psi_set_exp_get_decl_var(exp);
- char *dollar_name;
+ zend_string *dollar_name;
+ smart_str name = {0};
if (!dvar) {
return NULL;
}
- dollar_name = psi_impl_var_name_prepend(strdup("$"), dvar->name);
+ smart_str_appendc_ex(&name, '$', 1);
+ smart_str_append_ex(&name, dvar->name, 1);
+ dollar_name = smart_str_extract(&name);
exp->var = psi_impl_var_init(dollar_name, 0);
- free(dollar_name);
+ zend_string_release(dollar_name);
}
return exp->var;
}
bool psi_set_exp_validate(struct psi_data *data, struct psi_set_exp *set,
- struct psi_impl *impl, struct psi_decl *cb_decl)
+ struct psi_validate_scope *scope)
{
struct psi_impl_var *ivar = psi_set_exp_get_impl_var(set);
- if (ivar && !psi_impl_var_validate(data, ivar, impl, NULL, set)) {
+ if (ivar && !psi_impl_var_validate(data, ivar, scope)) {
data->error(data, ivar->token ? : **(struct psi_token ***) &set->data,
- PSI_WARNING, "Unknown variable '%s'", ivar->name);
+ PSI_WARNING, "Unknown variable '%s'", ivar->name->val);
return false;
}
switch (set->kind) {
case PSI_SET_NUMEXP:
- if (!psi_num_exp_validate(data, set->data.num, impl, cb_decl, NULL, set, NULL)) {
+ if (!psi_num_exp_validate(data, set->data.num, scope)) {
return false;
}
break;
case PSI_SET_FUNC:
- if (!psi_set_func_validate(data, set->data.func, set, impl, cb_decl)) {
+ if (!psi_set_func_validate(data, set->data.func, scope)) {
return false;
}
break;