Introduce IdentifierManager to improve PDT evaluator performance.

This commit is contained in:
2022-11-01 13:47:04 +08:00
parent 3bfc7eb643
commit 2c9be2ef1e
12 changed files with 229 additions and 145 deletions

View File

@@ -50,43 +50,38 @@ namespace Cryville.Common.Pdt {
}
}
public class PushVariable : PdtInstruction {
private string m_name;
public string Name { get { return m_name; } }
public int Name { get; private set; }
public PushVariable(string name) {
m_name = name;
Name = IdentifierManager.SharedInstance.Request(name);
}
internal override void Execute(PdtEvaluatorBase etor) {
etor.PushVariable(ref m_name);
etor.PushVariable(Name);
}
public override string ToString() {
return string.Format("pushv {0}", Name);
}
}
public class Operate : PdtInstruction {
private string m_name;
public string Name { get { return m_name; } }
public int ParamCount { get; private set; }
public PdtOperatorSignature Signature { get; private set; }
public Operate(string name, int paramCount) {
m_name = name;
ParamCount = paramCount;
Signature = new PdtOperatorSignature(name, paramCount);
}
internal override void Execute(PdtEvaluatorBase etor) {
etor.Operate(ref m_name, ParamCount);
etor.Operate(Signature);
}
public override string ToString() {
return string.Format("op {0}({1})", Name, ParamCount);
return string.Format("op {0}", Signature);
}
}
public class Collapse : PdtInstruction {
private string m_name;
public string Name { get { return m_name; } }
public int Name { get; private set; }
public LinkedListNode<PdtInstruction> Target { get; internal set; }
public Collapse(string name, LinkedListNode<PdtInstruction> target) {
m_name = name;
Name = IdentifierManager.SharedInstance.Request(name);
Target = target;
}
internal override void Execute(PdtEvaluatorBase etor) {
etor.Collapse(ref m_name, Target);
etor.Collapse(Name, Target);
}
public override string ToString() {
return string.Format("col {0}{{{1}}}", Name, Target.Value);