mirror of https://github.com/deuill/go-php.git
Clean up context pre-processor bindings
This commit is contained in:
parent
d64dade5fe
commit
deb519497d
|
@ -64,11 +64,12 @@ void context_exec(engine_context *context, char *filename) {
|
|||
}
|
||||
|
||||
void *context_eval(engine_context *context, char *script) {
|
||||
zval str;
|
||||
VALUE_SET_STRING(&str, script);
|
||||
zval str, tmp;
|
||||
|
||||
// Compile script value.
|
||||
uint32_t compiler_options = CG(compiler_options);
|
||||
VALUE_SET_STRING(&str, script);
|
||||
|
||||
CG(compiler_options) = ZEND_COMPILE_DEFAULT_FOR_EVAL;
|
||||
zend_op_array *op = zend_compile_string(&str, "gophp-engine");
|
||||
CG(compiler_options) = compiler_options;
|
||||
|
@ -82,8 +83,7 @@ void *context_eval(engine_context *context, char *script) {
|
|||
}
|
||||
|
||||
// Attempt to execute compiled string.
|
||||
zval tmp;
|
||||
CONTEXT_EXECUTE(op, &tmp);
|
||||
context_eval_proxy(op, &tmp);
|
||||
|
||||
// Allocate result value and copy temporary execution result in.
|
||||
zval *result = malloc(sizeof(zval));
|
||||
|
|
|
@ -6,40 +6,6 @@
|
|||
#define ___CONTEXT_H___
|
||||
|
||||
static void context_bind_proxy(char *name, zval *value);
|
||||
|
||||
#define CONTEXT_EXECUTE(o, v) do { \
|
||||
zend_op_array *oparr = EG(active_op_array); \
|
||||
zval *retval=NULL; \
|
||||
zval **retvalptr = EG(return_value_ptr_ptr); \
|
||||
zend_op **opline = EG(opline_ptr); \
|
||||
int interact = CG(interactive); \
|
||||
EG(return_value_ptr_ptr) = &retval; \
|
||||
EG(active_op_array) = o; \
|
||||
EG(no_extensions) = 1; \
|
||||
if (!EG(active_symbol_table)) { \
|
||||
zend_rebuild_symbol_table(); \
|
||||
} \
|
||||
CG(interactive) = 0; \
|
||||
zend_try { \
|
||||
zend_execute(o); \
|
||||
} zend_catch { \
|
||||
destroy_op_array(o); \
|
||||
efree(o); \
|
||||
zend_bailout(); \
|
||||
} zend_end_try(); \
|
||||
destroy_op_array(o); \
|
||||
efree(o); \
|
||||
CG(interactive) = interact; \
|
||||
if (retval) { \
|
||||
ZVAL_COPY_VALUE(v, retval); \
|
||||
zval_copy_ctor(v); \
|
||||
} else { \
|
||||
ZVAL_NULL(v); \
|
||||
} \
|
||||
EG(no_extensions)=0; \
|
||||
EG(opline_ptr) = opline; \
|
||||
EG(active_op_array) = oparr; \
|
||||
EG(return_value_ptr_ptr) = retvalptr; \
|
||||
} while (0)
|
||||
static void context_eval_proxy(zend_op_array *op, zval *ret);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -6,20 +6,6 @@
|
|||
#define ___CONTEXT_H___
|
||||
|
||||
static void context_bind_proxy(char *name, zval *value);
|
||||
|
||||
#define CONTEXT_EXECUTE(o, v) do { \
|
||||
EG(no_extensions) = 1; \
|
||||
zend_try { \
|
||||
ZVAL_NULL(v); \
|
||||
zend_execute(o, v); \
|
||||
} zend_catch { \
|
||||
destroy_op_array(o); \
|
||||
efree_size(o, sizeof(zend_op_array)); \
|
||||
zend_bailout(); \
|
||||
} zend_end_try(); \
|
||||
destroy_op_array(o); \
|
||||
efree_size(o, sizeof(zend_op_array)); \
|
||||
EG(no_extensions) = 0; \
|
||||
} while (0)
|
||||
static void context_eval_proxy(zend_op_array *op, zval *ret);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -5,3 +5,46 @@
|
|||
static void context_bind_proxy(char *name, zval *value) {
|
||||
ZEND_SET_SYMBOL(EG(active_symbol_table), name, value);
|
||||
}
|
||||
|
||||
static void context_eval_proxy(zend_op_array *op, zval *ret) {
|
||||
zend_op_array *oparr = EG(active_op_array);
|
||||
zval *retval = NULL;
|
||||
zval **retvalptr = EG(return_value_ptr_ptr);
|
||||
zend_op **opline = EG(opline_ptr);
|
||||
int interact = CG(interactive);
|
||||
|
||||
EG(return_value_ptr_ptr) = &retval;
|
||||
EG(active_op_array) = op;
|
||||
EG(no_extensions) = 1;
|
||||
|
||||
if (!EG(active_symbol_table)) {
|
||||
zend_rebuild_symbol_table();
|
||||
}
|
||||
|
||||
CG(interactive) = 0;
|
||||
|
||||
zend_try {
|
||||
zend_execute(op);
|
||||
} zend_catch {
|
||||
destroy_op_array(op);
|
||||
efree(op);
|
||||
zend_bailout();
|
||||
} zend_end_try();
|
||||
|
||||
destroy_op_array(op);
|
||||
efree(op);
|
||||
|
||||
CG(interactive) = interact;
|
||||
|
||||
if (retval) {
|
||||
ZVAL_COPY_VALUE(ret, retval);
|
||||
zval_copy_ctor(ret);
|
||||
} else {
|
||||
ZVAL_NULL(ret);
|
||||
}
|
||||
|
||||
EG(no_extensions) = 0;
|
||||
EG(opline_ptr) = opline;
|
||||
EG(active_op_array) = oparr;
|
||||
EG(return_value_ptr_ptr) = retvalptr;
|
||||
}
|
||||
|
|
|
@ -5,3 +5,21 @@
|
|||
static void context_bind_proxy(char *name, zval *value) {
|
||||
zend_hash_str_update(&EG(symbol_table), name, strlen(name), value);
|
||||
}
|
||||
|
||||
static void context_eval_proxy(zend_op_array *op, zval *ret) {
|
||||
EG(no_extensions) = 1;
|
||||
|
||||
zend_try {
|
||||
ZVAL_NULL(ret);
|
||||
zend_execute(op, ret);
|
||||
} zend_catch {
|
||||
destroy_op_array(op);
|
||||
efree_size(op, sizeof(zend_op_array));
|
||||
zend_bailout();
|
||||
} zend_end_try();
|
||||
|
||||
destroy_op_array(op);
|
||||
efree_size(op, sizeof(zend_op_array));
|
||||
|
||||
EG(no_extensions) = 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue