]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-5.6'
authorTjerk Meesters <datibbaw@php.net>
Mon, 1 Sep 2014 14:43:17 +0000 (22:43 +0800)
committerTjerk Meesters <datibbaw@php.net>
Mon, 1 Sep 2014 14:43:17 +0000 (22:43 +0800)
* PHP-5.6:
  Updated UPGRADING for #38409
  Updated NEWS for #38409
  Added test case
  Making ini parser typed - Added ZEND_INI_SCANNER_TYPED mode for parse_ini_string() and parse_ini_file() - Added NULL_NULL token to separate it from BOOL_FALSE and BOOL_TRUE - Added zend_ini_copy_typed_value() function for zval initialisation - Updated RETURN_TOKEN() to observe scanner_mode

Conflicts:
Zend/zend_ini_parser.y
Zend/zend_ini_scanner.c

1  2 
Zend/zend_globals.h
Zend/zend_ini_parser.y
Zend/zend_ini_scanner.c
Zend/zend_ini_scanner.l
ext/standard/basic_functions.c

Simple merge
index 809345830896dd75ca1d8998804608ec1e719cce,e9ea36956d487846bd8a1f4e76563c363e72a3b1..5b1d0ae47001a34d9954887cdf11c343a70807bd
@@@ -289,19 -291,19 +290,19 @@@ statement
                        printf("NORMAL: '%s' = '%s'\n", Z_STRVAL($1), Z_STRVAL($3));
  #endif
                        ZEND_INI_PARSER_CB(&$1, &$3, NULL, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG TSRMLS_CC);
 -                      free(Z_STRVAL($1));
 -                      zval_internal_dtor(&$3);
 +                      zend_string_release(Z_STR($1));
-                       zend_string_release(Z_STR($3));
++                      zval_ptr_dtor(&$3);
                }
        |       TC_OFFSET option_offset ']' '=' string_or_value {
  #if DEBUG_CFG_PARSER
                        printf("OFFSET: '%s'[%s] = '%s'\n", Z_STRVAL($1), Z_STRVAL($2), Z_STRVAL($5));
  #endif
                        ZEND_INI_PARSER_CB(&$1, &$5, &$2, ZEND_INI_PARSER_POP_ENTRY, ZEND_INI_PARSER_ARG TSRMLS_CC);
 -                      free(Z_STRVAL($1));
 -                      free(Z_STRVAL($2));
 -                      zval_internal_dtor(&$5);
 +                      zend_string_release(Z_STR($1));
 +                      zend_string_release(Z_STR($2));
-                       zend_string_release(Z_STR($5));
++                      zval_ptr_dtor(&$5);
                }
 -      |       TC_LABEL        { ZEND_INI_PARSER_CB(&$1, NULL, NULL, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG TSRMLS_CC); free(Z_STRVAL($1)); }
 +      |       TC_LABEL        { ZEND_INI_PARSER_CB(&$1, NULL, NULL, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG TSRMLS_CC); zend_string_release(Z_STR($1)); }
        |       END_OF_LINE
  ;
  
index b41c4c3394559d0a09e7fd7d3ae52b3bc197270a,97f664ad3bd637732f69198dbf6de759b63f5db5..b1b75efce28984cad5e3f6a539d1c94227bc4bf3
@@@ -133,13 -134,61 +134,59 @@@ ZEND_API zend_ini_scanner_globals ini_s
  /* Eat trailing whitespace */
  #define EAT_TRAILING_WHITESPACE()     EAT_TRAILING_WHITESPACE_EX('X')
  
 -#define zend_ini_copy_value(retval, str, len) {  \
 -      Z_STRVAL_P(retval) = zend_strndup(str, len); \
 -      Z_STRLEN_P(retval) = len;                    \
 -      Z_TYPE_P(retval) = IS_STRING;                \
 -}
 +#define zend_ini_copy_value(retval, str, len) \
 +      ZVAL_NEW_STR(retval, zend_string_init(str, len, 1))
 +
  
- #define RETURN_TOKEN(type, str, len) {           \
-       zend_ini_copy_value(ini_lval, str, len);     \
-       return type;                                 \
+ #define RETURN_TOKEN(type, str, len) {                       \
+       if (SCNG(scanner_mode) == ZEND_INI_SCANNER_TYPED) {      \
+               zend_ini_copy_typed_value(ini_lval, type, str, len); \
+       } else {                                                 \
+               zend_ini_copy_value(ini_lval, str, len);             \
+       }                                                        \
+       return type;                                             \
+ }
+ static inline int convert_to_number(zval *retval, const char *str, const int str_len)
+ {
+       zend_uchar type;
+       int overflow;
+       long lval;
+       double dval;
+       if ((type = is_numeric_string_ex(str, str_len, &lval, &dval, 0, &overflow)) != 0) {
+               if (type == IS_LONG) {
+                       ZVAL_LONG(retval, lval);
+                       return SUCCESS;
+               } else if (type == IS_DOUBLE && !overflow) {
+                       ZVAL_DOUBLE(retval, dval);
+                       return SUCCESS;
+               }
+       }
+       return FAILURE;
+ }
+ static void zend_ini_copy_typed_value(zval *retval, const int type, const char *str, int len)
+ {
+       switch (type) {
+               case BOOL_FALSE:
+               case BOOL_TRUE:
+                       ZVAL_BOOL(retval, type == BOOL_TRUE);
+                       break;
+               case NULL_NULL:
+                       ZVAL_NULL(retval);
+                       break;
+               case TC_NUMBER:
+                       if (convert_to_number(retval, str, len) == SUCCESS) {
+                               break;
+                       }
+                       /* intentional fall-through */
+               default:
+                       zend_ini_copy_value(retval, str, len);
+       }
  }
  
  static void _yy_push_state(int new_state TSRMLS_DC)
@@@ -330,7 -380,7 +377,7 @@@ restart
                }
        }
  
- #line 334 "Zend/zend_ini_scanner.c"
 -#line 384 "Zend/zend_ini_scanner.c"
++#line 381 "Zend/zend_ini_scanner.c"
  {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@@ -435,31 -484,31 +481,31 @@@ yyc_INITIAL
                case '>':
                case '?':
                case '@':
-               case ']':       goto yy13;
-               case ';':       goto yy14;
-               case '=':       goto yy16;
+               case ']':       goto yy14;
+               case ';':       goto yy15;
+               case '=':       goto yy17;
                case 'F':
-               case 'f':       goto yy18;
+               case 'f':       goto yy19;
                case 'N':
-               case 'n':       goto yy19;
+               case 'n':       goto yy20;
                case 'O':
-               case 'o':       goto yy20;
+               case 'o':       goto yy21;
                case 'T':
-               case 't':       goto yy21;
+               case 't':       goto yy22;
                case 'Y':
-               case 'y':       goto yy22;
-               case '[':       goto yy23;
-               default:        goto yy2;
+               case 'y':       goto yy23;
+               case '[':       goto yy24;
+               default:        goto yy3;
                }
- yy2:
-               YYDEBUG(2, *YYCURSOR);
-               ++YYCURSOR;
-               yych = *YYCURSOR;
-               goto yy26;
  yy3:
                YYDEBUG(3, *YYCURSOR);
