diff options
author | Aaron Piotrowski <aaron@trowski.com> | 2016-06-10 22:02:23 -0500 |
---|---|---|
committer | Aaron Piotrowski <aaron@trowski.com> | 2016-06-10 22:02:23 -0500 |
commit | e3c681aa5cc71122a8d2fae42e6513fc413ccac8 (patch) | |
tree | 5f1df62f7b666028edb0ee1adf083a52d63df45a /sapi/phpdbg/phpdbg_btree.c | |
parent | fb4e3085cbaa76eb8f28eebf848a81d1c0190067 (diff) | |
parent | 792e89385ca6fc722a03590722eb7745a2374720 (diff) | |
download | php-git-e3c681aa5cc71122a8d2fae42e6513fc413ccac8.tar.gz |
Merge branch 'master' into throw-error-in-extensions
Diffstat (limited to 'sapi/phpdbg/phpdbg_btree.c')
-rw-r--r-- | sapi/phpdbg/phpdbg_btree.c | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/sapi/phpdbg/phpdbg_btree.c b/sapi/phpdbg/phpdbg_btree.c index 2311f05126..9e7dc86e8e 100644 --- a/sapi/phpdbg/phpdbg_btree.c +++ b/sapi/phpdbg/phpdbg_btree.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2015 The PHP Group | + | Copyright (c) 1997-2016 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -66,7 +66,6 @@ phpdbg_btree_result *phpdbg_btree_find(phpdbg_btree *tree, zend_ulong idx) { phpdbg_btree_result *phpdbg_btree_find_closest(phpdbg_btree *tree, zend_ulong idx) { phpdbg_btree_branch *branch = tree->branch; int i = tree->depth - 1, last_superior_i = -1; - zend_bool had_alternative_branch = 0; if (branch == NULL) { return NULL; @@ -74,30 +73,33 @@ phpdbg_btree_result *phpdbg_btree_find_closest(phpdbg_btree *tree, zend_ulong id /* find nearest watchpoint */ do { - /* an impossible branch was found if: */ - if (!had_alternative_branch && (idx >> i) % 2 == 0 && !branch->branches[0]) { - /* there's no lower branch than idx */ - if (last_superior_i == -1) { - /* failure */ - return NULL; - } - /* reset state */ - branch = tree->branch; - i = tree->depth - 1; - /* follow branch according to bits in idx until the last lower branch before the impossible branch */ - do { - CHOOSE_BRANCH((idx >> i) % 2 == 1 && branch->branches[1]); - } while (--i > last_superior_i); - /* use now the lower branch of which we can be sure that it contains only branches lower than idx */ - CHOOSE_BRANCH(0); - /* and choose the highest possible branch in the branch containing only branches lower than idx */ - while (i--) { - CHOOSE_BRANCH(branch->branches[1]); + if ((idx >> i) % 2 == 0) { + if (branch->branches[0]) { + CHOOSE_BRANCH(0); + /* an impossible branch was found if: */ + } else { + /* there's no lower branch than idx */ + if (last_superior_i == -1) { + /* failure */ + return NULL; + } + /* reset state */ + branch = tree->branch; + i = tree->depth - 1; + /* follow branch according to bits in idx until the last lower branch before the impossible branch */ + do { + CHOOSE_BRANCH((idx >> i) % 2 == 1 && branch->branches[1]); + } while (--i > last_superior_i); + /* use now the lower branch of which we can be sure that it contains only branches lower than idx */ + CHOOSE_BRANCH(0); + /* and choose the highest possible branch in the branch containing only branches lower than idx */ + while (i--) { + CHOOSE_BRANCH(branch->branches[1]); + } + break; } - break; - } /* follow branch according to bits in idx until having found an impossible branch */ - if (had_alternative_branch || (idx >> i) % 2 == 1) { + } else { if (branch->branches[1]) { if (branch->branches[0]) { last_superior_i = i; @@ -105,10 +107,11 @@ phpdbg_btree_result *phpdbg_btree_find_closest(phpdbg_btree *tree, zend_ulong id CHOOSE_BRANCH(1); } else { CHOOSE_BRANCH(0); - had_alternative_branch = 1; + while (i--) { + CHOOSE_BRANCH(branch->branches[1]); + } + break; } - } else { - CHOOSE_BRANCH(0); } } while (i--); |