Skip to content

Commit 6081583

Browse files
committed
#202 - refactoring AsString.cs
1 parent 91bd366 commit 6081583

File tree

8 files changed

+26
-16
lines changed

8 files changed

+26
-16
lines changed

src/Application/HydraScript.Application.CodeGeneration/Visitors/ExpressionInstructionProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ComplexData.Create;
66
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ComplexData.Read;
77
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ComplexData.Write;
8+
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ExplicitCast;
89
using HydraScript.Domain.BackEnd.Impl.Instructions.WithJump;
910
using HydraScript.Domain.BackEnd.Impl.Values;
1011
using HydraScript.Domain.FrontEnd.Parser;

src/Application/HydraScript.Application.CodeGeneration/Visitors/InstructionProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using HydraScript.Domain.BackEnd.Impl.Addresses;
33
using HydraScript.Domain.BackEnd.Impl.Instructions;
44
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment;
5+
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ExplicitCast;
56
using HydraScript.Domain.BackEnd.Impl.Instructions.WithJump;
67
using HydraScript.Domain.Constants;
78
using HydraScript.Domain.FrontEnd.Parser;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
namespace HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ExplicitCast;
2+
3+
public abstract class AsInstruction<T>(IValue value) : Simple(value)
4+
{
5+
protected override void Assign()
6+
{
7+
var value = Right.right!.Get();
8+
var valueAsType = value is T ? value : Convert(value);
9+
Left?.Set(valueAsType);
10+
}
11+
12+
protected abstract T Convert(object? value);
13+
14+
protected override string ToStringInternal() =>
15+
$"{Left} = {Right.right} as {typeof(T).Name})";
16+
}

src/Domain/HydraScript.Domain.BackEnd/Impl/Instructions/WithAssignment/AsString.cs renamed to src/Domain/HydraScript.Domain.BackEnd/Impl/Instructions/WithAssignment/ExplicitCast/AsString.cs

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,12 @@
22
using System.Text.Json;
33
using System.Text.Json.Serialization;
44

5-
namespace HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment;
5+
namespace HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ExplicitCast;
66

7-
public partial class AsString(IValue value) : Simple(value)
7+
public partial class AsString(IValue value) : AsInstruction<string>(value)
88
{
9-
protected override void Assign()
10-
{
11-
var value = Right.right!.Get();
12-
var valueAsString = value is string
13-
? value
14-
: JsonSerializer.Serialize(
15-
value: Right.right!.Get()!,
16-
AsStringSerializationContext.Default.Object);
17-
Left?.Set(valueAsString);
18-
}
19-
20-
protected override string ToStringInternal() =>
21-
$"{Left} = {Right.right} as string";
9+
protected override string Convert(object? value) =>
10+
JsonSerializer.Serialize(value, AsStringSerializationContext.Default.Object);
2211

2312
[JsonSourceGenerationOptions(
2413
GenerationMode = JsonSourceGenerationMode.Serialization,

tests/HydraScript.UnitTests/Domain/BackEnd/AddressedInstructionsTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using HydraScript.Domain.BackEnd.Impl.Addresses;
33
using HydraScript.Domain.BackEnd.Impl.Instructions;
44
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment;
5+
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ExplicitCast;
56
using HydraScript.Domain.BackEnd.Impl.Values;
67

78
namespace HydraScript.UnitTests.Domain.BackEnd;

tests/HydraScript.UnitTests/Domain/BackEnd/AsStringTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using HydraScript.Domain.BackEnd;
2-
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment;
32
using HydraScript.Domain.BackEnd.Impl.Values;
3+
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ExplicitCast;
44

55
namespace HydraScript.UnitTests.Domain.BackEnd;
66

tests/HydraScript.UnitTests/Domain/BackEnd/InstructionsData.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment;
55
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ComplexData.Create;
66
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ComplexData.Write;
7+
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ExplicitCast;
78
using HydraScript.Domain.BackEnd.Impl.Instructions.WithJump;
89
using HydraScript.Domain.BackEnd.Impl.Values;
910

tests/HydraScript.UnitTests/Domain/BackEnd/VirtualMachineTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment;
66
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ComplexData.Create;
77
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ComplexData.Write;
8+
using HydraScript.Domain.BackEnd.Impl.Instructions.WithAssignment.ExplicitCast;
89
using HydraScript.Domain.BackEnd.Impl.Instructions.WithJump;
910
using HydraScript.Domain.BackEnd.Impl.Values;
1011

0 commit comments

Comments
 (0)