|
@@ -1444,7 +1444,7 @@ func (r *Runtime) RunProgram(p *Program) (result Value, err error) {
|
|
recursive := len(vm.callStack) > 0
|
|
recursive := len(vm.callStack) > 0
|
|
defer func() {
|
|
defer func() {
|
|
if recursive {
|
|
if recursive {
|
|
- vm.sp--
|
|
|
|
|
|
+ vm.sp -= 2
|
|
vm.popCtx()
|
|
vm.popCtx()
|
|
} else {
|
|
} else {
|
|
vm.callStack = vm.callStack[:len(vm.callStack)-1]
|
|
vm.callStack = vm.callStack[:len(vm.callStack)-1]
|
|
@@ -1463,8 +1463,12 @@ func (r *Runtime) RunProgram(p *Program) (result Value, err error) {
|
|
if recursive {
|
|
if recursive {
|
|
vm.pushCtx()
|
|
vm.pushCtx()
|
|
vm.stash = &r.global.stash
|
|
vm.stash = &r.global.stash
|
|
- vm.push(_undefined) // make sure the 'callee' value (stack[sb-1]) is set
|
|
|
|
- vm.sb = vm.sp
|
|
|
|
|
|
+ sp := vm.sp
|
|
|
|
+ vm.stack.expand(sp + 1)
|
|
|
|
+ vm.stack[sp] = _undefined // 'callee'
|
|
|
|
+ vm.stack[sp+1] = nil // 'this'
|
|
|
|
+ vm.sb = sp + 1
|
|
|
|
+ vm.sp = sp + 2
|
|
} else {
|
|
} else {
|
|
vm.callStack = append(vm.callStack, context{})
|
|
vm.callStack = append(vm.callStack, context{})
|
|
}
|
|
}
|