+               ++YYCURSOR;
+               yych = *YYCURSOR;
+               goto yy27;
+ yy4:
+               YYDEBUG(4, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 426 "Zend/zend_ini_scanner.l"
 -#line 480 "Zend/zend_ini_scanner.l"
++#line 477 "Zend/zend_ini_scanner.l"
                { /* Get option name */
        /* Eat leading whitespace */
        EAT_LEADING_WHITESPACE();
  
        RETURN_TOKEN(TC_LABEL, yytext, yyleng);
  }
- #line 473 "Zend/zend_ini_scanner.c"
- yy4:
-               YYDEBUG(4, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               goto yy68;
 -#line 522 "Zend/zend_ini_scanner.c"
++#line 519 "Zend/zend_ini_scanner.c"
  yy5:
                YYDEBUG(5, *YYCURSOR);
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               goto yy74;
+ yy6:
+               YYDEBUG(6, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 572 "Zend/zend_ini_scanner.l"
 -#line 626 "Zend/zend_ini_scanner.l"
++#line 623 "Zend/zend_ini_scanner.l"
                {
        /* eat whitespace */
        goto restart;
  }
- #line 487 "Zend/zend_ini_scanner.c"
- yy6:
-               YYDEBUG(6, *YYCURSOR);
-               ++YYCURSOR;
 -#line 536 "Zend/zend_ini_scanner.c"
++#line 533 "Zend/zend_ini_scanner.c"
  yy7:
                YYDEBUG(7, *YYCURSOR);
+               ++YYCURSOR;
+ yy8:
+               YYDEBUG(8, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 577 "Zend/zend_ini_scanner.l"
 -#line 631 "Zend/zend_ini_scanner.l"
++#line 628 "Zend/zend_ini_scanner.l"
                {
        SCNG(lineno)++;
        return END_OF_LINE;
  }
- #line 499 "Zend/zend_ini_scanner.c"
- yy8:
-               YYDEBUG(8, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '\n') goto yy71;
-               goto yy7;
 -#line 548 "Zend/zend_ini_scanner.c"
++#line 545 "Zend/zend_ini_scanner.c"
  yy9:
                YYDEBUG(9, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '\n') goto yy77;
+               goto yy8;
+ yy10:
+               YYDEBUG(10, *YYCURSOR);
                yyaccept = 1;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= ' ') {
                        }
                } else {
                        if (yych <= ':') {
-                               if (yych == '#') goto yy58;
-                               goto yy26;
+                               if (yych == '#') goto yy64;
+                               goto yy27;
                        } else {
-                               if (yych <= ';') goto yy53;
-                               if (yych == '=') goto yy51;
-                               goto yy26;
+                               if (yych <= ';') goto yy59;
+                               if (yych == '=') goto yy57;
+                               goto yy27;
                        }
                }
- yy10:
-               YYDEBUG(10, *YYCURSOR);
-               ++YYCURSOR;
+ yy11:
                YYDEBUG(11, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(12, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 500 "Zend/zend_ini_scanner.l"
 -#line 554 "Zend/zend_ini_scanner.l"
++#line 551 "Zend/zend_ini_scanner.l"
                { /* Disallow these chars outside option values */
        return yytext[0];
  }
- #line 538 "Zend/zend_ini_scanner.c"
- yy12:
-               YYDEBUG(12, *YYCURSOR);
-               yyaccept = 1;
-               yych = *(YYMARKER = ++YYCURSOR);
-               goto yy59;
 -#line 587 "Zend/zend_ini_scanner.c"
++#line 584 "Zend/zend_ini_scanner.c"
  yy13:
                YYDEBUG(13, *YYCURSOR);
-               yych = *++YYCURSOR;
-               goto yy26;
+               yyaccept = 1;
+               yych = *(YYMARKER = ++YYCURSOR);
+               goto yy65;
  yy14:
                YYDEBUG(14, *YYCURSOR);
+               yych = *++YYCURSOR;
+               goto yy27;
+ yy15:
+               YYDEBUG(15, *YYCURSOR);
                yyaccept = 2;
                yych = *(YYMARKER = ++YYCURSOR);
-               goto yy54;
-               YYDEBUG(15, *YYCURSOR);
+               goto yy60;
+               YYDEBUG(16, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 600 "Zend/zend_ini_scanner.l"
 -#line 654 "Zend/zend_ini_scanner.l"
++#line 651 "Zend/zend_ini_scanner.l"
                {
        return 0;
  }
- #line 559 "Zend/zend_ini_scanner.c"
- yy16:
-               YYDEBUG(16, *YYCURSOR);
-               ++YYCURSOR;
-               yych = *YYCURSOR;
-               goto yy52;
 -#line 608 "Zend/zend_ini_scanner.c"
++#line 605 "Zend/zend_ini_scanner.c"
  yy17:
                YYDEBUG(17, *YYCURSOR);
+               ++YYCURSOR;
+               yych = *YYCURSOR;
+               goto yy58;
+ yy18:
+               YYDEBUG(18, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 436 "Zend/zend_ini_scanner.l"
 -#line 490 "Zend/zend_ini_scanner.l"
++#line 487 "Zend/zend_ini_scanner.l"
                { /* Start option value */
        if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) {
                yy_push_state(ST_RAW TSRMLS_CC);
        }
        return '=';
  }
- #line 577 "Zend/zend_ini_scanner.c"
- yy18:
-               YYDEBUG(18, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'A') goto yy48;
-               if (yych == 'a') goto yy48;
-               goto yy26;
 -#line 626 "Zend/zend_ini_scanner.c"
++#line 623 "Zend/zend_ini_scanner.c"
  yy19:
                YYDEBUG(19, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -615,21 -664,21 +661,21 @@@ yy21
  yy22:
                YYDEBUG(22, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy27;
-               if (yych == 'e') goto yy27;
-               goto yy26;
+               if (yych == 'R') goto yy37;
+               if (yych == 'r') goto yy37;
+               goto yy27;
  yy23:
                YYDEBUG(23, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy28;
+               if (yych == 'e') goto yy28;
+               goto yy27;
+ yy24:
                YYDEBUG(24, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(25, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 355 "Zend/zend_ini_scanner.l"
 -#line 405 "Zend/zend_ini_scanner.l"
++#line 402 "Zend/zend_ini_scanner.l"
                { /* Section start */
        /* Enter section data lookup state */
        if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) {
        }
        return TC_SECTION;
  }
- #line 643 "Zend/zend_ini_scanner.c"
- yy25:
-               YYDEBUG(25, *YYCURSOR);
 -#line 692 "Zend/zend_ini_scanner.c"
++#line 689 "Zend/zend_ini_scanner.c"
+ yy26:
+               YYDEBUG(26, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
@@@ -663,13 -712,13 +709,13 @@@ yy29
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(29, *YYCURSOR);
+               YYDEBUG(30, *YYCURSOR);
                if (yybm[0+yych] & 32) {
-                       goto yy28;
+                       goto yy29;
                }
-               YYDEBUG(30, *YYCURSOR);
+               YYDEBUG(31, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 380 "Zend/zend_ini_scanner.l"
 -#line 430 "Zend/zend_ini_scanner.l"
++#line 427 "Zend/zend_ini_scanner.l"
                { /* Start of option with offset */
        /* Eat leading whitespace */
        EAT_LEADING_WHITESPACE();
  
        RETURN_TOKEN(TC_OFFSET, yytext, yyleng);
  }
- #line 686 "Zend/zend_ini_scanner.c"
- yy31:
-               YYDEBUG(31, *YYCURSOR);
 -#line 735 "Zend/zend_ini_scanner.c"
++#line 732 "Zend/zend_ini_scanner.c"
+ yy32:
+               YYDEBUG(32, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
                                }
                        }
                }
- yy33:
-               YYDEBUG(33, *YYCURSOR);
+ yy34:
+               YYDEBUG(34, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 418 "Zend/zend_ini_scanner.l"
 -#line 468 "Zend/zend_ini_scanner.l"
++#line 465 "Zend/zend_ini_scanner.l"
                { /* TRUE value (when used outside option value/offset this causes parse error!) */
        RETURN_TOKEN(BOOL_TRUE, "1", 1);
  }
- #line 736 "Zend/zend_ini_scanner.c"
- yy34:
-               YYDEBUG(34, *YYCURSOR);
 -#line 785 "Zend/zend_ini_scanner.c"
++#line 782 "Zend/zend_ini_scanner.c"
+ yy35:
+               YYDEBUG(35, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
@@@ -799,16 -848,16 +845,16 @@@ yy40
                                }
                        }
                }
- yy41:
-               YYDEBUG(41, *YYCURSOR);
+ yy42:
+               YYDEBUG(42, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 422 "Zend/zend_ini_scanner.l"
 -#line 472 "Zend/zend_ini_scanner.l"
++#line 469 "Zend/zend_ini_scanner.l"
                { /* FALSE value (when used outside option value/offset this causes parse error!)*/
        RETURN_TOKEN(BOOL_FALSE, "", 0);
  }
- #line 810 "Zend/zend_ini_scanner.c"
- yy42:
-               YYDEBUG(42, *YYCURSOR);
 -#line 859 "Zend/zend_ini_scanner.c"
++#line 856 "Zend/zend_ini_scanner.c"
+ yy43:
+               YYDEBUG(43, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
@@@ -877,25 -920,57 +917,57 @@@ yy46
  yy47:
                YYDEBUG(47, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy39;
-               if (yych == 'e') goto yy39;
-               goto yy26;
+               if (yych == 'L') goto yy48;
+               if (yych != 'l') goto yy27;
  yy48:
                YYDEBUG(48, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'L') goto yy49;
-               if (yych != 'l') goto yy26;
- yy49:
+               ++YYCURSOR;
+               YYFILL(1);
+               yych = *YYCURSOR;
                YYDEBUG(49, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'S') goto yy50;
-               if (yych != 's') goto yy26;
+               if (yych <= '&') {
+                       if (yych <= 0x1F) {
+                               if (yych <= '\n') {
+                                       if (yych <= 0x08) goto yy26;
+                                       if (yych <= '\t') goto yy51;
+                               } else {
+                                       if (yych != '\r') goto yy26;
+                               }
+                       } else {
+                               if (yych <= '#') {
+                                       if (yych <= ' ') goto yy48;
+                                       if (yych >= '#') goto yy26;
+                               } else {
+                                       if (yych == '%') goto yy26;
+                               }
+                       }
+               } else {
+                       if (yych <= '=') {
+                               if (yych <= ':') {
+                                       if (yych <= '\'') goto yy26;
+                                       if (yych >= '*') goto yy26;
+                               } else {
+                                       if (yych == '<') goto yy26;
+                               }
+                       } else {
+                               if (yych <= ']') {
+                                       if (yych == '[') goto yy29;
+                                       goto yy26;
+                               } else {
+                                       if (yych <= '^') goto yy50;
+                                       if (yych <= 'z') goto yy26;
+                                       if (yych >= 0x7F) goto yy26;
+                               }
+                       }
+               }
  yy50:
                YYDEBUG(50, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy39;
-               if (yych == 'e') goto yy39;
-               goto yy26;
+               yyleng = YYCURSOR - SCNG(yy_text);
 -#line 476 "Zend/zend_ini_scanner.l"
++#line 473 "Zend/zend_ini_scanner.l"
+               {
+       RETURN_TOKEN(NULL_NULL, "", 0);
+ }
 -#line 974 "Zend/zend_ini_scanner.c"
++#line 971 "Zend/zend_ini_scanner.c"
  yy51:
                YYDEBUG(51, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(52, *YYCURSOR);
                if (yych == '\t') goto yy51;
                if (yych == ' ') goto yy51;
-               goto yy17;
+               goto yy50;
  yy53:
                YYDEBUG(53, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(2);
-               yych = *YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy40;
+               if (yych == 'e') goto yy40;
+               goto yy27;
  yy54:
                YYDEBUG(54, *YYCURSOR);
-               if (yybm[0+yych] & 128) {
-                       goto yy53;
-               }
-               if (yych >= '\r') goto yy57;
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy55;
+               if (yych != 'l') goto yy27;
  yy55:
                YYDEBUG(55, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'S') goto yy56;
+               if (yych != 's') goto yy27;
  yy56:
                YYDEBUG(56, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy40;
+               if (yych == 'e') goto yy40;
+               goto yy27;
+ yy57:
+               YYDEBUG(57, *YYCURSOR);
+               ++YYCURSOR;
+               YYFILL(1);
+               yych = *YYCURSOR;
+ yy58:
+               YYDEBUG(58, *YYCURSOR);
+               if (yych == '\t') goto yy57;
+               if (yych == ' ') goto yy57;
+               goto yy18;
+ yy59:
+               YYDEBUG(59, *YYCURSOR);
+               ++YYCURSOR;
+               YYFILL(2);
+               yych = *YYCURSOR;
+ yy60:
+               YYDEBUG(60, *YYCURSOR);
+               if (yybm[0+yych] & 128) {
+                       goto yy59;
+               }
+               if (yych >= '\r') goto yy63;
+ yy61:
+               YYDEBUG(61, *YYCURSOR);
+               ++YYCURSOR;
+ yy62:
+               YYDEBUG(62, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 582 "Zend/zend_ini_scanner.l"
 -#line 636 "Zend/zend_ini_scanner.l"
++#line 633 "Zend/zend_ini_scanner.l"
                { /* Comment */
        BEGIN(INITIAL);
        SCNG(lineno)++;
        return END_OF_LINE;
  }
- #line 933 "Zend/zend_ini_scanner.c"
- yy57:
-               YYDEBUG(57, *YYCURSOR);
 -#line 1039 "Zend/zend_ini_scanner.c"
++#line 1036 "Zend/zend_ini_scanner.c"
+ yy63:
+               YYDEBUG(63, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '\n') goto yy55;
-               goto yy56;
- yy58:
-               YYDEBUG(58, *YYCURSOR);
+               if (yych == '\n') goto yy61;
+               goto yy62;
+ yy64:
+               YYDEBUG(64, *YYCURSOR);
                yyaccept = 1;
                YYMARKER = ++YYCURSOR;
                YYFILL(2);
@@@ -992,37 -1098,37 +1095,37 @@@ yy68
                YYMARKER = ++YYCURSOR;
                YYFILL(2);
                yych = *YYCURSOR;
-               YYDEBUG(63, *YYCURSOR);
+               YYDEBUG(69, *YYCURSOR);
                if (yych <= '\f') {
-                       if (yych <= 0x08) goto yy60;
-                       if (yych <= '\t') goto yy62;
-                       if (yych >= '\v') goto yy60;
+                       if (yych <= 0x08) goto yy66;
+                       if (yych <= '\t') goto yy68;
+                       if (yych >= '\v') goto yy66;
                } else {
-                       if (yych <= '\r') goto yy66;
-                       if (yych == ' ') goto yy62;
-                       goto yy60;
+                       if (yych <= '\r') goto yy72;
+                       if (yych == ' ') goto yy68;
+                       goto yy66;
                }
- yy64:
-               YYDEBUG(64, *YYCURSOR);
+ yy70:
+               YYDEBUG(70, *YYCURSOR);
                ++YYCURSOR;
- yy65:
-               YYDEBUG(65, *YYCURSOR);
+ yy71:
+               YYDEBUG(71, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 588 "Zend/zend_ini_scanner.l"
 -#line 642 "Zend/zend_ini_scanner.l"
++#line 639 "Zend/zend_ini_scanner.l"
                { /* #Comment */
        zend_error(E_DEPRECATED, "Comments starting with '#' are deprecated in %s on line %d", zend_ini_scanner_get_filename(TSRMLS_C), SCNG(lineno));
        BEGIN(INITIAL);
        SCNG(lineno)++;
        return END_OF_LINE;
  }
- #line 1019 "Zend/zend_ini_scanner.c"
- yy66:
-               YYDEBUG(66, *YYCURSOR);
 -#line 1125 "Zend/zend_ini_scanner.c"
++#line 1122 "Zend/zend_ini_scanner.c"
+ yy72:
+               YYDEBUG(72, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '\n') goto yy64;
-               goto yy65;
- yy67:
-               YYDEBUG(67, *YYCURSOR);
+               if (yych == '\n') goto yy70;
+               goto yy71;
+ yy73:
+               YYDEBUG(73, *YYCURSOR);
                yyaccept = 0;
                YYMARKER = ++YYCURSOR;
                YYFILL(2);
@@@ -1145,17 -1251,17 +1248,17 @@@ yyc_ST_DOUBLE_QUOTES
                          0,   0,   0,   0,   0,   0,   0,   0, 
                          0,   0,   0,   0,   0,   0,   0,   0, 
                };
-               YYDEBUG(73, *YYCURSOR);
+               YYDEBUG(79, *YYCURSOR);
                YYFILL(2);
                yych = *YYCURSOR;
-               if (yych == '"') goto yy77;
-               if (yych == '$') goto yy79;
-               YYDEBUG(75, *YYCURSOR);
+               if (yych == '"') goto yy83;
+               if (yych == '$') goto yy85;
+               YYDEBUG(81, *YYCURSOR);
                ++YYCURSOR;
- yy76:
-               YYDEBUG(76, *YYCURSOR);
+ yy82:
+               YYDEBUG(82, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 532 "Zend/zend_ini_scanner.l"
 -#line 586 "Zend/zend_ini_scanner.l"
++#line 583 "Zend/zend_ini_scanner.l"
                { /* Escape double quoted string contents */
        if (YYCURSOR > YYLIMIT) {
                return 0;
        zend_ini_escape_string(ini_lval, yytext, yyleng, '"' TSRMLS_CC);
        return TC_QUOTED_STRING;
  }
- #line 1195 "Zend/zend_ini_scanner.c"
- yy77:
-               YYDEBUG(77, *YYCURSOR);
 -#line 1301 "Zend/zend_ini_scanner.c"
++#line 1298 "Zend/zend_ini_scanner.c"
+ yy83:
+               YYDEBUG(83, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy83;
- yy78:
-               YYDEBUG(78, *YYCURSOR);
+               goto yy89;
+ yy84:
+               YYDEBUG(84, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 527 "Zend/zend_ini_scanner.l"
 -#line 581 "Zend/zend_ini_scanner.l"
++#line 578 "Zend/zend_ini_scanner.l"
                { /* Double quoted '"' string ends */
        yy_pop_state(TSRMLS_C);
        return '"';
  }
- #line 1209 "Zend/zend_ini_scanner.c"
- yy79:
-               YYDEBUG(79, *YYCURSOR);
 -#line 1315 "Zend/zend_ini_scanner.c"
++#line 1312 "Zend/zend_ini_scanner.c"
+ yy85:
+               YYDEBUG(85, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych != '{') goto yy76;
-               YYDEBUG(80, *YYCURSOR);
+               if (yych != '{') goto yy82;
+               YYDEBUG(86, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(81, *YYCURSOR);
+               YYDEBUG(87, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 398 "Zend/zend_ini_scanner.l"
 -#line 448 "Zend/zend_ini_scanner.l"
++#line 445 "Zend/zend_ini_scanner.l"
                { /* Variable start */
        yy_push_state(ST_VARNAME TSRMLS_CC);
        return TC_DOLLAR_CURLY;
  }
- #line 1223 "Zend/zend_ini_scanner.c"
- yy82:
-               YYDEBUG(82, *YYCURSOR);
 -#line 1329 "Zend/zend_ini_scanner.c"
++#line 1326 "Zend/zend_ini_scanner.c"
+ yy88:
+               YYDEBUG(88, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
@@@ -1311,65 -1417,65 +1414,65 @@@ yyc_ST_OFFSET
                                }
                        }
                }
- yy86:
-               YYDEBUG(86, *YYCURSOR);
+ yy92:
+               YYDEBUG(92, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               goto yy105;
- yy87:
-               YYDEBUG(87, *YYCURSOR);
+               goto yy111;
+ yy93:
+               YYDEBUG(93, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 518 "Zend/zend_ini_scanner.l"
 -#line 572 "Zend/zend_ini_scanner.l"
++#line 569 "Zend/zend_ini_scanner.l"
                { /* Get rest as section/offset value */
        RETURN_TOKEN(TC_STRING, yytext, yyleng);
  }
- #line 1327 "Zend/zend_ini_scanner.c"
- yy88:
-               YYDEBUG(88, *YYCURSOR);
 -#line 1433 "Zend/zend_ini_scanner.c"
++#line 1430 "Zend/zend_ini_scanner.c"
+ yy94:
+               YYDEBUG(94, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy131;
+                       goto yy137;
                }
-               if (yych == '"') goto yy133;
-               if (yych == ']') goto yy134;
-               goto yy105;
- yy89:
-               YYDEBUG(89, *YYCURSOR);
+               if (yych == '"') goto yy139;
+               if (yych == ']') goto yy140;
+               goto yy111;
+ yy95:
+               YYDEBUG(95, *YYCURSOR);
                ++YYCURSOR;
- yy90:
-               YYDEBUG(90, *YYCURSOR);
+ yy96:
+               YYDEBUG(96, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 600 "Zend/zend_ini_scanner.l"
 -#line 654 "Zend/zend_ini_scanner.l"
++#line 651 "Zend/zend_ini_scanner.l"
                {
        return 0;
  }
- #line 1348 "Zend/zend_ini_scanner.c"
- yy91:
-               YYDEBUG(91, *YYCURSOR);
 -#line 1454 "Zend/zend_ini_scanner.c"
++#line 1451 "Zend/zend_ini_scanner.c"
+ yy97:
+               YYDEBUG(97, *YYCURSOR);
                ++YYCURSOR;
- yy92:
-               YYDEBUG(92, *YYCURSOR);
+ yy98:
+               YYDEBUG(98, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 522 "Zend/zend_ini_scanner.l"
 -#line 576 "Zend/zend_ini_scanner.l"
++#line 573 "Zend/zend_ini_scanner.l"
                { /* Double quoted '"' string start */
        yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC);
        return '"';
  }
- #line 1360 "Zend/zend_ini_scanner.c"
- yy93:
-               YYDEBUG(93, *YYCURSOR);
 -#line 1466 "Zend/zend_ini_scanner.c"
++#line 1463 "Zend/zend_ini_scanner.c"
+ yy99:
+               YYDEBUG(99, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= '\\') {
-                       if (yych <= 0x00) goto yy90;
-                       if (yych <= '[') goto yy104;
-                       goto yy109;
+                       if (yych <= 0x00) goto yy96;
+                       if (yych <= '[') goto yy110;
+                       goto yy115;
                } else {
-                       if (yych == '{') goto yy129;
-                       goto yy104;
+                       if (yych == '{') goto yy135;
+                       goto yy110;
                }
- yy94:
-               YYDEBUG(94, *YYCURSOR);
+ yy100:
+               YYDEBUG(100, *YYCURSOR);
                yyaccept = 1;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yybm[0+yych] & 64) {
@@@ -1415,16 -1521,16 +1518,16 @@@ yy103
                                }
                        }
                }
- yy98:
-               YYDEBUG(98, *YYCURSOR);
+ yy104:
+               YYDEBUG(104, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 496 "Zend/zend_ini_scanner.l"
 -#line 550 "Zend/zend_ini_scanner.l"
++#line 547 "Zend/zend_ini_scanner.l"
                { /* Get number option value as string */
        RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
  }
- #line 1426 "Zend/zend_ini_scanner.c"
- yy99:
-               YYDEBUG(99, *YYCURSOR);
 -#line 1532 "Zend/zend_ini_scanner.c"
++#line 1529 "Zend/zend_ini_scanner.c"
+ yy105:
+               YYDEBUG(105, *YYCURSOR);
                yyaccept = 3;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yybm[0+yych] & 16) {
                        }
                } else {
                        if (yych <= ':') {
-                               if (yych != '\'') goto yy105;
+                               if (yych != '\'') goto yy111;
                        } else {
-                               if (yych <= ';') goto yy100;
-                               if (yych != ']') goto yy105;
+                               if (yych <= ';') goto yy106;
+                               if (yych != ']') goto yy111;
                        }
                }
- yy100:
-               YYDEBUG(100, *YYCURSOR);
+ yy106:
+               YYDEBUG(106, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 492 "Zend/zend_ini_scanner.l"
 -#line 546 "Zend/zend_ini_scanner.l"
++#line 543 "Zend/zend_ini_scanner.l"
                { /* Get constant option value */
        RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
  }
- #line 1456 "Zend/zend_ini_scanner.c"
- yy101:
-               YYDEBUG(101, *YYCURSOR);
 -#line 1562 "Zend/zend_ini_scanner.c"
++#line 1559 "Zend/zend_ini_scanner.c"
+ yy107:
+               YYDEBUG(107, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy104;
- yy102:
-               YYDEBUG(102, *YYCURSOR);
+               goto yy110;
+ yy108:
+               YYDEBUG(108, *YYCURSOR);
                ++YYCURSOR;
- yy103:
-               YYDEBUG(103, *YYCURSOR);
+ yy109:
+               YYDEBUG(109, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 393 "Zend/zend_ini_scanner.l"
 -#line 443 "Zend/zend_ini_scanner.l"
++#line 440 "Zend/zend_ini_scanner.l"
                { /* End of section or an option offset */
        BEGIN(INITIAL);
        return ']';
  }
- #line 1472 "Zend/zend_ini_scanner.c"
- yy104:
-               YYDEBUG(104, *YYCURSOR);
 -#line 1578 "Zend/zend_ini_scanner.c"
++#line 1575 "Zend/zend_ini_scanner.c"
+ yy110:
+               YYDEBUG(110, *YYCURSOR);
                yyaccept = 0;
                YYMARKER = ++YYCURSOR;
                YYFILL(1);
@@@ -1750,15 -1856,15 +1853,15 @@@ yy131
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(126, *YYCURSOR);
+               YYDEBUG(132, *YYCURSOR);
                if (yybm[0+yych] & 64) {
-                       goto yy125;
+                       goto yy131;
                }
-               YYDEBUG(127, *YYCURSOR);
+               YYDEBUG(133, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(128, *YYCURSOR);
+               YYDEBUG(134, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 365 "Zend/zend_ini_scanner.l"
 -#line 415 "Zend/zend_ini_scanner.l"
++#line 412 "Zend/zend_ini_scanner.l"
                { /* Raw string */
        /* Eat leading and trailing single quotes */
        if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') {
        }
        RETURN_TOKEN(TC_RAW, yytext, yyleng);
  }
- #line 1771 "Zend/zend_ini_scanner.c"
- yy129:
-               YYDEBUG(129, *YYCURSOR);
 -#line 1877 "Zend/zend_ini_scanner.c"
++#line 1874 "Zend/zend_ini_scanner.c"
+ yy135:
+               YYDEBUG(135, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(130, *YYCURSOR);
+               YYDEBUG(136, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 398 "Zend/zend_ini_scanner.l"
 -#line 448 "Zend/zend_ini_scanner.l"
++#line 445 "Zend/zend_ini_scanner.l"
                { /* Variable start */
        yy_push_state(ST_VARNAME TSRMLS_CC);
        return TC_DOLLAR_CURLY;
  }
- #line 1782 "Zend/zend_ini_scanner.c"
- yy131:
-               YYDEBUG(131, *YYCURSOR);
 -#line 1888 "Zend/zend_ini_scanner.c"
++#line 1885 "Zend/zend_ini_scanner.c"
+ yy137:
+               YYDEBUG(137, *YYCURSOR);
                yyaccept = 0;
                YYMARKER = ++YYCURSOR;
                YYFILL(1);
@@@ -1871,33 -1977,33 +1974,33 @@@ yyc_ST_RAW
                        }
                } else {
                        if (yych <= ' ') {
-                               if (yych <= '\r') goto yy144;
-                               if (yych <= 0x1F) goto yy139;
-                               goto yy141;
+                               if (yych <= '\r') goto yy150;
+                               if (yych <= 0x1F) goto yy145;
+                               goto yy147;
                        } else {
-                               if (yych == ';') goto yy145;
-                               goto yy139;
+                               if (yych == ';') goto yy151;
+                               goto yy145;
                        }
                }
-               YYDEBUG(137, *YYCURSOR);
+               YYDEBUG(143, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(138, *YYCURSOR);
+               YYDEBUG(144, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 595 "Zend/zend_ini_scanner.l"
 -#line 649 "Zend/zend_ini_scanner.l"
++#line 646 "Zend/zend_ini_scanner.l"
                { /* End of option value (if EOF is reached before EOL */
        BEGIN(INITIAL);
        return END_OF_LINE;
  }
- #line 1892 "Zend/zend_ini_scanner.c"
- yy139:
-               YYDEBUG(139, *YYCURSOR);
 -#line 1998 "Zend/zend_ini_scanner.c"
++#line 1995 "Zend/zend_ini_scanner.c"
+ yy145:
+               YYDEBUG(145, *YYCURSOR);
                ++YYCURSOR;
- yy140:
-               YYDEBUG(140, *YYCURSOR);
+ yy146:
+               YYDEBUG(146, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 445 "Zend/zend_ini_scanner.l"
 -#line 499 "Zend/zend_ini_scanner.l"
++#line 496 "Zend/zend_ini_scanner.l"
                { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
 -      char *sc = NULL;
 +      unsigned char *sc = NULL;
        while (YYCURSOR < YYLIMIT) {
                switch (*YYCURSOR) {
                        case '\n':
@@@ -1932,111 -2038,111 +2035,111 @@@ end_raw_value_chars
        }
        RETURN_TOKEN(TC_RAW, yytext, yyleng);
  }
- #line 1936 "Zend/zend_ini_scanner.c"
- yy141:
-               YYDEBUG(141, *YYCURSOR);
 -#line 2042 "Zend/zend_ini_scanner.c"
++#line 2039 "Zend/zend_ini_scanner.c"
+ yy147:
+               YYDEBUG(147, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= '\r') {
-                       if (yych <= 0x08) goto yy140;
-                       if (yych <= '\n') goto yy153;
-                       if (yych <= '\f') goto yy140;
-                       goto yy153;
+                       if (yych <= 0x08) goto yy146;
+                       if (yych <= '\n') goto yy159;
+                       if (yych <= '\f') goto yy146;
+                       goto yy159;
                } else {
                        if (yych <= ' ') {
-                               if (yych <= 0x1F) goto yy140;
-                               goto yy153;
+                               if (yych <= 0x1F) goto yy146;
+                               goto yy159;
                        } else {
-                               if (yych == ';') goto yy153;
-                               goto yy140;
+                               if (yych == ';') goto yy159;
+                               goto yy146;
                        }
                }
- yy142:
-               YYDEBUG(142, *YYCURSOR);
+ yy148:
+               YYDEBUG(148, *YYCURSOR);
                ++YYCURSOR;
- yy143:
-               YYDEBUG(143, *YYCURSOR);
+ yy149:
+               YYDEBUG(149, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 486 "Zend/zend_ini_scanner.l"
 -#line 540 "Zend/zend_ini_scanner.l"
++#line 537 "Zend/zend_ini_scanner.l"
                { /* End of option value */
        BEGIN(INITIAL);
        SCNG(lineno)++;
        return END_OF_LINE;
  }
- #line 1967 "Zend/zend_ini_scanner.c"
- yy144:
-               YYDEBUG(144, *YYCURSOR);
 -#line 2073 "Zend/zend_ini_scanner.c"
++#line 2070 "Zend/zend_ini_scanner.c"
+ yy150:
+               YYDEBUG(150, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '\n') goto yy151;
-               goto yy143;
- yy145:
-               YYDEBUG(145, *YYCURSOR);
+               if (yych == '\n') goto yy157;
+               goto yy149;
+ yy151:
+               YYDEBUG(151, *YYCURSOR);
                yyaccept = 1;
                yych = *(YYMARKER = ++YYCURSOR);
-               goto yy147;
- yy146:
-               YYDEBUG(146, *YYCURSOR);
+               goto yy153;
+ yy152:
+               YYDEBUG(152, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(2);
                yych = *YYCURSOR;
- yy147:
-               YYDEBUG(147, *YYCURSOR);
+ yy153:
+               YYDEBUG(153, *YYCURSOR);
                if (yybm[0+yych] & 64) {
-                       goto yy146;
+                       goto yy152;
                }
-               if (yych >= '\r') goto yy150;
- yy148:
-               YYDEBUG(148, *YYCURSOR);
+               if (yych >= '\r') goto yy156;
+ yy154:
+               YYDEBUG(154, *YYCURSOR);
                ++YYCURSOR;
- yy149:
-               YYDEBUG(149, *YYCURSOR);
+ yy155:
+               YYDEBUG(155, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 582 "Zend/zend_ini_scanner.l"
 -#line 636 "Zend/zend_ini_scanner.l"
++#line 633 "Zend/zend_ini_scanner.l"
                { /* Comment */
        BEGIN(INITIAL);
        SCNG(lineno)++;
        return END_OF_LINE;
  }
- #line 2001 "Zend/zend_ini_scanner.c"
- yy150:
-               YYDEBUG(150, *YYCURSOR);
 -#line 2107 "Zend/zend_ini_scanner.c"
++#line 2104 "Zend/zend_ini_scanner.c"
+ yy156:
+               YYDEBUG(156, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '\n') goto yy148;
-               goto yy149;
- yy151:
-               YYDEBUG(151, *YYCURSOR);
+               if (yych == '\n') goto yy154;
+               goto yy155;
+ yy157:
+               YYDEBUG(157, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy143;
- yy152:
-               YYDEBUG(152, *YYCURSOR);
+               goto yy149;
+ yy158:
+               YYDEBUG(158, *YYCURSOR);
                yyaccept = 2;
                YYMARKER = ++YYCURSOR;
                YYFILL(2);
                yych = *YYCURSOR;
- yy153:
-               YYDEBUG(153, *YYCURSOR);
+ yy159:
+               YYDEBUG(159, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy152;
+                       goto yy158;
                }
                if (yych <= '\f') {
-                       if (yych == '\n') goto yy151;
+                       if (yych == '\n') goto yy157;
                } else {
-                       if (yych <= '\r') goto yy155;
-                       if (yych == ';') goto yy146;
+                       if (yych <= '\r') goto yy161;
+                       if (yych == ';') goto yy152;
                }
-               YYDEBUG(154, *YYCURSOR);
+               YYDEBUG(160, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 572 "Zend/zend_ini_scanner.l"
 -#line 626 "Zend/zend_ini_scanner.l"
++#line 623 "Zend/zend_ini_scanner.l"
                {
        /* eat whitespace */
        goto restart;
  }
- #line 2035 "Zend/zend_ini_scanner.c"
- yy155:
-               YYDEBUG(155, *YYCURSOR);
 -#line 2141 "Zend/zend_ini_scanner.c"
++#line 2138 "Zend/zend_ini_scanner.c"
+ yy161:
+               YYDEBUG(161, *YYCURSOR);
                ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '\n') goto yy151;
-               goto yy143;
+               if ((yych = *YYCURSOR) == '\n') goto yy157;
+               goto yy149;
        }
  /* *********************************** */
  yyc_ST_SECTION_RAW:
                YYFILL(3);
                yych = *YYCURSOR;
                if (yych <= '\f') {
-                       if (yych == '\n') goto yy160;
+                       if (yych == '\n') goto yy166;
                } else {
-                       if (yych <= '\r') goto yy160;
-                       if (yych == ']') goto yy162;
+                       if (yych <= '\r') goto yy166;
+                       if (yych == ']') goto yy168;
                }
-               YYDEBUG(158, *YYCURSOR);
+               YYDEBUG(164, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy169;
- yy159:
-               YYDEBUG(159, *YYCURSOR);
+               goto yy175;
+ yy165:
+               YYDEBUG(165, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 482 "Zend/zend_ini_scanner.l"
 -#line 536 "Zend/zend_ini_scanner.l"
++#line 533 "Zend/zend_ini_scanner.l"
                { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
        RETURN_TOKEN(TC_RAW, yytext, yyleng);
  }
- #line 2099 "Zend/zend_ini_scanner.c"
- yy160:
-               YYDEBUG(160, *YYCURSOR);
 -#line 2205 "Zend/zend_ini_scanner.c"
++#line 2202 "Zend/zend_ini_scanner.c"
+ yy166:
+               YYDEBUG(166, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(161, *YYCURSOR);
+               YYDEBUG(167, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 600 "Zend/zend_ini_scanner.l"
 -#line 654 "Zend/zend_ini_scanner.l"
++#line 651 "Zend/zend_ini_scanner.l"
                {
        return 0;
  }
- #line 2109 "Zend/zend_ini_scanner.c"
- yy162:
-               YYDEBUG(162, *YYCURSOR);
 -#line 2215 "Zend/zend_ini_scanner.c"
++#line 2212 "Zend/zend_ini_scanner.c"
+ yy168:
+               YYDEBUG(168, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy165;
- yy163:
-               YYDEBUG(163, *YYCURSOR);
+               goto yy171;
+ yy169:
+               YYDEBUG(169, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 374 "Zend/zend_ini_scanner.l"
 -#line 424 "Zend/zend_ini_scanner.l"
++#line 421 "Zend/zend_ini_scanner.l"
                { /* End of section */
        BEGIN(INITIAL);
        SCNG(lineno)++;
        return ']';
  }
- #line 2124 "Zend/zend_ini_scanner.c"
- yy164:
-               YYDEBUG(164, *YYCURSOR);
 -#line 2230 "Zend/zend_ini_scanner.c"
++#line 2227 "Zend/zend_ini_scanner.c"
+ yy170:
+               YYDEBUG(170, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(2);
                yych = *YYCURSOR;
@@@ -2234,67 -2340,67 +2337,67 @@@ yyc_ST_SECTION_VALUE
                                }
                        }
                }
- yy172:
-               YYDEBUG(172, *YYCURSOR);
+ yy178:
+               YYDEBUG(178, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               goto yy195;
- yy173:
-               YYDEBUG(173, *YYCURSOR);
+               goto yy201;
+ yy179:
+               YYDEBUG(179, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 518 "Zend/zend_ini_scanner.l"
 -#line 572 "Zend/zend_ini_scanner.l"
++#line 569 "Zend/zend_ini_scanner.l"
                { /* Get rest as section/offset value */
        RETURN_TOKEN(TC_STRING, yytext, yyleng);
  }
- #line 2250 "Zend/zend_ini_scanner.c"
- yy174:
-               YYDEBUG(174, *YYCURSOR);
 -#line 2356 "Zend/zend_ini_scanner.c"
++#line 2353 "Zend/zend_ini_scanner.c"
+ yy180:
+               YYDEBUG(180, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy221;
-                       goto yy195;
+                       if (yych == '\t') goto yy227;
+                       goto yy201;
                } else {
-                       if (yych <= ' ') goto yy221;
-                       if (yych == '"') goto yy223;
-                       goto yy195;
+                       if (yych <= ' ') goto yy227;
+                       if (yych == '"') goto yy229;
+                       goto yy201;
                }
- yy175:
-               YYDEBUG(175, *YYCURSOR);
+ yy181:
+               YYDEBUG(181, *YYCURSOR);
                ++YYCURSOR;
- yy176:
-               YYDEBUG(176, *YYCURSOR);
+ yy182:
+               YYDEBUG(182, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 600 "Zend/zend_ini_scanner.l"
 -#line 654 "Zend/zend_ini_scanner.l"
++#line 651 "Zend/zend_ini_scanner.l"
                {
        return 0;
  }
- #line 2273 "Zend/zend_ini_scanner.c"
- yy177:
-               YYDEBUG(177, *YYCURSOR);
 -#line 2379 "Zend/zend_ini_scanner.c"
++#line 2376 "Zend/zend_ini_scanner.c"
+ yy183:
+               YYDEBUG(183, *YYCURSOR);
                ++YYCURSOR;
- yy178:
-               YYDEBUG(178, *YYCURSOR);
+ yy184:
+               YYDEBUG(184, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 522 "Zend/zend_ini_scanner.l"
 -#line 576 "Zend/zend_ini_scanner.l"
++#line 573 "Zend/zend_ini_scanner.l"
                { /* Double quoted '"' string start */
        yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC);
        return '"';
  }
- #line 2285 "Zend/zend_ini_scanner.c"
- yy179:
-               YYDEBUG(179, *YYCURSOR);
 -#line 2391 "Zend/zend_ini_scanner.c"
++#line 2388 "Zend/zend_ini_scanner.c"
+ yy185:
+               YYDEBUG(185, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= '\\') {
-                       if (yych <= 0x00) goto yy176;
-                       if (yych <= '[') goto yy194;
-                       goto yy199;
+                       if (yych <= 0x00) goto yy182;
+                       if (yych <= '[') goto yy200;
+                       goto yy205;
                } else {
-                       if (yych == '{') goto yy219;
-                       goto yy194;
+                       if (yych == '{') goto yy225;
+                       goto yy200;
                }
- yy180:
-               YYDEBUG(180, *YYCURSOR);
+ yy186:
+               YYDEBUG(186, *YYCURSOR);
                yyaccept = 1;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yybm[0+yych] & 128) {
@@@ -2340,16 -2446,16 +2443,16 @@@ yy189
                                }
                        }
                }
- yy184:
-               YYDEBUG(184, *YYCURSOR);
+ yy190:
+               YYDEBUG(190, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 496 "Zend/zend_ini_scanner.l"
 -#line 550 "Zend/zend_ini_scanner.l"
++#line 547 "Zend/zend_ini_scanner.l"
                { /* Get number option value as string */
        RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
  }
- #line 2351 "Zend/zend_ini_scanner.c"
- yy185:
-               YYDEBUG(185, *YYCURSOR);
 -#line 2457 "Zend/zend_ini_scanner.c"
++#line 2454 "Zend/zend_ini_scanner.c"
+ yy191:
+               YYDEBUG(191, *YYCURSOR);
                yyaccept = 3;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yybm[0+yych] & 32) {
                        }
                } else {
                        if (yych <= ':') {
-                               if (yych != '\'') goto yy195;
+                               if (yych != '\'') goto yy201;
                        } else {
-                               if (yych <= ';') goto yy186;
-                               if (yych != ']') goto yy195;
+                               if (yych <= ';') goto yy192;
+                               if (yych != ']') goto yy201;
                        }
                }
- yy186:
-               YYDEBUG(186, *YYCURSOR);
+ yy192:
+               YYDEBUG(192, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 492 "Zend/zend_ini_scanner.l"
 -#line 546 "Zend/zend_ini_scanner.l"
++#line 543 "Zend/zend_ini_scanner.l"
                { /* Get constant option value */
        RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
  }
- #line 2381 "Zend/zend_ini_scanner.c"
- yy187:
-               YYDEBUG(187, *YYCURSOR);
 -#line 2487 "Zend/zend_ini_scanner.c"
++#line 2484 "Zend/zend_ini_scanner.c"
+ yy193:
+               YYDEBUG(193, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy194;
- yy188:
-               YYDEBUG(188, *YYCURSOR);
+               goto yy200;
+ yy194:
+               YYDEBUG(194, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy191;
- yy189:
-               YYDEBUG(189, *YYCURSOR);
+               goto yy197;
+ yy195:
+               YYDEBUG(195, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 374 "Zend/zend_ini_scanner.l"
 -#line 424 "Zend/zend_ini_scanner.l"
++#line 421 "Zend/zend_ini_scanner.l"
                { /* End of section */
        BEGIN(INITIAL);
        SCNG(lineno)++;
        return ']';
  }
- #line 2400 "Zend/zend_ini_scanner.c"
- yy190:
-               YYDEBUG(190, *YYCURSOR);
 -#line 2506 "Zend/zend_ini_scanner.c"
++#line 2503 "Zend/zend_ini_scanner.c"
+ yy196:
+               YYDEBUG(196, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(2);
                yych = *YYCURSOR;
@@@ -2700,15 -2806,15 +2803,15 @@@ yy221
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(216, *YYCURSOR);
+               YYDEBUG(222, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy215;
+                       goto yy221;
                }
-               YYDEBUG(217, *YYCURSOR);
+               YYDEBUG(223, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(218, *YYCURSOR);
+               YYDEBUG(224, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 365 "Zend/zend_ini_scanner.l"
 -#line 415 "Zend/zend_ini_scanner.l"
++#line 412 "Zend/zend_ini_scanner.l"
                { /* Raw string */
        /* Eat leading and trailing single quotes */
        if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') {
        }
        RETURN_TOKEN(TC_RAW, yytext, yyleng);
  }
- #line 2721 "Zend/zend_ini_scanner.c"
- yy219:
-               YYDEBUG(219, *YYCURSOR);
 -#line 2827 "Zend/zend_ini_scanner.c"
++#line 2824 "Zend/zend_ini_scanner.c"
+ yy225:
+               YYDEBUG(225, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(220, *YYCURSOR);
+               YYDEBUG(226, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 398 "Zend/zend_ini_scanner.l"
 -#line 448 "Zend/zend_ini_scanner.l"
++#line 445 "Zend/zend_ini_scanner.l"
                { /* Variable start */
        yy_push_state(ST_VARNAME TSRMLS_CC);
        return TC_DOLLAR_CURLY;
  }
- #line 2732 "Zend/zend_ini_scanner.c"
- yy221:
-               YYDEBUG(221, *YYCURSOR);
 -#line 2838 "Zend/zend_ini_scanner.c"
++#line 2835 "Zend/zend_ini_scanner.c"
+ yy227:
+               YYDEBUG(227, *YYCURSOR);
                yyaccept = 0;
                YYMARKER = ++YYCURSOR;
                YYFILL(1);
@@@ -2890,113 -2996,113 +2993,113 @@@ yyc_ST_VALUE
                case 'v':
                case 'w':
                case 'x':
-               case 'z':       goto yy248;
+               case 'z':       goto yy254;
                case 'F':
-               case 'f':       goto yy250;
+               case 'f':       goto yy256;
                case 'N':
-               case 'n':       goto yy251;
+               case 'n':       goto yy257;
                case 'O':
-               case 'o':       goto yy252;
+               case 'o':       goto yy258;
                case 'T':
-               case 't':       goto yy253;
+               case 't':       goto yy259;
                case 'Y':
-               case 'y':       goto yy254;
-               default:        goto yy228;
+               case 'y':       goto yy260;
+               default:        goto yy234;
                }
- yy226:
-               YYDEBUG(226, *YYCURSOR);
+ yy232:
+               YYDEBUG(232, *YYCURSOR);
                ++YYCURSOR;
- yy227:
-               YYDEBUG(227, *YYCURSOR);
+ yy233:
+               YYDEBUG(233, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 595 "Zend/zend_ini_scanner.l"
 -#line 649 "Zend/zend_ini_scanner.l"
++#line 646 "Zend/zend_ini_scanner.l"
                { /* End of option value (if EOF is reached before EOL */
        BEGIN(INITIAL);
        return END_OF_LINE;
  }
- #line 2918 "Zend/zend_ini_scanner.c"
- yy228:
-               YYDEBUG(228, *YYCURSOR);
 -#line 3024 "Zend/zend_ini_scanner.c"
++#line 3021 "Zend/zend_ini_scanner.c"
+ yy234:
+               YYDEBUG(234, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
-               goto yy256;
- yy229:
-               YYDEBUG(229, *YYCURSOR);
+               goto yy262;
+ yy235:
+               YYDEBUG(235, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 514 "Zend/zend_ini_scanner.l"
 -#line 568 "Zend/zend_ini_scanner.l"
++#line 565 "Zend/zend_ini_scanner.l"
                { /* Get everything else as option/offset value */
        RETURN_TOKEN(TC_STRING, yytext, yyleng);
  }
- #line 2931 "Zend/zend_ini_scanner.c"
- yy230:
-               YYDEBUG(230, *YYCURSOR);
 -#line 3037 "Zend/zend_ini_scanner.c"
++#line 3034 "Zend/zend_ini_scanner.c"
+ yy236:
+               YYDEBUG(236, *YYCURSOR);
                yyaccept = 1;
                yych = *(YYMARKER = ++YYCURSOR);
-               goto yy306;
- yy231:
-               YYDEBUG(231, *YYCURSOR);
+               goto yy316;
+ yy237:
+               YYDEBUG(237, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 568 "Zend/zend_ini_scanner.l"
 -#line 622 "Zend/zend_ini_scanner.l"
++#line 619 "Zend/zend_ini_scanner.l"
                {
        RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng);
  }
- #line 2944 "Zend/zend_ini_scanner.c"
- yy232:
-               YYDEBUG(232, *YYCURSOR);
 -#line 3050 "Zend/zend_ini_scanner.c"
++#line 3047 "Zend/zend_ini_scanner.c"
+ yy238:
+               YYDEBUG(238, *YYCURSOR);
                ++YYCURSOR;
- yy233:
-               YYDEBUG(233, *YYCURSOR);
+ yy239:
+               YYDEBUG(239, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 486 "Zend/zend_ini_scanner.l"
 -#line 540 "Zend/zend_ini_scanner.l"
++#line 537 "Zend/zend_ini_scanner.l"
                { /* End of option value */
        BEGIN(INITIAL);
        SCNG(lineno)++;
        return END_OF_LINE;
  }
- #line 2957 "Zend/zend_ini_scanner.c"
- yy234:
-               YYDEBUG(234, *YYCURSOR);
 -#line 3063 "Zend/zend_ini_scanner.c"
++#line 3060 "Zend/zend_ini_scanner.c"
+ yy240:
+               YYDEBUG(240, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '\n') goto yy304;
-               goto yy233;
- yy235:
-               YYDEBUG(235, *YYCURSOR);
+               if (yych == '\n') goto yy314;
+               goto yy239;
+ yy241:
+               YYDEBUG(241, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy303;
- yy236:
-               YYDEBUG(236, *YYCURSOR);
+               goto yy313;
+ yy242:
+               YYDEBUG(242, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 504 "Zend/zend_ini_scanner.l"
 -#line 558 "Zend/zend_ini_scanner.l"
++#line 555 "Zend/zend_ini_scanner.l"
                { /* Boolean operators */
        return yytext[0];
  }
- #line 2975 "Zend/zend_ini_scanner.c"
- yy237:
-               YYDEBUG(237, *YYCURSOR);
 -#line 3081 "Zend/zend_ini_scanner.c"
++#line 3078 "Zend/zend_ini_scanner.c"
+ yy243:
+               YYDEBUG(243, *YYCURSOR);
                ++YYCURSOR;
- yy238:
-               YYDEBUG(238, *YYCURSOR);
+ yy244:
+               YYDEBUG(244, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 522 "Zend/zend_ini_scanner.l"
 -#line 576 "Zend/zend_ini_scanner.l"
++#line 573 "Zend/zend_ini_scanner.l"
                { /* Double quoted '"' string start */
        yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC);
        return '"';
  }
- #line 2987 "Zend/zend_ini_scanner.c"
- yy239:
-               YYDEBUG(239, *YYCURSOR);
 -#line 3093 "Zend/zend_ini_scanner.c"
++#line 3090 "Zend/zend_ini_scanner.c"
+ yy245:
+               YYDEBUG(245, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= '\\') {
-                       if (yych <= 0x00) goto yy227;
-                       if (yych <= '[') goto yy255;
-                       goto yy262;
+                       if (yych <= 0x00) goto yy233;
+                       if (yych <= '[') goto yy261;
+                       goto yy268;
                } else {
-                       if (yych == '{') goto yy300;
-                       goto yy255;
+                       if (yych == '{') goto yy310;
+                       goto yy261;
                }
- yy240:
-               YYDEBUG(240, *YYCURSOR);
+ yy246:
+               YYDEBUG(246, *YYCURSOR);
                yyaccept = 2;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yybm[0+yych] & 128) {
@@@ -3055,33 -3161,33 +3158,33 @@@ yy249
                                }
                        }
                }
- yy244:
-               YYDEBUG(244, *YYCURSOR);
+ yy250:
+               YYDEBUG(250, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 496 "Zend/zend_ini_scanner.l"
 -#line 550 "Zend/zend_ini_scanner.l"
++#line 547 "Zend/zend_ini_scanner.l"
                { /* Get number option value as string */
        RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
  }
- #line 3066 "Zend/zend_ini_scanner.c"
- yy245:
-               YYDEBUG(245, *YYCURSOR);
 -#line 3172 "Zend/zend_ini_scanner.c"
++#line 3169 "Zend/zend_ini_scanner.c"
+ yy251:
+               YYDEBUG(251, *YYCURSOR);
                yyaccept = 2;
                yych = *(YYMARKER = ++YYCURSOR);
-               goto yy284;
- yy246:
-               YYDEBUG(246, *YYCURSOR);
+               goto yy294;
+ yy252:
+               YYDEBUG(252, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(247, *YYCURSOR);
+               YYDEBUG(253, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 508 "Zend/zend_ini_scanner.l"
 -#line 562 "Zend/zend_ini_scanner.l"
++#line 559 "Zend/zend_ini_scanner.l"
                { /* Make = used in option value to trigger error */
        yyless(0);
        BEGIN(INITIAL);
        return END_OF_LINE;
  }
- #line 3083 "Zend/zend_ini_scanner.c"
- yy248:
-               YYDEBUG(248, *YYCURSOR);
 -#line 3189 "Zend/zend_ini_scanner.c"
++#line 3186 "Zend/zend_ini_scanner.c"
+ yy254:
+               YYDEBUG(254, *YYCURSOR);
                yyaccept = 4;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yybm[0+yych] & 4) {
                                }
                        }
                }
- yy249:
-               YYDEBUG(249, *YYCURSOR);
+ yy255:
+               YYDEBUG(255, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 492 "Zend/zend_ini_scanner.l"
 -#line 546 "Zend/zend_ini_scanner.l"
++#line 543 "Zend/zend_ini_scanner.l"
                { /* Get constant option value */
        RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
  }
- #line 3130 "Zend/zend_ini_scanner.c"
- yy250:
-               YYDEBUG(250, *YYCURSOR);
 -#line 3236 "Zend/zend_ini_scanner.c"
++#line 3233 "Zend/zend_ini_scanner.c"
+ yy256:
+               YYDEBUG(256, *YYCURSOR);
                yyaccept = 4;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= '<') {
@@@ -3631,16 -3741,16 +3738,16 @@@ yy271
                                }
                        }
                }
- yy266:
-               YYDEBUG(266, *YYCURSOR);
+ yy272:
+               YYDEBUG(272, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 418 "Zend/zend_ini_scanner.l"
 -#line 468 "Zend/zend_ini_scanner.l"
++#line 465 "Zend/zend_ini_scanner.l"
                { /* TRUE value (when used outside option value/offset this causes parse error!) */
        RETURN_TOKEN(BOOL_TRUE, "1", 1);
  }
- #line 3642 "Zend/zend_ini_scanner.c"
- yy267:
-               YYDEBUG(267, *YYCURSOR);
 -#line 3752 "Zend/zend_ini_scanner.c"
++#line 3749 "Zend/zend_ini_scanner.c"
+ yy273:
+               YYDEBUG(273, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
@@@ -3841,16 -3951,16 +3948,16 @@@ yy278
                                }
                        }
                }
- yy273:
-               YYDEBUG(273, *YYCURSOR);
+ yy279:
+               YYDEBUG(279, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 422 "Zend/zend_ini_scanner.l"
 -#line 472 "Zend/zend_ini_scanner.l"
++#line 469 "Zend/zend_ini_scanner.l"
                { /* FALSE value (when used outside option value/offset this causes parse error!)*/
        RETURN_TOKEN(BOOL_FALSE, "", 0);
  }
- #line 3852 "Zend/zend_ini_scanner.c"
- yy274:
-               YYDEBUG(274, *YYCURSOR);
 -#line 3962 "Zend/zend_ini_scanner.c"
++#line 3959 "Zend/zend_ini_scanner.c"
+ yy280:
+               YYDEBUG(280, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
@@@ -4016,8 -4125,66 +4122,66 @@@ yy284
                                }
                        }
                }
- yy279:
-               YYDEBUG(279, *YYCURSOR);
+ yy285:
+               YYDEBUG(285, *YYCURSOR);
+               yyaccept = 7;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yybm[0+yych] & 4) {
+                       goto yy263;
+               }
+               if (yych <= ')') {
+                       if (yych <= '\f') {
+                               if (yych <= 0x08) {
+                                       if (yych >= 0x01) goto yy262;
+                               } else {
+                                       if (yych <= '\t') goto yy287;
+                                       if (yych >= '\v') goto yy262;
+                               }
+                       } else {
+                               if (yych <= ' ') {
+                                       if (yych <= '\r') goto yy286;
+                                       if (yych <= 0x1F) goto yy262;
+                                       goto yy287;
+                               } else {
+                                       if (yych <= '"') goto yy286;
+                                       if (yych <= '%') goto yy262;
+                               }
+                       }
+               } else {
+                       if (yych <= ']') {
+                               if (yych <= ';') {
+                                       if (yych <= ':') goto yy262;
+                               } else {
+                                       if (yych != '=') goto yy262;
+                               }
+                       } else {
+                               if (yych <= '|') {
+                                       if (yych <= '^') goto yy286;
+                                       if (yych <= '{') goto yy262;
+                               } else {
+                                       if (yych != '~') goto yy262;
+                               }
+                       }
+               }
+ yy286:
+               YYDEBUG(286, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
 -#line 476 "Zend/zend_ini_scanner.l"
++#line 473 "Zend/zend_ini_scanner.l"
+               {
+       RETURN_TOKEN(NULL_NULL, "", 0);
+ }
 -#line 4177 "Zend/zend_ini_scanner.c"
++#line 4174 "Zend/zend_ini_scanner.c"
+ yy287:
+               YYDEBUG(287, *YYCURSOR);
+               ++YYCURSOR;
+               YYFILL(1);
+               yych = *YYCURSOR;
+               YYDEBUG(288, *YYCURSOR);
+               if (yych == '\t') goto yy287;
+               if (yych == ' ') goto yy287;
+               goto yy286;
+ yy289:
+               YYDEBUG(289, *YYCURSOR);
                yyaccept = 4;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= '=') {
@@@ -4223,32 -4390,32 +4387,32 @@@ yy293
                ++YYCURSOR;
                YYFILL(2);
                yych = *YYCURSOR;
- yy284:
-               YYDEBUG(284, *YYCURSOR);
+ yy294:
+               YYDEBUG(294, *YYCURSOR);
                if (yybm[0+yych] & 32) {
-                       goto yy283;
+                       goto yy293;
                }
-               if (yych >= '\r') goto yy287;
- yy285:
-               YYDEBUG(285, *YYCURSOR);
+               if (yych >= '\r') goto yy297;
+ yy295:
+               YYDEBUG(295, *YYCURSOR);
                ++YYCURSOR;
- yy286:
-               YYDEBUG(286, *YYCURSOR);
+ yy296:
+               YYDEBUG(296, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 582 "Zend/zend_ini_scanner.l"
 -#line 636 "Zend/zend_ini_scanner.l"
++#line 633 "Zend/zend_ini_scanner.l"
                { /* Comment */
        BEGIN(INITIAL);
        SCNG(lineno)++;
        return END_OF_LINE;
  }
- #line 4245 "Zend/zend_ini_scanner.c"
- yy287:
-               YYDEBUG(287, *YYCURSOR);
 -#line 4412 "Zend/zend_ini_scanner.c"
++#line 4409 "Zend/zend_ini_scanner.c"
+ yy297:
+               YYDEBUG(297, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '\n') goto yy285;
-               goto yy286;
- yy288:
-               YYDEBUG(288, *YYCURSOR);
+               if (yych == '\n') goto yy295;
+               goto yy296;
+ yy298:
+               YYDEBUG(298, *YYCURSOR);
                yyaccept = 3;
                YYMARKER = ++YYCURSOR;
                YYFILL(1);
@@@ -4451,15 -4618,15 +4615,15 @@@ yy306
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(297, *YYCURSOR);
+               YYDEBUG(307, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy296;
+                       goto yy306;
                }
-               YYDEBUG(298, *YYCURSOR);
+               YYDEBUG(308, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(299, *YYCURSOR);
+               YYDEBUG(309, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 365 "Zend/zend_ini_scanner.l"
 -#line 415 "Zend/zend_ini_scanner.l"
++#line 412 "Zend/zend_ini_scanner.l"
                { /* Raw string */
        /* Eat leading and trailing single quotes */
        if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') {
        }
        RETURN_TOKEN(TC_RAW, yytext, yyleng);
  }
- #line 4472 "Zend/zend_ini_scanner.c"
- yy300:
-               YYDEBUG(300, *YYCURSOR);
 -#line 4639 "Zend/zend_ini_scanner.c"
++#line 4636 "Zend/zend_ini_scanner.c"
+ yy310:
+               YYDEBUG(310, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(301, *YYCURSOR);
+               YYDEBUG(311, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 398 "Zend/zend_ini_scanner.l"
 -#line 448 "Zend/zend_ini_scanner.l"
++#line 445 "Zend/zend_ini_scanner.l"
                { /* Variable start */
        yy_push_state(ST_VARNAME TSRMLS_CC);
        return TC_DOLLAR_CURLY;
  }
- #line 4483 "Zend/zend_ini_scanner.c"
- yy302:
-               YYDEBUG(302, *YYCURSOR);
 -#line 4650 "Zend/zend_ini_scanner.c"
++#line 4647 "Zend/zend_ini_scanner.c"
+ yy312:
+               YYDEBUG(312, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
@@@ -4602,15 -4769,15 +4766,15 @@@ yyc_ST_VARNAME
                                }
                        }
                }
- yy311:
-               YYDEBUG(311, *YYCURSOR);
+ yy321:
+               YYDEBUG(321, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy318;
- yy312:
-               YYDEBUG(312, *YYCURSOR);
+               goto yy328;
+ yy322:
+               YYDEBUG(322, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 403 "Zend/zend_ini_scanner.l"
 -#line 453 "Zend/zend_ini_scanner.l"
++#line 450 "Zend/zend_ini_scanner.l"
                { /* Variable name */
        /* Eat leading whitespace */
        EAT_LEADING_WHITESPACE();
  
        RETURN_TOKEN(TC_VARNAME, yytext, yyleng);
  }
- #line 4624 "Zend/zend_ini_scanner.c"
- yy313:
-               YYDEBUG(313, *YYCURSOR);
 -#line 4791 "Zend/zend_ini_scanner.c"
++#line 4788 "Zend/zend_ini_scanner.c"
+ yy323:
+               YYDEBUG(323, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(314, *YYCURSOR);
+               YYDEBUG(324, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 600 "Zend/zend_ini_scanner.l"
 -#line 654 "Zend/zend_ini_scanner.l"
++#line 651 "Zend/zend_ini_scanner.l"
                {
        return 0;
  }
- #line 4634 "Zend/zend_ini_scanner.c"
- yy315:
-               YYDEBUG(315, *YYCURSOR);
 -#line 4801 "Zend/zend_ini_scanner.c"
++#line 4798 "Zend/zend_ini_scanner.c"
+ yy325:
+               YYDEBUG(325, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(316, *YYCURSOR);
+               YYDEBUG(326, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 413 "Zend/zend_ini_scanner.l"
 -#line 463 "Zend/zend_ini_scanner.l"
++#line 460 "Zend/zend_ini_scanner.l"
                { /* Variable end */
        yy_pop_state(TSRMLS_C);
        return '}';
  }
- #line 4645 "Zend/zend_ini_scanner.c"
- yy317:
-               YYDEBUG(317, *YYCURSOR);
 -#line 4812 "Zend/zend_ini_scanner.c"
++#line 4809 "Zend/zend_ini_scanner.c"
+ yy327:
+               YYDEBUG(327, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
- yy318:
-               YYDEBUG(318, *YYCURSOR);
+ yy328:
+               YYDEBUG(328, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy317;
+                       goto yy327;
                }
-               goto yy312;
+               goto yy322;
        }
  }
- #line 604 "Zend/zend_ini_scanner.l"
 -#line 658 "Zend/zend_ini_scanner.l"
++#line 655 "Zend/zend_ini_scanner.l"
  
  }
index 1ed800ce523baa677b725f8faf147c4fbe20ee4c,54c642c3abdd2d2432a1e9140af53fb54dfc89b9..7c9b382d500f8acc0e278368a29b47fa15f3c763
@@@ -131,13 -132,61 +132,59 @@@ ZEND_API zend_ini_scanner_globals ini_s
  /* Eat trailing whitespace */
  #define EAT_TRAILING_WHITESPACE()     EAT_TRAILING_WHITESPACE_EX('X')
  
 -#define zend_ini_copy_value(retval, str, len) {  \
 -      Z_STRVAL_P(retval) = zend_strndup(str, len); \
 -      Z_STRLEN_P(retval) = len;                    \
 -      Z_TYPE_P(retval) = IS_STRING;                \
 -}
 +#define zend_ini_copy_value(retval, str, len) \
 +      ZVAL_NEW_STR(retval, zend_string_init(str, len, 1))
 +
  
- #define RETURN_TOKEN(type, str, len) {           \
-       zend_ini_copy_value(ini_lval, str, len);     \
-       return type;                                 \
+ #define RETURN_TOKEN(type, str, len) {                       \
+       if (SCNG(scanner_mode) == ZEND_INI_SCANNER_TYPED) {      \
+               zend_ini_copy_typed_value(ini_lval, type, str, len); \
+       } else {                                                 \
+               zend_ini_copy_value(ini_lval, str, len);             \
+       }                                                        \
+       return type;                                             \
+ }
+ static inline int convert_to_number(zval *retval, const char *str, const int str_len)
+ {
+       zend_uchar type;
+       int overflow;
+       long lval;
+       double dval;
+       if ((type = is_numeric_string_ex(str, str_len, &lval, &dval, 0, &overflow)) != 0) {
+               if (type == IS_LONG) {
+                       ZVAL_LONG(retval, lval);
+                       return SUCCESS;
+               } else if (type == IS_DOUBLE && !overflow) {
+                       ZVAL_DOUBLE(retval, dval);
+                       return SUCCESS;
+               }
+       }
+       return FAILURE;
+ }
+ static void zend_ini_copy_typed_value(zval *retval, const int type, const char *str, int len)
+ {
+       switch (type) {
+               case BOOL_FALSE:
+               case BOOL_TRUE:
+                       ZVAL_BOOL(retval, type == BOOL_TRUE);
+                       break;
+               case NULL_NULL:
+                       ZVAL_NULL(retval);
+                       break;
+               case TC_NUMBER:
+                       if (convert_to_number(retval, str, len) == SUCCESS) {
+                               break;
+                       }
+                       /* intentional fall-through */
+               default:
+                       zend_ini_copy_value(retval, str, len);
+       }
  }
  
  static void _yy_push_state(int new_state TSRMLS_DC)
Simple merge