e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
732 lines
27 KiB
C#
732 lines
27 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="DbgCompiler.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
// <owner current="true" primary="true">[....]</owner>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Xml.Xsl.XsltOld {
|
|
using Res = System.Xml.Utils.Res;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Xml;
|
|
using System.Xml.XPath;
|
|
using System.Xml.Xsl.XsltOld.Debugger;
|
|
using System.Diagnostics;
|
|
using System.Runtime.Versioning;
|
|
|
|
internal class DbgData {
|
|
private XPathNavigator styleSheet;
|
|
private VariableAction[] variables;
|
|
public XPathNavigator StyleSheet { get { return this.styleSheet; } }
|
|
public VariableAction[] Variables { get { return this.variables; } }
|
|
public DbgData(Compiler compiler) {
|
|
DbgCompiler dbgCompiler = (DbgCompiler) compiler;
|
|
this.styleSheet = dbgCompiler.Input.Navigator.Clone();
|
|
this.variables = dbgCompiler.LocalVariables;
|
|
dbgCompiler.Debugger.OnInstructionCompile(this.StyleSheet);
|
|
}
|
|
internal void ReplaceVariables(VariableAction[] vars) { this.variables = vars; }
|
|
|
|
// static Empty:
|
|
private static DbgData s_nullDbgData = new DbgData();
|
|
private DbgData() {
|
|
this.styleSheet = null;
|
|
this.variables = new VariableAction[0];
|
|
}
|
|
public static DbgData Empty { get { return s_nullDbgData; } }
|
|
}
|
|
|
|
internal class DbgCompiler : Compiler {
|
|
private IXsltDebugger debugger;
|
|
|
|
public DbgCompiler(IXsltDebugger debugger) {
|
|
this.debugger = debugger;
|
|
}
|
|
public override IXsltDebugger Debugger { get { return this.debugger; } }
|
|
|
|
// Variables
|
|
//
|
|
// In XsltDebugger we have to know variables that are visible from each action.
|
|
// We keepping two different sets of wariables because global and local variables have different rules of visibility.
|
|
// Globals: All global variables are visible avryware (uncalucaled will have null value),
|
|
// Duplicated globals from different stilesheets are replaced (by import presidence)
|
|
// Locals: Visible only in scope and after it was defined.
|
|
// No duplicates posible.
|
|
private ArrayList globalVars = new ArrayList();
|
|
private ArrayList localVars = new ArrayList();
|
|
private VariableAction[] globalVarsCache, localVarsCache;
|
|
|
|
public virtual VariableAction[] GlobalVariables {
|
|
get {
|
|
Debug.Assert(this.Debugger != null);
|
|
if (this.globalVarsCache == null) {
|
|
this.globalVarsCache = (VariableAction[]) this.globalVars.ToArray(typeof(VariableAction));
|
|
}
|
|
return this.globalVarsCache;
|
|
}
|
|
}
|
|
public virtual VariableAction[] LocalVariables {
|
|
get {
|
|
Debug.Assert(this.Debugger != null);
|
|
if (this.localVarsCache == null) {
|
|
this.localVarsCache = (VariableAction[]) this.localVars.ToArray(typeof(VariableAction));
|
|
}
|
|
return this.localVarsCache;
|
|
}
|
|
}
|
|
|
|
private void DefineVariable(VariableAction variable) {
|
|
Debug.Assert(this.Debugger != null);
|
|
if (variable.IsGlobal) {
|
|
for(int i = 0; i < globalVars.Count; i ++) {
|
|
VariableAction oldVar = (VariableAction)this.globalVars[i];
|
|
if(oldVar.Name == variable.Name) { // Duplicate var definition
|
|
if(variable.Stylesheetid < oldVar.Stylesheetid) {
|
|
Debug.Assert(variable.VarKey != -1, "Variable was already placed and it should replace prev var.");
|
|
this.globalVars[i] = variable;
|
|
this.globalVarsCache = null;
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
this.globalVars.Add(variable);
|
|
this.globalVarsCache = null;
|
|
}
|
|
else {
|
|
// local variables never conflict
|
|
localVars.Add(variable);
|
|
this.localVarsCache = null;
|
|
}
|
|
}
|
|
|
|
private void UnDefineVariables(int count) {
|
|
Debug.Assert(0 <= count, "This scope can't have more variables than we have in total");
|
|
Debug.Assert(count <= this.localVars.Count, "This scope can't have more variables than we have in total");
|
|
if(count != 0) {
|
|
this.localVars.RemoveRange(this.localVars.Count - count, count);
|
|
this.localVarsCache = null;
|
|
}
|
|
}
|
|
|
|
internal override void PopScope() {
|
|
this.UnDefineVariables(this.ScopeManager.CurrentScope.GetVeriablesCount());
|
|
base.PopScope();
|
|
}
|
|
|
|
// ---------------- Actions: ---------------
|
|
|
|
public override ApplyImportsAction CreateApplyImportsAction() {
|
|
ApplyImportsAction action = new ApplyImportsActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override ApplyTemplatesAction CreateApplyTemplatesAction() {
|
|
ApplyTemplatesAction action = new ApplyTemplatesActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override AttributeAction CreateAttributeAction() {
|
|
AttributeAction action = new AttributeActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override AttributeSetAction CreateAttributeSetAction() {
|
|
AttributeSetAction action = new AttributeSetActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override CallTemplateAction CreateCallTemplateAction() {
|
|
CallTemplateAction action = new CallTemplateActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override ChooseAction CreateChooseAction() {//!!! don't need to be here
|
|
ChooseAction action = new ChooseAction();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override CommentAction CreateCommentAction() {
|
|
CommentAction action = new CommentActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override CopyAction CreateCopyAction() {
|
|
CopyAction action = new CopyActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override CopyOfAction CreateCopyOfAction() {
|
|
CopyOfAction action = new CopyOfActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override ElementAction CreateElementAction() {
|
|
ElementAction action = new ElementActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override ForEachAction CreateForEachAction() {
|
|
ForEachAction action = new ForEachActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override IfAction CreateIfAction(IfAction.ConditionType type) {
|
|
IfAction action = new IfActionDbg(type);
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override MessageAction CreateMessageAction() {
|
|
MessageAction action = new MessageActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override NewInstructionAction CreateNewInstructionAction() {
|
|
NewInstructionAction action = new NewInstructionActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override NumberAction CreateNumberAction() {
|
|
NumberAction action = new NumberActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override ProcessingInstructionAction CreateProcessingInstructionAction() {
|
|
ProcessingInstructionAction action = new ProcessingInstructionActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override void CreateRootAction() {
|
|
this.RootAction = new RootActionDbg();
|
|
this.RootAction.Compile(this);
|
|
}
|
|
|
|
public override SortAction CreateSortAction() {
|
|
SortAction action = new SortActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override TemplateAction CreateTemplateAction() {
|
|
TemplateAction action = new TemplateActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override TemplateAction CreateSingleTemplateAction() {
|
|
TemplateAction action = new TemplateActionDbg();
|
|
action.CompileSingle(this);
|
|
return action;
|
|
}
|
|
|
|
public override TextAction CreateTextAction() {
|
|
TextAction action = new TextActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override UseAttributeSetsAction CreateUseAttributeSetsAction() {
|
|
UseAttributeSetsAction action = new UseAttributeSetsActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override ValueOfAction CreateValueOfAction() {
|
|
ValueOfAction action = new ValueOfActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override VariableAction CreateVariableAction(VariableType type) {
|
|
VariableAction action = new VariableActionDbg(type);
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
public override WithParamAction CreateWithParamAction() {
|
|
WithParamAction action = new WithParamActionDbg();
|
|
action.Compile(this);
|
|
return action;
|
|
}
|
|
|
|
// ---------------- Events: ---------------
|
|
|
|
public override BeginEvent CreateBeginEvent() {
|
|
return new BeginEventDbg(this);
|
|
}
|
|
|
|
public override TextEvent CreateTextEvent() {
|
|
return new TextEventDbg(this);
|
|
}
|
|
|
|
// Debugger enabled implemetation of most compiled actions
|
|
|
|
private class ApplyImportsActionDbg : ApplyImportsAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class ApplyTemplatesActionDbg : ApplyTemplatesAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class AttributeActionDbg : AttributeAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class AttributeSetActionDbg : AttributeSetAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class CallTemplateActionDbg : CallTemplateAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class CommentActionDbg : CommentAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class CopyActionDbg : CopyAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class CopyOfActionDbg : CopyOfAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class ElementActionDbg : ElementAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class ForEachActionDbg : ForEachAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.PushDebuggerStack();
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
if (frame.State == Finished) {
|
|
processor.PopDebuggerStack();
|
|
}
|
|
}
|
|
}
|
|
|
|
private class IfActionDbg : IfAction {
|
|
internal IfActionDbg(ConditionType type) : base(type) {}
|
|
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class MessageActionDbg : MessageAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class NewInstructionActionDbg : NewInstructionAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class NumberActionDbg : NumberAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class ProcessingInstructionActionDbg : ProcessingInstructionAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class RootActionDbg : RootAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
// SxS: This method does not take any resource name and does not expose any resources to the caller.
|
|
// It's OK to suppress the SxS warning.
|
|
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
|
|
Debug.Assert(compiler.Debugger != null);
|
|
string builtIn = compiler.Debugger.GetBuiltInTemplatesUri();
|
|
if (builtIn != null && builtIn.Length != 0) {
|
|
compiler.AllowBuiltInMode = true;
|
|
builtInSheet = compiler.RootAction.CompileImport(compiler, compiler.ResolveUri(builtIn), int.MaxValue);
|
|
compiler.AllowBuiltInMode = false;
|
|
}
|
|
|
|
dbgData.ReplaceVariables(((DbgCompiler) compiler).GlobalVariables) ;
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if (frame.State == Initialized) {
|
|
processor.PushDebuggerStack();
|
|
processor.OnInstructionExecute();
|
|
processor.PushDebuggerStack();
|
|
}
|
|
base.Execute(processor, frame);
|
|
if (frame.State == Finished) {
|
|
processor.PopDebuggerStack();
|
|
processor.PopDebuggerStack();
|
|
}
|
|
}
|
|
}
|
|
|
|
private class SortActionDbg : SortAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class TemplateActionDbg : TemplateAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.PushDebuggerStack();
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
if (frame.State == Finished) {
|
|
processor.PopDebuggerStack();
|
|
}
|
|
}
|
|
}
|
|
|
|
private class TextActionDbg : TextAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class UseAttributeSetsActionDbg : UseAttributeSetsAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class ValueOfActionDbg : ValueOfAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class VariableActionDbg : VariableAction {
|
|
internal VariableActionDbg(VariableType type) : base(type) {}
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
((DbgCompiler) compiler).DefineVariable(this);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class WithParamActionDbg : WithParamAction {
|
|
private DbgData dbgData;
|
|
internal override DbgData GetDbgData(ActionFrame frame) { return this.dbgData; }
|
|
|
|
internal override void Compile(Compiler compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
base.Compile(compiler);
|
|
}
|
|
|
|
internal override void Execute(Processor processor, ActionFrame frame) {
|
|
if(frame.State == Initialized) {
|
|
processor.OnInstructionExecute();
|
|
}
|
|
base.Execute(processor, frame);
|
|
}
|
|
}
|
|
|
|
// ---------------- Events: ---------------
|
|
|
|
private class BeginEventDbg : BeginEvent {
|
|
private DbgData dbgData;
|
|
internal override DbgData DbgData { get { return this.dbgData; } }
|
|
|
|
public BeginEventDbg(Compiler compiler) : base(compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
}
|
|
public override bool Output(Processor processor, ActionFrame frame) {
|
|
this.OnInstructionExecute(processor);
|
|
return base.Output(processor, frame);
|
|
}
|
|
}
|
|
|
|
private class TextEventDbg : TextEvent {
|
|
private DbgData dbgData;
|
|
internal override DbgData DbgData { get { return this.dbgData; } }
|
|
|
|
public TextEventDbg(Compiler compiler) : base(compiler) {
|
|
dbgData = new DbgData(compiler);
|
|
}
|
|
public override bool Output(Processor processor, ActionFrame frame) {
|
|
this.OnInstructionExecute(processor);
|
|
return base.Output(processor, frame);
|
|
}
|
|
}
|
|
}
|
|
}
|