text: #define ZEPHIR_CONCAT_SV(result, op1, op2) \
  	 zephir_concat_sv(&result, op1, sizeof(op1)-1, op2, 0 TSRMLS_CC);
  #define ZEPHIR_SCONCAT_SV(result, op1, op2) \
  	 zephir_concat_sv(&result, op1, sizeof(op1)-1, op2, 1 TSRMLS_CC);
  
  #define ZEPHIR_CONCAT_VS(result, op1, op2) \
  	 zephir_concat_vs(&result, op1, op2, sizeof(op2)-1, 0 TSRMLS_CC);
  #define ZEPHIR_SCONCAT_VS(result, op1, op2) \
  	 zephir_concat_vs(&result, op1, op2, sizeof(op2)-1, 1 TSRMLS_CC);
  
  #define ZEPHIR_CONCAT_VSV(result, op1, op2, op3) \
  	 zephir_concat_vsv(&result, op1, op2, sizeof(op2)-1, op3, 0 TSRMLS_CC);
  #define ZEPHIR_SCONCAT_VSV(result, op1, op2, op3) \
  	 zephir_concat_vsv(&result, op1, op2, sizeof(op2)-1, op3, 1 TSRMLS_CC);
  
  #define ZEPHIR_CONCAT_VV(result, op1, op2) \
  	 zephir_concat_vv(&result, op1, op2, 0 TSRMLS_CC);
  #define ZEPHIR_SCONCAT_VV(result, op1, op2) \
  	 zephir_concat_vv(&result, op1, op2, 1 TSRMLS_CC);
  
  
  void zephir_concat_sv(zval **result, const char *op1, zend_uint op1_len, zval *op2, int self_var TSRMLS_DC);
  void zephir_concat_vs(zval **result, zval *op1, const char *op2, zend_uint op2_len, int self_var TSRMLS_DC);
  void zephir_concat_vsv(zval **result, zval *op1, const char *op2, zend_uint op2_len, zval *op3, int self_var TSRMLS_DC);
  void zephir_concat_vv(zval **result, zval *op1, zval *op2, int self_var TSRMLS_DC);
  