Commit graph

1657 commits

Author SHA1 Message Date
Dmitry Stogov
7dfb4f6b38 Implemented builtin instruction for type check functions - is_*() 2014-07-14 10:33:11 +04:00
Nikita Popov
47f0717a69 Rename params -> args 2014-07-13 13:11:55 +02:00
Nikita Popov
484ad86958 Moar removal 2014-07-12 19:20:21 +02:00
Nikita Popov
f9ed83469c Remove more dead code 2014-07-12 19:18:09 +02:00
Nikita Popov
b934dfe088 Remove dead code 2014-07-12 19:10:19 +02:00
Nikita Popov
856e2a05b6 Fix + improve try/catch 2014-07-12 19:08:09 +02:00
Nikita Popov
069da161cf approx correct linenos in errors 2014-07-12 17:10:10 +02:00
Nikita Popov
c58079b4fd Port static vars
Need to figure out the constant expr stuff
2014-07-12 17:00:53 +02:00
Nikita Popov
86a1cd0d82 Verious fixes 2014-07-12 16:25:47 +02:00
Nikita Popov
8577f58e52 Store (bad) estimate of lineno with ast
Currently not used yet
2014-07-12 14:03:42 +02:00
Nikita Popov
e367e68111 Port try/catch
Down to 50 failing Zend tests
2014-07-12 13:50:58 +02:00
Dmitry Stogov
6c8db864e0 Implemented builtin instruction for strlen() 2014-07-11 18:52:27 +04:00
Nikita Popov
32ca08f249 Fix leak 2014-07-11 15:33:39 +02:00
Nikita Popov
dde9faee2e Port switch 2014-07-11 15:31:47 +02:00
Nikita Popov
f12c1482a3 Port foreach 2014-07-11 12:16:21 +02:00
Dmitry Stogov
de306e7088 Implement call_user_func() and call_user_func_array() using special opcodes.
In some rare cases it leads to insignificant changes in error messages.
2014-07-11 00:32:18 +04:00
Nikita Popov
4215969904 Port if (partial) 2014-07-10 16:38:04 +02:00
Nikita Popov
3be63fca48 Port for 2014-07-10 15:51:47 +02:00
Nikita Popov
1738ee7e5a Port do/while 2014-07-10 14:46:22 +02:00
Nikita Popov
c7656c06cc Port while
Note: From here on everything is broken
2014-07-10 14:35:59 +02:00
Nikita Popov
68777b72b2 Expr stmts go through ast 2014-07-10 00:04:27 +02:00
Nikita Popov
1de1bc96a5 Make statement asty 2014-07-10 00:00:48 +02:00
Nikita Popov
117714d122 Port goto label 2014-07-09 23:46:22 +02:00
Nikita Popov
d14b763bb9 Make unticked_statement an ast node (usually NULL) 2014-07-09 23:39:21 +02:00
Nikita Popov
fc541418f2 Port goto 2014-07-09 23:11:32 +02:00
Nikita Popov
cc8a6fa91e Port break/continue 2014-07-09 23:05:21 +02:00
Nikita Popov
5bf0c28fe3 Port throw 2014-07-09 22:48:42 +02:00
Dmitry Stogov
b36aaea6ed ZEND_SEND_VAR and ZEND_SEND_VAL specialization 2014-07-08 02:13:53 +04:00
Nikita Popov
289265402a Port echo 2014-07-07 21:14:14 +02:00
Nikita Popov
36c3cf3198 Port return statement 2014-07-07 21:06:02 +02:00
Nikita Popov
2d4c962c61 Fix ZTS build 2014-07-05 14:12:20 +02:00
Nikita Popov
77fddc0ca2 Use zend_string* in some places 2014-07-05 00:11:00 +02:00
Nikita Popov
17c2d16d79 Refactor class name resolution as well 2014-07-04 23:45:20 +02:00
Nikita Popov
b3336270f6 Hack around global leak for now 2014-07-04 23:15:31 +02:00
Xinchen Hui
1d1226afa2 Suppress warning "cast from pointer to integer of different size" 2014-07-01 10:36:19 +08:00
Dmitry Stogov
b7715c7e8a Refactored parameter passing mechanism.
In PHP-5.6 and below each argument passed to user function was copies on VM stack twice.
Now we always have ZEND_INIT_FCALL (or simular) opcode that pushes "call frame" on top of VM stack.
"Call frame" is actually the same zend_execute_data structure.
All the following ZEND_SEND instructions push arguments on top of the stack in a way that they directly comes into corresponding CV variables of the called frame. Extra arguments are copied at the end of stack frame (after all CV and TMP variables) on function enterance.

There are two minor incompatibilities:
1) It's not allowed to decalre functions redefining arguments e.g. "function foo($a,$a) {}".
2) func_get_arg() and func_get args() return the current value of argument and not the original value that was sent.
2014-06-30 15:43:45 +04:00
Nikita Popov
fb98dd31a0 Some refactoring of fn/const resolution 2014-06-28 22:27:06 +02:00
Nikita Popov
e198132542 Drop addition of weird \ prefix for FQ consts
Also fixes a resolution bug
2014-06-28 18:24:59 +02:00
Nikita Popov
111ad71d38 Rename ZEND_CONST to ZEND_AST_ZVAL 2014-06-28 18:03:26 +02:00
Nikita Popov
64dab4b914 Drop dead code 2014-06-26 22:17:19 +02:00
Nikita Popov
0e44f4c583 Remove obseleted grammar productions 2014-06-26 22:09:05 +02:00
Nikita Popov
dd60c8e0f1 Reuse expr for static_scalar 2014-06-26 22:02:54 +02:00
Nikita Popov
dd60b9bb91 Handle ::class in const expr via ast as well 2014-06-26 21:44:46 +02:00
Nikita Popov
080e8bffa5 Compile const refs to CONST 2014-06-26 16:56:50 +02:00
Nikita Popov
b83c70416b Compile class const refs to CONST zval 2014-06-26 16:35:30 +02:00
Nikita Popov
08c4e01a1b Add compilation state for static scalars 2014-06-26 16:03:15 +02:00
Nikita Popov
1b84b87e78 Const eval unary pm (as previously) 2014-06-26 12:43:20 +02:00
Nikita Popov
e26c6d663a Implement constant expression folding as a separate pass 2014-06-23 21:59:14 +02:00
Nikita Popov
0644fbccf7 Implement CT eval of binary expressions
I totally hate this approach. It's ugly and I don't think I can
share code with the static scalar evaluation. Maybe I should use
the approach that static scalars use instead?
2014-06-22 15:57:44 +02:00
Nikita Popov
90d36554e2 Support string interpolation 2014-06-21 20:06:46 +02:00