Add forced variable syntax in PDT.
This commit is contained in:
@@ -51,13 +51,14 @@ namespace Cryville.Common.Pdt {
|
||||
}
|
||||
public class PushVariable : PdtInstruction {
|
||||
public int Name { get; private set; }
|
||||
public PushVariable(int name) { Name = name; }
|
||||
public PushVariable(string name) : this(IdentifierManager.SharedInstance.Request(name)) { }
|
||||
public bool Forced { get; private set; }
|
||||
public PushVariable(int name, bool forced = false) { Name = name; Forced = forced; }
|
||||
public PushVariable(string name, bool forced = false) : this(IdentifierManager.SharedInstance.Request(name)) { Forced = forced; }
|
||||
internal override void Execute(PdtEvaluatorBase etor) {
|
||||
etor.PushVariable(Name);
|
||||
etor.PushVariable(Name, Forced);
|
||||
}
|
||||
public override string ToString() {
|
||||
return string.Format("pushv {0}", IdentifierManager.SharedInstance.Retrieve(Name));
|
||||
return string.Format(Forced ? "pushv ?{0}" : "pushv {0}", IdentifierManager.SharedInstance.Retrieve(Name));
|
||||
}
|
||||
}
|
||||
public class Operate : PdtInstruction {
|
||||
@@ -239,7 +240,11 @@ namespace Cryville.Common.Pdt {
|
||||
if (defs.TryGetValue(buf.Value.Value, out def)) {
|
||||
foreach (var i in def.Instructions) ins.AddLast(i);
|
||||
}
|
||||
else ins.AddLast(new PdtInstruction.PushVariable(buf.Value.Value));
|
||||
else {
|
||||
var name = buf.Value.Value;
|
||||
if (name[0] == '?') ins.AddLast(new PdtInstruction.PushVariable(name.Substring(1), true));
|
||||
else ins.AddLast(new PdtInstruction.PushVariable(name));
|
||||
}
|
||||
buf = null;
|
||||
TryPushAdjMul(ins, ref flag);
|
||||
}
|
||||
|
Reference in New Issue
Block a user