Commit Graph

168 Commits

Author SHA1 Message Date
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
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.
The build has failed. Details
2019-03-23 19:51:19 +01:00
Rafal Kupiec 65b178932a
Get rid of array() & list() for the new syntax.
The build was successful. Details
2019-03-22 15:54:46 +01:00
Rafal Kupiec 075d2f0963
Temporary workaround to allow the use of curly braces and array() syntax concurrently.
The build was successful. Details
2019-03-21 17:30:08 +01:00
Rafal Kupiec b60c1de4cf
Abort on SXERR_ABORT, #47.
The build was successful. Details
2019-03-19 10:42:53 +01:00
Rafal Kupiec 23601fe9c5
Partially fix #47, static variables are still affected.
The build was successful. Details
2019-03-19 10:38:07 +01:00
Rafal Kupiec c26f8cd777
Strict data types for classes and interfaces:
The build has failed. Details
1) New syntax for method declaration, now requiring a strict data type to be passed (i.e. void main()),
2) New syntax for attributes declaration, als orequiring a strict data type before variable name (i.e. string $str).
2019-03-17 19:43:03 +01:00
Rafal Kupiec 615e75fb8a
Store methods return type.
The build was successful. Details
2019-03-16 14:57:04 +01:00
Rafal Kupiec 7897f28ebb
Fix parameters order.
The build was successful. Details
2019-03-13 20:10:32 +01:00
Rafal Kupiec df3d00d02c
Revert f1d4d80f65.
The build was successful. Details
2019-03-11 08:16:51 +01:00
Rafal Kupiec 051bca470e
Save the closure return data type for further use.
The build was successful. Details
2019-03-10 21:02:06 +01:00
Rafal Kupiec f1d4d80f65
Cleanup keywords.
The build was successful. Details
2019-03-09 22:39:26 +01:00
Rafal Kupiec d87ce3ad1d
1. Set a proper data type when compiling closure.
The build was successful. Details
2. Temporarily allow to call a closure/function if its name is stored in a variable of callback or string type. Ultimately, only callback will be allowed.
2018-12-01 12:53:58 +01:00
Rafal Kupiec e5fb7d625e
Allow only a colon as variable separator.
The build was successful. Details
2018-10-27 19:49:24 +02:00
Rafal Kupiec dd774be005
Fix for() loop, do not use iP1 for OP_LOAD.
The build has failed. Details
2018-09-23 17:51:09 +02:00
Rafal Kupiec 28a5fa59ad
Duplicate variable name. Fix variable declaration.
The build was successful. Details
2018-09-22 17:54:59 +02:00
Rafal Kupiec f927667d85
Strictly check for data type of static variable declaration.
The build has failed. Details
2018-09-21 22:06:36 +02:00
Rafal Kupiec 79e4bac7eb
Remove no longer used PH7_CompileStatic().
The build was successful. Details
2018-09-21 00:22:29 +02:00
Rafal Kupiec bd4d146d0a
Initial version of variable definition.
The build was successful. Details
2018-09-21 00:21:15 +02:00
Rafal Kupiec 241c7d8168
First step to declare a variable with specified data type.
The build was successful. Details
2018-09-20 17:06:23 +02:00
Rafal Kupiec e6e59d299e
Fix method parameters.
The build was successful. Details
2018-09-19 19:27:50 +02:00
Rafal Kupiec 9884f8288b
Do not allow typecasting to unset a variable.
The build was successful. Details
2018-09-18 22:11:57 +02:00
Rafal Kupiec 94ae7d187b
No data type for argument specified leads to E_ERROR.
The build was successful. Details
2018-09-14 21:33:31 +02:00
Rafal Kupiec 8b48786f29
Add missing data types.
The build was successful. Details
2018-09-14 08:47:16 +02:00
Rafal Kupiec 74b1c196f9
Treat invalid type name as error.
The build was successful. Details
2018-09-13 18:56:01 +02:00
Rafal Kupiec d4992ff4ba
At least try to report correct line number.
The build was successful. Details
2018-09-12 19:24:48 +02:00
Rafal Kupiec ae79cb57de
No need to store information about line number in ph7_class struct.
The build was successful. Details
2018-09-05 17:42:10 +02:00
Rafal Kupiec 894dbe47d6
Allow compiler to specify line number, on which instruction has been generated.
The build was successful. Details
This also fixes line number on OP_CLASS_INIT and OP_INTERFACE_INIT.
2018-09-05 17:31:06 +02:00
Rafal Kupiec 03e452ea7b
Shutdown library properly on error.
The build was successful. Details
2018-09-04 09:13:28 +02:00
Rafal Kupiec 94b213674a
Change the script located in memory indicator.
The build was successful. Details
For easier reading with line numbers.
2018-08-23 18:27:14 +02:00
Rafal Kupiec dbe373d537
Resolve __CLASS__ at compile time.
The build was successful. Details
Ticket: #45: __CLASS__ constant must be resolved at compile time, not run time. Otherwise it returns incorrect data.
2018-08-22 09:59:10 +02:00
Rafal Kupiec 3e18a5b8e8
Optimize the code, #45.
The build was successful. Details
2018-08-22 08:51:45 +02:00
Rafal Kupiec a0f7949b24
Resolve __DIR__ at compile time.
The build was successful. Details
Ticket: #45: __DIR__ constant must be resolved at compile time, not run time. Otherwise it returns incorrect data.
2018-08-22 06:23:43 +02:00
Rafal Kupiec 02242bb93d
Resolve __FILE__ at compile time.
The build was successful. Details
Ticket: #45: __FILE__ constant must be resolved at compile time, not run time. Otherwise it returns incorrect data.
2018-08-21 20:18:39 +02:00
Rafal Kupiec 19a504fe11
Enter the class block during compilation, #45.
The build was successful. Details
2018-08-21 19:45:50 +02:00
Rafal Kupiec f28c671e69
Compile closures.
The build was successful. Details
2018-08-16 18:31:12 +02:00
Rafal Kupiec a8961eb36f
Fix build
The build was successful. Details
2018-08-16 17:48:17 +02:00
Rafal Kupiec 2c28b63d90
Properly interpret language constructs, fixes #28.
The build has failed. Details
2018-08-16 17:42:30 +02:00
Rafal Kupiec 510410096b
Aer is OOP language. There is nothing like function.
The build was successful. Details
2018-08-16 13:57:35 +02:00
Rafal Kupiec 4961922b1d
Unify error with other related to namespace.
The build was successful. Details
2018-08-16 13:36:19 +02:00
Rafal Kupiec 793b6127d5
Temporarily fix namespace support.
The build was successful. Details
The namespace feature is not supported in this version, they are treated same way as global scope.
2018-08-16 12:39:05 +02:00
Rafal Kupiec 787f3b5d5f
Synchronize the namespace also with first semicolon.
The build was successful. Details
2018-08-16 12:01:36 +02:00
Rafal Kupiec be27532fdf
Unify error level for namespace support.
The build was successful. Details
2018-08-16 11:26:47 +02:00
Rafal Kupiec e208e778e0
Compile global scope independently, fixes #40.
The build was successful. Details
2018-08-16 11:15:03 +02:00
Rafal Kupiec 64b9ac4406
Forward declaration already in compiler.h
The build was successful. Details
2018-08-15 11:18:40 +02:00
Rafal Kupiec be454ff7be
Rename PH7_COMPILE_SINGLE_STMT to PH7_COMPILE_STATEMENT
The build was successful. Details
2018-08-14 23:48:15 +02:00
Rafal Kupiec ece036b214
Rework the entry point
The build was successful. Details
* some functions were not used and have been removed
 * some parameters seemed to be useless and have been removed
 * code cleanup
