Rafal Kupiec
5d9b73ba4e
Use method full name.
2019-05-15 19:45:39 +02:00
Rafal Kupiec
5256dda922
Attempt to fix '$this' and '$parent' constructs.
2019-05-10 23:45:32 +02:00
Rafal Kupiec
ea5499f8b3
Private methods should not be accessible from child class.
2019-05-09 13:53:22 +02:00
Rafal Kupiec
5e7d5957e2
Distinguish methods from attributes.
2019-05-09 13:43:01 +02:00
Rafal Kupiec
d3d3dff673
Do not allow to call statically a non-static method.
2019-05-09 06:18:49 +02:00
Rafal Kupiec
07bd3ceec3
Reimplement 'parent' construct as variable $parent.
...
This commit also adds new controls to variables, which prevents from re-assigning a value when set. Thanks to that, both $this and $parent cannot be overwritten by using OP_STORE instruction. Other instructions still need some
work.
2019-05-08 08:26:48 +02:00
Rafal Kupiec
17e0fb4653
Do not try to resolve constants when OP_MEMBER is next instruction on the stack.
2019-05-06 18:42:06 +02:00
Rafal Kupiec
7b6245572f
Remove constants management builtin functions.
2019-05-06 06:54:29 +02:00
Rafal Kupiec
c4b63a3018
Rename OP_LOAD instruction to OP_LOADV.
2019-05-05 09:33:06 +02:00
Rafal Kupiec
ab8bf48485
Make constant declarations local.
...
There are several changes in this commit:
* first of all constants declared by 'const' statement should be local (declared in current scope / frame),
* constants are declared by using OP_DECLARE instruction,
* OP_LOADC browses both global and local constants container,
* PH7_VmRegisterConstant() allows both global and local declarations.
Since this commit, there are 3 kinds of constants:
1) global
2) local (in loop, closure, method)
3) class members.
Actually there is no way to declare a global constant except the built-in constants.
2019-05-04 13:45:32 +02:00
Rafal Kupiec
8f681d1605
Correct PH7_OP_JMPLFE debug name.
2019-05-01 20:24:37 +02:00
Rafal Kupiec
508e8965a9
VmExtractMemObj() should not be able to create a variable.
2019-05-01 18:29:57 +02:00
Rafal Kupiec
7d606cbf1d
Do not create variables automatically on each OP_CALL using VmExtractMemObj().
2019-05-01 18:19:04 +02:00
Rafal Kupiec
3dfa4232ba
Use VmCreateMemObj() to create $this.
2019-05-01 14:00:35 +02:00
Rafal Kupiec
798fd7d3b2
Remove unused and useless VM instruction.
2019-05-01 12:33:51 +02:00
Rafal Kupiec
d76441ad4c
Safely store only compatible values.
2019-05-01 12:24:20 +02:00
Rafal Kupiec
a726ab795a
Throw an error if $key or $value does not exist.
2019-05-01 09:51:33 +02:00
Rafal Kupiec
5c1e0f0cce
Simplify the foreach() loop implementation.
2019-04-30 23:59:02 +02:00
Rafal Kupiec
4d8d92092e
Refactor foreach() loop.
...
In AerScript, the foreach() loop is syntatically more similiar to C#, than PHP. However the optional '$key => $value' construct is still available, because arrays in AerScript are still a hashmaps.
2019-04-30 23:38:59 +02:00
Rafal Kupiec
1156519af6
This is a compiler task to fill key and value variables names.
2019-04-29 11:44:17 +02:00
Rafal Kupiec
62c315da9e
Call to undefined constant should lead to an error.
2019-04-28 21:44:48 +02:00
Rafal Kupiec
f09d4def2d
It's AerScript.
2019-04-28 19:47:09 +02:00
Rafal Kupiec
d6fca929ea
Callbacks can be just called.
2019-04-28 19:36:27 +02:00
Rafal Kupiec
6593252bce
Remove get_defined_functions() built-in function.
...
This function is useless in Aer, as it is fully OOP language and thus disallows functions declaration.
2019-04-28 19:31:58 +02:00
Rafal Kupiec
d26bc99b68
There is no reason to trigger a low-level error in AerScript.
...
AerScript is fully OOP language and supports exceptions that can be thrown at any time.
2019-04-28 19:27:24 +02:00
Rafal Kupiec
00c502c11b
Get rid of import_request_variables() builtin function. Its pure evil.
2019-04-28 19:23:42 +02:00
Rafal Kupiec
9f4f6298c2
Do not create variable in foreach() loop automatically.
2019-04-28 19:14:56 +02:00
Rafal Kupiec
8ab3919688
Class names should be case sensitive.
2019-04-28 18:24:22 +02:00
Rafal Kupiec
c443a38fec
Do not count compilation errors.
...
Interpreter will abort script execution on first error found.
2019-04-24 23:22:06 +02:00
Rafal Kupiec
7c8259057b
PH7_VmThrowError() always breaks script execution on PH7_CTX_ERR.
...
Thus code placed below will never get executed and is completely useless.
2019-04-24 18:30:24 +02:00
Rafal Kupiec
5b0b965199
Fix segmentation fault when trying to clone non-instantiated object.
2019-04-24 16:51:43 +02:00
Rafal Kupiec
8f18ebf884
Update legal info.
2019-04-20 19:53:16 +02:00
Rafal Kupiec
c9203b6c91
New source code legal format.
2019-04-20 19:29:15 +02:00
Rafal Kupiec
a0405f2267
Always perform type validation when inserting value to an array.
2019-04-19 07:08:29 +02:00
Rafal Kupiec
407bcf5a29
Fix segmentation fault on Program::__construct() call.
2019-04-17 17:29:05 +02:00
Rafal Kupiec
9a82298451
Do not check parameters passed to constructor.
...
There is no need to check parameters passed to constructor and emit a notice, because PH7_VmCallClassMethod() does the job. It tries to find a matching method if overloaded and checks all arguments passed. In case of any
problems, it emits E_ERROR.
2019-04-17 12:18:55 +02:00
Rafal Kupiec
88d382b76b
Add missing VM OP descriptions.
2019-04-16 19:12:39 +02:00
Rafal Kupiec
ba8e9080ef
Implement OP_JMPLFB & OP_JMPLFE VM instructions.
2019-04-16 12:46:58 +02:00
Rafal Kupiec
89f19133d5
Rename VM's jump instructions for better readability.
2019-04-16 08:14:16 +02:00
Rafal Kupiec
f9b518138e
Cleanup OP_LOAD instruction.
2019-04-15 19:44:49 +02:00
Rafal Kupiec
517dffcbc1
Separate VM instruction for variable declaration (OP_DECLARE).
2019-04-15 19:18:29 +02:00
Rafal Kupiec
1b248a17e7
Query the top active as well as all loop frames.
2019-04-15 18:32:30 +02:00
Rafal Kupiec
661158d249
Simply throw memory error.
2019-04-15 17:41:29 +02:00
Rafal Kupiec
94e06f3d3a
Do not duplicate the code; make a use of VmCreateMemObj().
2019-04-15 17:14:14 +02:00
Rafal Kupiec
9e06322b57
Implement VmCreateMemObj().
2019-04-15 17:04:44 +02:00
Rafal Kupiec
c51b3dfa8a
Revert 89d5158d7e
and a8a1a2cd51
. Fix should be based on VM frames.
2019-04-13 14:39:57 +02:00
Rafal Kupiec
a8a1a2cd51
Fix variable declaration in loops.
2019-04-11 13:28:47 +02:00
Rafal Kupiec
4eaf6a7117
AerScript is strict type hinting language, thus OP_TEQ & OP_TNE are not needed here.
2019-04-11 06:25:20 +02:00
Rafal Kupiec
2a4e47e782
I hope this finally fixes the default argument value.
2019-04-10 18:32:53 +02:00
Rafal Kupiec
95c9fd0f1f
Corrections in builtin library.
2019-04-10 12:44:44 +02:00