Skip to content

Commit ab7f07f

Browse files
committed
add optimizer
1 parent f75554c commit ab7f07f

7 files changed

Lines changed: 1067 additions & 26 deletions

File tree

docs/debugging.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

internal/interpreter/debugger.go

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,11 @@ func (d *Debugger) shouldBreak(node ast.Node) bool {
199199
// 更新命中次数
200200
bp.HitCount++
201201

202+
// 捕获当前解释器状态
203+
d.currentPos = pos
204+
d.variables = d.interpreter.GetCurrentEnvironment().GetAll()
205+
d.callStack = d.interpreter.GetInterpreterCallStack()
206+
202207
// 通知监听器
203208
d.notifyBreakpointHit(bp, pos)
204209

@@ -306,17 +311,27 @@ func (d *Debugger) handleCommand(cmd DebugCommand) {
306311
}
307312

308313
func (d *Debugger) pause() {
314+
d.isPaused = true
309315
d.notifyClient(&DebugState{})
310316

311-
<-d.resumeChan
317+
// 等待恢复命令
318+
cmd := <-d.resumeChan
319+
// 处理恢复命令
320+
d.handleCommand(cmd)
312321
}
313322

314323
func (d *Debugger) notifyClient(*DebugState) {}
315324

316-
func (d *Debugger) stepInto() {}
317-
func (d *Debugger) stepOver() {}
318-
func (d *Debugger) stepOut() {}
319-
func (d *Debugger) continue_() {}
325+
func (d *Debugger) stepInto() {}
326+
func (d *Debugger) stepOver() {}
327+
func (d *Debugger) stepOut() {}
328+
func (d *Debugger) continue_() {
329+
// 发送恢复命令到 resumeChan
330+
select {
331+
case d.resumeChan <- DebugCommand{Type: CmdContinue}:
332+
default:
333+
}
334+
}
320335
func (d *Debugger) inspectVariable() {}
321336

322337
func (d *Debugger) AddListener(listener DebugListener) {
@@ -335,20 +350,17 @@ func (d *Debugger) GetVariables() map[string]interface{} {
335350
return d.variables
336351
}
337352

338-
func (d *Debugger) pushCallFrame(frame *CallFrame) {
339-
d.callStack = append(d.callStack, frame)
340-
}
341-
342-
func (d *Debugger) popCallFrame() {
343-
if len(d.callStack) > 0 {
344-
d.callStack = d.callStack[:len(d.callStack)-1]
345-
}
346-
}
347-
348353
func (d *Debugger) getCurrentFile() string {
349354
if len(d.callStack) > 0 {
350355
return d.callStack[len(d.callStack)-1].File
351356
}
357+
// 如果没有调用栈,返回第一个断点的文件名
358+
d.breakpointMutex.RLock()
359+
defer d.breakpointMutex.RUnlock()
360+
361+
for filename := range d.breakpoints {
362+
return filename
363+
}
352364
return "unknown"
353365
}
354366

@@ -357,6 +369,22 @@ func (d *Debugger) SetFileContent(filename, content string) {
357369
d.fileSet.AddFile(filename, content)
358370
}
359371

372+
// SetCurrentFile 设置当前文件名
373+
func (d *Debugger) SetCurrentFile(filename string) {
374+
// 创建一个默认的调用栈帧来设置当前文件
375+
if len(d.callStack) == 0 {
376+
frame := &CallFrame{
377+
FunctionName: "main",
378+
File: filename,
379+
Line: 1,
380+
Variables: make(map[string]interface{}),
381+
}
382+
d.callStack = append(d.callStack, frame)
383+
} else {
384+
d.callStack[0].File = filename
385+
}
386+
}
387+
360388
func (d *Debugger) getLineFromPos(pos token.Pos) int {
361389
if !pos.IsValid() {
362390
return 1

0 commit comments

Comments
 (0)