137 Commits

Author SHA1 Message Date
a2fb0b9ae5
Get rid of 'parent' constant. Use variable instead. 2019-05-08 08:38:40 +02:00
d3ae1c1bf4
Only identifiers should be allowed as constant name. 2019-05-06 18:38:56 +02:00
0a6b5a6f42
The 'self' and 'parent' keywords should be resolved at compile time. 2019-05-06 11:38:32 +02:00
c4b63a3018
Rename OP_LOAD instruction to OP_LOADV. 2019-05-05 09:33:06 +02:00
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
b36510943d
Implement 'define' statement for defining constants globally. 2019-05-04 17:08:09 +02:00
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
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
03fc167be1
Proper implementation of so hated 'goto' statement. 2019-05-03 10:35:54 +02:00
2f3ce65289
Correct comment to if/else statements. 2019-05-02 19:03:47 +02:00
5a0e4667fa
More readable error message. 2019-05-01 20:09:55 +02:00
7c37451520
Namespaces are not supported and broken, but compile them properly. 2019-05-01 13:49:07 +02:00
1829eff323
Fix interface and class compilation. 2019-05-01 13:37:14 +02:00
1d6822c1e2
Allow key and value declaration inside foreach() loop. 2019-05-01 11:38:28 +02:00
5c1e0f0cce
Simplify the foreach() loop implementation. 2019-04-30 23:59:02 +02:00
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
d72774f0f4
Namespaces in AerScript do not support aliases. 2019-04-25 23:31:48 +02:00
407fb09e8f
Throw an error only if this is not the end of tokens stream. 2019-04-25 19:24:53 +02:00
cb455c3c73
Unify compiler OOM error messages. 2019-04-24 23:52:48 +02:00
1c5982e764
There is no reason to use a loop here. 2019-04-24 23:45:46 +02:00
3be46532dd
Remove unused PH7_ErrorRecover() function. 2019-04-24 23:38:45 +02:00
c443a38fec
Do not count compilation errors.
Interpreter will abort script execution on first error found.
2019-04-24 23:22:06 +02:00
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
555234e381
Get rid of variable variables. AerScript does not support it. 2019-04-22 12:01:11 +02:00
8f18ebf884
Update legal info. 2019-04-20 19:53:16 +02:00
c9203b6c91
New source code legal format. 2019-04-20 19:29:15 +02:00
929d7b83fe
Cleanup unused functions. 2019-04-17 18:40:14 +02:00
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
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 .
2019-04-16 20:15:38 +02:00
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
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
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
89f19133d5
Rename VM's jump instructions for better readability. 2019-04-16 08:14:16 +02:00
eb80dced3e
Correct comment. 2019-04-15 20:00:54 +02:00
517dffcbc1
Separate VM instruction for variable declaration (OP_DECLARE). 2019-04-15 19:18:29 +02:00
c51b3dfa8a
Revert 89d5158d7e and a8a1a2cd51. Fix should be based on VM frames. 2019-04-13 14:39:57 +02:00
89d5158d7e
Fix build. 2019-04-11 13:31:17 +02:00
a8a1a2cd51
Fix variable declaration in loops. 2019-04-11 13:28:47 +02:00
2a4e47e782
I hope this finally fixes the default argument value. 2019-04-10 18:32:53 +02:00
527a6ad689
Mark argument as well as object, when class name is supplied. 2019-04-10 13:58:24 +02:00
77ebce7acf
Parser takes care about nested arrays. 2019-04-10 06:18:49 +02:00
72dc44c152
Another fix for OP_DONE instruction. 2019-04-05 07:45:53 +02:00
74f954b852
Fix OP_DONE instruction. 2019-04-05 07:01:07 +02:00
c6397d2e15
Use P2 to avoid strict typehinting. 2019-04-02 09:55:01 +02:00
3f205c19ce
Get rid of dirty references. Return a reference & pass-by reference are still working. 2019-03-29 22:55:49 +01:00
140bd35f93
Set proper type for all class attributes. 2019-03-29 09:00:55 +01:00
a87471e1e3
The empty() function is useless in Aer. 2019-03-24 09:22:10 +01:00
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
65b178932a
Get rid of array() & list() for the new syntax. 2019-03-22 15:54:46 +01:00