Add forced variable syntax in PDT.
This commit is contained in:
@@ -105,7 +105,7 @@ namespace Cryville.Common.Pdt {
|
||||
else if (i is PdtInstruction.PushVariable) {
|
||||
i.Execute(this);
|
||||
var frame = _stack[_framecount - 1];
|
||||
if (frame.Type != PdtInternalType.Undefined) {
|
||||
if (frame.Type != PdtInternalType.Undefined && frame.Type != PdtInternalType.Error) {
|
||||
_rip = il.AddAfter(_rip, new PdtInstruction.PushConstant(frame.Type, _mem, frame.Offset, frame.Length));
|
||||
il.Remove(_rip.Previous);
|
||||
}
|
||||
@@ -148,10 +148,10 @@ namespace Cryville.Common.Pdt {
|
||||
_goffset += value.Length;
|
||||
}
|
||||
}
|
||||
internal unsafe void PushVariable(int name) {
|
||||
internal unsafe void PushVariable(int name, bool forced) {
|
||||
fixed (StackFrame* frame = &_stack[_framecount++]) {
|
||||
byte[] value;
|
||||
GetVariable(name, out frame->Type, out value);
|
||||
GetVariable(name, forced, out frame->Type, out value);
|
||||
frame->Offset = _goffset;
|
||||
frame->Length = value.Length;
|
||||
Array.Copy(value, 0, _mem, _goffset, value.Length);
|
||||
@@ -162,9 +162,10 @@ namespace Cryville.Common.Pdt {
|
||||
/// Gets a variable of the specified name.
|
||||
/// </summary>
|
||||
/// <param name="name">The name of the variable.</param>
|
||||
/// <param name="forced">Whether to produce an error stack instead of an identifier stack if the variable is not found.</param>
|
||||
/// <param name="type">The type of the variable.</param>
|
||||
/// <param name="value">The value of the variable.</param>
|
||||
protected abstract void GetVariable(int name, out int type, out byte[] value);
|
||||
protected abstract void GetVariable(int name, bool forced, out int type, out byte[] value);
|
||||
internal void Operate(PdtOperatorSignature sig) {
|
||||
PdtOperator op;
|
||||
try { op = GetOperator(sig); }
|
||||
|
Reference in New Issue
Block a user