]> granicus.if.org Git - php/commitdiff
* Fix debugger+interactive mode bug
authorZeev Suraski <zeev@php.net>
Tue, 27 Apr 1999 11:00:59 +0000 (11:00 +0000)
committerZeev Suraski <zeev@php.net>
Tue, 27 Apr 1999 11:00:59 +0000 (11:00 +0000)
* Recognize whether an extension is with debug information or not

Zend/zend-scanner.l
Zend/zend_compile.h
Zend/zend_execute_API.c
Zend/zend_extensions.c
Zend/zend_extensions.h
Zend/zend_opcode.c

index 75514fe0ae648d7a339b7e99f6d52235186178a7..aa50dd62e43bd49442c0f4f4166043cefe248daf 100644 (file)
@@ -300,6 +300,7 @@ zend_op_array *compile_string(zval *source_string CLS_DC)
        source_string = &tmp;
 
        init_op_array(op_array, INITIAL_OP_ARRAY_SIZE);
+       op_array->type = ZEND_EVAL_CODE;
        save_lexical_state(&original_lex_state CLS_CC);
        if (prepare_string_for_scanning(source_string CLS_CC)==FAILURE) {
                destroy_op_array(op_array);
index 499178444efbcb2ca5d099fc1fd9e86785e57dd5..f1d87bc650fb0bd26f86a4b10cf9a65f8a5abe1f 100644 (file)
@@ -498,6 +498,7 @@ int zendlex(znode *zendlval CLS_DC);
 #define ZEND_INTERNAL_FUNCTION         1
 #define ZEND_USER_FUNCTION                     2
 #define ZEND_OVERLOADED_FUNCTION       3
+#define        ZEND_EVAL_CODE                          4
 
 #define ZEND_INTERNAL_CLASS            1
 #define ZEND_USER_CLASS                        2
index 4a99396a921e24cfa15afb3d39cdbfef934fe78d..180462ed2dd2d4271b127dca9c246fab78ee38ce 100644 (file)
@@ -435,8 +435,9 @@ void execute_new_code(CLS_D)
        ELS_FETCH();
 
        if (!EG(interactive)
-               || CG(active_op_array)->backpatch_count>0) {
-               
+               || CG(active_op_array)->backpatch_count>0
+               || CG(active_op_array)->function_name
+               || CG(active_op_array)->type!=ZEND_USER_FUNCTION) {
                return;
        }
        CG(active_op_array)->start_op_number = CG(active_op_array)->last_executed_op_number;
index 92eb410aa9177a0b40ea5add962397bd2ac0c9fa..ea59c025d441ce4f0eac195130fab76fbfd475e8 100644 (file)
@@ -83,6 +83,13 @@ int zend_load_extension(char *path)
                                        (ZTS_V?"is":"isn't"));
                DL_UNLOAD(handle);
                return FAILURE;
+       } else if (ZEND_DEBUG_V!=extension_version_info->debug) {
+               zend_printf("Cannot load %s - it %s debug information, whereas Zend %s\n",
+                                       new_extension->name,
+                                       (extension_version_info->debug?"contains":"does not contain"),
+                                       (ZEND_DEBUG_V?"does":"does not"));
+               DL_UNLOAD(handle);
+               return FAILURE;
        }
 
        if (new_extension->startup) {
index cd1c3cb974fc76cb714acf1a23a93cf87000e03e..9c11942bc18aeb23e1adf44d881cc7acd0c73071 100644 (file)
@@ -25,6 +25,7 @@ typedef struct {
        int zend_extension_api_no;
        char *required_zend_version;
        unsigned char thread_safe;
+       unsigned char debug;
 } zend_extension_version_info;
 
 
@@ -73,9 +74,15 @@ ZEND_API int zend_get_resource_handle();
 #define ZTS_V 0
 #endif
 
+#ifdef ZEND_DEBUG
+#define ZEND_DEBUG_V 1
+#else
+#define ZEND_DEBUG_V 0
+#endif
+
 
 #define ZEND_EXTENSION()       \
-       ZEND_EXT_API zend_extension_version_info extension_version_info = { ZEND_EXTENSION_API_NO, "0.80A", ZTS_V }
+       ZEND_EXT_API zend_extension_version_info extension_version_info = { ZEND_EXTENSION_API_NO, "0.80A", ZTS_V, ZEND_DEBUG_V }
 
 #define STANDARD_ZEND_EXTENSION_PROPERTIES NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1
 
index 8af45c0064fc28e48fc0892a7eb5661430a0e761..1e113c500e2721f58d8606ef218a3e1f63169209 100644 (file)
@@ -271,7 +271,7 @@ int pass_two(zend_op_array *op_array)
 {
        CLS_FETCH();
 
-       if (op_array->type != ZEND_USER_FUNCTION) {
+       if (op_array->type!=ZEND_USER_FUNCTION && op_array->type!=ZEND_EVAL_CODE) {
                return 0;
        }
        if (CG(extended_info)) {