Introduce helper macro FC(x) for CG(file_context).x.
end_compilation() now handled by file_context_end().
While at it, dropped zval wrapper for ticcks.
Renamed compiler_context to oparray_context. Introduced per-file
file_context. Moved import tables into the file_context.
context_stack no longer exists, instead keeping backups of contexts
on C stack. Same for file contexts.
TODO: Move more things out of CG into file_context. There should be
a number of other things that we should not try to reuse in nested
compilations.
* The class names false, true and null are now reserved.
* The code dealing with reserved class names is now decoupled
from scalar type hint handling. It also includes self, parent,
and static, which are class names which were already reserved
previously.
* Reuse existing messages for reserved class names.
Fallout: class_alias() can no longer alias self, parent and static.
However this never really worked in the first place, as the test
which was testing this shows.
C:\> php -r "trait A { } trait A { }"
Will now properly print "Cannot redeclare trait A" instead of "Cannot redeclare class A" to make error messages a tiny bit clearer. Admittedly, a better solution can most likely be made by actually telling what the colliding object is a type of.
Internally this adds a new function:
zend_get_object_type()
ZEND_ADD_STRING/VAR/CHAR are replaced with ZEND_ROPE_INTI, ZEND_ROPE_ADD, ZEND_ROPE_END.
Instead of reallocation and copying string on each ZEND_ADD_STRING/VAR/CAHR, collect all the strings and then allocate and construct the resulting string once.
* 'scalar_type_hints_v5' of github.com:ircmaxell/php-src: (54 commits)
Add check for maintaining reference all the way through both type and return values
Reduce the number of times that the zval needs to be separated in return type checking to those that are necessary
Add test to ensure namespaced code can't use scalar types as class names
Disallow relative namespace type declarations
Add support and tests for null constant default values. Refactor complex conditionals into an extracted function for clarity and code-reuse
Refactor as to not use call info, but add the flag to the op_array.
Fix severity issues with callbacks, start work porting ZEND_STRLEN opcode to work with strict mode, more refactoring to come
Fix C89 compatibility by moving a misplaced if statement
Refactor gotos into more elaborate ifs to eliminate goto failure
Fix return type separation with references. It now includes a check in the opcode handler and properly separates the value in both cases
Add error case with invalid type declaration default value
Add tests for using constants as defaults with scalar type declarations
Refactor error messages to only append defined in the event of rendering as a fatal error. Fix relative typehints to not work
Revert gd and mysqli to former calls for arg count errors. Fix first identified issues with zend_compile.c from nikic. Add tests for generator returns prior to first yield
Style cleanup, as well as fixing bug with missing argument for WRONG_PARAM_COUNT_WITH_RETVAL
Clean up API renames for zend_wrong_param_count to maintain BC, introducing a zend_wrong_param_count_ex() function when you know strict value
Fix executor issue with ignoring strict types, which cleans up a bunch of errors. Additionally fix the expected error of 2 unrelated tests that was caused by a change to the core error messages
Fix more tests, improve error messages in failure output for thrown exception
Refactor error implementation significantly to centralize error mode behavior. Add zend_internal_type_error() function
Refactor declare placement detection, allow encoding declares before type declares
...
```
use function N\S { foo, bar, etc };
use const N\S { FOO, BAR, ETC };
```
Related tests:
```
make test -j4 TESTS="-m Zend/tests/ns_0{88..92}*.phpt"
```
All namespace tests:
```
make test -j4 TESTS="Zend/tests/ns_*.phpt"
```