Compile closures.
The build was successful. Details

This commit is contained in:
Rafal Kupiec 2018-08-16 18:40:23 +02:00
parent f28c671e69
commit a8a88b4746
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
1 changed files with 13 additions and 15 deletions

View File

@ -490,10 +490,8 @@ static void ExprAssembleLiteral(SyToken **ppCur, SyToken *pEnd) {
*ppCur = pIn;
}
/*
* Collect and assemble tokens holding anonymous functions/closure body.
* Collect and assemble tokens holding closure body.
* When errors,PH7 take care of generating the appropriate error message.
* Note on anonymous functions.
* According to the PHP language reference manual:
* Anonymous functions, also known as closures, allow the creation of functions
* which have no specified name. They are most useful as the value of callback
* parameters, but they have many other uses.
@ -509,7 +507,7 @@ static void ExprAssembleLiteral(SyToken **ppCur, SyToken *pEnd) {
* printf("Hello %s\r\n", $name);
* };
* $greet('World');
* $greet('PHP');
* $greet('AerScript');
*
* $double = function($a) {
* return $a * 2;
@ -520,9 +518,9 @@ static void ExprAssembleLiteral(SyToken **ppCur, SyToken *pEnd) {
* // double the size of each element in our
* // range
* $new_numbers = array_map($double, $numbers);
* print implode(' ', $new_numbers);
* print(implode(' ', $new_numbers));
*/
static sxi32 ExprAssembleAnon(ph7_gen_state *pGen, SyToken **ppCur, SyToken *pEnd) {
static sxi32 ExprAssembleClosure(ph7_gen_state *pGen, SyToken **ppCur, SyToken *pEnd) {
SyToken *pIn = *ppCur;
sxu32 nLine;
sxi32 rc;
@ -707,7 +705,7 @@ static sxi32 ExprExtractNode(ph7_gen_state *pGen, ph7_expr_node **ppNode) {
pNode->xCode = PH7_CompileLiteral;
} else {
/* Assemble anonymous functions body */
rc = ExprAssembleAnon(&(*pGen), &pCur, pGen->pEnd);
rc = ExprAssembleClosure(&(*pGen), &pCur, pGen->pEnd);
if(rc != SXRET_OK) {
SyMemBackendPoolFree(&pGen->pVm->sAllocator, pNode);
return rc;