diff options
Diffstat (limited to 'sapi/phpdbg/phpdbg_prompt.c')
| -rw-r--r-- | sapi/phpdbg/phpdbg_prompt.c | 48 | 
1 files changed, 19 insertions, 29 deletions
diff --git a/sapi/phpdbg/phpdbg_prompt.c b/sapi/phpdbg/phpdbg_prompt.c index 24155a7860..39ef7d8768 100644 --- a/sapi/phpdbg/phpdbg_prompt.c +++ b/sapi/phpdbg/phpdbg_prompt.c @@ -1,7 +1,5 @@  /*     +----------------------------------------------------------------------+ -   | PHP Version 7                                                        | -   +----------------------------------------------------------------------+     | Copyright (c) The PHP Group                                          |     +----------------------------------------------------------------------+     | This source file is subject to version 3.01 of the PHP license,      | @@ -124,7 +122,6 @@ static inline int phpdbg_call_register(phpdbg_param_t *stack) /* {{{ */  			//???fci.symbol_table = zend_rebuild_symbol_table();  			fci.object = NULL;  			fci.retval = &fretval; -			fci.no_separation = 1;  			if (name->next) {  				zval params; @@ -522,12 +519,7 @@ exec_code:  } /* }}} */  int phpdbg_compile_stdin(zend_string *code) { -	zval zv; - -	ZVAL_STR(&zv, code); - -	PHPDBG_G(ops) = zend_compile_string(&zv, "Standard input code"); - +	PHPDBG_G(ops) = zend_compile_string(code, "Standard input code");  	zend_string_release(code);  	if (EG(exception)) { @@ -723,22 +715,21 @@ static inline void phpdbg_handle_exception(void) /* {{{ */  	zend_object *ex = EG(exception);  	zend_string *msg, *file;  	zend_long line; -	zval zv, rv, tmp; +	zval rv, tmp;  	EG(exception) = NULL; -	ZVAL_OBJ(&zv, ex); -	zend_call_method_with_0_params(&zv, ex->ce, &ex->ce->__tostring, "__tostring", &tmp); -	file = zval_get_string(zend_read_property(zend_get_exception_base(&zv), &zv, ZEND_STRL("file"), 1, &rv)); -	line = zval_get_long(zend_read_property(zend_get_exception_base(&zv), &zv, ZEND_STRL("line"), 1, &rv)); +	zend_call_known_instance_method_with_0_params(ex->ce->__tostring, ex, &tmp); +	file = zval_get_string(zend_read_property(zend_get_exception_base(ex), ex, ZEND_STRL("file"), 1, &rv)); +	line = zval_get_long(zend_read_property(zend_get_exception_base(ex), ex, ZEND_STRL("line"), 1, &rv));  	if (EG(exception)) {  		EG(exception) = NULL;  		msg = ZSTR_EMPTY_ALLOC();  	} else { -		zend_update_property_string(zend_get_exception_base(&zv), &zv, ZEND_STRL("string"), Z_STRVAL(tmp)); +		zend_update_property_string(zend_get_exception_base(ex), ex, ZEND_STRL("string"), Z_STRVAL(tmp));  		zval_ptr_dtor(&tmp); -		msg = zval_get_string(zend_read_property(zend_get_exception_base(&zv), &zv, ZEND_STRL("string"), 1, &rv)); +		msg = zval_get_string(zend_read_property(zend_get_exception_base(ex), ex, ZEND_STRL("string"), 1, &rv));  	}  	phpdbg_error("exception", "name=\"%s\" file=\"%s\" line=\"" ZEND_LONG_FMT "\"", "Uncaught %s in %s on line " ZEND_LONG_FMT, ZSTR_VAL(ex->ce->name), ZSTR_VAL(file), line); @@ -1230,9 +1221,8 @@ static int add_module_info(zend_module_entry *module) /* {{{ */ {  }  /* }}} */ -static int add_zendext_info(zend_extension *ext) /* {{{ */ { +static void add_zendext_info(zend_extension *ext) /* {{{ */ {  	phpdbg_write("extension", "name=\"%s\"", "%s\n", ext->name); -	return 0;  }  /* }}} */ @@ -1668,7 +1658,6 @@ static inline void list_code() {  		zend_clear_exception(); \  		list_code(); \  		switch (phpdbg_interactive(allow_async_unsafe, NULL)) { \ -			zval zv; \  			case PHPDBG_LEAVE: \  			case PHPDBG_FINISH: \  			case PHPDBG_UNTIL: \ @@ -1678,8 +1667,7 @@ static inline void list_code() {  					EG(current_execute_data)->opline = backup_opline; \  					EG(exception) = exception; \  				} else { \ -					Z_OBJ(zv) = exception; \ -					zend_throw_exception_internal(&zv); \ +					zend_throw_exception_internal(exception); \  				} \  				EG(opline_before_exception) = before_ex; \  		} \ @@ -1710,10 +1698,15 @@ void phpdbg_execute_ex(zend_execute_data *execute_data) /* {{{ */  #ifdef ZEND_WIN32  		if (EG(timed_out)) { -			zend_timeout(0); +			zend_timeout();  		}  #endif +		if (exception && zend_is_unwind_exit(exception)) { +			/* Restore bailout based exit. */ +			zend_bailout(); +		} +  		if (PHPDBG_G(flags) & PHPDBG_PREVENT_INTERACTIVE) {  			phpdbg_print_opline_ex(execute_data, 0);  			goto next; @@ -1722,9 +1715,6 @@ void phpdbg_execute_ex(zend_execute_data *execute_data) /* {{{ */  		/* check for uncaught exceptions */  		if (exception && PHPDBG_G(handled_exception) != exception && !(PHPDBG_G(flags) & PHPDBG_IN_EVAL)) {  			zend_execute_data *prev_ex = execute_data; -			zval zv, rv; -			zend_string *file, *msg; -			zend_long line;  			do {  				prev_ex = zend_generator_check_placeholder_frame(prev_ex); @@ -1740,10 +1730,10 @@ void phpdbg_execute_ex(zend_execute_data *execute_data) /* {{{ */  			PHPDBG_G(handled_exception) = exception; -			ZVAL_OBJ(&zv, exception); -			file = zval_get_string(zend_read_property(zend_get_exception_base(&zv), &zv, ZEND_STRL("file"), 1, &rv)); -			line = zval_get_long(zend_read_property(zend_get_exception_base(&zv), &zv, ZEND_STRL("line"), 1, &rv)); -			msg = zval_get_string(zend_read_property(zend_get_exception_base(&zv), &zv, ZEND_STRL("message"), 1, &rv)); +			zval rv; +			zend_string *file = zval_get_string(zend_read_property(zend_get_exception_base(exception), exception, ZEND_STRL("file"), 1, &rv)); +			zend_long line = zval_get_long(zend_read_property(zend_get_exception_base(exception), exception, ZEND_STRL("line"), 1, &rv)); +			zend_string *msg = zval_get_string(zend_read_property(zend_get_exception_base(exception), exception, ZEND_STRL("message"), 1, &rv));  			phpdbg_error("exception",  				"name=\"%s\" file=\"%s\" line=\"" ZEND_LONG_FMT "\"",  | 
