{"version":3,"sources":["https://lively-kernel.org/lively4/swt21-debugging/demos/tom/Sections.js"],"names":["Event","TraceSection","constructor","name","entries","_name","nodes","Map","changes","hasChanges","position","isSection","addEntry","entry","push","privateAddChange","changeEvent","addChange","last","stub","enterFunction","somethingHappened","length","apply","ast","change","visit","object","visitTraceSection","isFunction","PluginSection","nodeID","FunctionSection","arguments","enteredFunction","wasCalledByNativeCode","calledByNativeCode"],"mappings":"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","file":"Sections.js","sourcesContent":["import { Event } from 'demos/tom/Events.js';\n\nexport class TraceSection {\n    constructor(name, entries = []) {\n        this._name = name;\n        this.entries = entries;\n\n        this.nodes = new Map();\n\n        this.changes = [];\n        this.hasChanges = false;\n        \n        // gets set appropriately to the associated node\n        this.position;\n    }\n    \n    get name() {\n        return this._name;\n    }\n    \n    get isSection() {\n        return true;\n    }\n\n    addEntry(entry) {\n        this.entries.push(entry);\n    }\n    \n    privateAddChange(changeEvent) {\n        this.hasChanges = true;\n        this.changes.push(changeEvent);\n    }\n\n    addChange(changeEvent) {\n        if (this.entries.last) {\n            this.entries.last.addChange(changeEvent);\n        } else {\n            const stub = new Event('stub');\n            this.entries.push(stub);\n            stub.addChange(changeEvent);\n        }\n        \n        this.privateAddChange(changeEvent);\n    }\n    \n    enterFunction() {}\n\n    somethingHappened() {\n        return this.hasChanges || this.entries.length > 0;\n    }\n\n    apply(ast) {\n        for (const change of this.changes) {\n            change.apply(ast);\n        }\n    }\n\n    visit(object) {\n        object.visitTraceSection(this);\n    }\n    \n    isFunction() {\n        return false;\n    }\n}\n\nexport class PluginSection extends TraceSection {\n    constructor(name, nodeID, entries = []) {\n        super(name, entries);\n        \n        this.nodeID = nodeID;\n    }\n}\n\nexport class FunctionSection extends TraceSection {\n    constructor() {\n        super(...arguments);\n        this.enteredFunction = false;\n        this.wasCalledByNativeCode = false;\n    }\n    \n    get name() {\n        let name = '';\n        \n        if(this.wasCalledByNativeCode) {\n            name += 'called ';\n        }\n        if(!this.enteredFunction){\n            name += 'native ';\n        }\n        \n        return name + `function: ${this._name}`;\n    }\n        \n    enterFunction() {\n        this.enteredFunction = true;\n    }\n    \n    calledByNativeCode() {\n        this.enteredFunction = true;\n        this.wasCalledByNativeCode = true;\n    }\n    \n    addChange(changeEvent) {        \n        if(this.enteredFunction) {\n            if (this.entries.last) {\n                this.entries.last.addChange(changeEvent);\n            } else {\n                const stub = new Event('stub');\n                this.entries.push(stub);\n                stub.addChange(changeEvent);\n            }\n        }\n        \n        this.privateAddChange(changeEvent);\n    }\n    \n    isFunction() {\n        return true;\n    }\n}"]}