diff --git a/TiaCodegen/CodeGen/KopCodeHelper.cs b/TiaCodegen/CodeGen/KopCodeHelper.cs
index e8c2d46..2957ae6 100644
--- a/TiaCodegen/CodeGen/KopCodeHelper.cs
+++ b/TiaCodegen/CodeGen/KopCodeHelper.cs
@@ -516,7 +516,7 @@ private void AddWires(IOperationOrSignal op)
}
else
{
- _sb.AppendLine("");
+ _sb.AppendLine("");
}
}
_sb.AppendLine("");
@@ -527,7 +527,7 @@ private void AddWires(IOperationOrSignal op)
{
_sb.AppendLine("" + (debug ?? ("")));
_sb.AppendLine("");
- _sb.AppendLine("");
+ _sb.AppendLine("");
_sb.AppendLine("");
_currentId++;
}
@@ -781,7 +781,7 @@ void ImportChildOrs (Or childOr)
if (op.Children[1] is Signal)
ch = op.Children[1];
else
- ch = op.Children[1].Children.Last();
+ ch = op.Children[1].Children.Any() ? op.Children[1].Children.Last() : op.Children[1];
if (op.Children[1] is Or || op.Children[1] is CompareOperator || op.Children[1] is Move || op.Children[1] is Convert || op.Children[1] is S_Move || op.Children[1] is ICoil)
{
diff --git a/TiaCodegen/Commands/BaseOperationOrSignal.cs b/TiaCodegen/Commands/BaseOperationOrSignal.cs
index 5075b79..5a8b48d 100644
--- a/TiaCodegen/Commands/BaseOperationOrSignal.cs
+++ b/TiaCodegen/Commands/BaseOperationOrSignal.cs
@@ -59,7 +59,7 @@ public override string ToString()
public IOperationOrSignal GetFirstChildNotAnd()
{
- if (this is And)
+ if (this is And && Children.Count > 0)
{
var ch1 = ((And)this).Children[0];
if (ch1 is BaseOperationOrSignal)
diff --git a/TiaCodegen/Commands/Functions/Arithmetic/AddCall.cs b/TiaCodegen/Commands/Functions/Arithmetic/AddCall.cs
index 101e686..b56d6f6 100644
--- a/TiaCodegen/Commands/Functions/Arithmetic/AddCall.cs
+++ b/TiaCodegen/Commands/Functions/Arithmetic/AddCall.cs
@@ -4,9 +4,9 @@
namespace TiaCodegen.Commands.Functions.Arithmetic
{
- public class MulCall : VariableArithmeticCall
+ public class AddCall : VariableArithmeticCall
{
- public MulCall(string type,
+ public AddCall(string type,
IOperationOrSignal in1,
IOperationOrSignal in2,
IOperationOrSignal in3 = null,
@@ -58,7 +58,7 @@ public MulCall(string type,
IOperationOrSignal in49 = null,
IOperationOrSignal in50 = null,
IOperationOrSignal out1 = null,
- IOperationOrSignal eno = null) : base("Mul", eno)
+ IOperationOrSignal eno = null) : base("Add", eno)
{
DisableEno = true;
Type = type;
diff --git a/TiaCodegen/Commands/Functions/Arithmetic/MulCall.cs b/TiaCodegen/Commands/Functions/Arithmetic/MulCall.cs
index b56d6f6..101e686 100644
--- a/TiaCodegen/Commands/Functions/Arithmetic/MulCall.cs
+++ b/TiaCodegen/Commands/Functions/Arithmetic/MulCall.cs
@@ -4,9 +4,9 @@
namespace TiaCodegen.Commands.Functions.Arithmetic
{
- public class AddCall : VariableArithmeticCall
+ public class MulCall : VariableArithmeticCall
{
- public AddCall(string type,
+ public MulCall(string type,
IOperationOrSignal in1,
IOperationOrSignal in2,
IOperationOrSignal in3 = null,
@@ -58,7 +58,7 @@ public AddCall(string type,
IOperationOrSignal in49 = null,
IOperationOrSignal in50 = null,
IOperationOrSignal out1 = null,
- IOperationOrSignal eno = null) : base("Add", eno)
+ IOperationOrSignal eno = null) : base("Mul", eno)
{
DisableEno = true;
Type = type;
diff --git a/TiaCodegen/Commands/Move.cs b/TiaCodegen/Commands/Move.cs
index e18eed4..cb0c8e8 100644
--- a/TiaCodegen/Commands/Move.cs
+++ b/TiaCodegen/Commands/Move.cs
@@ -9,6 +9,6 @@ public Move(params IOperationOrSignal[] operationOrSignals)
: base(operationOrSignals)
{ }
- public override int Cardinality { get { return Children.Count() - 1; } }
+ public override int Cardinality { get { return Children.Any() ? Children.Count() - 1 : 0; } }
}
}
diff --git a/TiaCodegen/Commands/Signals/Signal.cs b/TiaCodegen/Commands/Signals/Signal.cs
index 159462e..9594d1c 100644
--- a/TiaCodegen/Commands/Signals/Signal.cs
+++ b/TiaCodegen/Commands/Signals/Signal.cs
@@ -192,9 +192,10 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
{
sb.AppendLine("" + " ");
sb.AppendLine("");
- for (int i = 0; i < Escape(Name).Split('.').Length; i++) // Aufsplitten von a.b.c in einzel Elemente
+ var nameParts = Escape(Name).Split('.');
+ for (int i = 0; i < nameParts.Length; i++) // Aufsplitten von a.b.c in einzel Elemente
{
- var part = Unescape(Escape(Name).Split('.')[i]);
+ var part = Unescape(nameParts[i]);
var idx = part.IndexOf("[") + 1; // Aufsplitten von Arrays
if (idx > 0)
@@ -213,7 +214,7 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
{
var p1 = part.Substring(idx, part.Length - idx);
var accessType = "GlobalVariable";
- if (p1[0] == '#')
+ if (p1.Length > 0 && p1[0] == '#')
{
p1 = p1.Substring(1);
accessType = "LocalVariable";
@@ -224,7 +225,9 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
while (p1 != null)
{
i++;
- p1 = Unescape(Escape(Name).Split('.')[i]);
+ if (i >= nameParts.Length)
+ break;
+ p1 = Unescape(nameParts[i]);
if (p1.Contains("]"))
{
sb.AppendLine("");
@@ -328,12 +331,13 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
sb.AppendLine("" + " ");
}
sb.AppendLine("");
- var cnt = Escape(LocalName).Split('.').Length;
+ var localNameParts = Escape(LocalName).Split('.');
+ var cnt = localNameParts.Length;
if (this is FixedSignal)
cnt = 1;
for (int i = 0; i < cnt; i++) // Aufsplitten von a.b.c in einzel Elemente
{
- var part = Unescape(Escape(LocalName).Split('.')[i]);
+ var part = Unescape(localNameParts[i]);
if (this is FixedSignal)
part = LocalName;
@@ -354,7 +358,7 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
{
var p1 = part.Substring(idx, part.Length - idx);
var accessType = "GlobalVariable";
- if (p1[0] == '#')
+ if (p1.Length > 0 && p1[0] == '#')
{
p1 = p1.Substring(1);
accessType = "LocalVariable";
@@ -366,7 +370,9 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
while (p1 != null)
{
i++;
- p1 = Unescape(Escape(LocalName).Split('.')[i]);
+ if (i >= localNameParts.Length)
+ break;
+ p1 = Unescape(localNameParts[i]);
if (p1.Contains(","))
{
var innerParts = p1.Split(',');
@@ -397,7 +403,7 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
sb.AppendLine("");
var accessTypePne = "GlobalVariable";
- if (pNe[0] == '#')
+ if (pNe.Length > 0 && pNe[0] == '#')
{
pNe = pNe.Substring(1);
accessTypePne = "LocalVariable";