2018-08-14 13:45:27 +02:00
Rafal Kupiec 7e3c79d3c5
Functions naming cleanup
The build was successful. Details
2018-08-13 20:16:37 +02:00
Rafal Kupiec 02fde9c30f
It is not PHP compiler
The build was successful. Details
2018-08-13 19:53:08 +02:00
Rafal Kupiec aa6e00db27
Forward declaration for all functions.
The build was successful. Details
2018-08-12 21:58:27 +02:00
Rafal Kupiec 59c15caf4e
Use something more human readable
The build was successful. Details
2018-08-12 21:16:05 +02:00
Rafal Kupiec 6b7591a137
Move common part to compiler.h
The build was successful. Details
2018-08-12 21:11:13 +02:00
Rafal Kupiec 289af8f9ae
Unify compiler's function naming convenction
The build was successful. Details
2018-08-12 20:58:01 +02:00
Rafal Kupiec 5ef5cf3e46
Make errors more readable.
The build was successful. Details
2018-08-12 19:36:17 +02:00
Rafal Kupiec 429c28d0cc
Rework error lovels for AerScript.
The build was successful. Details
2018-08-12 19:35:43 +02:00
Rafal Kupiec c39e627aef
Remove the backtick quoted string.
The build was successful. Details
2018-08-12 11:08:09 +02:00
Rafal Kupiec cef0f40820
Compile namespace
The build was successful. Details
2018-08-12 11:06:01 +02:00
Rafal Kupiec c298a41eb7
More verbose error messages
The build was successful. Details
2018-08-12 10:30:44 +02:00
Rafal Kupiec e866575cb5
More verbose errors
The build was successful. Details
2018-08-12 10:18:42 +02:00
Rafal Kupiec c759b1f106
Improove error reporting for method declarations
The build was successful. Details
2018-08-12 09:23:21 +02:00
Rafal Kupiec b61fc9d3e6
Rename function to save it from typo
The build was successful. Details
2018-08-11 23:21:40 +02:00
Rafal Kupiec 576edc6c20
Several changes to virtual class/method. Fixes #41
The build was successful. Details
* do not automatically mark class as virtual when at least one virtual method found
 * force non-virtual method to contain body
 * force non-virtual class to implement all methods
