Skip to content

Commit 096104f

Browse files
committed
Added IsNull, IsNotNull and Null node
1 parent eb1add0 commit 096104f

File tree

11 files changed

+856
-766
lines changed

11 files changed

+856
-766
lines changed

src/NodeDev.Blazor/Components/SourceViewer.razor

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
<style>
1010
.sourceViewer, .sourceViewer > .mud-tabs-panels {
11-
width: 100%;
12-
height: 100%
11+
width: 100%;
12+
height: 100%
1313
}
1414
</style>
1515

@@ -94,12 +94,13 @@ else
9494

9595
try
9696
{
97-
Creator = Method.Graph.Project.CreateNodeClassTypeCreator(Core.BuildOptions.Debug with { PreBuildOnly = true });
98-
Creator.CreateProjectClassesAndAssembly();
97+
var temp = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
98+
var assemblyPath = Method.Graph.Project.Build(Core.BuildOptions.Debug with { OutputPath = temp });
99+
Creator = Method.Graph.Project.NodeClassTypeCreator;
99100

100101
try
101102
{
102-
Creator.GetBodyAsCsAndMsilCode(Method, out CodeCs, out CodeMsil);
103+
Creator!.GetBodyAsCsAndMsilCode(assemblyPath, Method, out CodeCs, out CodeMsil);
103104

104105
CodeCs = $"// Pseudo code for debugging.{System.Environment.NewLine}// This is not the actual code executed, we execute IL directly!{System.Environment.NewLine}{CodeCs}";
105106

src/NodeDev.Core/Class/NodeClassMethod.cs

Lines changed: 96 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -10,125 +10,138 @@
1010

1111
namespace NodeDev.Core.Class
1212
{
13-
public class NodeClassMethod : IMethodInfo
14-
{
15-
internal record class SerializedNodeClassMethod(string Name, TypeBase.SerializedType ReturnType, List<NodeClassMethodParameter.SerializedNodeClassMethodParameter> Parameters, Graph.SerializedGraph Graph, bool IsStatic);
16-
public NodeClassMethod(NodeClass ownerClass, string name, TypeBase returnType, Graph graph, bool isStatic = false)
17-
{
18-
Class = ownerClass;
19-
Name = name;
20-
ReturnType = returnType;
21-
Graph = graph;
22-
IsStatic = isStatic;
13+
public class NodeClassMethod : IMethodInfo
14+
{
15+
internal record class SerializedNodeClassMethod(string Name, TypeBase.SerializedType ReturnType, List<NodeClassMethodParameter.SerializedNodeClassMethodParameter> Parameters, Graph.SerializedGraph Graph, bool IsStatic);
16+
public NodeClassMethod(NodeClass ownerClass, string name, TypeBase returnType, Graph graph, bool isStatic = false)
17+
{
18+
Class = ownerClass;
19+
Name = name;
20+
ReturnType = returnType;
21+
Graph = graph;
22+
IsStatic = isStatic;
2323

24-
Graph.SelfMethod = this;
25-
}
24+
Graph.SelfMethod = this;
25+
}
2626

27-
public NodeClass Class { get; }
27+
public NodeClass Class { get; }
2828

29-
public string Name { get; private set; }
29+
public string Name { get; private set; }
3030

31-
public TypeBase ReturnType { get; }
31+
public TypeBase ReturnType { get; }
3232

33-
public List<NodeClassMethodParameter> Parameters { get; } = new();
33+
public List<NodeClassMethodParameter> Parameters { get; } = new();
3434

35-
public Graph Graph { get; }
35+
public Graph Graph { get; }
3636

37-
public TypeFactory TypeFactory => Class.TypeFactory;
37+
public TypeFactory TypeFactory => Class.TypeFactory;
3838

39-
public bool IsStatic { get; set; }
39+
public bool IsStatic { get; set; }
4040

41-
public TypeBase DeclaringType => Class.ClassTypeBase;
41+
public TypeBase DeclaringType => Class.ClassTypeBase;
4242

43-
public bool HasReturnValue => ReturnType != Class.TypeFactory.Void;
43+
public bool HasReturnValue => ReturnType != Class.TypeFactory.Void;
4444

4545
public EntryNode? EntryNode => Graph.Nodes.Values.OfType<EntryNode>().FirstOrDefault();
4646

4747
public IEnumerable<ReturnNode> ReturnNodes => Graph.Nodes.Values.OfType<ReturnNode>();
4848

49+
public MethodAttributes Attributes
50+
{
51+
get
52+
{
53+
MethodAttributes attributes = MethodAttributes.Public;
54+
55+
if (IsStatic)
56+
attributes |= MethodAttributes.Static;
57+
58+
return attributes;
59+
}
60+
}
61+
4962
public void Rename(string newName)
50-
{
51-
if (string.IsNullOrWhiteSpace(newName))
52-
return;
63+
{
64+
if (string.IsNullOrWhiteSpace(newName))
65+
return;
5366

54-
Name = newName;
67+
Name = newName;
5568

56-
Graph.RaiseGraphChanged(true);
57-
}
69+
Graph.RaiseGraphChanged(true);
70+
}
5871

59-
public void AddDefaultParameter()
60-
{
61-
string name = "NewParameter";
62-
int i = 2;
63-
while (Parameters.Any(x => x.Name == name))
64-
name = $"NewParameter_{i++}";
65-
var newParameter = new NodeClassMethodParameter(name, Class.TypeFactory.Get<int>(), this);
72+
public void AddDefaultParameter()
73+
{
74+
string name = "NewParameter";
75+
int i = 2;
76+
while (Parameters.Any(x => x.Name == name))
77+
name = $"NewParameter_{i++}";
78+
var newParameter = new NodeClassMethodParameter(name, Class.TypeFactory.Get<int>(), this);
6679

67-
Parameters.Add(newParameter);
80+
Parameters.Add(newParameter);
6881

69-
foreach (var methodCall in Class.Project.GetNodes<MethodCall>())
70-
{
71-
if (methodCall.TargetMethod == this)
72-
methodCall.OnNewMethodParameter(newParameter);
73-
}
82+
foreach (var methodCall in Class.Project.GetNodes<MethodCall>())
83+
{
84+
if (methodCall.TargetMethod == this)
85+
methodCall.OnNewMethodParameter(newParameter);
86+
}
7487

75-
var entry = Graph.Nodes.Values.OfType<EntryNode>().FirstOrDefault();
76-
if (entry != null)
77-
entry.AddNewParameter(newParameter);
78-
}
88+
var entry = Graph.Nodes.Values.OfType<EntryNode>().FirstOrDefault();
89+
if (entry != null)
90+
entry.AddNewParameter(newParameter);
91+
}
7992

80-
public IEnumerable<IMethodParameterInfo> GetParameters()
81-
{
82-
return Parameters;
83-
}
93+
public IEnumerable<IMethodParameterInfo> GetParameters()
94+
{
95+
return Parameters;
96+
}
8497

85-
public MethodInfo CreateMethodInfo()
86-
{
87-
var classType = Class.ClassTypeBase.MakeRealType();
98+
public MethodInfo CreateMethodInfo()
99+
{
100+
var classType = Class.ClassTypeBase.MakeRealType();
88101

89-
var method = classType.GetMethod(Name, GetParameters().Select(x => x.ParameterType.MakeRealType()).ToArray());
102+
var method = classType.GetMethod(Name, GetParameters().Select(x => x.ParameterType.MakeRealType()).ToArray());
90103

91-
if (method == null)
92-
throw new Exception("Unable to find method: " + Name);
104+
if (method == null)
105+
throw new Exception("Unable to find method: " + Name);
93106

94-
return method;
95-
}
107+
return method;
108+
}
96109

97-
#region Serialization
110+
#region Serialization
98111

99-
private SerializedNodeClassMethod? SavedDataDuringDeserializationStep1 { get; set; }
100-
internal static NodeClassMethod Deserialize(NodeClass owner, SerializedNodeClassMethod serializedNodeClassMethod)
101-
{
102-
var returnType = TypeBase.Deserialize(owner.Project.TypeFactory, serializedNodeClassMethod.ReturnType);
103-
var graph = new Graph();
104-
var nodeClassMethod = new NodeClassMethod(owner, serializedNodeClassMethod.Name, returnType, graph, serializedNodeClassMethod.IsStatic);
105-
graph.SelfMethod = nodeClassMethod; // a bit / really ugly
112+
private SerializedNodeClassMethod? SavedDataDuringDeserializationStep1 { get; set; }
113+
internal static NodeClassMethod Deserialize(NodeClass owner, SerializedNodeClassMethod serializedNodeClassMethod)
114+
{
115+
var returnType = TypeBase.Deserialize(owner.Project.TypeFactory, serializedNodeClassMethod.ReturnType);
116+
var graph = new Graph();
117+
var nodeClassMethod = new NodeClassMethod(owner, serializedNodeClassMethod.Name, returnType, graph, serializedNodeClassMethod.IsStatic);
118+
graph.SelfMethod = nodeClassMethod; // a bit / really ugly
106119

107-
foreach (var parameter in serializedNodeClassMethod.Parameters)
108-
nodeClassMethod.Parameters.Add(NodeClassMethodParameter.Deserialize(owner.Project.TypeFactory, parameter, nodeClassMethod));
120+
foreach (var parameter in serializedNodeClassMethod.Parameters)
121+
nodeClassMethod.Parameters.Add(NodeClassMethodParameter.Deserialize(owner.Project.TypeFactory, parameter, nodeClassMethod));
109122

110-
nodeClassMethod.SavedDataDuringDeserializationStep1 = serializedNodeClassMethod;
123+
nodeClassMethod.SavedDataDuringDeserializationStep1 = serializedNodeClassMethod;
111124

112-
return nodeClassMethod;
113-
}
125+
return nodeClassMethod;
126+
}
114127

115-
public void Deserialize_Step3()
116-
{
117-
if (SavedDataDuringDeserializationStep1 == null)
118-
throw new Exception("Cannot call Deserialize_Step3 before calling Deserialize");
128+
public void Deserialize_Step3()
129+
{
130+
if (SavedDataDuringDeserializationStep1 == null)
131+
throw new Exception("Cannot call Deserialize_Step3 before calling Deserialize");
119132

120-
Graph.Deserialize(SavedDataDuringDeserializationStep1.Graph, Graph);
133+
Graph.Deserialize(SavedDataDuringDeserializationStep1.Graph, Graph);
121134

122-
SavedDataDuringDeserializationStep1 = null;
123-
}
135+
SavedDataDuringDeserializationStep1 = null;
136+
}
124137

125-
internal SerializedNodeClassMethod Serialize()
126-
{
127-
var serializedNodeClassMethod = new SerializedNodeClassMethod(Name, ReturnType.SerializeWithFullTypeName(), Parameters.Select(x => x.Serialize()).ToList(), Graph.Serialize(), IsStatic);
138+
internal SerializedNodeClassMethod Serialize()
139+
{
140+
var serializedNodeClassMethod = new SerializedNodeClassMethod(Name, ReturnType.SerializeWithFullTypeName(), Parameters.Select(x => x.Serialize()).ToList(), Graph.Serialize(), IsStatic);
128141

129-
return serializedNodeClassMethod;
130-
}
142+
return serializedNodeClassMethod;
143+
}
131144

132-
#endregion
133-
}
145+
#endregion
146+
}
134147
}

0 commit comments

Comments
 (0)