flush
[m6w6/ext-psi] / php_psi.h
index 54d78b0a5b3445feb128eb772a5033b1f09bad86..31de9195666a39b1ed8185946b74b5900f905a69 100644 (file)
--- a/php_psi.h
+++ b/php_psi.h
@@ -60,6 +60,31 @@ void psi_to_object(zval *return_value, set_value *set, impl_val *ret_val);
 
 void psi_call(zend_execute_data *execute_data, zval *return_value, impl *impl);
 
+int psi_calc_num_exp(num_exp *exp, impl_val *ref, impl_val *res);
+
+static inline zend_long psi_long_num_exp(num_exp *exp, impl_val *ref) {
+       impl_val val = {0};
+
+       switch (psi_calc_num_exp(exp, ref, &val)) {
+       case PSI_T_UINT8:       val.u16 = val.u8;
+       case PSI_T_UINT16:      val.u32 = val.u16;
+       case PSI_T_UINT32:      val.u64 = val.u32;
+       case PSI_T_UINT64:      return val.u64;
+       case PSI_T_INT8:        val.i16 = val.i8;
+       case PSI_T_INT16:       val.i32 = val.i16;
+       case PSI_T_INT32:       val.i64 = val.i32;
+       case PSI_T_INT64:       return val.i64;
+       case PSI_T_FLOAT:       val.dval = val.fval;
+       case PSI_T_DOUBLE:      return val.dval;
+       EMPTY_SWITCH_DEFAULT_CASE();
+       }
+}
+
+int psi_calc_add(int t1, impl_val *v1, int t2, impl_val *v2, impl_val *res);
+int psi_calc_sub(int t1, impl_val *v1, int t2, impl_val *v2, impl_val *res);
+int psi_calc_mul(int t1, impl_val *v1, int t2, impl_val *v2, impl_val *res);
+int psi_calc_div(int t1, impl_val *v1, int t2, impl_val *v2, impl_val *res);
+
 ZEND_BEGIN_MODULE_GLOBALS(psi)
        char *engine;
        char *directory;