2018-08-11 22:50:05 +02:00
Rafal Kupiec 3f46f01805
Rename anonymous functions
The build was successful. Details
2018-08-11 21:40:05 +02:00
Rafal Kupiec 0d8391eaaa
Correct typos
The build was successful. Details
2018-08-11 21:22:04 +02:00
Rafal Kupiec e4ab5974fa
Let the compiler use OP_ADD instead of OP_CAT
The build was successful. Details
2018-08-07 07:47:25 +02:00
Rafal Kupiec 4bbdc20174
This commit contains several changes:
The build was successful. Details
* print() is now treated as standard function
 * get rid of echo() function
 * fix test suite
and it fixes #26.
2018-08-06 17:18:27 +02:00
Piotr Likoski bcde1f446d
It does not matter if it is empty string or not, we want to process it. Empty string should not ever been even considered as a NULL. Fixing #35.
The build was successful. Details
2018-08-06 16:13:49 +02:00
Piotr Likoski a8259e7dbc
Empty double-quoted string can be served as single-quoted string. Preparing for further changes in scope of #35.
The build was successful. Details
2018-08-06 16:03:22 +02:00
Rafal Kupiec 2c37807370
Get rid of global keyword, fixes #29 2018-07-31 15:24:56 +02:00
Rafal Kupiec 7b3e6c5b76
P# introduces virtual classes and virtual methods 2018-07-30 17:08:25 +02:00
Rafal Kupiec b7792dfc3d
P# is not going to derive namespace syntax from PHP, but from C++. 2018-07-30 16:55:49 +02:00
Rafal Kupiec 48b2e9d1c6
Update comments 2018-07-28 23:40:00 +02:00