Rafal Kupiec
0a6b5a6f42
The 'self' and 'parent' keywords should be resolved at compile time.
2019-05-06 11:38:32 +02:00
Rafal Kupiec
c4b63a3018
Rename OP_LOAD instruction to OP_LOADV.
2019-05-05 09:33:06 +02:00
Rafal Kupiec
23900f2aed
Remove unused compiler function - PH7_CompileLangConstruct().
...
In AerScript, there are no such language constructs, that have syntax similiar to functions. If so, it is just a builtin function.
2019-05-04 18:53:11 +02:00
Rafal Kupiec
b36510943d
Implement 'define' statement for defining constants globally.
2019-05-04 17:08:09 +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
e6b7f1be2c
Always emit OP_JMPLFE as goto can be used inside a loop and frame has to be left.
2019-05-03 10:55:57 +02:00
Rafal Kupiec
03fc167be1
Proper implementation of so hated 'goto' statement.
2019-05-03 10:35:54 +02:00
Rafal Kupiec
2f3ce65289
Correct comment to if/else statements.
2019-05-02 19:03:47 +02:00
Rafal Kupiec
5a0e4667fa
More readable error message.
2019-05-01 20:09:55 +02:00
Rafal Kupiec
7c37451520
Namespaces are not supported and broken, but compile them properly.
2019-05-01 13:49:07 +02:00
Rafal Kupiec
1829eff323
Fix interface and class compilation.
2019-05-01 13:37:14 +02:00
Rafal Kupiec
1d6822c1e2
Allow key and value declaration inside foreach() loop.
2019-05-01 11:38:28 +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
d72774f0f4
Namespaces in AerScript do not support aliases.
2019-04-25 23:31:48 +02:00
Rafal Kupiec
407fb09e8f
Throw an error only if this is not the end of tokens stream.
2019-04-25 19:24:53 +02:00
Rafal Kupiec
cb455c3c73
Unify compiler OOM error messages.
2019-04-24 23:52:48 +02:00
Rafal Kupiec
1c5982e764
There is no reason to use a loop here.
2019-04-24 23:45:46 +02:00
Rafal Kupiec
3be46532dd
Remove unused PH7_ErrorRecover() function.
2019-04-24 23:38:45 +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
48a38dc1af
PH7_GenCompileError() always breaks script execution on E_ERROR.
...
Thus code placed below will never get executed and is completely useless.
2019-04-24 23:12:59 +02:00
Rafal Kupiec
555234e381
Get rid of variable variables. AerScript does not support it.
2019-04-22 12:01:11 +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
929d7b83fe
Cleanup unused functions.
2019-04-17 18:40:14 +02:00
Rafal Kupiec
bd22425b46
Do not allow 'continue' statement in a switch case.
...
Important rule while using continue statement is that, We can use continue
statement only within the loops. Switch case is conditional block not a loop
so we cannot execute the continue statement inside switch.
2019-04-17 11:13:29 +02:00
Rafal Kupiec
395f6c446c
Get rid of known from PHP 'elseif' construction.
2019-04-17 07:55:32 +02:00
Piotr Likoski
6b18e204cd
Always pop the l-value on variable declaration.
...
Otherwise, it might lead to unexpected behaviour including protected memory access and segmentation fault.
This finally fixes #49 .
2019-04-16 20:15:38 +02:00
Rafal Kupiec
07e3a09999
Enter and leave a loop frame on every iteration.
...
This fixes strict variable declaration inside loops.
2019-04-16 13:51:58 +02:00
Rafal Kupiec
ef4f994e8b
Do not allow 'break' statement to take a parameter. This is strange construction introduced in PHP.
2019-04-16 12:34:53 +02:00
Rafal Kupiec
5fddbf8737
Do not allow 'continue' statement to take a parameter. This is strange construction introduced in PHP.
2019-04-16 12:32:01 +02:00
Rafal Kupiec
89f19133d5
Rename VM's jump instructions for better readability.
2019-04-16 08:14:16 +02:00
Rafal Kupiec
eb80dced3e
Correct comment.
2019-04-15 20:00:54 +02:00
Rafal Kupiec
517dffcbc1
Separate VM instruction for variable declaration (OP_DECLARE).
2019-04-15 19:18:29 +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
89d5158d7e
Fix build.
2019-04-11 13:31:17 +02:00
Rafal Kupiec
a8a1a2cd51
Fix variable declaration in loops.
2019-04-11 13:28:47 +02:00
Rafal Kupiec
2a4e47e782
I hope this finally fixes the default argument value.
2019-04-10 18:32:53 +02:00
Rafal Kupiec
527a6ad689
Mark argument as well as object, when class name is supplied.
2019-04-10 13:58:24 +02:00
Rafal Kupiec
77ebce7acf
Parser takes care about nested arrays.
2019-04-10 06:18:49 +02:00
Rafal Kupiec
72dc44c152
Another fix for OP_DONE instruction.
2019-04-05 07:45:53 +02:00
Rafal Kupiec
74f954b852
Fix OP_DONE instruction.
2019-04-05 07:01:07 +02:00
Rafal Kupiec
c6397d2e15
Use P2 to avoid strict typehinting.
2019-04-02 09:55:01 +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
140bd35f93
Set proper type for all class attributes.
2019-03-29 09:00:55 +01:00
Rafal Kupiec
a87471e1e3
The empty() function is useless in Aer.
2019-03-24 09:22:10 +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
65b178932a
Get rid of array() & list() for the new syntax.
2019-03-22 15:54:46 +01:00
Rafal Kupiec
075d2f0963
Temporary workaround to allow the use of curly braces and array() syntax concurrently.
2019-03-21 17:30:08 +01:00
Rafal Kupiec
b60c1de4cf
Abort on SXERR_ABORT, #47 .
2019-03-19 10:42:53 +01:00