+ {
+ zval *zc;
+
+ if (*exp->data.numb == '\\') {
+ zc = zend_get_constant_str(exp->data.numb + 1, strlen(exp->data.numb) - 1);
+ } else {
+ zc = zend_get_constant_str(exp->data.numb, strlen(exp->data.numb));
+ }
+
+ if (zc) {
+ switch (Z_TYPE_P(zc)) {
+ case IS_LONG:
+ free(exp->data.numb);
+ exp->type = PSI_T_INT64;
+ exp->data.ival.i64 = Z_LVAL_P(zc);
+ return true;
+
+ case IS_DOUBLE:
+ free(exp->data.numb);
+ exp->type = PSI_T_DOUBLE;
+ exp->data.ival.dval = Z_DVAL_P(zc);
+ return true;
+
+ default:
+ assert(0);
+ }
+ }
+ }