summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorOndřej Surý <ondrej@sury.org>2013-04-11 17:20:31 +0200
committerOndřej Surý <ondrej@sury.org>2013-04-11 17:20:31 +0200
commit5a7c0b1f326279a6d7dba8285e81860e1f0ff8ce (patch)
tree81f2fb75f657f6a90ad1ef8901b9408ce17b20ae /Zend
parentcf099ba2ee4e438bae16c3670a14ce0c4390529a (diff)
downloadphp-5a7c0b1f326279a6d7dba8285e81860e1f0ff8ce.tar.gz
Imported Upstream version 5.5.0~beta3upstream/5.5.0_beta3
Diffstat (limited to 'Zend')
-rw-r--r--Zend/acinclude.m42
-rw-r--r--Zend/tests/bug43450.phpt2
-rw-r--r--Zend/tests/bug60771.phpt1
-rw-r--r--Zend/tests/bug64555.phpt42
-rw-r--r--Zend/tests/bug64578.phpt14
-rw-r--r--Zend/tests/generators/clone.phpt31
-rw-r--r--Zend/tests/generators/clone_after_object_call.phpt20
-rw-r--r--Zend/tests/generators/clone_with_foreach.phpt33
-rw-r--r--Zend/tests/generators/clone_with_properties.phpt18
-rw-r--r--Zend/tests/generators/clone_with_stack.phpt18
-rw-r--r--Zend/tests/generators/clone_with_symbol_table.phpt27
-rw-r--r--Zend/tests/generators/clone_with_this.phpt24
-rw-r--r--Zend/tests/generators/nested_method_calls.phpt5
-rw-r--r--Zend/tests/generators/yield_during_method_call.phpt8
-rw-r--r--Zend/zend_compile.c7
-rw-r--r--Zend/zend_compile.h2
-rw-r--r--Zend/zend_execute.c18
-rw-r--r--Zend/zend_execute_API.c2
-rw-r--r--Zend/zend_generators.c171
-rw-r--r--Zend/zend_hash.c2
-rw-r--r--Zend/zend_ini_parser.c156
-rw-r--r--Zend/zend_ini_parser.output217
-rw-r--r--Zend/zend_ini_parser.y6
-rw-r--r--Zend/zend_ini_scanner.c711
-rw-r--r--Zend/zend_ini_scanner.l8
-rw-r--r--Zend/zend_language_scanner.c4
-rw-r--r--Zend/zend_language_scanner.l4
27 files changed, 690 insertions, 863 deletions
diff --git a/Zend/acinclude.m4 b/Zend/acinclude.m4
index 136d2d8be..454513f68 100644
--- a/Zend/acinclude.m4
+++ b/Zend/acinclude.m4
@@ -4,7 +4,7 @@ dnl This file contains local autoconf functions.
AC_DEFUN([LIBZEND_BISON_CHECK],[
# we only support certain bison versions
- bison_version_list="1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5 2.5.1 2.6 2.6.1 2.6.2"
+ bison_version_list="2.4 2.4.1 2.4.2 2.4.3 2.5 2.5.1 2.6 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.7"
# for standalone build of Zend Engine
test -z "$SED" && SED=sed
diff --git a/Zend/tests/bug43450.phpt b/Zend/tests/bug43450.phpt
index 926e146f4..a94eba312 100644
--- a/Zend/tests/bug43450.phpt
+++ b/Zend/tests/bug43450.phpt
@@ -2,6 +2,8 @@
Bug #43450 (Memory leak on some functions with implicit object __toString() call)
--SKIPIF--
<?php if (!function_exists('memory_get_usage')) die('memory_get_usage() not installed'); ?>
+--INI--
+opcache.enable_cli=0
--FILE--
<?php
error_reporting(E_ALL|E_STRICT);
diff --git a/Zend/tests/bug60771.phpt b/Zend/tests/bug60771.phpt
index 2cf69f782..c20bbc462 100644
--- a/Zend/tests/bug60771.phpt
+++ b/Zend/tests/bug60771.phpt
@@ -4,6 +4,7 @@ test of larger than 8kb text file being parsed by require statement
<?php
file_put_contents('test.php',str_repeat('passed, ',1024));
require('test.php');
+ unlink('test.php');
?>
--EXPECT--
passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed,
diff --git a/Zend/tests/bug64555.phpt b/Zend/tests/bug64555.phpt
new file mode 100644
index 000000000..d5226af7a
--- /dev/null
+++ b/Zend/tests/bug64555.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Bug #64555: Array key within interned string gets wrong hash value
+--FILE--
+<?php
+
+class Foo {
+ protected $unsetme = 1;
+ protected $keepme = 2;
+
+ public function test() {
+ $a = get_object_vars($this);
+
+ foreach ($a as $k => $v) {
+ if ($k == 'unsetme') {
+ echo "Unsetting: $k\n";
+ unset($a[$k]);
+ } else if ($k == 'keepme') {
+ echo "Changing: $k\n";
+ $a[$k] = 42;
+ $a['keepme'] = 43;
+ }
+ }
+
+ var_dump($a, array_keys($a));
+ }
+}
+
+$f = new Foo;
+$f->test();
+
+?>
+--EXPECT--
+Unsetting: unsetme
+Changing: keepme
+array(1) {
+ ["keepme"]=>
+ int(43)
+}
+array(1) {
+ [0]=>
+ string(6) "keepme"
+}
diff --git a/Zend/tests/bug64578.phpt b/Zend/tests/bug64578.phpt
new file mode 100644
index 000000000..6cb5392ce
--- /dev/null
+++ b/Zend/tests/bug64578.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Bug #64578 (debug_backtrace in set_error_handler corrupts zend heap: segfault)
+--FILE--
+<?php
+
+set_error_handler(function($no, $err) { var_dump($err); });
+
+function x($s) { $s['a'] = 1; };
+$y = '1';
+x($y);
+print_r($y);
+--EXPECTF--
+string(25) "Illegal string offset 'a'"
+1
diff --git a/Zend/tests/generators/clone.phpt b/Zend/tests/generators/clone.phpt
index 36811dfe6..22f442812 100644
--- a/Zend/tests/generators/clone.phpt
+++ b/Zend/tests/generators/clone.phpt
@@ -1,32 +1,15 @@
--TEST--
-Generators can be cloned
+Generators cannot be cloned
--FILE--
<?php
-function firstN($end) {
- for ($i = 0; $i < $end; ++$i) {
- yield $i;
- }
+function gen() {
+ yield;
}
-$g1 = firstN(5);
-var_dump($g1->current());
-$g1->next();
-
-$g2 = clone $g1;
-var_dump($g2->current());
-$g2->next();
-
-var_dump($g2->current());
-var_dump($g1->current());
-
-$g1->next();
-var_dump($g1->current());
+$gen = gen();
+clone $gen;
?>
---EXPECT--
-int(0)
-int(1)
-int(2)
-int(1)
-int(2)
+--EXPECTF--
+Fatal error: Trying to clone an uncloneable object of class Generator in %s on line %d
diff --git a/Zend/tests/generators/clone_after_object_call.phpt b/Zend/tests/generators/clone_after_object_call.phpt
deleted file mode 100644
index 0a424268c..000000000
--- a/Zend/tests/generators/clone_after_object_call.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-Cloning a generator after an object method was called
---FILE--
-<?php
-
-class A { public function b() { } }
-
-function gen() {
- $a = new A;
- $a->b();
- yield;
-}
-
-$g1 = gen();
-$g1->rewind();
-$g2 = clone $g1;
-
-echo "Done";
---EXPECT--
-Done
diff --git a/Zend/tests/generators/clone_with_foreach.phpt b/Zend/tests/generators/clone_with_foreach.phpt
deleted file mode 100644
index b05ed0731..000000000
--- a/Zend/tests/generators/clone_with_foreach.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-Cloning a generator with a foreach loop properly adds a ref for the loop var
---FILE--
-<?php
-
-function gen() {
- foreach ([1, 2, 3] as $i) {
- yield $i;
- }
-}
-
-$g1 = gen();
-var_dump($g1->current());
-
-$g2 = clone $g1;
-var_dump($g2->current());
-
-$g1->next();
-$g2->next();
-var_dump($g1->current());
-var_dump($g2->current());
-
-unset($g1);
-$g2->next();
-var_dump($g2->current());
-
-?>
---EXPECT--
-int(1)
-int(1)
-int(2)
-int(2)
-int(3)
diff --git a/Zend/tests/generators/clone_with_properties.phpt b/Zend/tests/generators/clone_with_properties.phpt
deleted file mode 100644
index 900253c68..000000000
--- a/Zend/tests/generators/clone_with_properties.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Tests cloning a generator with properties
---FILE--
-<?php
-
-function gen() { yield; }
-
-$g1 = gen();
-$g1->prop = 'val';
-
-$g2 = clone $g1;
-unset($g1);
-
-var_dump($g2->prop);
-
-?>
---EXPECT--
-string(3) "val"
diff --git a/Zend/tests/generators/clone_with_stack.phpt b/Zend/tests/generators/clone_with_stack.phpt
deleted file mode 100644
index 5a8e6d842..000000000
--- a/Zend/tests/generators/clone_with_stack.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-A generator with an active stack can be cloned
---FILE--
-<?php
-
-function gen() {
- var_dump(str_repeat("x", yield));
-}
-
-$g1 = gen();
-$g1->rewind();
-$g2 = clone $g1;
-unset($g1);
-$g2->send(10);
-
-?>
---EXPECT--
-string(10) "xxxxxxxxxx"
diff --git a/Zend/tests/generators/clone_with_symbol_table.phpt b/Zend/tests/generators/clone_with_symbol_table.phpt
deleted file mode 100644
index e1fefebd8..000000000
--- a/Zend/tests/generators/clone_with_symbol_table.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-A generator using a symbol table can be cloned
---FILE--
-<?php
-
-function gen() {
- // force compiled variable for $foo
- $foo = 'foo';
-
- // force symbol table
- extract(['foo' => 'bar']);
-
- // interrupt
- yield;
-
- var_dump($foo);
-}
-
-$g1 = gen();
-$g1->rewind();
-$g2 = clone $g1;
-unset($g1);
-$g2->next();
-
-?>
---EXPECT--
-string(3) "bar"
diff --git a/Zend/tests/generators/clone_with_this.phpt b/Zend/tests/generators/clone_with_this.phpt
deleted file mode 100644
index b242d851e..000000000
--- a/Zend/tests/generators/clone_with_this.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Cloning a generator method (with $this)
---FILE--
-<?php
-
-class Test {
- protected $foo;
-
- public function gen() {
- $this->foo = 'bar';
- yield; // interrupt
- var_dump($this->foo);
- }
-}
-
-$g1 = (new Test)->gen();
-$g1->rewind(); // goto yield
-$g2 = clone $g1;
-unset($g1);
-$g2->next();
-
-?>
---EXPECT--
-string(3) "bar"
diff --git a/Zend/tests/generators/nested_method_calls.phpt b/Zend/tests/generators/nested_method_calls.phpt
index 98aee2e60..0d640b31c 100644
--- a/Zend/tests/generators/nested_method_calls.phpt
+++ b/Zend/tests/generators/nested_method_calls.phpt
@@ -26,10 +26,7 @@ $g2 = gen(new B);
$g2->current();
$g1->next();
-
-$g3 = clone $g2;
-unset($g2);
-$g3->next();
+$g2->next();
?>
--EXPECT--
diff --git a/Zend/tests/generators/yield_during_method_call.phpt b/Zend/tests/generators/yield_during_method_call.phpt
index 5fbe84fff..3a9914d58 100644
--- a/Zend/tests/generators/yield_during_method_call.phpt
+++ b/Zend/tests/generators/yield_during_method_call.phpt
@@ -22,14 +22,6 @@ $gen = gen();
$gen->rewind();
unset($gen);
-// test cloning
-$g1 = gen();
-$g1->rewind();
-$g2 = clone $g1;
-unset($g1);
-$g2->send('bar');
-
?>
--EXPECT--
foo
-bar
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 6df3defb1..768079091 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -1809,7 +1809,7 @@ void zend_do_end_function_declaration(const znode *function_token TSRMLS_DC) /*
zend_do_return(NULL, 0 TSRMLS_CC);
pass_two(CG(active_op_array) TSRMLS_CC);
- zend_release_labels(TSRMLS_C);
+ zend_release_labels(0 TSRMLS_CC);
if (CG(active_class_entry)) {
zend_check_magic_method_implementation(CG(active_class_entry), (zend_function*)CG(active_op_array), E_COMPILE_ERROR TSRMLS_CC);
@@ -2391,13 +2391,14 @@ void zend_do_goto(const znode *label TSRMLS_DC) /* {{{ */
}
/* }}} */
-void zend_release_labels(TSRMLS_D) /* {{{ */
+void zend_release_labels(int temporary TSRMLS_DC) /* {{{ */
{
if (CG(context).labels) {
zend_hash_destroy(CG(context).labels);
FREE_HASHTABLE(CG(context).labels);
+ CG(context).labels = NULL;
}
- if (!zend_stack_is_empty(&CG(context_stack))) {
+ if (!temporary && !zend_stack_is_empty(&CG(context_stack))) {
zend_compiler_context *ctx;
zend_stack_top(&CG(context_stack), (void**)&ctx);
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
index 2295cffab..9c55b5ebe 100644
--- a/Zend/zend_compile.h
+++ b/Zend/zend_compile.h
@@ -643,7 +643,7 @@ void zend_do_resolve_class_name(znode *result, znode *class_name, int is_static
void zend_do_label(znode *label TSRMLS_DC);
void zend_do_goto(const znode *label TSRMLS_DC);
void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline, int pass2 TSRMLS_DC);
-void zend_release_labels(TSRMLS_D);
+void zend_release_labels(int temporary TSRMLS_DC);
ZEND_API void function_add_ref(zend_function *function);
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index a7674ca8a..a65f5331d 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -898,13 +898,10 @@ static inline zval* zend_assign_to_variable(zval **variable_ptr_ptr, zval *value
} else if (EXPECTED(!PZVAL_IS_REF(value))) {
Z_ADDREF_P(value);
*variable_ptr_ptr = value;
- if (EXPECTED(variable_ptr != &EG(uninitialized_zval))) {
- GC_REMOVE_ZVAL_FROM_BUFFER(variable_ptr);
- zval_dtor(variable_ptr);
- efree(variable_ptr);
- } else {
- Z_DELREF_P(variable_ptr);
- }
+ ZEND_ASSERT(variable_ptr != &EG(uninitialized_zval));
+ GC_REMOVE_ZVAL_FROM_BUFFER(variable_ptr);
+ zval_dtor(variable_ptr);
+ efree(variable_ptr);
return value;
} else {
goto copy_value;
@@ -1147,6 +1144,10 @@ convert_to_array:
zend_error_noreturn(E_ERROR, "[] operator not supported for strings");
}
+ if (type != BP_VAR_UNSET) {
+ SEPARATE_ZVAL_IF_NOT_REF(container_ptr);
+ }
+
if (Z_TYPE_P(dim) != IS_LONG) {
switch(Z_TYPE_P(dim)) {
@@ -1175,9 +1176,6 @@ convert_to_array:
convert_to_long(&tmp);
dim = &tmp;
}
- if (type != BP_VAR_UNSET) {
- SEPARATE_ZVAL_IF_NOT_REF(container_ptr);
- }
container = *container_ptr;
result->str_offset.str = container;
PZVAL_LOCK(container);
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index f099784a4..8739e21c2 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -1295,7 +1295,7 @@ void execute_new_code(TSRMLS_D) /* {{{ */
opline++;
}
- zend_release_labels(TSRMLS_C);
+ zend_release_labels(1 TSRMLS_CC);
EG(return_value_ptr_ptr) = NULL;
EG(active_op_array) = CG(active_op_array);
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index 3f43552f1..d189148f4 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -196,175 +196,6 @@ static void zend_generator_free_storage(zend_generator *generator TSRMLS_DC) /*
}
/* }}} */
-static zend_object_value zend_generator_clone(zval *object TSRMLS_DC) /* {{{ */
-{
- zend_generator *orig = zend_object_store_get_object(object TSRMLS_CC);
- zend_object_value clone_val = zend_generator_create(Z_OBJCE_P(object) TSRMLS_CC);
- zend_generator *clone = zend_object_store_get_object_by_handle(clone_val.handle TSRMLS_CC);
-
- zend_objects_clone_members(
- &clone->std, clone_val, &orig->std, Z_OBJ_HANDLE_P(object) TSRMLS_CC
- );
-
- clone->execute_data = orig->execute_data;
- clone->largest_used_integer_key = orig->largest_used_integer_key;
- clone->flags = orig->flags;
-
- if (orig->execute_data) {
- /* Create a few shorter aliases to the old execution data */
- zend_execute_data *execute_data = orig->execute_data;
- zend_op_array *op_array = execute_data->op_array;
- HashTable *symbol_table = execute_data->symbol_table;
- zend_execute_data *current_execute_data;
- zend_op **opline_ptr;
- HashTable *current_symbol_table;
- zend_vm_stack current_stack;
- zval *current_this;
- void **stack_frame, **orig_stack_frame;
-
- /* Create new execution context. We have to back up and restore
- * EG(current_execute_data), EG(opline_ptr), EG(active_symbol_table)
- * and EG(This) here because the function modifies or uses them */
- current_execute_data = EG(current_execute_data);
- EG(current_execute_data) = execute_data->prev_execute_data;
- opline_ptr = EG(opline_ptr);
- current_symbol_table = EG(active_symbol_table);
- EG(active_symbol_table) = execute_data->symbol_table;
- current_this = EG(This);
- EG(This) = NULL;
- current_stack = EG(argument_stack);
- clone->execute_data = zend_create_execute_data_from_op_array(op_array, 0 TSRMLS_CC);
- clone->stack = EG(argument_stack);
- EG(argument_stack) = current_stack;
- EG(This) = current_this;
- EG(active_symbol_table) = current_symbol_table;
- EG(current_execute_data) = current_execute_data;
- EG(opline_ptr) = opline_ptr;
-
- /* copy */
- clone->execute_data->opline = execute_data->opline;
- clone->execute_data->function_state = execute_data->function_state;
- clone->execute_data->object = execute_data->object;
- clone->execute_data->current_scope = execute_data->current_scope;
- clone->execute_data->current_called_scope = execute_data->current_called_scope;
- clone->execute_data->fast_ret = execute_data->fast_ret;
-
- if (!symbol_table) {
- int i;
-
- /* Copy compiled variables */
- for (i = 0; i < op_array->last_var; i++) {
- if (*EX_CV_NUM(execute_data, i)) {
- *EX_CV_NUM(clone->execute_data, i) = (zval **) EX_CV_NUM(clone->execute_data, op_array->last_var + i);
- **EX_CV_NUM(clone->execute_data, i) = *(zval **) EX_CV_NUM(execute_data, op_array->last_var + i);
- Z_ADDREF_PP(*EX_CV_NUM(clone->execute_data, i));
- }
- }
- } else {
- /* Copy symbol table */
- ALLOC_HASHTABLE(clone->execute_data->symbol_table);
- zend_hash_init(clone->execute_data->symbol_table, zend_hash_num_elements(symbol_table), NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(clone->execute_data->symbol_table, symbol_table, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));
-
- /* Update zval** pointers for compiled variables */
- {
- int i;
- for (i = 0; i < op_array->last_var; i++) {
- if (zend_hash_quick_find(clone->execute_data->symbol_table, op_array->vars[i].name, op_array->vars[i].name_len + 1, op_array->vars[i].hash_value, (void **) EX_CV_NUM(clone->execute_data, i)) == FAILURE) {
- *EX_CV_NUM(clone->execute_data, i) = NULL;
- }
- }
- }
- }
-
- /* Copy nested-calls stack */
- if (execute_data->call) {
- clone->execute_data->call = clone->execute_data->call_slots +
- (execute_data->call - execute_data->call_slots);
- } else {
- clone->execute_data->call = NULL;
- }
- memcpy(clone->execute_data->call_slots, execute_data->call_slots, ZEND_MM_ALIGNED_SIZE(sizeof(call_slot)) * op_array->nested_calls);
- if (clone->execute_data->call >= clone->execute_data->call_slots) {
- call_slot *call = clone->execute_data->call;
-
- while (call >= clone->execute_data->call_slots) {
- if (call->object) {
- Z_ADDREF_P(call->object);
- }
- call--;
- }
- }
-
- /* Copy the temporary variables */
- memcpy(EX_TMP_VAR_NUM(clone->execute_data, op_array->T-1), EX_TMP_VAR_NUM(execute_data, op_array->T-1), ZEND_MM_ALIGNED_SIZE(sizeof(temp_variable)) * op_array->T);
-
- /* Copy arguments passed on stack */
- stack_frame = zend_vm_stack_frame_base(clone->execute_data);
- orig_stack_frame = zend_vm_stack_frame_base(execute_data);
- clone->stack->top = stack_frame + (orig->stack->top - orig_stack_frame);
- if (clone->stack->top != stack_frame) {
- memcpy(stack_frame, orig_stack_frame, ZEND_MM_ALIGNED_SIZE(sizeof(zval*)) * (orig->stack->top - orig_stack_frame));
- while (clone->stack->top != stack_frame) {
- Z_ADDREF_PP((zval**)stack_frame);
- stack_frame++;
- }
- }
-
- /* Add references to loop variables */
- {
- zend_uint op_num = execute_data->opline - op_array->opcodes;
-
- int i;
- for (i = 0; i < op_array->last_brk_cont; ++i) {
- zend_brk_cont_element *brk_cont = op_array->brk_cont_array + i;
-
- if (brk_cont->start < 0) {
- continue;
- } else if (brk_cont->start > op_num) {
- break;
- } else if (brk_cont->brk > op_num) {
- zend_op *brk_opline = op_array->opcodes + brk_cont->brk;
-
- if (brk_opline->opcode == ZEND_SWITCH_FREE) {
- temp_variable *var = EX_TMP_VAR(execute_data, brk_opline->op1.var);
-
- Z_ADDREF_P(var->var.ptr);
- }
- }
- }
- }
-
- /* Update the send_target to use the temporary variable with the same
- * offset as the original generator, but in our temporary variable
- * memory segment. */
- if (orig->send_target) {
- size_t offset = (char *) orig->send_target - (char *)execute_data;
- clone->send_target = EX_TMP_VAR(clone->execute_data, offset);
- zval_copy_ctor(&clone->send_target->tmp_var);
- }
-
- if (execute_data->current_this) {
- clone->execute_data->current_this = execute_data->current_this;
- Z_ADDREF_P(execute_data->current_this);
- }
- }
-
- /* The value and key are known not to be references, so simply add refs */
- if (orig->value) {
- clone->value = orig->value;
- Z_ADDREF_P(orig->value);
- }
-
- if (orig->key) {
- clone->key = orig->key;
- Z_ADDREF_P(orig->key);
- }
-
- return clone_val;
-}
-/* }}} */
-
static zend_object_value zend_generator_create(zend_class_entry *class_type TSRMLS_DC) /* {{{ */
{
zend_generator *generator;
@@ -867,7 +698,7 @@ void zend_register_generator_ce(TSRMLS_D) /* {{{ */
memcpy(&zend_generator_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
zend_generator_handlers.get_constructor = zend_generator_get_constructor;
- zend_generator_handlers.clone_obj = zend_generator_clone;
+ zend_generator_handlers.clone_obj = NULL;
}
/* }}} */
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index bca47b330..27b603eed 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -1182,7 +1182,7 @@ ZEND_API void zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key,
Z_TYPE_P(key) = IS_NULL;
} else if (p->nKeyLength) {
Z_TYPE_P(key) = IS_STRING;
- Z_STRVAL_P(key) = IS_INTERNED(p->arKey) ? (char *) p->arKey : estrndup(p->arKey, p->nKeyLength - 1);
+ Z_STRVAL_P(key) = estrndup(p->arKey, p->nKeyLength - 1);
Z_STRLEN_P(key) = p->nKeyLength - 1;
} else {
Z_TYPE_P(key) = IS_LONG;
diff --git a/Zend/zend_ini_parser.c b/Zend/zend_ini_parser.c
index 70be84343..e27e539f8 100644
--- a/Zend/zend_ini_parser.c
+++ b/Zend/zend_ini_parser.c
@@ -144,6 +144,9 @@ static void zend_ini_do_op(char type, zval *result, zval *op1, zval *op2)
case '&':
i_result = i_op1 & i_op2;
break;
+ case '^':
+ i_result = i_op1 ^ i_op2;
+ break;
case '~':
i_result = ~i_op1;
break;
@@ -609,16 +612,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 109
+#define YYLAST 121
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 43
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 13
/* YYNRULES -- Number of rules. */
-#define YYNRULES 48
+#define YYNRULES 49
/* YYNRULES -- Number of states. */
-#define YYNSTATES 69
+#define YYNSTATES 71
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
@@ -668,8 +671,8 @@ static const yytype_uint8 yyprhs[] =
0, 0, 3, 6, 7, 11, 15, 21, 23, 25,
27, 28, 30, 32, 34, 36, 38, 39, 42, 45,
46, 48, 50, 54, 57, 60, 65, 67, 69, 73,
- 76, 79, 84, 86, 90, 94, 97, 100, 104, 108,
- 110, 112, 114, 116, 118, 120, 122, 124, 126
+ 76, 79, 84, 86, 90, 94, 98, 101, 104, 108,
+ 112, 114, 116, 118, 120, 122, 124, 126, 128, 130
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
@@ -684,20 +687,21 @@ static const yytype_int8 yyrhs[] =
50, 21, 49, 21, -1, 53, -1, 55, -1, 21,
49, 21, -1, 51, 53, -1, 51, 55, -1, 51,
21, 49, 21, -1, 51, -1, 52, 37, 52, -1,
- 52, 38, 52, -1, 30, 52, -1, 39, 52, -1,
- 41, 52, 42, -1, 11, 12, 36, -1, 5, -1,
- 4, -1, 6, -1, 7, -1, 8, -1, 5, -1,
- 4, -1, 6, -1, 7, -1, 8, -1
+ 52, 38, 52, -1, 52, 23, 52, -1, 30, 52,
+ -1, 39, 52, -1, 41, 52, 42, -1, 11, 12,
+ 36, -1, 5, -1, 4, -1, 6, -1, 7, -1,
+ 8, -1, 5, -1, 4, -1, 6, -1, 7, -1,
+ 8, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 273, 273, 274, 278, 285, 293, 302, 303, 307,
- 308, 312, 313, 314, 315, 319, 320, 324, 325, 326,
- 330, 331, 332, 333, 334, 335, 339, 340, 341, 342,
- 343, 344, 348, 349, 350, 351, 352, 353, 357, 361,
- 362, 363, 364, 365, 369, 370, 371, 372, 373
+ 0, 276, 276, 277, 281, 288, 296, 305, 306, 310,
+ 311, 315, 316, 317, 318, 322, 323, 327, 328, 329,
+ 333, 334, 335, 336, 337, 338, 342, 343, 344, 345,
+ 346, 347, 351, 352, 353, 354, 355, 356, 357, 361,
+ 365, 366, 367, 368, 369, 373, 374, 375, 376, 377
};
#endif
@@ -738,8 +742,8 @@ static const yytype_uint8 yyr1[] =
0, 43, 44, 44, 45, 45, 45, 45, 45, 46,
46, 47, 47, 47, 47, 48, 48, 49, 49, 49,
50, 50, 50, 50, 50, 50, 51, 51, 51, 51,
- 51, 51, 52, 52, 52, 52, 52, 52, 53, 54,
- 54, 54, 54, 54, 55, 55, 55, 55, 55
+ 51, 51, 52, 52, 52, 52, 52, 52, 52, 53,
+ 54, 54, 54, 54, 54, 55, 55, 55, 55, 55
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -748,8 +752,8 @@ static const yytype_uint8 yyr2[] =
0, 2, 2, 0, 3, 3, 5, 1, 1, 1,
0, 1, 1, 1, 1, 1, 0, 2, 2, 0,
1, 1, 3, 2, 2, 4, 1, 1, 3, 2,
- 2, 4, 1, 3, 3, 2, 2, 3, 3, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1
+ 2, 4, 1, 3, 3, 3, 2, 2, 3, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -757,13 +761,14 @@ static const yytype_uint8 yyr2[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
- 3, 0, 1, 10, 7, 16, 8, 2, 40, 39,
- 41, 42, 43, 0, 19, 0, 9, 20, 21, 0,
- 45, 44, 46, 47, 48, 19, 0, 15, 26, 27,
+ 3, 0, 1, 10, 7, 16, 8, 2, 41, 40,
+ 42, 43, 44, 0, 19, 0, 9, 20, 21, 0,
+ 46, 45, 47, 48, 49, 19, 0, 15, 26, 27,
0, 0, 4, 19, 23, 24, 12, 13, 14, 0,
0, 0, 5, 32, 11, 0, 0, 19, 29, 30,
- 38, 18, 22, 17, 0, 35, 36, 0, 0, 0,
- 28, 0, 0, 25, 37, 33, 34, 6, 31
+ 39, 18, 22, 17, 0, 36, 37, 0, 0, 0,
+ 0, 28, 0, 0, 25, 38, 35, 33, 34, 6,
+ 31
};
/* YYDEFGOTO[NTERM-NUM]. */
@@ -775,23 +780,24 @@ static const yytype_int8 yydefgoto[] =
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -36
+#define YYPACT_NINF -29
static const yytype_int8 yypact[] =
{
- -36, 93, -36, 39, -5, 65, -36, -36, -36, -36,
- -36, -36, -36, 8, -36, -18, 73, -36, -36, 0,
- -36, -36, -36, -36, -36, -36, -15, 84, -36, -36,
- -9, 41, -36, -36, -36, -36, -36, -36, -36, 27,
- 27, 27, -36, 84, -35, 42, 12, -36, -36, -36,
- -36, -36, -36, -36, 54, -36, -36, 45, 27, 27,
- -36, 0, 86, -36, -36, -36, -36, -36, -36
+ -29, 94, -29, 48, -15, 66, -29, -29, -29, -29,
+ -29, -29, -29, -2, -29, -28, 74, -29, -29, 0,
+ -29, -29, -29, -29, -29, -29, -21, 85, -29, -29,
+ 1, 54, -29, -29, -29, -29, -29, -29, -29, 27,
+ 27, 27, -29, 85, 24, 87, 12, -29, -29, -29,
+ -29, -29, -29, -29, 88, -29, -29, -20, 27, 27,
+ 27, -29, 0, 100, -29, -29, -29, -29, -29, -29,
+ -29
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
- -36, -36, -36, -36, -12, -36, -24, -36, 51, -22,
- -3, 48, -17
+ -29, -29, -29, -29, -19, -29, -24, -29, 44, -14,
+ -3, 34, -7
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
@@ -801,32 +807,36 @@ static const yytype_int8 yypgoto[] =
#define YYTABLE_NINF -1
static const yytype_uint8 yytable[] =
{
- 17, 45, 58, 59, 20, 21, 22, 23, 24, 54,
- 49, 13, 19, 34, 36, 37, 38, 55, 56, 57,
- 30, 25, 32, 62, 48, 46, 49, 50, 53, 61,
- 39, 20, 21, 22, 23, 24, 65, 66, 13, 40,
- 48, 41, 53, 8, 9, 10, 11, 12, 25, 67,
- 13, 53, 13, 13, 51, 51, 27, 39, 0, 53,
- 14, 0, 52, 60, 35, 13, 40, 51, 41, 20,
- 21, 22, 23, 24, 0, 63, 13, 8, 9, 10,
- 11, 12, 58, 59, 13, 0, 25, 64, 20, 21,
- 22, 23, 24, 2, 33, 13, 3, 13, 0, 51,
- 0, 0, 4, 5, 0, 47, 0, 68, 0, 6
+ 17, 45, 19, 58, 20, 21, 22, 23, 24, 54,
+ 30, 13, 32, 34, 36, 37, 38, 59, 60, 46,
+ 49, 25, 65, 63, 48, 55, 56, 57, 53, 62,
+ 39, 20, 21, 22, 23, 24, 49, 50, 13, 40,
+ 48, 41, 53, 69, 66, 67, 68, 58, 25, 27,
+ 35, 53, 8, 9, 10, 11, 12, 39, 0, 13,
+ 53, 59, 60, 0, 0, 13, 40, 51, 41, 14,
+ 20, 21, 22, 23, 24, 52, 0, 13, 8, 9,
+ 10, 11, 12, 0, 0, 13, 0, 25, 0, 20,
+ 21, 22, 23, 24, 2, 33, 13, 3, 13, 13,
+ 51, 51, 0, 4, 5, 0, 47, 0, 61, 64,
+ 6, 13, 0, 51, 0, 0, 0, 0, 0, 0,
+ 0, 70
};
static const yytype_int8 yycheck[] =
{
- 3, 25, 37, 38, 4, 5, 6, 7, 8, 33,
- 27, 11, 17, 16, 14, 15, 16, 39, 40, 41,
- 12, 21, 40, 47, 27, 40, 43, 36, 31, 17,
- 30, 4, 5, 6, 7, 8, 58, 59, 11, 39,
- 43, 41, 45, 4, 5, 6, 7, 8, 21, 61,
- 11, 54, 11, 11, 13, 13, 5, 30, -1, 62,
- 21, -1, 21, 21, 16, 11, 39, 13, 41, 4,
- 5, 6, 7, 8, -1, 21, 11, 4, 5, 6,
- 7, 8, 37, 38, 11, -1, 21, 42, 4, 5,
- 6, 7, 8, 0, 21, 11, 3, 11, -1, 13,
- -1, -1, 9, 10, -1, 21, -1, 21, -1, 16
+ 3, 25, 17, 23, 4, 5, 6, 7, 8, 33,
+ 12, 11, 40, 16, 14, 15, 16, 37, 38, 40,
+ 27, 21, 42, 47, 27, 39, 40, 41, 31, 17,
+ 30, 4, 5, 6, 7, 8, 43, 36, 11, 39,
+ 43, 41, 45, 62, 58, 59, 60, 23, 21, 5,
+ 16, 54, 4, 5, 6, 7, 8, 30, -1, 11,
+ 63, 37, 38, -1, -1, 11, 39, 13, 41, 21,
+ 4, 5, 6, 7, 8, 21, -1, 11, 4, 5,
+ 6, 7, 8, -1, -1, 11, -1, 21, -1, 4,
+ 5, 6, 7, 8, 0, 21, 11, 3, 11, 11,
+ 13, 13, -1, 9, 10, -1, 21, -1, 21, 21,
+ 16, 11, -1, 13, -1, -1, -1, -1, -1, -1,
+ -1, 21
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -838,8 +848,9 @@ static const yytype_uint8 yystos[] =
4, 5, 6, 7, 8, 21, 48, 51, 53, 55,
12, 49, 40, 21, 53, 54, 14, 15, 16, 30,
39, 41, 47, 51, 52, 49, 40, 21, 53, 55,
- 36, 13, 21, 53, 49, 52, 52, 52, 37, 38,
- 21, 17, 49, 21, 42, 52, 52, 47, 21
+ 36, 13, 21, 53, 49, 52, 52, 52, 23, 37,
+ 38, 21, 17, 49, 21, 42, 52, 52, 52, 47,
+ 21
};
#define yyerrok (yyerrstatus = 0)
@@ -1822,71 +1833,76 @@ yyreduce:
case 35:
- { zend_ini_do_op('~', &(yyval), &(yyvsp[(2) - (2)]), NULL); }
+ { zend_ini_do_op('^', &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)])); }
break;
case 36:
- { zend_ini_do_op('!', &(yyval), &(yyvsp[(2) - (2)]), NULL); }
+ { zend_ini_do_op('~', &(yyval), &(yyvsp[(2) - (2)]), NULL); }
break;
case 37:
- { (yyval) = (yyvsp[(2) - (3)]); }
+ { zend_ini_do_op('!', &(yyval), &(yyvsp[(2) - (2)]), NULL); }
break;
case 38:
- { zend_ini_get_var(&(yyval), &(yyvsp[(2) - (3)]) TSRMLS_CC); free(Z_STRVAL((yyvsp[(2) - (3)]))); }
+ { (yyval) = (yyvsp[(2) - (3)]); }
break;
case 39:
- { (yyval) = (yyvsp[(1) - (1)]); }
+ { zend_ini_get_var(&(yyval), &(yyvsp[(2) - (3)]) TSRMLS_CC); free(Z_STRVAL((yyvsp[(2) - (3)]))); }
break;
case 40:
- { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ }
+ { (yyval) = (yyvsp[(1) - (1)]); }
break;
case 41:
- { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_NUMBER: '%s'\n", Z_STRVAL($1));*/ }
+ { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ }
break;
case 42:
- { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_STRING: '%s'\n", Z_STRVAL($1));*/ }
+ { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_NUMBER: '%s'\n", Z_STRVAL($1));*/ }
break;
case 43:
- { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_WHITESPACE: '%s'\n", Z_STRVAL($1));*/ }
+ { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_STRING: '%s'\n", Z_STRVAL($1));*/ }
break;
case 44:
- { zend_ini_get_constant(&(yyval), &(yyvsp[(1) - (1)]) TSRMLS_CC); }
+ { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_WHITESPACE: '%s'\n", Z_STRVAL($1));*/ }
break;
case 45:
- { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ }
+ { zend_ini_get_constant(&(yyval), &(yyvsp[(1) - (1)]) TSRMLS_CC); }
break;
case 46:
- { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_NUMBER: '%s'\n", Z_STRVAL($1));*/ }
+ { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ }
break;
case 47:
- { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_STRING: '%s'\n", Z_STRVAL($1));*/ }
+ { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_NUMBER: '%s'\n", Z_STRVAL($1));*/ }
break;
case 48:
+ { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_STRING: '%s'\n", Z_STRVAL($1));*/ }
+ break;
+
+ case 49:
+
{ (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_WHITESPACE: '%s'\n", Z_STRVAL($1));*/ }
break;
diff --git a/Zend/zend_ini_parser.output b/Zend/zend_ini_parser.output
index fc6468a7f..cfd6dd4af 100644
--- a/Zend/zend_ini_parser.output
+++ b/Zend/zend_ini_parser.output
@@ -4,7 +4,6 @@ Terminals unused in grammar
','
'.'
'\''
- '^'
'+'
'-'
'/'
@@ -63,36 +62,37 @@ Grammar
31 expr: var_string_list
32 | expr '|' expr
33 | expr '&' expr
- 34 | '~' expr
- 35 | '!' expr
- 36 | '(' expr ')'
+ 34 | expr '^' expr
+ 35 | '~' expr
+ 36 | '!' expr
+ 37 | '(' expr ')'
- 37 cfg_var_ref: TC_DOLLAR_CURLY TC_VARNAME '}'
+ 38 cfg_var_ref: TC_DOLLAR_CURLY TC_VARNAME '}'
- 38 constant_literal: TC_CONSTANT
- 39 | TC_RAW
- 40 | TC_NUMBER
- 41 | TC_STRING
- 42 | TC_WHITESPACE
+ 39 constant_literal: TC_CONSTANT
+ 40 | TC_RAW
+ 41 | TC_NUMBER
+ 42 | TC_STRING
+ 43 | TC_WHITESPACE
- 43 constant_string: TC_CONSTANT
- 44 | TC_RAW
- 45 | TC_NUMBER
- 46 | TC_STRING
- 47 | TC_WHITESPACE
+ 44 constant_string: TC_CONSTANT
+ 45 | TC_RAW
+ 46 | TC_NUMBER
+ 47 | TC_STRING
+ 48 | TC_WHITESPACE
Terminals, with rules where they appear
$end (0) 0
-'!' (33) 35
+'!' (33) 36
'"' (34) 21 24 27 30
'$' (36)
'%' (37)
'&' (38) 33
'\'' (39)
-'(' (40) 36
-')' (41) 36
+'(' (40) 37
+')' (41) 37
'*' (42)
'+' (43)
',' (44)
@@ -106,22 +106,22 @@ $end (0) 0
'?' (63)
'@' (64)
']' (93) 3 5
-'^' (94)
+'^' (94) 34
'{' (123)
'|' (124) 32
-'}' (125) 37
-'~' (126) 34
+'}' (125) 38
+'~' (126) 35
error (256)
TC_SECTION (258) 3
-TC_RAW (259) 39 44
-TC_CONSTANT (260) 38 43
-TC_NUMBER (261) 40 45
-TC_STRING (262) 41 46
-TC_WHITESPACE (263) 42 47
+TC_RAW (259) 40 45
+TC_CONSTANT (260) 39 44
+TC_NUMBER (261) 41 46
+TC_STRING (262) 42 47
+TC_WHITESPACE (263) 43 48
TC_LABEL (264) 4 6
TC_OFFSET (265) 5
-TC_DOLLAR_CURLY (266) 37
-TC_VARNAME (267) 37
+TC_DOLLAR_CURLY (266) 38
+TC_VARNAME (267) 38
TC_QUOTED_STRING (268) 17
BOOL_TRUE (269) 11
BOOL_FALSE (270) 12
@@ -149,13 +149,13 @@ var_string_list_section (50)
var_string_list (51)
on left: 25 26 27 28 29 30, on right: 14 28 29 30 31
expr (52)
- on left: 31 32 33 34 35 36, on right: 10 32 33 34 35 36
+ on left: 31 32 33 34 35 36 37, on right: 10 32 33 34 35 36 37
cfg_var_ref (53)
- on left: 37, on right: 16 19 22 25 28
+ on left: 38, on right: 16 19 22 25 28
constant_literal (54)
- on left: 38 39 40 41 42, on right: 20 23
+ on left: 39 40 41 42 43, on right: 20 23
constant_string (55)
- on left: 43 44 45 46 47, on right: 26 29
+ on left: 44 45 46 47 48, on right: 26 29
state 0
@@ -254,42 +254,42 @@ state 7
state 8
- 39 constant_literal: TC_RAW .
+ 40 constant_literal: TC_RAW .
- $default reduce using rule 39 (constant_literal)
+ $default reduce using rule 40 (constant_literal)
state 9
- 38 constant_literal: TC_CONSTANT .
+ 39 constant_literal: TC_CONSTANT .
- $default reduce using rule 38 (constant_literal)
+ $default reduce using rule 39 (constant_literal)
state 10
- 40 constant_literal: TC_NUMBER .
+ 41 constant_literal: TC_NUMBER .
- $default reduce using rule 40 (constant_literal)
+ $default reduce using rule 41 (constant_literal)
state 11
- 41 constant_literal: TC_STRING .
+ 42 constant_literal: TC_STRING .
- $default reduce using rule 41 (constant_literal)
+ $default reduce using rule 42 (constant_literal)
state 12
- 42 constant_literal: TC_WHITESPACE .
+ 43 constant_literal: TC_WHITESPACE .
- $default reduce using rule 42 (constant_literal)
+ $default reduce using rule 43 (constant_literal)
state 13
- 37 cfg_var_ref: TC_DOLLAR_CURLY . TC_VARNAME '}'
+ 38 cfg_var_ref: TC_DOLLAR_CURLY . TC_VARNAME '}'
TC_VARNAME shift, and go to state 30
@@ -372,37 +372,37 @@ state 19
state 20
- 44 constant_string: TC_RAW .
+ 45 constant_string: TC_RAW .
- $default reduce using rule 44 (constant_string)
+ $default reduce using rule 45 (constant_string)
state 21
- 43 constant_string: TC_CONSTANT .
+ 44 constant_string: TC_CONSTANT .
- $default reduce using rule 43 (constant_string)
+ $default reduce using rule 44 (constant_string)
state 22
- 45 constant_string: TC_NUMBER .
+ 46 constant_string: TC_NUMBER .
- $default reduce using rule 45 (constant_string)
+ $default reduce using rule 46 (constant_string)
state 23
- 46 constant_string: TC_STRING .
+ 47 constant_string: TC_STRING .
- $default reduce using rule 46 (constant_string)
+ $default reduce using rule 47 (constant_string)
state 24
- 47 constant_string: TC_WHITESPACE .
+ 48 constant_string: TC_WHITESPACE .
- $default reduce using rule 47 (constant_string)
+ $default reduce using rule 48 (constant_string)
state 25
@@ -458,7 +458,7 @@ state 29
state 30
- 37 cfg_var_ref: TC_DOLLAR_CURLY TC_VARNAME . '}'
+ 38 cfg_var_ref: TC_DOLLAR_CURLY TC_VARNAME . '}'
'}' shift, and go to state 50
@@ -529,7 +529,7 @@ state 38
state 39
- 34 expr: '~' . expr
+ 35 expr: '~' . expr
TC_RAW shift, and go to state 20
TC_CONSTANT shift, and go to state 21
@@ -550,7 +550,7 @@ state 39
state 40
- 35 expr: '!' . expr
+ 36 expr: '!' . expr
TC_RAW shift, and go to state 20
TC_CONSTANT shift, and go to state 21
@@ -571,7 +571,7 @@ state 40
state 41
- 36 expr: '(' . expr ')'
+ 37 expr: '(' . expr ')'
TC_RAW shift, and go to state 20
TC_CONSTANT shift, and go to state 21
@@ -623,9 +623,11 @@ state 44
10 string_or_value: expr .
32 expr: expr . '|' expr
33 | expr . '&' expr
+ 34 | expr . '^' expr
- '|' shift, and go to state 58
- '&' shift, and go to state 59
+ '^' shift, and go to state 58
+ '|' shift, and go to state 59
+ '&' shift, and go to state 60
$default reduce using rule 10 (string_or_value)
@@ -638,7 +640,7 @@ state 45
TC_DOLLAR_CURLY shift, and go to state 13
TC_QUOTED_STRING shift, and go to state 51
- '"' shift, and go to state 60
+ '"' shift, and go to state 61
cfg_var_ref go to state 53
@@ -647,7 +649,7 @@ state 46
5 statement: TC_OFFSET option_offset ']' . '=' string_or_value
- '=' shift, and go to state 61
+ '=' shift, and go to state 62
state 47
@@ -656,7 +658,7 @@ state 47
$default reduce using rule 18 (encapsed_list)
- encapsed_list go to state 62
+ encapsed_list go to state 63
state 48
@@ -675,9 +677,9 @@ state 49
state 50
- 37 cfg_var_ref: TC_DOLLAR_CURLY TC_VARNAME '}' .
+ 38 cfg_var_ref: TC_DOLLAR_CURLY TC_VARNAME '}' .
- $default reduce using rule 37 (cfg_var_ref)
+ $default reduce using rule 38 (cfg_var_ref)
state 51
@@ -709,7 +711,7 @@ state 54
TC_DOLLAR_CURLY shift, and go to state 13
TC_QUOTED_STRING shift, and go to state 51
- '"' shift, and go to state 63
+ '"' shift, and go to state 64
cfg_var_ref go to state 53
@@ -718,34 +720,38 @@ state 55
32 expr: expr . '|' expr
33 | expr . '&' expr
- 34 | '~' expr .
+ 34 | expr . '^' expr
+ 35 | '~' expr .
- $default reduce using rule 34 (expr)
+ $default reduce using rule 35 (expr)
state 56
32 expr: expr . '|' expr
33 | expr . '&' expr
- 35 | '!' expr .
+ 34 | expr . '^' expr
+ 36 | '!' expr .
- $default reduce using rule 35 (expr)
+ $default reduce using rule 36 (expr)
state 57
32 expr: expr . '|' expr
33 | expr . '&' expr
- 36 | '(' expr . ')'
+ 34 | expr . '^' expr
+ 37 | '(' expr . ')'
- '|' shift, and go to state 58
- '&' shift, and go to state 59
- ')' shift, and go to state 64
+ '^' shift, and go to state 58
+ '|' shift, and go to state 59
+ '&' shift, and go to state 60
+ ')' shift, and go to state 65
state 58
- 32 expr: expr '|' . expr
+ 34 expr: expr '^' . expr
TC_RAW shift, and go to state 20
TC_CONSTANT shift, and go to state 21
@@ -759,14 +765,14 @@ state 58
'(' shift, and go to state 41
var_string_list go to state 43
- expr go to state 65
+ expr go to state 66
cfg_var_ref go to state 28
constant_string go to state 29
state 59
- 33 expr: expr '&' . expr
+ 32 expr: expr '|' . expr
TC_RAW shift, and go to state 20
TC_CONSTANT shift, and go to state 21
@@ -780,19 +786,40 @@ state 59
'(' shift, and go to state 41
var_string_list go to state 43
- expr go to state 66
+ expr go to state 67
cfg_var_ref go to state 28
constant_string go to state 29
state 60
+ 33 expr: expr '&' . expr
+
+ TC_RAW shift, and go to state 20
+ TC_CONSTANT shift, and go to state 21
+ TC_NUMBER shift, and go to state 22
+ TC_STRING shift, and go to state 23
+ TC_WHITESPACE shift, and go to state 24
+ TC_DOLLAR_CURLY shift, and go to state 13
+ '"' shift, and go to state 25
+ '~' shift, and go to state 39
+ '!' shift, and go to state 40
+ '(' shift, and go to state 41
+
+ var_string_list go to state 43
+ expr go to state 68
+ cfg_var_ref go to state 28
+ constant_string go to state 29
+
+
+state 61
+
27 var_string_list: '"' encapsed_list '"' .
$default reduce using rule 27 (var_string_list)
-state 61
+state 62
5 statement: TC_OFFSET option_offset ']' '=' . string_or_value
@@ -810,14 +837,14 @@ state 61
'!' shift, and go to state 40
'(' shift, and go to state 41
- string_or_value go to state 67
+ string_or_value go to state 69
var_string_list go to state 43
expr go to state 44
cfg_var_ref go to state 28
constant_string go to state 29
-state 62
+state 63
16 encapsed_list: encapsed_list . cfg_var_ref
17 | encapsed_list . TC_QUOTED_STRING
@@ -825,51 +852,63 @@ state 62
TC_DOLLAR_CURLY shift, and go to state 13
TC_QUOTED_STRING shift, and go to state 51
- '"' shift, and go to state 68
+ '"' shift, and go to state 70
cfg_var_ref go to state 53
-state 63
+state 64
24 var_string_list_section: var_string_list_section '"' encapsed_list '"' .
$default reduce using rule 24 (var_string_list_section)
-state 64
+state 65
- 36 expr: '(' expr ')' .
+ 37 expr: '(' expr ')' .
- $default reduce using rule 36 (expr)
+ $default reduce using rule 37 (expr)
-state 65
+state 66
+
+ 32 expr: expr . '|' expr
+ 33 | expr . '&' expr
+ 34 | expr . '^' expr
+ 34 | expr '^' expr .
+
+ $default reduce using rule 34 (expr)
+
+
+state 67
32 expr: expr . '|' expr
32 | expr '|' expr .
33 | expr . '&' expr
+ 34 | expr . '^' expr
$default reduce using rule 32 (expr)
-state 66
+state 68
32 expr: expr . '|' expr
33 | expr . '&' expr
33 | expr '&' expr .
+ 34 | expr . '^' expr
$default reduce using rule 33 (expr)
-state 67
+state 69
5 statement: TC_OFFSET option_offset ']' '=' string_or_value .
$default reduce using rule 5 (statement)
-state 68
+state 70
30 var_string_list: var_string_list '"' encapsed_list '"' .
diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y
index 2d428c3fe..901babad6 100644
--- a/Zend/zend_ini_parser.y
+++ b/Zend/zend_ini_parser.y
@@ -67,6 +67,9 @@ static void zend_ini_do_op(char type, zval *result, zval *op1, zval *op2)
case '&':
i_result = i_op1 & i_op2;
break;
+ case '^':
+ i_result = i_op1 ^ i_op2;
+ break;
case '~':
i_result = ~i_op1;
break;
@@ -264,7 +267,7 @@ ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, int s
%token BOOL_FALSE
%token END_OF_LINE
%token '=' ':' ',' '.' '"' '\'' '^' '+' '-' '/' '*' '%' '$' '~' '<' '>' '?' '@' '{' '}'
-%left '|' '&'
+%left '|' '&' '^'
%right '~' '!'
%%
@@ -348,6 +351,7 @@ expr:
var_string_list { $$ = $1; }
| expr '|' expr { zend_ini_do_op('|', &$$, &$1, &$3); }
| expr '&' expr { zend_ini_do_op('&', &$$, &$1, &$3); }
+ | expr '^' expr { zend_ini_do_op('^', &$$, &$1, &$3); }
| '~' expr { zend_ini_do_op('~', &$$, &$2, NULL); }
| '!' expr { zend_ini_do_op('!', &$$, &$2, NULL); }
| '(' expr ')' { $$ = $2; }
diff --git a/Zend/zend_ini_scanner.c b/Zend/zend_ini_scanner.c
index 35d9763bd..87ba66431 100644
--- a/Zend/zend_ini_scanner.c
+++ b/Zend/zend_ini_scanner.c
@@ -381,7 +381,7 @@ yyc_INITIAL:
144, 144, 144, 144, 144, 144, 144, 144,
144, 144, 144, 144, 144, 144, 144, 144,
144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 128, 144, 144, 144, 144,
+ 144, 144, 144, 128, 144, 144, 128, 144,
144, 144, 144, 144, 144, 144, 144, 144,
144, 144, 144, 144, 144, 144, 144, 144,
144, 144, 144, 144, 144, 144, 144, 144,
@@ -419,6 +419,7 @@ yyc_INITIAL:
case '&':
case '(':
case ')':
+ case '^':
case '{':
case '|':
case '}':
@@ -437,8 +438,7 @@ yyc_INITIAL:
case '>':
case '?':
case '@':
- case ']':
- case '^': goto yy13;
+ case ']': goto yy13;
case ';': goto yy14;
case '=': goto yy16;
case 'F':
@@ -695,35 +695,33 @@ yy31:
if (yybm[0+yych] & 64) {
goto yy31;
}
- if (yych <= '&') {
- if (yych <= '\r') {
- if (yych <= '\t') {
+ if (yych <= '\'') {
+ if (yych <= ' ') {
+ if (yych <= '\n') {
if (yych <= 0x08) goto yy25;
- goto yy34;
+ if (yych <= '\t') goto yy34;
} else {
- if (yych <= '\n') goto yy33;
- if (yych <= '\f') goto yy25;
+ if (yych != '\r') goto yy25;
}
} else {
- if (yych <= '#') {
- if (yych <= ' ') goto yy25;
- if (yych >= '#') goto yy25;
+ if (yych <= '$') {
+ if (yych == '#') goto yy25;
} else {
- if (yych == '%') goto yy25;
+ if (yych != '&') goto yy25;
}
}
} else {
- if (yych <= '<') {
- if (yych <= ')') {
- if (yych <= '\'') goto yy25;
+ if (yych <= 'Z') {
+ if (yych <= ';') {
+ if (yych <= ')') goto yy33;
+ if (yych <= ':') goto yy25;
} else {
- if (yych != ';') goto yy25;
+ if (yych != '=') goto yy25;
}
} else {
- if (yych <= '[') {
- if (yych <= '=') goto yy33;
- if (yych <= 'Z') goto yy25;
- goto yy28;
+ if (yych <= '^') {
+ if (yych <= '[') goto yy28;
+ if (yych <= ']') goto yy25;
} else {
if (yych <= 'z') goto yy25;
if (yych >= 0x7F) goto yy25;
@@ -737,7 +735,7 @@ yy33:
{ /* TRUE value (when used outside option value/offset this causes parse error!) */
RETURN_TOKEN(BOOL_TRUE, "1", 1);
}
-#line 741 "Zend/zend_ini_scanner.c"
+#line 739 "Zend/zend_ini_scanner.c"
yy34:
YYDEBUG(34, *YYCURSOR);
++YYCURSOR;
@@ -769,36 +767,36 @@ yy39:
YYFILL(1);
yych = *YYCURSOR;
YYDEBUG(40, *YYCURSOR);
- if (yych <= '%') {
- if (yych <= '\r') {
- if (yych <= '\t') {
+ if (yych <= '&') {
+ if (yych <= 0x1F) {
+ if (yych <= '\n') {
if (yych <= 0x08) goto yy25;
- goto yy42;
+ if (yych <= '\t') goto yy42;
} else {
- if (yych <= '\n') goto yy41;
- if (yych <= '\f') goto yy25;
+ if (yych != '\r') goto yy25;
}
} else {
- if (yych <= '"') {
- if (yych <= 0x1F) goto yy25;
+ if (yych <= '#') {
if (yych <= ' ') goto yy39;
+ if (yych >= '#') goto yy25;
} else {
- if (yych != '$') goto yy25;
+ if (yych == '%') goto yy25;
}
}
} else {
- if (yych <= '<') {
- if (yych <= ')') {
- if (yych == '\'') goto yy25;
+ if (yych <= '=') {
+ if (yych <= ':') {
+ if (yych <= '\'') goto yy25;
+ if (yych >= '*') goto yy25;
} else {
- if (yych != ';') goto yy25;
+ if (yych == '<') goto yy25;
}
} else {
- if (yych <= '[') {
- if (yych <= '=') goto yy41;
- if (yych <= 'Z') goto yy25;
- goto yy28;
+ if (yych <= ']') {
+ if (yych == '[') goto yy28;
+ goto yy25;
} else {
+ if (yych <= '^') goto yy41;
if (yych <= 'z') goto yy25;
if (yych >= 0x7F) goto yy25;
}
@@ -811,7 +809,7 @@ yy41:
{ /* FALSE value (when used outside option value/offset this causes parse error!)*/
RETURN_TOKEN(BOOL_FALSE, "", 0);
}
-#line 815 "Zend/zend_ini_scanner.c"
+#line 813 "Zend/zend_ini_scanner.c"
yy42:
YYDEBUG(42, *YYCURSOR);
++YYCURSOR;
@@ -824,7 +822,7 @@ yy42:
yy44:
YYDEBUG(44, *YYCURSOR);
yych = *++YYCURSOR;
- if (yych <= '&') {
+ if (yych <= '\'') {
if (yych <= 0x1F) {
if (yych <= '\n') {
if (yych <= 0x08) goto yy26;
@@ -841,22 +839,24 @@ yy44:
goto yy26;
} else {
if (yych == '%') goto yy26;
- goto yy41;
+ if (yych <= '&') goto yy41;
+ goto yy26;
}
}
} else {
- if (yych <= '=') {
- if (yych <= ':') {
- if (yych <= '\'') goto yy26;
+ if (yych <= 'N') {
+ if (yych <= ';') {
if (yych <= ')') goto yy41;
- goto yy26;
- } else {
- if (yych == '<') goto yy26;
+ if (yych <= ':') goto yy26;
goto yy41;
+ } else {
+ if (yych == '=') goto yy41;
+ if (yych <= 'M') goto yy26;
+ goto yy47;
}
} else {
if (yych <= 'm') {
- if (yych == 'N') goto yy47;
+ if (yych == '^') goto yy41;
goto yy26;
} else {
if (yych <= 'n') goto yy47;
@@ -946,35 +946,34 @@ yy58:
yych = *YYCURSOR;
yy59:
YYDEBUG(59, *YYCURSOR);
- if (yych <= '&') {
- if (yych <= '\r') {
- if (yych <= '\t') {
+ if (yych <= '\'') {
+ if (yych <= ' ') {
+ if (yych <= '\n') {
if (yych <= 0x08) goto yy58;
+ if (yych >= '\n') goto yy64;
} else {
- if (yych <= '\n') goto yy64;
- if (yych <= '\f') goto yy58;
- goto yy66;
+ if (yych == '\r') goto yy66;
+ goto yy58;
}
} else {
- if (yych <= '#') {
- if (yych <= ' ') goto yy58;
- if (yych >= '#') goto yy58;
+ if (yych <= '$') {
+ if (yych == '#') goto yy58;
} else {
- if (yych == '%') goto yy58;
+ if (yych != '&') goto yy58;
}
}
} else {
- if (yych <= '<') {
- if (yych <= ')') {
- if (yych <= '\'') goto yy58;
+ if (yych <= 'Z') {
+ if (yych <= ';') {
+ if (yych <= ')') goto yy60;
+ if (yych <= ':') goto yy58;
} else {
- if (yych != ';') goto yy58;
+ if (yych != '=') goto yy58;
}
} else {
- if (yych <= '[') {
- if (yych <= '=') goto yy60;
- if (yych <= 'Z') goto yy58;
- goto yy62;
+ if (yych <= '^') {
+ if (yych <= '[') goto yy62;
+ if (yych <= ']') goto yy58;
} else {
if (yych <= 'z') goto yy58;
if (yych >= 0x7F) goto yy58;
@@ -1019,7 +1018,7 @@ yy65:
SCNG(lineno)++;
return END_OF_LINE;
}
-#line 1023 "Zend/zend_ini_scanner.c"
+#line 1022 "Zend/zend_ini_scanner.c"
yy66:
YYDEBUG(66, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1060,42 +1059,42 @@ yy69:
YYFILL(2);
yych = *YYCURSOR;
YYDEBUG(70, *YYCURSOR);
- if (yych <= '%') {
- if (yych <= '\r') {
- if (yych <= '\t') {
+ if (yych <= '&') {
+ if (yych <= 0x1F) {
+ if (yych <= '\n') {
if (yych <= 0x08) goto yy25;
- goto yy67;
+ if (yych <= '\t') goto yy67;
} else {
- if (yych <= '\n') goto yy71;
- if (yych <= '\f') goto yy25;
- goto yy72;
+ if (yych == '\r') goto yy72;
+ goto yy25;
}
} else {
- if (yych <= '"') {
- if (yych <= 0x1F) goto yy25;
+ if (yych <= '#') {
if (yych <= ' ') goto yy69;
- goto yy3;
+ if (yych <= '"') goto yy3;
+ goto yy58;
} else {
- if (yych <= '#') goto yy58;
- if (yych <= '$') goto yy3;
- goto yy25;
+ if (yych == '%') goto yy25;
+ goto yy3;
}
}
} else {
- if (yych <= '<') {
- if (yych <= ')') {
- if (yych == '\'') goto yy25;
- goto yy3;
- } else {
- if (yych == ';') goto yy53;
+ if (yych <= '=') {
+ if (yych <= ':') {
+ if (yych <= '\'') goto yy25;
+ if (yych <= ')') goto yy3;
goto yy25;
+ } else {
+ if (yych <= ';') goto yy53;
+ if (yych <= '<') goto yy25;
+ goto yy51;
}
} else {
- if (yych <= '[') {
- if (yych <= '=') goto yy51;
- if (yych <= 'Z') goto yy25;
- goto yy28;
+ if (yych <= ']') {
+ if (yych == '[') goto yy28;
+ goto yy25;
} else {
+ if (yych <= '^') goto yy3;
if (yych <= 'z') goto yy25;
if (yych <= '~') goto yy3;
goto yy25;
@@ -1195,7 +1194,7 @@ yy76:
zend_ini_escape_string(ini_lval, yytext, yyleng, '"' TSRMLS_CC);
return TC_QUOTED_STRING;
}
-#line 1199 "Zend/zend_ini_scanner.c"
+#line 1198 "Zend/zend_ini_scanner.c"
yy77:
YYDEBUG(77, *YYCURSOR);
++YYCURSOR;
@@ -1209,7 +1208,7 @@ yy78:
yy_pop_state(TSRMLS_C);
return '"';
}
-#line 1213 "Zend/zend_ini_scanner.c"
+#line 1212 "Zend/zend_ini_scanner.c"
yy79:
YYDEBUG(79, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1223,7 +1222,7 @@ yy79:
yy_push_state(ST_VARNAME TSRMLS_CC);
return TC_DOLLAR_CURLY;
}
-#line 1227 "Zend/zend_ini_scanner.c"
+#line 1226 "Zend/zend_ini_scanner.c"
yy82:
YYDEBUG(82, *YYCURSOR);
++YYCURSOR;
@@ -1327,7 +1326,7 @@ yy87:
{ /* Get rest as section/offset value */
RETURN_TOKEN(TC_STRING, yytext, yyleng);
}
-#line 1331 "Zend/zend_ini_scanner.c"
+#line 1330 "Zend/zend_ini_scanner.c"
yy88:
YYDEBUG(88, *YYCURSOR);
yyaccept = 0;
@@ -1348,7 +1347,7 @@ yy90:
{
return 0;
}
-#line 1352 "Zend/zend_ini_scanner.c"
+#line 1351 "Zend/zend_ini_scanner.c"
yy91:
YYDEBUG(91, *YYCURSOR);
++YYCURSOR;
@@ -1360,7 +1359,7 @@ yy92:
yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC);
return '"';
}
-#line 1364 "Zend/zend_ini_scanner.c"
+#line 1363 "Zend/zend_ini_scanner.c"
yy93:
YYDEBUG(93, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1426,7 +1425,7 @@ yy98:
{ /* Get number option value as string */
RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
}
-#line 1430 "Zend/zend_ini_scanner.c"
+#line 1429 "Zend/zend_ini_scanner.c"
yy99:
YYDEBUG(99, *YYCURSOR);
yyaccept = 3;
@@ -1456,7 +1455,7 @@ yy100:
{ /* Get constant option value */
RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
}
-#line 1460 "Zend/zend_ini_scanner.c"
+#line 1459 "Zend/zend_ini_scanner.c"
yy101:
YYDEBUG(101, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1472,7 +1471,7 @@ yy103:
BEGIN(INITIAL);
return ']';
}
-#line 1476 "Zend/zend_ini_scanner.c"
+#line 1475 "Zend/zend_ini_scanner.c"
yy104:
YYDEBUG(104, *YYCURSOR);
yyaccept = 0;
@@ -1771,7 +1770,7 @@ yy125:
}
RETURN_TOKEN(TC_RAW, yytext, yyleng);
}
-#line 1775 "Zend/zend_ini_scanner.c"
+#line 1774 "Zend/zend_ini_scanner.c"
yy129:
YYDEBUG(129, *YYCURSOR);
++YYCURSOR;
@@ -1782,7 +1781,7 @@ yy129:
yy_push_state(ST_VARNAME TSRMLS_CC);
return TC_DOLLAR_CURLY;
}
-#line 1786 "Zend/zend_ini_scanner.c"
+#line 1785 "Zend/zend_ini_scanner.c"
yy131:
YYDEBUG(131, *YYCURSOR);
yyaccept = 0;
@@ -1892,7 +1891,7 @@ yyc_ST_RAW:
BEGIN(INITIAL);
return END_OF_LINE;
}
-#line 1896 "Zend/zend_ini_scanner.c"
+#line 1895 "Zend/zend_ini_scanner.c"
yy139:
YYDEBUG(139, *YYCURSOR);
++YYCURSOR;
@@ -1936,7 +1935,7 @@ end_raw_value_chars:
}
RETURN_TOKEN(TC_RAW, yytext, yyleng);
}
-#line 1940 "Zend/zend_ini_scanner.c"
+#line 1939 "Zend/zend_ini_scanner.c"
yy141:
YYDEBUG(141, *YYCURSOR);
yyaccept = 0;
@@ -1967,7 +1966,7 @@ yy143:
SCNG(lineno)++;
return END_OF_LINE;
}
-#line 1971 "Zend/zend_ini_scanner.c"
+#line 1970 "Zend/zend_ini_scanner.c"
yy144:
YYDEBUG(144, *YYCURSOR);
yych = *++YYCURSOR;
@@ -2001,7 +2000,7 @@ yy149:
SCNG(lineno)++;
return END_OF_LINE;
}
-#line 2005 "Zend/zend_ini_scanner.c"
+#line 2004 "Zend/zend_ini_scanner.c"
yy150:
YYDEBUG(150, *YYCURSOR);
yych = *++YYCURSOR;
@@ -2035,7 +2034,7 @@ yy153:
/* eat whitespace */
goto restart;
}
-#line 2039 "Zend/zend_ini_scanner.c"
+#line 2038 "Zend/zend_ini_scanner.c"
yy155:
YYDEBUG(155, *YYCURSOR);
++YYCURSOR;
@@ -2099,7 +2098,7 @@ yy159:
{ /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
RETURN_TOKEN(TC_RAW, yytext, yyleng);
}
-#line 2103 "Zend/zend_ini_scanner.c"
+#line 2102 "Zend/zend_ini_scanner.c"
yy160:
YYDEBUG(160, *YYCURSOR);
++YYCURSOR;
@@ -2109,7 +2108,7 @@ yy160:
{
return 0;
}
-#line 2113 "Zend/zend_ini_scanner.c"
+#line 2112 "Zend/zend_ini_scanner.c"
yy162:
YYDEBUG(162, *YYCURSOR);
++YYCURSOR;
@@ -2124,7 +2123,7 @@ yy163:
SCNG(lineno)++;
return ']';
}
-#line 2128 "Zend/zend_ini_scanner.c"
+#line 2127 "Zend/zend_ini_scanner.c"
yy164:
YYDEBUG(164, *YYCURSOR);
++YYCURSOR;
@@ -2250,7 +2249,7 @@ yy173:
{ /* Get rest as section/offset value */
RETURN_TOKEN(TC_STRING, yytext, yyleng);
}
-#line 2254 "Zend/zend_ini_scanner.c"
+#line 2253 "Zend/zend_ini_scanner.c"
yy174:
YYDEBUG(174, *YYCURSOR);
yyaccept = 0;
@@ -2273,7 +2272,7 @@ yy176:
{
return 0;
}
-#line 2277 "Zend/zend_ini_scanner.c"
+#line 2276 "Zend/zend_ini_scanner.c"
yy177:
YYDEBUG(177, *YYCURSOR);
++YYCURSOR;
@@ -2285,7 +2284,7 @@ yy178:
yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC);
return '"';
}
-#line 2289 "Zend/zend_ini_scanner.c"
+#line 2288 "Zend/zend_ini_scanner.c"
yy179:
YYDEBUG(179, *YYCURSOR);
yych = *++YYCURSOR;
@@ -2351,7 +2350,7 @@ yy184:
{ /* Get number option value as string */
RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
}
-#line 2355 "Zend/zend_ini_scanner.c"
+#line 2354 "Zend/zend_ini_scanner.c"
yy185:
YYDEBUG(185, *YYCURSOR);
yyaccept = 3;
@@ -2381,7 +2380,7 @@ yy186:
{ /* Get constant option value */
RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
}
-#line 2385 "Zend/zend_ini_scanner.c"
+#line 2384 "Zend/zend_ini_scanner.c"
yy187:
YYDEBUG(187, *YYCURSOR);
yych = *++YYCURSOR;
@@ -2400,7 +2399,7 @@ yy189:
SCNG(lineno)++;
return ']';
}
-#line 2404 "Zend/zend_ini_scanner.c"
+#line 2403 "Zend/zend_ini_scanner.c"
yy190:
YYDEBUG(190, *YYCURSOR);
++YYCURSOR;
@@ -2721,7 +2720,7 @@ yy215:
}
RETURN_TOKEN(TC_RAW, yytext, yyleng);
}
-#line 2725 "Zend/zend_ini_scanner.c"
+#line 2724 "Zend/zend_ini_scanner.c"
yy219:
YYDEBUG(219, *YYCURSOR);
++YYCURSOR;
@@ -2732,7 +2731,7 @@ yy219:
yy_push_state(ST_VARNAME TSRMLS_CC);
return TC_DOLLAR_CURLY;
}
-#line 2736 "Zend/zend_ini_scanner.c"
+#line 2735 "Zend/zend_ini_scanner.c"
yy221:
YYDEBUG(221, *YYCURSOR);
yyaccept = 0;
@@ -2796,7 +2795,7 @@ yyc_ST_VALUE:
162, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166,
- 166, 166, 166, 162, 162, 162, 162, 166,
+ 166, 166, 166, 162, 162, 162, 160, 166,
162, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166,
@@ -2832,6 +2831,7 @@ yyc_ST_VALUE:
case '&':
case '(':
case ')':
+ case '^':
case '|':
case '~': goto yy235;
case '"': goto yy237;
@@ -3024,35 +3024,34 @@ yy243:
YYDEBUG(243, *YYCURSOR);
yyaccept = 3;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= '.') {
- if (yych <= '\r') {
- if (yych <= 0x08) {
- if (yych >= 0x01) goto yy256;
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= '\n') {
+ if (yych <= 0x00) goto yy244;
+ if (yych <= 0x08) goto yy256;
} else {
- if (yych <= '\n') goto yy244;
- if (yych <= '\f') goto yy256;
+ if (yych != '\r') goto yy256;
}
} else {
- if (yych <= '%') {
- if (yych <= 0x1F) goto yy256;
- if (yych >= '#') goto yy256;
+ if (yych <= ')') {
+ if (yych <= '"') goto yy244;
+ if (yych <= '%') goto yy256;
} else {
- if (yych <= ')') goto yy244;
- if (yych <= '-') goto yy256;
- goto yy288;
+ if (yych == '.') goto yy288;
+ goto yy256;
}
}
} else {
- if (yych <= '<') {
- if (yych <= '9') {
- if (yych <= '/') goto yy256;
- goto yy290;
+ if (yych <= ']') {
+ if (yych <= ';') {
+ if (yych <= '9') goto yy290;
+ if (yych <= ':') goto yy256;
} else {
- if (yych != ';') goto yy256;
+ if (yych != '=') goto yy256;
}
} else {
if (yych <= '|') {
- if (yych <= '=') goto yy244;
+ if (yych <= '^') goto yy244;
if (yych <= '{') goto yy256;
} else {
if (yych != '~') goto yy256;
@@ -3066,7 +3065,7 @@ yy244:
{ /* Get number option value as string */
RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
}
-#line 3070 "Zend/zend_ini_scanner.c"
+#line 3069 "Zend/zend_ini_scanner.c"
yy245:
YYDEBUG(245, *YYCURSOR);
yyaccept = 2;
@@ -3083,7 +3082,7 @@ yy246:
BEGIN(INITIAL);
return END_OF_LINE;
}
-#line 3087 "Zend/zend_ini_scanner.c"
+#line 3086 "Zend/zend_ini_scanner.c"
yy248:
YYDEBUG(248, *YYCURSOR);
yyaccept = 4;
@@ -3091,23 +3090,30 @@ yy248:
if (yybm[0+yych] & 4) {
goto yy257;
}
- if (yych <= ')') {
- if (yych <= '\f') {
- if (yych <= 0x00) goto yy249;
- if (yych <= 0x08) goto yy256;
- if (yych >= '\v') goto yy256;
+ if (yych <= ':') {
+ if (yych <= '\r') {
+ if (yych <= 0x08) {
+ if (yych >= 0x01) goto yy256;
+ } else {
+ if (yych <= '\n') goto yy249;
+ if (yych <= '\f') goto yy256;
+ }
} else {
- if (yych <= 0x1F) {
- if (yych >= 0x0E) goto yy256;
+ if (yych <= '"') {
+ if (yych <= 0x1F) goto yy256;
} else {
- if (yych <= '"') goto yy249;
if (yych <= '%') goto yy256;
+ if (yych >= '*') goto yy256;
}
}
} else {
- if (yych <= '=') {
- if (yych == ';') goto yy249;
- if (yych <= '<') goto yy256;
+ if (yych <= '^') {
+ if (yych <= '<') {
+ if (yych >= '<') goto yy256;
+ } else {
+ if (yych <= '=') goto yy249;
+ if (yych <= ']') goto yy256;
+ }
} else {
if (yych <= '|') {
if (yych <= '{') goto yy256;
@@ -3123,7 +3129,7 @@ yy249:
{ /* Get constant option value */
RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
}
-#line 3127 "Zend/zend_ini_scanner.c"
+#line 3133 "Zend/zend_ini_scanner.c"
yy250:
YYDEBUG(250, *YYCURSOR);
yyaccept = 4;
@@ -3151,18 +3157,20 @@ yy250:
}
}
} else {
- if (yych <= '`') {
+ if (yych <= '_') {
if (yych <= 'A') {
if (yych <= '=') goto yy249;
if (yych <= '@') goto yy256;
goto yy280;
} else {
if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
- goto yy256;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ goto yy257;
}
} else {
if (yych <= '{') {
+ if (yych <= '`') goto yy256;
if (yych <= 'a') goto yy280;
if (yych <= 'z') goto yy257;
goto yy256;
@@ -3214,9 +3222,13 @@ yy251:
if (yych == 'U') goto yy277;
goto yy257;
} else {
- if (yych == '_') goto yy257;
- if (yych <= '`') goto yy256;
- goto yy257;
+ if (yych <= '^') {
+ if (yych <= ']') goto yy256;
+ goto yy249;
+ } else {
+ if (yych == '`') goto yy256;
+ goto yy257;
+ }
}
} else {
if (yych <= 'z') {
@@ -3275,9 +3287,13 @@ yy252:
if (yych == 'N') goto yy265;
goto yy257;
} else {
- if (yych == '_') goto yy257;
- if (yych <= '`') goto yy256;
- goto yy257;
+ if (yych <= '^') {
+ if (yych <= ']') goto yy256;
+ goto yy249;
+ } else {
+ if (yych == '`') goto yy256;
+ goto yy257;
+ }
}
} else {
if (yych <= 'z') {
@@ -3324,13 +3340,14 @@ yy253:
}
} else {
if (yych <= '`') {
- if (yych <= 'R') {
+ if (yych <= 'Z') {
if (yych <= '@') goto yy256;
- if (yych <= 'Q') goto yy257;
- goto yy269;
+ if (yych == 'R') goto yy269;
+ goto yy257;
} else {
- if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ if (yych <= '_') goto yy257;
goto yy256;
}
} else {
@@ -3374,13 +3391,14 @@ yy254:
}
} else {
if (yych <= '`') {
- if (yych <= 'E') {
+ if (yych <= 'Z') {
if (yych <= '@') goto yy256;
- if (yych <= 'D') goto yy257;
- goto yy259;
+ if (yych == 'E') goto yy259;
+ goto yy257;
} else {
- if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ if (yych <= '_') goto yy257;
goto yy256;
}
} else {
@@ -3418,7 +3436,7 @@ yy257:
if (yybm[0+yych] & 4) {
goto yy257;
}
- if (yych <= '%') {
+ if (yych <= ')') {
if (yych <= '\r') {
if (yych <= 0x08) {
if (yych <= 0x00) goto yy249;
@@ -3429,25 +3447,28 @@ yy257:
goto yy249;
}
} else {
- if (yych <= '"') {
+ if (yych <= '#') {
if (yych <= 0x1F) goto yy255;
- goto yy249;
- } else {
- if (yych == '$') goto yy260;
+ if (yych <= '"') goto yy249;
goto yy255;
+ } else {
+ if (yych <= '$') goto yy260;
+ if (yych <= '%') goto yy255;
+ goto yy249;
}
}
} else {
- if (yych <= '=') {
- if (yych <= ':') {
- if (yych <= ')') goto yy249;
- goto yy255;
- } else {
- if (yych == '<') goto yy255;
+ if (yych <= ']') {
+ if (yych <= ';') {
+ if (yych <= ':') goto yy255;
goto yy249;
+ } else {
+ if (yych == '=') goto yy249;
+ goto yy255;
}
} else {
if (yych <= '|') {
+ if (yych <= '^') goto yy249;
if (yych <= '{') goto yy255;
goto yy249;
} else {
@@ -3485,13 +3506,14 @@ yy259:
}
} else {
if (yych <= '`') {
- if (yych <= 'S') {
+ if (yych <= 'Z') {
if (yych <= '@') goto yy256;
- if (yych <= 'R') goto yy257;
- goto yy265;
+ if (yych == 'S') goto yy265;
+ goto yy257;
} else {
- if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ if (yych <= '_') goto yy257;
goto yy256;
}
} else {
@@ -3598,8 +3620,8 @@ yy265:
if (yych != '=') goto yy256;
} else {
if (yych <= 'Z') goto yy257;
- if (yych <= '^') goto yy256;
- goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych >= '_') goto yy257;
}
} else {
if (yych <= '{') {
@@ -3619,7 +3641,7 @@ yy266:
{ /* TRUE value (when used outside option value/offset this causes parse error!) */
RETURN_TOKEN(BOOL_TRUE, "1", 1);
}
-#line 3623 "Zend/zend_ini_scanner.c"
+#line 3645 "Zend/zend_ini_scanner.c"
yy267:
YYDEBUG(267, *YYCURSOR);
++YYCURSOR;
@@ -3659,12 +3681,13 @@ yy269:
}
} else {
if (yych <= '`') {
- if (yych <= 'U') {
+ if (yych <= 'Z') {
if (yych <= '@') goto yy256;
- if (yych <= 'T') goto yy257;
+ if (yych != 'U') goto yy257;
} else {
- if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ if (yych <= '_') goto yy257;
goto yy256;
}
} else {
@@ -3708,13 +3731,14 @@ yy270:
}
} else {
if (yych <= '`') {
- if (yych <= 'E') {
+ if (yych <= 'Z') {
if (yych <= '@') goto yy256;
- if (yych <= 'D') goto yy257;
- goto yy265;
+ if (yych == 'E') goto yy265;
+ goto yy257;
} else {
- if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ if (yych <= '_') goto yy257;
goto yy256;
}
} else {
@@ -3758,12 +3782,13 @@ yy271:
}
} else {
if (yych <= '`') {
- if (yych <= 'F') {
+ if (yych <= 'Z') {
if (yych <= '@') goto yy256;
- if (yych <= 'E') goto yy257;
+ if (yych != 'F') goto yy257;
} else {
- if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ if (yych <= '_') goto yy257;
goto yy256;
}
} else {
@@ -3785,7 +3810,7 @@ yy272:
if (yybm[0+yych] & 4) {
goto yy257;
}
- if (yych <= '%') {
+ if (yych <= ')') {
if (yych <= '\f') {
if (yych <= 0x08) {
if (yych >= 0x01) goto yy256;
@@ -3794,22 +3819,25 @@ yy272:
if (yych >= '\v') goto yy256;
}
} else {
- if (yych <= 0x1F) {
- if (yych >= 0x0E) goto yy256;
+ if (yych <= ' ') {
+ if (yych <= '\r') goto yy273;
+ if (yych <= 0x1F) goto yy256;
+ goto yy274;
} else {
- if (yych <= ' ') goto yy274;
- if (yych >= '#') goto yy256;
+ if (yych <= '"') goto yy273;
+ if (yych <= '%') goto yy256;
}
}
} else {
- if (yych <= '=') {
- if (yych <= ':') {
- if (yych >= '*') goto yy256;
+ if (yych <= ']') {
+ if (yych <= ';') {
+ if (yych <= ':') goto yy256;
} else {
- if (yych == '<') goto yy256;
+ if (yych != '=') goto yy256;
}
} else {
if (yych <= '|') {
+ if (yych <= '^') goto yy273;
if (yych <= '{') goto yy256;
} else {
if (yych != '~') goto yy256;
@@ -3823,7 +3851,7 @@ yy273:
{ /* FALSE value (when used outside option value/offset this causes parse error!)*/
RETURN_TOKEN(BOOL_FALSE, "", 0);
}
-#line 3827 "Zend/zend_ini_scanner.c"
+#line 3855 "Zend/zend_ini_scanner.c"
yy274:
YYDEBUG(274, *YYCURSOR);
++YYCURSOR;
@@ -3862,7 +3890,7 @@ yy276:
}
}
} else {
- if (yych <= '`') {
+ if (yych <= '_') {
if (yych <= 'N') {
if (yych <= '=') goto yy273;
if (yych <= '@') goto yy256;
@@ -3870,18 +3898,23 @@ yy276:
goto yy279;
} else {
if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
- goto yy256;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy273;
+ goto yy257;
}
} else {
- if (yych <= '{') {
+ if (yych <= 'z') {
+ if (yych <= '`') goto yy256;
if (yych == 'n') goto yy279;
- if (yych <= 'z') goto yy257;
- goto yy256;
+ goto yy257;
} else {
- if (yych == '}') goto yy256;
- if (yych <= '~') goto yy273;
- goto yy256;
+ if (yych <= '|') {
+ if (yych <= '{') goto yy256;
+ goto yy273;
+ } else {
+ if (yych == '~') goto yy273;
+ goto yy256;
+ }
}
}
}
@@ -3914,12 +3947,13 @@ yy277:
}
} else {
if (yych <= '`') {
- if (yych <= 'L') {
+ if (yych <= 'Z') {
if (yych <= '@') goto yy256;
- if (yych <= 'K') goto yy257;
+ if (yych != 'L') goto yy257;
} else {
- if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ if (yych <= '_') goto yy257;
goto yy256;
}
} else {
@@ -3963,13 +3997,14 @@ yy278:
}
} else {
if (yych <= '`') {
- if (yych <= 'L') {
+ if (yych <= 'Z') {
if (yych <= '@') goto yy256;
- if (yych <= 'K') goto yy257;
- goto yy272;
+ if (yych == 'L') goto yy272;
+ goto yy257;
} else {
- if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ if (yych <= '_') goto yy257;
goto yy256;
}
} else {
@@ -4013,13 +4048,14 @@ yy279:
}
} else {
if (yych <= '`') {
- if (yych <= 'E') {
+ if (yych <= 'Z') {
if (yych <= '@') goto yy256;
- if (yych <= 'D') goto yy257;
- goto yy272;
+ if (yych == 'E') goto yy272;
+ goto yy257;
} else {
- if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ if (yych <= '_') goto yy257;
goto yy256;
}
} else {
@@ -4063,12 +4099,13 @@ yy280:
}
} else {
if (yych <= '`') {
- if (yych <= 'L') {
+ if (yych <= 'Z') {
if (yych <= '@') goto yy256;
- if (yych <= 'K') goto yy257;
+ if (yych != 'L') goto yy257;
} else {
- if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ if (yych <= '_') goto yy257;
goto yy256;
}
} else {
@@ -4112,12 +4149,13 @@ yy281:
}
} else {
if (yych <= '`') {
- if (yych <= 'S') {
+ if (yych <= 'Z') {
if (yych <= '@') goto yy256;
- if (yych <= 'R') goto yy257;
+ if (yych != 'S') goto yy257;
} else {
- if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ if (yych <= '_') goto yy257;
goto yy256;
}
} else {
@@ -4161,13 +4199,14 @@ yy282:
}
} else {
if (yych <= '`') {
- if (yych <= 'E') {
+ if (yych <= 'Z') {
if (yych <= '@') goto yy256;
- if (yych <= 'D') goto yy257;
- goto yy272;
+ if (yych == 'E') goto yy272;
+ goto yy257;
} else {
- if (yych <= 'Z') goto yy257;
- if (yych == '_') goto yy257;
+ if (yych <= ']') goto yy256;
+ if (yych <= '^') goto yy249;
+ if (yych <= '_') goto yy257;
goto yy256;
}
} else {
@@ -4205,7 +4244,7 @@ yy286:
SCNG(lineno)++;
return END_OF_LINE;
}
-#line 4209 "Zend/zend_ini_scanner.c"
+#line 4248 "Zend/zend_ini_scanner.c"
yy287:
YYDEBUG(287, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4221,7 +4260,7 @@ yy288:
if (yybm[0+yych] & 64) {
goto yy288;
}
- if (yych <= '%') {
+ if (yych <= ')') {
if (yych <= '\r') {
if (yych <= 0x08) {
if (yych <= 0x00) goto yy244;
@@ -4232,25 +4271,28 @@ yy288:
goto yy244;
}
} else {
- if (yych <= '"') {
+ if (yych <= '#') {
if (yych <= 0x1F) goto yy255;
- goto yy244;
- } else {
- if (yych == '$') goto yy260;
+ if (yych <= '"') goto yy244;
goto yy255;
+ } else {
+ if (yych <= '$') goto yy260;
+ if (yych <= '%') goto yy255;
+ goto yy244;
}
}
} else {
- if (yych <= '=') {
- if (yych <= ':') {
- if (yych <= ')') goto yy244;
- goto yy255;
- } else {
- if (yych == '<') goto yy255;
+ if (yych <= ']') {
+ if (yych <= ';') {
+ if (yych <= ':') goto yy255;
goto yy244;
+ } else {
+ if (yych == '=') goto yy244;
+ goto yy255;
}
} else {
if (yych <= '|') {
+ if (yych <= '^') goto yy244;
if (yych <= '{') goto yy255;
goto yy244;
} else {
@@ -4266,7 +4308,7 @@ yy290:
YYFILL(1);
yych = *YYCURSOR;
YYDEBUG(291, *YYCURSOR);
- if (yych <= '-') {
+ if (yych <= '.') {
if (yych <= 0x1F) {
if (yych <= '\n') {
if (yych <= 0x00) goto yy244;
@@ -4284,26 +4326,27 @@ yy290:
} else {
if (yych <= '%') goto yy255;
if (yych <= ')') goto yy244;
- goto yy255;
+ if (yych <= '-') goto yy255;
+ goto yy288;
}
}
} else {
- if (yych <= '<') {
- if (yych <= '9') {
- if (yych <= '.') goto yy288;
+ if (yych <= '=') {
+ if (yych <= ':') {
if (yych <= '/') goto yy255;
- goto yy290;
- } else {
- if (yych == ';') goto yy244;
+ if (yych <= '9') goto yy290;
goto yy255;
+ } else {
+ if (yych == '<') goto yy255;
+ goto yy244;
}
} else {
- if (yych <= '|') {
- if (yych <= '=') goto yy244;
- if (yych <= '{') goto yy255;
- goto yy244;
+ if (yych <= '{') {
+ if (yych == '^') goto yy244;
+ goto yy255;
} else {
- if (yych == '~') goto yy244;
+ if (yych == '}') goto yy255;
+ if (yych <= '~') goto yy244;
goto yy255;
}
}
@@ -4315,39 +4358,40 @@ yy292:
YYFILL(1);
yych = *YYCURSOR;
YYDEBUG(293, *YYCURSOR);
- if (yych <= ')') {
- if (yych <= '\r') {
- if (yych <= 0x08) {
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= '\n') {
if (yych <= 0x00) goto yy244;
- goto yy255;
- } else {
- if (yych <= '\n') goto yy244;
- if (yych <= '\f') goto yy255;
+ if (yych <= 0x08) goto yy255;
goto yy244;
+ } else {
+ if (yych == '\r') goto yy244;
+ goto yy255;
}
} else {
- if (yych <= '#') {
- if (yych <= 0x1F) goto yy255;
+ if (yych <= '$') {
if (yych <= '"') goto yy244;
- goto yy255;
+ if (yych <= '#') goto yy255;
+ goto yy260;
} else {
- if (yych <= '$') goto yy260;
if (yych <= '%') goto yy255;
- goto yy244;
+ if (yych <= ')') goto yy244;
+ goto yy255;
}
}
} else {
- if (yych <= '<') {
- if (yych <= '9') {
- if (yych <= '/') goto yy255;
- goto yy292;
+ if (yych <= ']') {
+ if (yych <= ';') {
+ if (yych <= '9') goto yy292;
+ if (yych <= ':') goto yy255;
+ goto yy244;
} else {
- if (yych == ';') goto yy244;
+ if (yych == '=') goto yy244;
goto yy255;
}
} else {
if (yych <= '|') {
- if (yych <= '=') goto yy244;
+ if (yych <= '^') goto yy244;
if (yych <= '{') goto yy255;
goto yy244;
} else {
@@ -4363,39 +4407,40 @@ yy294:
YYFILL(1);
yych = *YYCURSOR;
YYDEBUG(295, *YYCURSOR);
- if (yych <= ')') {
- if (yych <= '\r') {
- if (yych <= 0x08) {
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= '\n') {
if (yych <= 0x00) goto yy244;
- goto yy255;
- } else {
- if (yych <= '\n') goto yy244;
- if (yych <= '\f') goto yy255;
+ if (yych <= 0x08) goto yy255;
goto yy244;
+ } else {
+ if (yych == '\r') goto yy244;
+ goto yy255;
}
} else {
- if (yych <= '#') {
- if (yych <= 0x1F) goto yy255;
+ if (yych <= '$') {
if (yych <= '"') goto yy244;
- goto yy255;
+ if (yych <= '#') goto yy255;
+ goto yy260;
} else {
- if (yych <= '$') goto yy260;
if (yych <= '%') goto yy255;
- goto yy244;
+ if (yych <= ')') goto yy244;
+ goto yy255;
}
}
} else {
- if (yych <= '<') {
- if (yych <= '9') {
- if (yych <= '/') goto yy255;
- goto yy294;
+ if (yych <= ']') {
+ if (yych <= ';') {
+ if (yych <= '9') goto yy294;
+ if (yych <= ':') goto yy255;
+ goto yy244;
} else {
- if (yych == ';') goto yy244;
+ if (yych == '=') goto yy244;
goto yy255;
}
} else {
if (yych <= '|') {
- if (yych <= '=') goto yy244;
+ if (yych <= '^') goto yy244;
if (yych <= '{') goto yy255;
goto yy244;
} else {
@@ -4426,7 +4471,7 @@ yy296:
}
RETURN_TOKEN(TC_RAW, yytext, yyleng);
}
-#line 4430 "Zend/zend_ini_scanner.c"
+#line 4475 "Zend/zend_ini_scanner.c"
yy300:
YYDEBUG(300, *YYCURSOR);
++YYCURSOR;
@@ -4437,7 +4482,7 @@ yy300:
yy_push_state(ST_VARNAME TSRMLS_CC);
return TC_DOLLAR_CURLY;
}
-#line 4441 "Zend/zend_ini_scanner.c"
+#line 4486 "Zend/zend_ini_scanner.c"
yy302:
YYDEBUG(302, *YYCURSOR);
++YYCURSOR;
@@ -4502,7 +4547,7 @@ yyc_ST_VARNAME:
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 128, 128, 128, 128,
+ 128, 128, 128, 0, 128, 128, 0, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
@@ -4527,38 +4572,40 @@ yyc_ST_VARNAME:
YYDEBUG(309, *YYCURSOR);
YYFILL(2);
yych = *YYCURSOR;
- if (yych <= '\'') {
- if (yych <= ' ') {
- if (yych <= '\n') {
- if (yych >= '\t') goto yy313;
+ if (yych <= ')') {
+ if (yych <= '"') {
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy311;
+ if (yych <= '\n') goto yy313;
} else {
- if (yych == '\r') goto yy313;
+ if (yych <= '\r') goto yy313;
+ if (yych >= '!') goto yy313;
}
} else {
- if (yych <= '$') {
- if (yych != '#') goto yy313;
+ if (yych <= '%') {
+ if (yych == '$') goto yy313;
} else {
- if (yych == '&') goto yy313;
+ if (yych != '\'') goto yy313;
}
}
} else {
- if (yych <= 'Z') {
- if (yych <= ';') {
- if (yych <= ')') goto yy313;
- if (yych >= ';') goto yy313;
+ if (yych <= '[') {
+ if (yych <= '<') {
+ if (yych == ';') goto yy313;
} else {
- if (yych == '=') goto yy313;
+ if (yych <= '=') goto yy313;
+ if (yych >= '[') goto yy313;
}
} else {
- if (yych <= '|') {
- if (yych <= '[') goto yy313;
- if (yych >= '{') goto yy313;
+ if (yych <= 'z') {
+ if (yych == '^') goto yy313;
} else {
- if (yych <= '}') goto yy315;
+ if (yych == '}') goto yy315;
if (yych <= '~') goto yy313;
}
}
}
+yy311:
YYDEBUG(311, *YYCURSOR);
++YYCURSOR;
yych = *YYCURSOR;
@@ -4576,7 +4623,7 @@ yy312:
RETURN_TOKEN(TC_VARNAME, yytext, yyleng);
}
-#line 4580 "Zend/zend_ini_scanner.c"
+#line 4627 "Zend/zend_ini_scanner.c"
yy313:
YYDEBUG(313, *YYCURSOR);
++YYCURSOR;
@@ -4586,7 +4633,7 @@ yy313:
{
return 0;
}
-#line 4590 "Zend/zend_ini_scanner.c"
+#line 4637 "Zend/zend_ini_scanner.c"
yy315:
YYDEBUG(315, *YYCURSOR);
++YYCURSOR;
@@ -4597,7 +4644,7 @@ yy315:
yy_pop_state(TSRMLS_C);
return '}';
}
-#line 4601 "Zend/zend_ini_scanner.c"
+#line 4648 "Zend/zend_ini_scanner.c"
yy317:
YYDEBUG(317, *YYCURSOR);
++YYCURSOR;
diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l
index 5fb28d425..92fb08f02 100644
--- a/Zend/zend_ini_scanner.l
+++ b/Zend/zend_ini_scanner.l
@@ -340,9 +340,9 @@ NEWLINE ("\r"|"\n"|"\r\n")
TABS_AND_SPACES [ \t]
WHITESPACE [ \t]+
CONSTANT [a-zA-Z_][a-zA-Z0-9_]*
-LABEL [^=\n\r\t;|&$~(){}!"\[]+
-TOKENS [:,.\[\]"'()|^&+-/*=%$!~<>?@{}]
-OPERATORS [&|~()!]
+LABEL [^=\n\r\t;&|^$~(){}!"\[]+
+TOKENS [:,.\[\]"'()&|^+-/*=%$!~<>?@{}]
+OPERATORS [&|^~()!]
DOLLAR_CURLY "${"
SECTION_RAW_CHARS [^\]\n\r]
@@ -350,7 +350,7 @@ SINGLE_QUOTED_CHARS [^']
RAW_VALUE_CHARS [^\n\r;\000]
LITERAL_DOLLAR ("$"([^{\000]|("\\"{ANY_CHAR})))
-VALUE_CHARS ([^$= \t\n\r;&|~()!"'\000]|{LITERAL_DOLLAR})
+VALUE_CHARS ([^$= \t\n\r;&|^~()!"'\000]|{LITERAL_DOLLAR})
SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
<!*> := yyleng = YYCURSOR - SCNG(yy_text);
diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c
index f2ba6bf9d..9a62a9c04 100644
--- a/Zend/zend_language_scanner.c
+++ b/Zend/zend_language_scanner.c
@@ -597,7 +597,7 @@ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSR
CG(active_op_array) = original_active_op_array;
if (compilation_successful) {
pass_two(op_array TSRMLS_CC);
- zend_release_labels(TSRMLS_C);
+ zend_release_labels(0 TSRMLS_CC);
} else {
efree(op_array);
retval = NULL;
@@ -772,7 +772,7 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC)
zend_do_return(NULL, 0 TSRMLS_CC);
CG(active_op_array) = original_active_op_array;
pass_two(op_array TSRMLS_CC);
- zend_release_labels(TSRMLS_C);
+ zend_release_labels(0 TSRMLS_CC);
retval = op_array;
}
}
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index d44ba20e1..23a2f472c 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -595,7 +595,7 @@ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSR
CG(active_op_array) = original_active_op_array;
if (compilation_successful) {
pass_two(op_array TSRMLS_CC);
- zend_release_labels(TSRMLS_C);
+ zend_release_labels(0 TSRMLS_CC);
} else {
efree(op_array);
retval = NULL;
@@ -770,7 +770,7 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC)
zend_do_return(NULL, 0 TSRMLS_CC);
CG(active_op_array) = original_active_op_array;
pass_two(op_array TSRMLS_CC);
- zend_release_labels(TSRMLS_C);
+ zend_release_labels(0 TSRMLS_CC);
retval = op_array;
}
}