Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,136 changes: 358 additions & 778 deletions src/compiler.ts

Large diffs are not rendered by default.

7 changes: 5 additions & 2 deletions src/program.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3639,6 +3639,9 @@ export class Local extends VariableLikeElement {
/** The function whose environment this local is stored in. Set when captured. */
envOwner: Function | null = null;

/** Whether this local was accessed as a regular wasm local (before capture was discovered). */
wasAccessedAsLocal: bool = false;

/** Constructs a new local variable. */
constructor(
/** Simple name. */
Expand Down Expand Up @@ -3814,8 +3817,8 @@ export class Function extends TypedElement {
* This is needed because indirect calls can overwrite the global. */
closureEnvLocal: Local | null = null;

/** Pre-scanned names of captured variables (set before compilation, used to mark locals). */
preCapturedNames: Set<string> | null = null;
/** Whether this function needs recompilation due to late capture discovery. */
needsCaptureRecompile: bool = false;

/** Whether this function requires an environment (is a closure). */
get needsEnvironment(): bool {
Expand Down
68 changes: 34 additions & 34 deletions tests/compiler/closure-class.debug.wat
Original file line number Diff line number Diff line change
Expand Up @@ -2511,13 +2511,13 @@
i32.const 0
i32.store
local.get $$env
local.get $operand
local.get $operation
i32.store offset=4
local.get $$env
local.get $operation
local.get $this
i32.store offset=8
local.get $$env
local.get $this
local.get $operand
i32.store offset=12
i32.const 8
i32.const 6
Expand Down Expand Up @@ -3654,10 +3654,10 @@
i32.const 0
i32.store
local.get $$env
local.get $amount
local.get $this
i32.store offset=4
local.get $$env
local.get $this
local.get $amount
i32.store offset=8
i32.const 8
i32.const 34
Expand All @@ -3682,10 +3682,10 @@
i32.const 0
i32.store
local.get $$env
local.get $factor
local.get $this
i32.store offset=4
local.get $$env
local.get $this
local.get $factor
i32.store offset=8
i32.const 8
i32.const 34
Expand Down Expand Up @@ -5898,84 +5898,84 @@
global.get $~lib/__closure_env
local.set $$closureEnv
local.get $$closureEnv
i32.load offset=8
i32.load offset=4
i32.const 0
i32.eq
if
local.get $$closureEnv
i32.load offset=12
i32.load offset=8
local.set $1
global.get $~lib/memory/__stack_pointer
local.get $1
i32.store
local.get $1
local.get $$closureEnv
i32.load offset=12
i32.load offset=8
local.set $1
global.get $~lib/memory/__stack_pointer
local.get $1
i32.store offset=4
local.get $1
call $closure-class/Calculator#get:result
local.get $$closureEnv
i32.load offset=4
i32.load offset=12
i32.add
call $closure-class/Calculator#set:result
else
local.get $$closureEnv
i32.load offset=8
i32.load offset=4
i32.const 1
i32.eq
if
local.get $$closureEnv
i32.load offset=12
i32.load offset=8
local.set $1
global.get $~lib/memory/__stack_pointer
local.get $1
i32.store
local.get $1
local.get $$closureEnv
i32.load offset=12
i32.load offset=8
local.set $1
global.get $~lib/memory/__stack_pointer
local.get $1
i32.store offset=4
local.get $1
call $closure-class/Calculator#get:result
local.get $$closureEnv
i32.load offset=4
i32.load offset=12
i32.sub
call $closure-class/Calculator#set:result
else
local.get $$closureEnv
i32.load offset=8
i32.load offset=4
i32.const 2
i32.eq
if
local.get $$closureEnv
i32.load offset=12
i32.load offset=8
local.set $1
global.get $~lib/memory/__stack_pointer
local.get $1
i32.store
local.get $1
local.get $$closureEnv
i32.load offset=12
i32.load offset=8
local.set $1
global.get $~lib/memory/__stack_pointer
local.get $1
i32.store offset=4
local.get $1
call $closure-class/Calculator#get:result
local.get $$closureEnv
i32.load offset=4
i32.load offset=12
i32.mul
call $closure-class/Calculator#set:result
end
end
end
local.get $$closureEnv
i32.load offset=12
i32.load offset=8
local.set $1
global.get $~lib/memory/__stack_pointer
local.get $1
Expand Down Expand Up @@ -10358,26 +10358,26 @@
global.get $~lib/__closure_env
local.set $$closureEnv
local.get $$closureEnv
i32.load offset=8
i32.load offset=4
local.set $1
global.get $~lib/memory/__stack_pointer
local.get $1
i32.store
local.get $1
local.get $$closureEnv
i32.load offset=8
i32.load offset=4
local.set $1
global.get $~lib/memory/__stack_pointer
local.get $1
i32.store offset=4
local.get $1
call $closure-class/ChainableCounter#get:count
local.get $$closureEnv
i32.load offset=4
i32.load offset=8
i32.add
call $closure-class/ChainableCounter#set:count
local.get $$closureEnv
i32.load offset=8
i32.load offset=4
local.set $1
global.get $~lib/memory/__stack_pointer
i32.const 8
Expand All @@ -10400,26 +10400,26 @@
global.get $~lib/__closure_env
local.set $$closureEnv
local.get $$closureEnv
i32.load offset=8
i32.load offset=4
local.set $1
global.get $~lib/memory/__stack_pointer
local.get $1
i32.store
local.get $1
local.get $$closureEnv
i32.load offset=8
i32.load offset=4
local.set $1
global.get $~lib/memory/__stack_pointer
local.get $1
i32.store offset=4
local.get $1
call $closure-class/ChainableCounter#get:count
local.get $$closureEnv
i32.load offset=4
i32.load offset=8
i32.mul
call $closure-class/ChainableCounter#set:count
local.get $$closureEnv
i32.load offset=8
i32.load offset=4
local.set $1
global.get $~lib/memory/__stack_pointer
i32.const 8
Expand Down Expand Up @@ -10819,11 +10819,11 @@
return
)
(func $closure-class/testTaskCallbacks (result i32)
(local $$env i32)
(local $task i32)
(local $then i32)
(local $complete i32)
(local $receivedValue i32)
(local $$env i32)
(local $5 i32)
(local $6 i32)
(local $7 i32)
Expand Down Expand Up @@ -10969,12 +10969,12 @@
return
)
(func $closure-class/testTaskCallbackAfterComplete (result i32)
(local $$env i32)
(local $task i32)
(local $then i32)
(local $complete i32)
(local $3 i32)
(local $4 i32)
(local $receivedValue i32)
(local $$env i32)
(local $6 i32)
(local $7 i32)
(local $8 i32)
Expand Down Expand Up @@ -11023,12 +11023,12 @@
i32.const 1
global.set $~argumentsLength
local.get $complete
local.tee $3
local.tee $4
i32.store offset=16
local.get $3
local.get $4
i32.load offset=4
global.set $~lib/__closure_env
local.get $3
local.get $4
i32.load
call_indirect (type $3)
local.get $$env
Expand Down
Loading