Feature suggestion
#798 and #1240 has discussed lots of thing about closure, but maybe there are some outdated information.
So I want to start to discuss it in some new page.
Project State
- function object will be compiled as static object in data area.
- function object store function index in table and null env.
High Level Requirement For Closure
- Every function object from the same FunctionExpression will have different env.
- When call function object, function can use (read / write) the variable in env and upper function env.
- (Optional) If function is not a closure function, supporting closure has no or small influence this function in the perspective of code size and spend.
What should we do to support closure
For better code review, I think maybe we can support it step by step. I will post everything we need to implement closure. Please correct my mistakes and omissions.
letupper_function=()=>{letvariable_in_upper_function: i32=0;letcurrent_function=()=>{letvariable_in_current_function: i32=0;// used in lower function.variable_in_upper_function=1;// variable declared in upper function.letlower_function=()=>{variable_in_current_function=2;}})code gen
semantic
Feature suggestion
#798 and #1240 has discussed lots of thing about closure, but maybe there are some outdated information.
So I want to start to discuss it in some new page.
Project State
High Level Requirement For Closure
What should we do to support closure
For better code review, I think maybe we can support it step by step. I will post everything we need to implement closure. Please correct my mistakes and omissions.
code gen
semantic