[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-cvs
Subject:    [PHP-CVS] com php-src: Fixed repeatable opcodes on CALL VM without global registers: =?UTF-8?Q?Zend/
From:       Dmitry Stogov <dmitry () php ! net>
Date:       2015-04-29 11:20:44
Message-ID: php-mail-2a0b5cd3b0cf7843a92cdb8b8fbf28e21811573143 () git ! php ! net
[Download RAW message or body]

Commit:    762a774c401a547696c536b76468d0068143d8c4
Author:    Dmitry Stogov <dmitry@zend.com>         Wed, 29 Apr 2015 14:20:44 +0300
Parents:   690440771abc471db1eccdf988732796b3ca8b5e
Branches:  master

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=762a774c401a547696c536b76468d0068143d8c4


Log:
Fixed repeatable opcodes on CALL VM without global registers

Changed paths:
  M  Zend/zend_execute.c
  M  Zend/zend_vm_def.h
  M  Zend/zend_vm_execute.h


Diff:
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index e37eaa1..648b80c 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -2224,7 +2224,9 @@ static zend_always_inline zend_generator \
*zend_get_running_generator(zend_execut  # define ZEND_VM_REPEATABLE_OPCODE \
 	do {
 # define ZEND_VM_REPEAT_OPCODE(_opcode) \
-	} while (UNEXPECTED(OPLINE->opcode == _opcode))
+	} while (UNEXPECTED((++opline)->opcode == _opcode)); \
+	OPLINE = opline; \
+	ZEND_VM_CONTINUE()
 # define ZEND_VM_SMART_BRANCH(_result, _check) do { \
 		int __result; \
 		if (EXPECTED((opline+1)->opcode == ZEND_JMPZ)) { \
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 5f26e92..900dc33 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -4660,9 +4660,8 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST)
 		}
 	}
 
-	ZEND_VM_INC_OPCODE();
 	ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
-	ZEND_VM_CONTINUE();
+	ZEND_VM_NEXT_OPCODE();
 }
 
 ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, ANY, ANY)
@@ -7719,9 +7718,8 @@ ZEND_VM_C_LABEL(check_indirect):
 		ZVAL_REF(variable_ptr, ref);
 	}
 
-	ZEND_VM_INC_OPCODE();
 	ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
-	ZEND_VM_CONTINUE();
+	ZEND_VM_NEXT_OPCODE();
 }
 
 ZEND_VM_HANDLER(121, ZEND_STRLEN, CONST|TMPVAR|CV, ANY)
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 14a97a4..a5982f3 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -2254,9 +2254,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL \
ZEND_RECV_INIT_SPEC_CONST_HANDLER(Z  }
 	}
 
-	ZEND_VM_INC_OPCODE();
 	ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
-	ZEND_VM_CONTINUE();
+	ZEND_VM_NEXT_OPCODE();
 }
 
 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL \
ZEND_BRK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -32807,9 +32806,8 @@ \
check_indirect:  ZVAL_REF(variable_ptr, ref);
 	}
 
-	ZEND_VM_INC_OPCODE();
 	ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
-	ZEND_VM_CONTINUE();
+	ZEND_VM_NEXT_OPCODE();
 }
 
 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL \
ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic