Rafal Kupiec
28e18bcb4b
Attempt to fix attributes lookup and their visibility.
2019-05-29 10:45:30 +02:00
Rafal Kupiec
2d50a64cac
AerScript supports multiple inheritance, thus it needs to iterate through whole list of derived classes.
2019-05-29 08:52:43 +02:00
Rafal Kupiec
4d1c246a65
Attempt to fix methods visibility mechanism.
2019-05-29 08:17:10 +02:00
Rafal Kupiec
1f5afc9d51
Reverse the logic. It does not seem to work actually.
2019-05-29 08:10:34 +02:00
Rafal Kupiec
675f3596a1
Properly look for method in all classes.
2019-05-29 06:12:49 +02:00
Rafal Kupiec
b319e11c09
Fix build.
2019-05-28 11:55:17 +02:00
Rafal Kupiec
5c176207e1
Set base class only when $base called.
2019-05-28 11:51:13 +02:00
Rafal Kupiec
5cc4a5e48d
Access privileges to methods should be done in OP_MEMBER.
2019-05-23 08:27:56 +02:00
Rafal Kupiec
5b2f300fe4
Implement '$base' construction.
2019-05-21 21:41:16 +02:00
Rafal Kupiec
ddd46a4e80
Quick small cleanup.
2019-05-21 19:18:52 +02:00
Rafal Kupiec
3cca5faa76
Store variable type in dedicated field.
2019-05-21 14:49:36 +02:00
Rafal Kupiec
f2116a6461
Always use HTTPS when possible.
2019-05-15 20:02:39 +02:00
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
Rafal Kupiec
d8f9db8f9a
Proper implementation of is_callback() & is_callable(). First one only performs a check if variable type is callback, while the second checks if function exists and if can be called.
2019-04-10 09:45:00 +02:00
Rafal Kupiec
65e38a364d
Do not try to call an array.
2019-04-10 09:26:06 +02:00
Rafal Kupiec
d6434ba19e
Try to report some line.
2019-04-10 09:18:26 +02:00
Rafal Kupiec
447910ce2e
Fix callbacks.
2019-04-10 09:08:10 +02:00
Rafal Kupiec
77795bea4c
Do not check for return value on OP_DONE.
2019-04-08 13:51:54 +02:00
Rafal Kupiec
598dc9ce51
At least try to call callback and do not check for return value on OP_DONE.
2019-04-08 13:49:12 +02:00
Rafal Kupiec
7443663dd8
Fixes in PH7_OP_LOAD_IDX instruction.
2019-04-06 09:36:08 +02:00
Rafal Kupiec
f6e2b549b6
Access to undefined array index should be reported as error.
2019-04-06 09:21:09 +02:00
Rafal Kupiec
a501dea661
Fix a typo.
2019-04-05 20:17:44 +02:00
Rafal Kupiec
25001ae746
This should be an error, really.
2019-04-05 20:14:08 +02:00
Rafal Kupiec
2de455aa01
Fix formatting.
2019-04-05 20:12:55 +02:00
Rafal Kupiec
95fba30f9b
Better way to check arguments compatibility.
2019-04-05 20:07:56 +02:00
Rafal Kupiec
a06573408e
Better way to check arguments compatibility.
2019-04-05 19:59:15 +02:00
Rafal Kupiec
5d369ba851
Fix static variables. Now access to non-initialized arrays member does not result in segmentation fault.
2019-04-04 18:18:11 +02:00
Rafal Kupiec
9880f9963e
Fix static and non-static class attributes. Now access to non-initialized arrays member does not result in segmentation fault.
2019-04-04 18:15:41 +02:00
Rafal Kupiec
7ec7ade171
Return a character from string if it is not ar array.
2019-04-04 11:51:25 +02:00
Rafal Kupiec
01c210984e
Further optimisations.
2019-04-03 13:57:29 +02:00
Rafal Kupiec
5eeceb6927
Try to optimize the code a bit.
2019-04-03 13:43:31 +02:00
Rafal Kupiec
4467ca6dce
Attempt to fix static variables.
2019-04-03 09:02:49 +02:00
Rafal Kupiec
5463da88b0
Attempt to fix non-static class attributes.
2019-04-03 08:32:59 +02:00
Rafal Kupiec
d4d00db458
Attempt to fix static class attributes.
2019-04-03 07:00:17 +02:00
Rafal Kupiec
8133c3dd6f
Make a use of PH7_MemObjSafeStore().
2019-04-03 06:37:35 +02:00
Rafal Kupiec
fb50d8de25
Correct the comment.
2019-04-02 20:10:58 +02:00
Rafal Kupiec
803516cf84
This will never happen.
2019-04-02 15:12:22 +02:00
Rafal Kupiec
c6397d2e15
Use P2 to avoid strict typehinting.
2019-04-02 09:55:01 +02:00
Rafal Kupiec
253fe327ef
Automatically fallback mixed variable to void (NULL).
2019-03-31 14:04:19 +02:00
Rafal Kupiec
3f205c19ce
Get rid of dirty references. Return a reference & pass-by reference are still working.
2019-03-29 22:55:49 +01:00
Rafal Kupiec
f5960d57b1
Allow static class attributes to store compatible data types only.
2019-03-29 19:56:10 +01:00
Rafal Kupiec
01f1932230
Respect the class attribute data type.
2019-03-29 09:21:58 +01:00
Rafal Kupiec
47cca096bc
Fix segmentation fault when trying to access array element.
2019-03-29 09:09:51 +01:00
Rafal Kupiec
140bd35f93
Set proper type for all class attributes.
2019-03-29 09:00:55 +01:00
Rafal Kupiec
a013cee2d1
Properly serve the arrays.
2019-03-28 19:44:03 +01:00
Rafal Kupiec
e4dc9f641e
Invert the logic. Variable needs to be declared.
2019-03-28 19:43:00 +01:00
Rafal Kupiec
9303517b9e
Fix return by reference.
2019-03-26 17:40:28 +01:00
Rafal Kupiec
04c56c9041
Multidimensional array of the same type should not be marked as mixed.
2019-03-25 09:37:40 +01:00
Rafal Kupiec
fa295b9437
It's callback, not callable.
2019-03-24 09:31:19 +01:00
Rafal Kupiec
4f29507c0d
The isset() function always results in true, thus it is useless. If passed as argument variable is not set, the interpreter will throw an error.
2019-03-23 19:51:19 +01:00
Rafal Kupiec
9d7a542aea
The is_null() is useless now, as it always returns FALSE.
2019-03-22 19:29:50 +01:00