passing structs by value
[m6w6/ext-psi] / php_psi.h
index 31de9195666a39b1ed8185946b74b5900f905a69..8bac82658ba70b42261bd7d915479dee286af5c4 100644 (file)
--- a/php_psi.h
+++ b/php_psi.h
@@ -1,4 +1,3 @@
-
 #ifndef PHP_PSI_H
 #define PHP_PSI_H
 
@@ -20,9 +19,10 @@ extern zend_module_entry psi_module_entry;
 #endif
 
 #include "context.h"
-#include "parser.h"
 
-void psi_error(int type, const char *msg, ...);
+void psi_error_wrapper(PSI_Token *t, int type, const char *msg, ...);
+void psi_error(int type, const char *fn, unsigned ln, const char *msg, ...);
+void psi_verror(int type, const char *fn, unsigned ln, const char *msg, va_list argv);
 
 static inline int psi_check_env(const char *var) {
        char *set = getenv(var);
@@ -55,29 +55,31 @@ void psi_to_bool(zval *return_value, set_value *set, impl_val *ret_val);
 void psi_to_int(zval *return_value, set_value *set, impl_val *ret_val);
 void psi_to_double(zval *return_value, set_value *set, impl_val *ret_val);
 void psi_to_string(zval *return_value, set_value *set, impl_val *ret_val);
+void psi_to_recursive(zval *return_value, set_value *set, impl_val *r_val);
 void psi_to_array(zval *return_value, set_value *set, impl_val *ret_val);
 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);
+int psi_calc_num_exp(num_exp *exp, impl_val *strct, impl_val *res);
 
-static inline zend_long psi_long_num_exp(num_exp *exp, impl_val *ref) {
+static inline zend_long psi_long_num_exp(num_exp *exp, impl_val *strct) {
        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;
+       switch (psi_calc_num_exp(exp, strct, &val)) {
+       case PSI_T_UINT8:       return val.u8;
+       case PSI_T_UINT16:      return val.u16;
+       case PSI_T_UINT32:      return val.u32;
+       case PSI_T_UINT64:      return val.u64; /* FIXME */
+       case PSI_T_INT8:        return val.i8;
+       case PSI_T_INT16:       return val.i16;
+       case PSI_T_INT32:       return val.i32;
        case PSI_T_INT64:       return val.i64;
-       case PSI_T_FLOAT:       val.dval = val.fval;
+       case PSI_T_FLOAT:       return val.fval;
        case PSI_T_DOUBLE:      return val.dval;
        EMPTY_SWITCH_DEFAULT_CASE();
        }
+       return 0;
 }
 
 int psi_calc_add(int t1, impl_val *v1, int t2, impl_val *v2, impl_val *res);