()
| 217 | } |
| 218 | |
| 219 | func (l *State) traceExecution() { |
| 220 | callInfo := l.callInfo |
| 221 | mask := l.hookMask |
| 222 | countHook := mask&MaskCount != 0 && l.hookCount == 0 |
| 223 | if countHook { |
| 224 | l.resetHookCount() |
| 225 | } |
| 226 | if callInfo.isCallStatus(callStatusHookYielded) { |
| 227 | callInfo.clearCallStatus(callStatusHookYielded) |
| 228 | return |
| 229 | } |
| 230 | if countHook { |
| 231 | l.hook(HookCount, -1) |
| 232 | } |
| 233 | if mask&MaskLine != 0 { |
| 234 | p := l.prototype(callInfo) |
| 235 | npc := callInfo.savedPC - 1 |
| 236 | newline := p.lineInfo[npc] |
| 237 | if npc == 0 || callInfo.savedPC <= l.oldPC || newline != p.lineInfo[l.oldPC-1] { |
| 238 | l.hook(HookLine, int(newline)) |
| 239 | } |
| 240 | } |
| 241 | l.oldPC = callInfo.savedPC |
| 242 | if l.shouldYield { |
| 243 | if countHook { |
| 244 | l.hookCount = 1 |
| 245 | } |
| 246 | callInfo.savedPC-- |
| 247 | callInfo.setCallStatus(callStatusHookYielded) |
| 248 | callInfo.function = l.top - 1 |
| 249 | panic("Not implemented - use goroutines to emulate yield") |
| 250 | } |
| 251 | } |
| 252 | |
| 253 | type engine struct { |
| 254 | frame []value |
no test coverage detected