Skip to content

Commit 4fb6ae3

Browse files
Fix issues
1 parent ce88fd1 commit 4fb6ae3

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

‎README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ Install-Package SpiceSharp-Parser
2828
using System;
2929
using System.Linq;
3030
using SpiceSharpParser;
31+
using SpiceSharpParser.Common;
3132

3233
var netlist = string.Join(Environment.NewLine,
3334
"Low-pass RC filter",

‎src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/EntityGenerators/Components/SubCircuitGenerator.cs‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ public class SubCircuitGenerator : ComponentGenerator
2424
public override IEntity Generate(string componentIdentifier, string originalName, string type, ParameterCollection parameters, IReadingContext context)
2525
{
2626
SubCircuit subCircuit = FindSubcircuitDefinition(parameters, context);
27+
if (subCircuit == null)
28+
{
29+
return null;
30+
}
31+
2732
bool hasParameters = GetAssigmentParametersCount(parameters, out _) != 0;
2833

2934
if (context.ReaderSettings.ExpandSubcircuits || hasParameters)
@@ -182,11 +187,22 @@ private SubCircuit FindSubcircuitDefinition(ParameterCollection parameters, IRea
182187
{
183188
// first step is to find subcircuit name in parameters, a=b parameters needs to be skipped
184189
int skipCount = 0;
185-
while (parameters[parameters.Count - skipCount - 1] is AssignmentParameter || parameters[parameters.Count - skipCount - 1].Value.ToLower() == "params:")
190+
while (skipCount < parameters.Count
191+
&& (parameters[parameters.Count - skipCount - 1] is AssignmentParameter
192+
|| parameters[parameters.Count - skipCount - 1].Value.ToLower() == "params:"))
186193
{
187194
skipCount++;
188195
}
189196

197+
if (skipCount == parameters.Count)
198+
{
199+
context.Result.ValidationResult.AddError(
200+
ValidationEntrySource.Reader,
201+
"Could not find subcircuit name for subcircuit instance",
202+
parameters.LineInfo);
203+
return null;
204+
}
205+
190206
string subCircuitDefinitionName = parameters.Get(parameters.Count - skipCount - 1).Value;
191207

192208
if (context.AvailableSubcircuits.TryGetValue(subCircuitDefinitionName, out var result))
@@ -201,6 +217,11 @@ private SubCircuit FindSubcircuitDefinition(ParameterCollection parameters, IRea
201217
return result;
202218
}
203219

220+
context.Result.ValidationResult.AddError(
221+
ValidationEntrySource.Reader,
222+
$"Could not find '{subCircuitDefinitionName}' subcircuit",
223+
parameters.LineInfo);
224+
204225
return null;
205226
}
206227

0 commit comments

Comments
 (0)