projects
/
m6w6
/
ext-psi
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
fix test
[m6w6/ext-psi]
/
src
/
types
/
set_exp.c
diff --git
a/src/types/set_exp.c
b/src/types/set_exp.c
index 4ae7a45f48ae1bc944b01b77e411cd575d4fb631..f5d67de3eeede8d80ee3cf4a393d0e05d5a1b0c3 100644
(file)
--- a/
src/types/set_exp.c
+++ b/
src/types/set_exp.c
@@
-23,15
+23,21
@@
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
-#include "php_psi_stdinc.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#else
+# include "php_config.h"
+#endif
#include "data.h"
#include "call.h"
#include "calc.h"
#include "marshal.h"
#include "data.h"
#include "call.h"
#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 *psi_set_exp_init(enum psi_set_exp_kind kind, void *data)
{
- struct psi_set_exp *val =
calloc(1, sizeof(*val)
);
+ struct psi_set_exp *val =
pecalloc(1, sizeof(*val), 1
);
switch (val->kind = kind) {
case PSI_SET_FUNC:
switch (val->kind = kind) {
case PSI_SET_FUNC:
@@
-75,7
+81,7
@@
void psi_set_exp_exec_ex(struct psi_set_exp *val, zval *zv, impl_val *iv,
val->data.func->handler(zv, val, iv, frame);
break;
case PSI_SET_NUMEXP:
val->data.func->handler(zv, val, iv, frame);
break;
case PSI_SET_NUMEXP:
- switch (psi_num_exp_exec(val->data.num, iv, frame)) {
+ switch (psi_num_exp_exec(val->data.num, iv, frame
, NULL
)) {
case PSI_T_FLOAT:
case PSI_T_DOUBLE:
case PSI_T_LONG_DOUBLE:
case PSI_T_FLOAT:
case PSI_T_DOUBLE:
case PSI_T_LONG_DOUBLE:
@@
-121,37
+127,37
@@
void psi_set_exp_free(struct psi_set_exp **exp_ptr)
}
}
}
}
-void psi_set_exp_dump(
int fd
, struct psi_set_exp *set, unsigned level, int last)
+void psi_set_exp_dump(
struct psi_dump *dump
, struct psi_set_exp *set, unsigned level, int last)
{
if (level > 1) {
/* only if not directly after `set ...` */
{
if (level > 1) {
/* only if not directly after `set ...` */
-
dprintf(fd
, "%s", psi_t_indent(level));
+
PSI_DUMP(dump
, "%s", psi_t_indent(level));
}
if (set->var) {
/* parsed, or generated */
if (set->var->token) {
}
if (set->var) {
/* parsed, or generated */
if (set->var->token) {
-
dprintf(fd, "%s = ", set->var->name
);
+
PSI_DUMP(dump, "%s = ", set->var->name->val
);
}
}
switch (set->kind) {
case PSI_SET_FUNC:
}
}
switch (set->kind) {
case PSI_SET_FUNC:
- psi_set_func_dump(
fd
, set->data.func, level);
+ psi_set_func_dump(
dump
, set->data.func, level);
break;
case PSI_SET_NUMEXP:
break;
case PSI_SET_NUMEXP:
- psi_num_exp_dump(
fd
, set->data.num);
+ psi_num_exp_dump(
dump
, set->data.num);
break;
default:
assert(0);
}
if (!last) {
break;
default:
assert(0);
}
if (!last) {
-
dprintf(fd
, ",");
+
PSI_DUMP(dump
, ",");
}
if (set->var) {
}
if (set->var) {
-
dprintf(fd, "\t/* fqn=%s */", set->var->fqn
);
+
PSI_DUMP(dump, "\t/* fqn=%s */", set->var->fqn->val
);
}
}
}
}
@@
-169,39
+175,42
@@
struct psi_impl_var *psi_set_exp_get_impl_var(struct psi_set_exp *exp)
{
if (!exp->var) {
struct psi_decl_var *dvar = psi_set_exp_get_decl_var(exp);
{
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;
}
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);
exp->var = psi_impl_var_init(dollar_name, 0);
-
fre
e(dollar_name);
+
zend_string_releas
e(dollar_name);
}
return exp->var;
}
bool psi_set_exp_validate(struct psi_data *data, struct psi_set_exp *set,
}
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);
{
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,
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:
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:
return false;
}
break;
case PSI_SET_FUNC:
- if (!psi_set_func_validate(data, set->data.func, s
et, impl, cb_decl
)) {
+ if (!psi_set_func_validate(data, set->data.func, s
cope
)) {
return false;
}
break;
return false;
}
break;