Commit Graph
175 Commits
Author SHA1 Message Date
belliash bc5e5f6a8e Implement C3 class linearization and validate inheritance graphs
Build / AerScript (push) Successful in 2m13s
2026-10-24 01:16:34 +02:00
belliash 323793153c Implement short-circuit evaluation for the null coalescing operator
Build / AerScript (push) Successful in 40s
2026-10-24 00:30:45 +02:00
belliash cd924eb066 Revert context frame implementation
Build / AerScript (push) Successful in 32s
2025-08-30 18:27:59 +02:00
belliash d73eb9b5b2 Implement exponentiation (**) operator
Build / AerScript (push) Successful in 40s
2025-08-29 22:04:55 +02:00
belliash 8ac9b148d1 Fix OP_*_STORE precedence
Build / AerScript (push) Successful in 39s
2025-08-29 20:55:58 +02:00
belliash 5ff7d03ed1 Get rid of OP_UNUSED and implement additional context frame to resolve scope issue
Build / AerScript (push) Failing after 28s
2025-08-29 14:32:01 +02:00
belliash dc5725d1af Unset local for variable, fixes #62
Build / AerScript (push) Failing after 26s
2025-08-28 18:38:28 +02:00
belliash c730082fa0 Do not issue OP_LF_STOP on 'break' inside 'switch' statement.
The build was successful.
2019-12-21 22:48:44 +01:00
belliash fd0685f16e Code formatting.
The build was successful.
2019-12-14 23:31:47 +01:00
belliash ad5784f81f Reimplement import() builtin function as a global-scope statement. This fixes #58.
The build was successful.
2019-12-14 23:30:38 +01:00
belliash 9290db2504 Another changes in file inclusion mechanism (#58):
The build was successful.
* Remove builtin functions: 'include' & 'require'
* Implement 'include' and 'require' statements compiler
* Implement OP_INCLUDE operator
* Allow 'require' statement to be used in global scope as well as in method body and 'include' only in method body
2019-12-10 16:09:26 +01:00
belliash 63fd76c9c8 Rework PH7_GenStateGetGlobalScopeHandler() function.
The build was successful.
2019-11-19 08:10:59 +01:00
belliash e1e6a19f30 Update code formatting.
The build was successful.
2019-11-18 18:57:10 +01:00
belliash f3972a9ca2 Rename LFB/LFE operators.
The build was successful.
2019-10-25 23:09:30 +02:00
belliash 8b2086402e Fix all compiler warnings in AerScript compiler.
The build was successful.
2019-06-22 11:59:43 +02:00
belliash e40dc34026 Pass proper line number from compiler to the virtual machine.
The build was successful.
2019-06-20 12:07:47 +02:00
belliash bd24aa0605 Correct more compiler warnings.
The build was successful.
2019-06-19 09:31:40 +02:00
belliash bffd44a7b4 Get rid of some annoying compiler warnings.
The build was successful.
2019-06-17 09:51:37 +02:00
belliash c7b6e76d0d Get rid of unused variables/labels/etc.
The build was successful.
2019-06-16 00:33:03 +02:00
belliash 6c277c1eca Allow implicitly-typed variable declarations inside 'for' and 'foreach' loops.
The build was successful.
2019-06-08 13:35:16 +02:00
belliash 0327c3130f Do not allow to initialize an implicitly-typed variable with an array initializer.
The build was successful.
2019-06-08 13:09:35 +02:00
belliash 78c416c6b8 Implement the implicit 'auto' type.
The build was successful.
An implicitly typed local variable is strongly typed just as if it had been declared the type, but the compiler determines the type. The following two declarations of $i are functionally equivalent:
int $i = 10; // Explicitly typed.
auto $i = 10; // Implicitly typed.
2019-06-08 12:55:57 +02:00
belliash a00d30afa2 Set NULL data type instead of throwing an error.
The build was successful.
2019-06-08 09:14:16 +02:00
belliash 65aaf7be67 Correct error message.
The build was successful.
2019-06-07 19:32:28 +02:00
belliash 343c25ca77 Fix for the segmentation fault.
The build was successful.
2019-06-07 16:18:16 +02:00
belliash 46458d1e1b Prefix variable name by dollar '$' sign.
The build was successful.
2019-06-07 16:16:56 +02:00
belliash a5af1d473f Compile the typedef for OP_IS instruction.
The build was successful.
2019-06-07 09:37:40 +02:00
belliash 045ebe92ae At least compile the 'finally' block for now.
The build was successful.
2019-06-04 07:11:55 +02:00
belliash d0840d7eea Cleanup after switching from 'parent' constant to '$parent' variable.
The build was successful.
2019-06-03 12:31:28 +02:00
belliash 625a386b69 Get rid of 'self' statement.
The build was successful.
2019-06-03 12:29:21 +02:00
belliash cd9ff68ae9 Completely disallow static methods in interfaces.
The build was successful.
2019-05-30 20:46:34 +02:00
belliash 984429bc55 Disallow static method declarations in interface.
The build was successful.
2019-05-30 20:34:24 +02:00
belliash 53199cac4e Another fixes to OOP-related error reporting.
The build was successful.
2019-05-30 20:18:20 +02:00
belliash ba1c840009 Allow a 'final virtual' classes to be declared.
The build was successful.
Virtual final classes are helpful in the case someone is wrapping common functions that are static, but the common class itself cannot be instantiated.
2019-05-30 09:44:46 +02:00
belliash 3cca5faa76 Store variable type in dedicated field.
The build was successful.
2019-05-21 14:49:36 +02:00
belliash 55acf8111f Assume private visibility for all class members by default.
The build was successful.
In most (all?) modern OOP languages class members visibility is assumed to be private and programmer has to consciously set it to public or protected. PHP has the different approach what can cause a security flaws in written scripts. AerScript will not follow this way, as it seems to be conceptually broken.
2019-05-17 08:40:41 +02:00
belliash e8c675bd8e Store a pointer to class container to reduce memory usage.
The build was successful.
2019-05-16 15:41:37 +02:00
belliash 7203492763 Store a class name in each attribute.
The build was successful.
2019-05-16 13:25:06 +02:00
belliash a2fb0b9ae5 Get rid of 'parent' constant. Use variable instead.
The build was successful.
2019-05-08 08:38:40 +02:00
belliash d3ae1c1bf4 Only identifiers should be allowed as constant name.
The build was successful.
2019-05-06 18:38:56 +02:00
belliash 0a6b5a6f42 The 'self' and 'parent' keywords should be resolved at compile time.
The build was successful.
2019-05-06 11:38:32 +02:00
belliash c4b63a3018 Rename OP_LOAD instruction to OP_LOADV.
The build was successful.
2019-05-05 09:33:06 +02:00
belliash 23900f2aed Remove unused compiler function - PH7_CompileLangConstruct().
The build was successful.
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
belliash b36510943d Implement 'define' statement for defining constants globally.
The build was successful.
2019-05-04 17:08:09 +02:00
belliash ab8bf48485 Make constant declarations local.
The build was successful.
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
belliash e6b7f1be2c Always emit OP_JMPLFE as goto can be used inside a loop and frame has to be left.
The build was successful.
2019-05-03 10:55:57 +02:00
belliash 03fc167be1 Proper implementation of so hated 'goto' statement.
The build was successful.
2019-05-03 10:35:54 +02:00
belliash 2f3ce65289 Correct comment to if/else statements.
The build was successful.
2019-05-02 19:03:47 +02:00
belliash 5a0e4667fa More readable error message.
The build was successful.
2019-05-01 20:09:55 +02:00
belliash 7c37451520 Namespaces are not supported and broken, but compile them properly.
The build was successful.
2019-05-01 13:49:07 +02:00