in src/mockRuntime.ts [292:323]
public stack(startFrame: number, endFrame: number): IRuntimeStack {
const line = this.getLine();
const words = this.getWords(this.currentLine, line);
words.push({ name: 'BOTTOM', line: -1, index: -1 }); // add a sentinel so that the stack is never empty...
// if the line contains the word 'disassembly' we support to "disassemble" the line by adding an 'instruction' property to the stackframe
const instruction = line.indexOf('disassembly') >= 0 ? this.instruction : undefined;
const column = typeof this.currentColumn === 'number' ? this.currentColumn : undefined;
const frames: IRuntimeStackFrame[] = [];
// every word of the current line becomes a stack frame.
for (let i = startFrame; i < Math.min(endFrame, words.length); i++) {
const stackFrame: IRuntimeStackFrame = {
index: i,
name: `${words[i].name}(${i})`, // use a word of the line as the stackframe name
file: this._sourceFile,
line: this.currentLine,
column: column, // words[i].index
instruction: instruction
};
frames.push(stackFrame);
}
return {
frames: frames,
count: words.length
};
}