Commit Graph

139 Commits

Author SHA1 Message Date
Rafal Kupiec e8c675bd8e
Store a pointer to class container to reduce memory usage.
The build was successful. Details
2019-05-16 15:41:37 +02:00
Rafal Kupiec 7203492763
Store a class name in each attribute.
The build was successful. Details
2019-05-16 13:25:06 +02:00
Rafal Kupiec a2fb0b9ae5
Get rid of 'parent' constant. Use variable instead.
The build was successful. Details
2019-05-08 08:38:40 +02:00
Rafal Kupiec d3ae1c1bf4
Only identifiers should be allowed as constant name.
The build was successful. Details
2019-05-06 18:38:56 +02:00
Rafal Kupiec 0a6b5a6f42
The 'self' and 'parent' keywords should be resolved at compile time.
The build was successful. Details
2019-05-06 11:38:32 +02:00
Rafal Kupiec c4b63a3018
Rename OP_LOAD instruction to OP_LOADV.
The build was successful. Details
2019-05-05 09:33:06 +02:00
Rafal Kupiec 23900f2aed
Remove unused compiler function - PH7_CompileLangConstruct().
The build was successful. Details
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.
The build was successful. Details
2019-05-04 17:08:09 +02:00
Rafal Kupiec ab8bf48485
Make constant declarations local.
The build was successful. Details
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.
The build was successful. Details
2019-05-03 10:55:57 +02:00
Rafal Kupiec 03fc167be1
Proper implementation of so hated 'goto' statement.
The build was successful. Details
2019-05-03 10:35:54 +02:00
Rafal Kupiec 2f3ce65289
Correct comment to if/else statements.
The build was successful. Details
2019-05-02 19:03:47 +02:00
Rafal Kupiec 5a0e4667fa
More readable error message.
The build was successful. Details
2019-05-01 20:09:55 +02:00
Rafal Kupiec 7c37451520
Namespaces are not supported and broken, but compile them properly.
The build was successful. Details
2019-05-01 13:49:07 +02:00
Rafal Kupiec 1829eff323
Fix interface and class compilation.
The build was successful. Details
2019-05-01 13:37:14 +02:00
Rafal Kupiec 1d6822c1e2
Allow key and value declaration inside foreach() loop.
The build was successful. Details
2019-05-01 11:38:28 +02:00
Rafal Kupiec 5c1e0f0cce
Simplify the foreach() loop implementation.
The build was successful. Details
2019-04-30 23:59:02 +02:00
Rafal Kupiec 4d8d92092e
Refactor foreach() loop.
The build was successful. Details
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.
The build was successful. Details
2019-04-25 23:31:48 +02:00
Rafal Kupiec 407fb09e8f
Throw an error only if this is not the end of tokens stream.
The build was successful. Details
2019-04-25 19:24:53 +02:00
Rafal Kupiec cb455c3c73
Unify compiler OOM error messages.
The build was successful. Details
2019-04-24 23:52:48 +02:00
Rafal Kupiec 1c5982e764
There is no reason to use a loop here.
The build was successful. Details
2019-04-24 23:45:46 +02:00
Rafal Kupiec 3be46532dd
Remove unused PH7_ErrorRecover() function.
The build was successful. Details
2019-04-24 23:38:45 +02:00
Rafal Kupiec c443a38fec
Do not count compilation errors.
The build was successful. Details
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.
The build was successful. Details
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.
The build was successful. Details
2019-04-22 12:01:11 +02:00
Rafal Kupiec 8f18ebf884
Update legal info.
The build was successful. Details
2019-04-20 19:53:16 +02:00
Rafal Kupiec c9203b6c91
New source code legal format.
The build was successful. Details
2019-04-20 19:29:15 +02:00
Rafal Kupiec 929d7b83fe
Cleanup unused functions.
The build was successful. Details
2019-04-17 18:40:14 +02:00
Rafal Kupiec bd22425b46
Do not allow 'continue' statement in a switch case.
The build was successful. Details
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.
The build was successful. Details
2019-04-17 07:55:32 +02:00
Piotr Likoski 6b18e204cd
Always pop the l-value on variable declaration.
The build was successful. Details
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.
The build was successful. Details
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.
The build was successful. Details
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.
The build was successful. Details
2019-04-16 12:32:01 +02:00
Rafal Kupiec 89f19133d5
Rename VM's jump instructions for better readability.
The build was successful. Details
2019-04-16 08:14:16 +02:00
Rafal Kupiec eb80dced3e
Correct comment.
The build was successful. Details
2019-04-15 20:00:54 +02:00
Rafal Kupiec 517dffcbc1
Separate VM instruction for variable declaration (OP_DECLARE).
The build was successful. Details
2019-04-15 19:18:29 +02:00
Rafal Kupiec c51b3dfa8a
Revert 89d5158d7e and a8a1a2cd51. Fix should be based on VM frames.
The build was successful. Details
2019-04-13 14:39:57 +02:00
Rafal Kupiec 89d5158d7e
Fix build.
The build was successful. Details
2019-04-11 13:31:17 +02:00
Rafal Kupiec a8a1a2cd51
Fix variable declaration in loops.
The build has failed. Details
2019-04-11 13:28:47 +02:00
Rafal Kupiec 2a4e47e782
I hope this finally fixes the default argument value.
The build was successful. Details
2019-04-10 18:32:53 +02:00
Rafal Kupiec 527a6ad689
Mark argument as well as object, when class name is supplied.
The build was successful. Details
2019-04-10 13:58:24 +02:00
Rafal Kupiec 77ebce7acf
Parser takes care about nested arrays.
The build was successful. Details
2019-04-10 06:18:49 +02:00
Rafal Kupiec 72dc44c152
Another fix for OP_DONE instruction.
The build was successful. Details
2019-04-05 07:45:53 +02:00
Rafal Kupiec 74f954b852
Fix OP_DONE instruction.
The build was successful. Details
2019-04-05 07:01:07 +02:00
Rafal Kupiec c6397d2e15
Use P2 to avoid strict typehinting.
The build was successful. Details
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.
The build was successful. Details
2019-03-29 22:55:49 +01:00
Rafal Kupiec 140bd35f93
Set proper type for all class attributes.
The build was successful. Details
2019-03-29 09:00:55 +01:00
Rafal Kupiec a87471e1e3
The empty() function is useless in Aer.
The build was successful. Details
2019-03-24 09:22:10 +01:00