Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions DMCompiler/DM/DMExpression.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@
return DMReference.Invalid;
}

public virtual void EmitPushIsSaved(ExpressionContext ctx) {
ctx.Compiler.Emit(WarningCode.BadArgument, Location, $"can't get saved value of {this}");
ctx.Proc.PushNullAndError();
return;
}

/// <summary>
/// Gets the canonical name of the expression if it exists.
/// </summary>
Expand Down
16 changes: 1 addition & 15 deletions DMCompiler/DM/Expressions/Builtins.cs
Original file line number Diff line number Diff line change
Expand Up @@ -348,21 +348,7 @@ internal sealed class IsSaved(Location location, DMExpression expr) : DMExpressi
public override DMComplexValueType ValType => DMValueType.Num;

public override void EmitPushValue(ExpressionContext ctx) {
switch (expr) {
case Dereference deref:
deref.EmitPushIsSaved(ctx);
return;
case Field field:
field.EmitPushIsSaved(ctx.Proc);
return;
case Local:
ctx.Proc.PushFloat(0);
return;
default:
ctx.Compiler.Emit(WarningCode.BadArgument, expr.Location, $"can't get saved value of {expr}");
ctx.Proc.PushNullAndError();
return;
}
expr.EmitPushIsSaved(ctx);
}
}

Expand Down
2 changes: 1 addition & 1 deletion DMCompiler/DM/Expressions/Dereference.cs
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ public override void EmitPushInitial(ExpressionContext ctx) {
ctx.Proc.AddLabel(endLabel);
}

public void EmitPushIsSaved(ExpressionContext ctx) {
public override void EmitPushIsSaved(ExpressionContext ctx) {
string endLabel = ctx.Proc.NewLabelName();

if (_expression is LValue exprLValue) {
Expand Down
12 changes: 8 additions & 4 deletions DMCompiler/DM/Expressions/LValue.cs
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,10 @@ public override void EmitPushInitial(ExpressionContext ctx) {
}

public override string GetNameof(ExpressionContext ctx) => LocalVar.Name;

public override void EmitPushIsSaved(ExpressionContext ctx) {
ctx.Proc.PushFloat(0);
}
}

// Identifier of field
Expand All @@ -209,10 +213,10 @@ public override void EmitPushInitial(ExpressionContext ctx) {
}
}

public void EmitPushIsSaved(DMProc proc) {
proc.PushReferenceValue(DMReference.Src);
proc.PushString(variable.Name);
proc.IsSaved();
public override void EmitPushIsSaved(ExpressionContext ctx) {
ctx.Proc.PushReferenceValue(DMReference.Src);
ctx.Proc.PushString(variable.Name);
ctx.Proc.IsSaved();
}

public override DMReference EmitReference(ExpressionContext ctx, string endLabel,
Expand Down
Loading