From a26d890931c455f24e5c1d4a2a283485138a8920 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Wed, 8 Oct 2025 09:01:22 -0700 Subject: [PATCH 01/26] Made progress on top port semantics --- .../src/main/scala/analysis/Analysis.scala | 23 +++++++ .../analysis/Analyzers/BasicUseAnalyzer.scala | 19 +++--- .../analysis/Analyzers/UseAnalyzer.scala | 11 +-- .../CheckSemantics/CheckTopologyDefs.scala | 28 ++------ .../ComputeDependencies/MapUsesToLocs.scala | 3 + .../scala/analysis/Semantics/Component.scala | 33 +++++---- .../Semantics/ComponentInstance.scala | 7 +- .../scala/analysis/Semantics/Connection.scala | 34 ++++++++-- .../DictionaryEntries.scala | 2 +- .../DictionaryUsedSymbols.scala | 2 +- .../scala/analysis/Semantics/Interface.scala | 29 +++++--- .../Semantics/InterfaceInstance.scala | 48 +++++++++++++ .../Semantics/PortInstanceIdentifier.scala | 20 +++--- ...ortInterface.scala => PortInterface.scala} | 44 ++++++++---- .../GeneralPortNumbering.scala | 4 +- .../MatchedPortNumbering.scala | 11 +-- .../ResolveTopology/PatternResolver.scala | 6 +- .../ResolvePartiallyNumbered.scala | 40 +++++++++-- .../ResolveTopology/ResolvePortNumbers.scala | 2 +- .../ResolveUnconnectedPorts.scala | 4 +- .../scala/analysis/Semantics/Symbol.scala | 2 + .../analysis/Semantics/TlmPacketSet.scala | 2 +- .../scala/analysis/Semantics/Topology.scala | 67 ++++++++++++++----- .../src/main/scala/analysis/UsedSymbols.scala | 6 ++ compiler/lib/src/main/scala/ast/Ast.scala | 7 +- .../src/main/scala/ast/AstTransformer.scala | 17 ++--- .../lib/src/main/scala/ast/AstVisitor.scala | 7 +- .../src/main/scala/codegen/AstWriter.scala | 18 ++--- .../TopComponentIncludes.scala | 2 +- .../TopologyCppWriter/TopConfigObjects.scala | 7 +- .../TopologyCppWriter/TopHelperFns.scala | 2 +- .../TopologyCppWriterUtils.scala | 2 +- .../src/main/scala/codegen/FppWriter.scala | 15 +---- .../JsonEncoder/AnalysisJsonEncoder.scala | 56 ++++++++-------- .../codegen/LayoutWriter/LayoutWriter.scala | 4 +- .../XmlFppWriter/TopologyXmlFppWriter.scala | 8 +-- .../lib/src/main/scala/syntax/Parser.scala | 11 ++- compiler/lib/src/main/scala/util/Error.scala | 12 ++-- compiler/lib/src/main/scala/util/Result.scala | 2 +- .../lib/src/main/scala/util/Version.scala | 2 +- 40 files changed, 391 insertions(+), 228 deletions(-) create mode 100644 compiler/lib/src/main/scala/analysis/Semantics/InterfaceInstance.scala rename compiler/lib/src/main/scala/analysis/Semantics/{GenericPortInterface.scala => PortInterface.scala} (68%) diff --git a/compiler/lib/src/main/scala/analysis/Analysis.scala b/compiler/lib/src/main/scala/analysis/Analysis.scala index 23757e4f0..2f589e244 100644 --- a/compiler/lib/src/main/scala/analysis/Analysis.scala +++ b/compiler/lib/src/main/scala/analysis/Analysis.scala @@ -243,6 +243,29 @@ case class Analysis( for (cis <- getComponentInstanceSymbol(id)) yield this.componentInstanceMap(cis) + /** Gets an interface instance symbol from the use-def map */ + def getInterfaceInstanceSymbol(id: AstNode.Id): Result.Result[Symbol.InterfaceInstance] = + this.useDefMap(id) match { + case cis: Symbol.ComponentInstance => Right(cis) + case ts: Symbol.Topology => Right(ts) + case s => Left( + SemanticError.InvalidSymbol( + s.getUnqualifiedName, + Locations.get(id), + "not a component instance or topology symbol", + s.getLoc + ) + ) + } + + /** Gets an interface instance from the topology or component instance map */ + def getInterfaceInstance(id: AstNode.Id): Result.Result[InterfaceInstance] = + for (iis <- getInterfaceInstanceSymbol(id)) + yield iis match { + case cis: Symbol.ComponentInstance => InterfaceInstance.fromComponentInstance(this.componentInstanceMap(cis)) + case top: Symbol.Topology => InterfaceInstance.fromTopology(this.topologyMap(top)) + } + /** Gets an interface symbol from use-def map */ def getInterfaceSymbol(id: AstNode.Id): Result.Result[Symbol.Interface] = this.useDefMap(id) match { diff --git a/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala b/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala index 429177a02..655d56390 100644 --- a/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala +++ b/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala @@ -15,6 +15,9 @@ trait BasicUseAnalyzer extends TypeExpressionAnalyzer { /** A use of a component instance definition */ def componentInstanceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified): Result = default(a) + /** A use of a interface instance (topology def or component instance def) */ + def interfaceInstanceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified): Result = default(a) + /** A use of a constant definition or enumerated constant definition */ def constantUse(a: Analysis, node: AstNode[Ast.Expr], use: Name.Qualified): Result = default(a) @@ -77,10 +80,10 @@ trait BasicUseAnalyzer extends TypeExpressionAnalyzer { constantUse(a, node, use) } - override def specCompInstanceAnnotatedNode(a: Analysis, node: Ast.Annotated[AstNode[Ast.SpecCompInstance]]) = { + override def specInstanceAnnotatedNode(a: Analysis, node: Ast.Annotated[AstNode[Ast.SpecInstance]]) = { val (_, node1, _) = node val data = node1.data - qualIdentNode (componentInstanceUse) (a, data.instance) + qualIdentNode (interfaceInstanceUse) (a, data.instance) } override def specStateMachineInstanceAnnotatedNode(a: Analysis, node: Ast.Annotated[AstNode[Ast.SpecStateMachineInstance]]) = { @@ -107,8 +110,8 @@ trait BasicUseAnalyzer extends TypeExpressionAnalyzer { data match { case direct : Ast.SpecConnectionGraph.Direct => visitList(a, direct.connections, connection) case pattern : Ast.SpecConnectionGraph.Pattern => for { - a <- qualIdentNode (componentInstanceUse) (a, pattern.source) - a <- visitList(a, pattern.targets, qualIdentNode(componentInstanceUse)) + a <- qualIdentNode (interfaceInstanceUse) (a, pattern.source) + a <- visitList(a, pattern.targets, qualIdentNode(interfaceInstanceUse)) } yield a } } @@ -165,12 +168,6 @@ trait BasicUseAnalyzer extends TypeExpressionAnalyzer { a <- visitList(a, aNode._2.data.omitted, tlmChannelIdentifierNode) } yield a - override def specTopImportAnnotatedNode(a: Analysis, node: Ast.Annotated[AstNode[Ast.SpecImport]]) = { - val (_, node1, _) = node - val data = node1.data - qualIdentNode(topologyUse)(a, data.sym) - } - override def specInterfaceImportAnnotatedNode(a: Analysis, node: Ast.Annotated[AstNode[Ast.SpecImport]]) = { val (_, node1, _) = node val data = node1.data @@ -183,7 +180,7 @@ trait BasicUseAnalyzer extends TypeExpressionAnalyzer { } private def portInstanceIdentifierNode(a: Analysis, node: AstNode[Ast.PortInstanceIdentifier]): Result = - qualIdentNode (componentInstanceUse) (a, node.data.componentInstance) + qualIdentNode (interfaceInstanceUse) (a, node.data.interfaceInstance) private def qualIdentNode (f: (Analysis, AstNode[Ast.QualIdent], Name.Qualified) => Result) diff --git a/compiler/lib/src/main/scala/analysis/Analyzers/UseAnalyzer.scala b/compiler/lib/src/main/scala/analysis/Analyzers/UseAnalyzer.scala index 376f1f50b..afa08dbb0 100644 --- a/compiler/lib/src/main/scala/analysis/Analyzers/UseAnalyzer.scala +++ b/compiler/lib/src/main/scala/analysis/Analyzers/UseAnalyzer.scala @@ -1,7 +1,9 @@ package fpp.compiler.analysis -import fpp.compiler.ast._ -import fpp.compiler.util._ +import fpp.compiler.ast.* +import fpp.compiler.util.* + +import scala.annotation.tailrec /** * Analyze uses @@ -10,6 +12,7 @@ import fpp.compiler.util._ trait UseAnalyzer extends BasicUseAnalyzer { /** Gets a qualified name from a dot expression */ + @tailrec private def getQualifiedName( e: Ast.Expr, qualifier: List[Name.Unqualified] = Nil @@ -18,7 +21,7 @@ trait UseAnalyzer extends BasicUseAnalyzer { Name.Qualified.fromIdentList(id :: qualifier) case Ast.ExprDot(e1, id) => getQualifiedName(e1.data, id.data :: qualifier) - case _ => throw new InternalError("expected a qualified name") + case _ => throw InternalError("expected a qualified name") } override def exprDotNode(a: Analysis, node: AstNode[Ast.Expr], e: Ast.ExprDot) = @@ -29,7 +32,7 @@ trait UseAnalyzer extends BasicUseAnalyzer { constantUse(a, node, use) case Some(_) => // This is some other type of symbol, which it shouldn't be - throw new InternalError("expected a constant use") + throw InternalError("expected a constant use") case None => // e is not a use, so it selects a member of a struct value // Analyze the left-hand expression representing the struct value diff --git a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTopologyDefs.scala b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTopologyDefs.scala index 0c34f88d4..729a11e07 100644 --- a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTopologyDefs.scala +++ b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTopologyDefs.scala @@ -18,7 +18,7 @@ object CheckTopologyDefs a.topologyMap.get(symbol) match { case None => // Topology is not in the map: visit it - val a1 = a.copy(topology = Some(Topology(aNode))) + val a1 = a.copy(topology = Some(Topology(aNode, a.getQualifiedName(symbol)))) for { // Visit topology members and compute unresolved top a <- super.defTopologyAnnotatedNode(a1, aNode) @@ -41,17 +41,17 @@ object CheckTopologyDefs } } - override def specCompInstanceAnnotatedNode( + override def specInstanceAnnotatedNode( a: Analysis, - aNode: Ast.Annotated[AstNode[Ast.SpecCompInstance]] + aNode: Ast.Annotated[AstNode[Ast.SpecInstance]] ) = { val node = aNode._2 val instanceNode = node.data.instance for { - instance <- a.getComponentInstance(instanceNode.id) + symbol <- a.getInterfaceInstanceSymbol(instanceNode.id) + instance <- a.getInterfaceInstance(instanceNode.id) topology <- a.topology.get.addUniqueInstance( - instance, - Locations.get(node.id) + symbol, instance, Locations.get(node.id) ) } yield a.copy(topology = Some(topology)) @@ -77,20 +77,4 @@ object CheckTopologyDefs } yield a.copy(topology = Some(topology)) } - override def specTopImportAnnotatedNode( - a: Analysis, - aNode: Ast.Annotated[AstNode[Ast.SpecImport]] - ) = { - val node = aNode._2 - val topNode = node.data.sym - for { - ts <- a.getTopologySymbol(topNode.id) - topology <- a.topology.get.addImportedTopology( - ts, - Locations.get(node.id) - ) - } - yield a.copy(topology = Some(topology)) - } - } diff --git a/compiler/lib/src/main/scala/analysis/ComputeDependencies/MapUsesToLocs.scala b/compiler/lib/src/main/scala/analysis/ComputeDependencies/MapUsesToLocs.scala index d0f59d124..3959324eb 100644 --- a/compiler/lib/src/main/scala/analysis/ComputeDependencies/MapUsesToLocs.scala +++ b/compiler/lib/src/main/scala/analysis/ComputeDependencies/MapUsesToLocs.scala @@ -11,6 +11,9 @@ object MapUsesToLocs extends BasicUseAnalyzer { override def componentInstanceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = analyzeUse(a, Ast.SpecLoc.ComponentInstance, use) + override def interfaceInstanceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = + analyzeUse(a, Ast.SpecLoc.ComponentInstance, use) + override def stateMachineUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = analyzeUse(a, Ast.SpecLoc.StateMachine, use) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Component.scala b/compiler/lib/src/main/scala/analysis/Semantics/Component.scala index ba29f5df5..f1d962f13 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Component.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Component.scala @@ -9,10 +9,8 @@ import fpp.compiler.util.* case class Component( /** The AST node defining the component */ aNode: Ast.Annotated[AstNode[Ast.DefComponent]], - /** The map from port names to port instances */ - portMap: Map[Name.Unqualified, PortInstance] = Map(), - /** The map from special port kinds to special port instances */ - specialPortMap: Map[Ast.SpecPortInstance.SpecialKind, PortInstance.Special] = Map(), + /* The port interface of the component */ + portInterface: PortInterface = PortInterface(), /** The map from command opcodes to commands */ commandMap: Map[Command.Opcode, Command] = Map(), /** The next default opcode */ @@ -45,13 +43,9 @@ case class Component( recordMap: Map[Record.Id, Record] = Map(), /** The next default record ID */ defaultRecordId: BigInt = 0 -) extends GenericPortInterface[Component](aNode._2.data.name, portMap, specialPortMap) { - def withPortMap(newPortMap: Map[Unqualified, PortInstance]): Component = - this.copy(portMap = newPortMap) - - def withSpecialPortMap( - newSpecialPortMap: Map[SpecPortInstance.SpecialKind, PortInstance.Special] - ): Component = this.copy(specialPortMap = newSpecialPortMap) +) { + val portMap = portInterface.portMap + val specialPortMap = portInterface.specialPortMap /** Query whether the component has parameters */ def hasParameters = this.paramMap.nonEmpty @@ -207,6 +201,21 @@ case class Component( yield component } + /** Add a port instance */ + def addPortInstance(instance: PortInstance): Result.Result[Component] = + for { + pi <- portInterface.addPortInstance(instance) + } yield this.copy(portInterface = pi) + + def addImportedInterface( + interface: Interface, + importNodeId: AstNode.Id, + ): Result.Result[Component] = { + for { + pi <- portInterface.addImportedInterface(interface, importNodeId) + } yield this.copy(portInterface = pi) + } + /** Add a data product record */ def addRecord( idOpt: Option[Record.Id], @@ -489,7 +498,7 @@ case class Component( val name = node.data val loc = Locations.get(node.id) for { - instance <- this.getPortInstance(node) + instance <- this.portInterface.getPortInstance(node, this.aNode._2.data.name) general <- instance match { case general: PortInstance.General => Right(general) case _ => Left( diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ComponentInstance.scala b/compiler/lib/src/main/scala/analysis/Semantics/ComponentInstance.scala index bbcb883e9..0ea980d8f 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ComponentInstance.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ComponentInstance.scala @@ -18,8 +18,6 @@ final case class ComponentInstance( initSpecifierMap: Map[Int, InitSpecifier] = Map() ) extends Ordered[ComponentInstance] { - override def toString = qualifiedName.toString - /** Adds an init specifier */ def addInitSpecifier(initSpecifier: InitSpecifier): Result.Result[ComponentInstance] = { @@ -35,12 +33,17 @@ final case class ComponentInstance( } } + /** Gets the qualified name of the component instance */ + def getQualifiedName = qualifiedName + /** Gets the unqualified name of the component instance */ def getUnqualifiedName = aNode._2.data.name /** Gets the location of the component instance */ def getLoc: Location = Locations.get(aNode._2.id) + def getInterface: PortInterface = component.portInterface + override def compare(that: ComponentInstance) = this.qualifiedName.toString.compare(that.qualifiedName.toString) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Connection.scala b/compiler/lib/src/main/scala/analysis/Semantics/Connection.scala index a844a62b4..a53de041f 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Connection.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Connection.scala @@ -109,12 +109,18 @@ case class Connection( def portMatchingExists(pml: List[Component.PortMatching], pi: PortInstance): Boolean = pml.exists(pm => pi.equals(pm.instance1) || pi.equals(pm.instance2)) - val fromPi = from.port.portInstance - val toPi = to.port.portInstance - val fromPml = from.port.componentInstance.component.portMatchingList - val toPml = to.port.componentInstance.component.portMatchingList + from.port.interfaceInstance match { + case InterfaceInstance.InterfaceComponentInstance(ci) => { + val fromPi = from.port.portInstance + val toPi = to.port.portInstance + val fromPml = ci.component.portMatchingList + val toPml = ci.component.portMatchingList + + portMatchingExists(fromPml, fromPi) || portMatchingExists(toPml, toPi) + } - portMatchingExists(fromPml, fromPi) || portMatchingExists(toPml, toPi) + case _ => false + } } /** Compare two connections */ @@ -173,7 +179,9 @@ object Connection { /** The port instance identifier */ port: PortInstanceIdentifier, /** The port number */ - portNumber: Option[Int] = None + portNumber: Option[Int] = None, + /** Topology port this mapped to */ + topologyPort: Option[Endpoint] = None ) extends Ordered[Endpoint] { override def toString = portNumber match { @@ -203,6 +211,20 @@ object Connection { case None => Right(()) } + /** Get underlying endpoint by stripping off topology port aliases */ + def getUnderlyingEndpoint(): Endpoint = { + port.interfaceInstance match { + // This endpoint is already a component instance + case InterfaceInstance.InterfaceComponentInstance(ci) => this + case InterfaceInstance.InterfaceTopology(top) => this.copy( + // Look up the mapping for this port instance + port = top.portMap(port.portInstance.getUnqualifiedName), + topologyPort = Some(this) + // Recursively resolve the endpoint to a component instance + ).getUnderlyingEndpoint() + } + } + } object Endpoint { diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ConstructDictionary/DictionaryEntries.scala b/compiler/lib/src/main/scala/analysis/Semantics/ConstructDictionary/DictionaryEntries.scala index b07fa6399..b01e398c5 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ConstructDictionary/DictionaryEntries.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ConstructDictionary/DictionaryEntries.scala @@ -45,7 +45,7 @@ final case class DictionaryEntries(a: Analysis, t: Topology) { val m = getSpecMap(ci.component) m.foldLeft(entryMap) (addEntry(constructEntry, ci)) } - t.instanceMap.keys.foldLeft (Map[BigInt, Entry]()) (addEntriesForInstance) + t.componentInstanceMap.keys.foldLeft (Map[BigInt, Entry]()) (addEntriesForInstance) } private def addEntry[Specifier, Entry]( diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ConstructDictionary/DictionaryUsedSymbols.scala b/compiler/lib/src/main/scala/analysis/Semantics/ConstructDictionary/DictionaryUsedSymbols.scala index 27241591a..c41d1c86a 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ConstructDictionary/DictionaryUsedSymbols.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ConstructDictionary/DictionaryUsedSymbols.scala @@ -9,7 +9,7 @@ final case class DictionaryUsedSymbols(a: Analysis, t: Topology) { d.copy(usedSymbolSet = getUsedSymbolSet) private def getUsedSymbolSet: Set[Symbol] = - t.instanceMap.keys.toSet.flatMap(getUsedSymbolsForInstance) ++ + t.componentInstanceMap.keys.toSet.flatMap(getUsedSymbolsForInstance) ++ a.getImpliedUses(ImpliedUse.Kind.Type, t.aNode._2.id).map(iu => a.useDefMap(iu.id)) ++ a.getImpliedUses(ImpliedUse.Kind.Constant, t.aNode._2.id).map(iu => a.useDefMap(iu.id)) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Interface.scala b/compiler/lib/src/main/scala/analysis/Semantics/Interface.scala index 1587ef888..20cb1893b 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Interface.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Interface.scala @@ -7,16 +7,23 @@ import fpp.compiler.util.* case class Interface( /** The AST node defining the component */ aNode: Ast.Annotated[AstNode[Ast.DefInterface]], - /** The map from port names to port instances */ - portMap: Map[Name.Unqualified, PortInstance] = Map(), - /** The map from special port kinds to special port instances */ - specialPortMap: Map[Ast.SpecPortInstance.SpecialKind, PortInstance.Special] = Map(), -) extends GenericPortInterface[Interface](aNode._2.data.name, portMap, specialPortMap) { - def withPortMap(newPortMap: Map[Name.Unqualified, PortInstance]): Interface = - this.copy(portMap = newPortMap) - - def withSpecialPortMap( - newSpecialPortMap: Map[Ast.SpecPortInstance.SpecialKind, PortInstance.Special] - ): Interface = this.copy(specialPortMap = newSpecialPortMap) + /* The port interface of the component */ + portInterface: PortInterface = PortInterface(), +) { + /** Add a port instance */ + def addPortInstance(instance: PortInstance): Result.Result[Interface] = + for { + pi <- portInterface.addPortInstance(instance) + } + yield this.copy(portInterface = pi) + def addImportedInterface( + interface: Interface, + importNodeId: AstNode.Id, + ): Result.Result[Interface] = { + for { + pi <- portInterface.addImportedInterface(interface, importNodeId) + } + yield this.copy(portInterface = pi) + } } diff --git a/compiler/lib/src/main/scala/analysis/Semantics/InterfaceInstance.scala b/compiler/lib/src/main/scala/analysis/Semantics/InterfaceInstance.scala new file mode 100644 index 000000000..9e9112b6a --- /dev/null +++ b/compiler/lib/src/main/scala/analysis/Semantics/InterfaceInstance.scala @@ -0,0 +1,48 @@ +package fpp.compiler.analysis + +import fpp.compiler.ast._ +import fpp.compiler.util._ + +/** An FPP interface instance */ +sealed trait InterfaceInstance { + /** Gets the qualified name of the interface instance */ + def getQualifiedName: Name.Qualified + + /** Gets the unqualified name of the interface instance */ + def getUnqualifiedName: String + + /** Gets the location of the interface instance */ + def getLoc: Location + + /** Get the full port interface of this instance */ + def getInterface: PortInterface + + /* Get a port instance given the name of the port instance */ + def getPortInstance(name: AstNode[Ast.Ident]): Result.Result[PortInstance] = + getInterface.getPortInstance(name, getUnqualifiedName) + +} + +object InterfaceInstance { + + final case class InterfaceComponentInstance(ci: ComponentInstance) extends InterfaceInstance { + override def getQualifiedName: Name.Qualified = ci.getQualifiedName + override def getUnqualifiedName: String = ci.getUnqualifiedName + override def getLoc: Location = ci.getLoc + override def getInterface: PortInterface = ci.getInterface + } + + final case class InterfaceTopology(top: Topology) extends InterfaceInstance { + override def getQualifiedName: Name.Qualified = top.getQualifiedName + override def getUnqualifiedName: String = top.getUnqualifiedName + override def getLoc: Location = top.getLoc + override def getInterface: PortInterface = top.getInterface + } + + def fromComponentInstance(ci: ComponentInstance) = + InterfaceComponentInstance(ci) + + def fromTopology(top: Topology) = + InterfaceTopology(top) + +} \ No newline at end of file diff --git a/compiler/lib/src/main/scala/analysis/Semantics/PortInstanceIdentifier.scala b/compiler/lib/src/main/scala/analysis/Semantics/PortInstanceIdentifier.scala index ba6d4e42e..2e751edb4 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/PortInstanceIdentifier.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/PortInstanceIdentifier.scala @@ -5,8 +5,8 @@ import fpp.compiler.util._ /** An FPP port instance identifier */ case class PortInstanceIdentifier( - /** The component instance */ - componentInstance: ComponentInstance, + /** The interface instance */ + interfaceInstance: InterfaceInstance, /** The port instance */ portInstance: PortInstance ) { @@ -15,16 +15,16 @@ case class PortInstanceIdentifier( /** Gets the qualified name */ def getQualifiedName: Name.Qualified = { - val componentName = componentInstance.qualifiedName - val identList = componentName.toIdentList + val instanceName = interfaceInstance.getQualifiedName + val identList = instanceName.toIdentList Name.Qualified.fromIdentList(identList :+ portInstance.getUnqualifiedName) } /** Gets the unqualified name */ def getUnqualifiedName: Name.Qualified = { - val componentName = componentInstance.getUnqualifiedName + val instanceName = interfaceInstance.getUnqualifiedName val portName = portInstance.getUnqualifiedName - val identList = List(componentName, portName) + val identList = List(instanceName, portName) Name.Qualified.fromIdentList(identList) } @@ -37,15 +37,15 @@ object PortInstanceIdentifier { Result.Result[PortInstanceIdentifier] = { val data = node.data for { - componentInstance <- a.getComponentInstance( - data.componentInstance.id + interfaceInstance <- a.getInterfaceInstance( + data.interfaceInstance.id ) - portInstance <- componentInstance.component.getPortInstance( + portInstance <- interfaceInstance.getPortInstance( data.portName ) } yield PortInstanceIdentifier( - componentInstance, + interfaceInstance, portInstance ) } diff --git a/compiler/lib/src/main/scala/analysis/Semantics/GenericPortInterface.scala b/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala similarity index 68% rename from compiler/lib/src/main/scala/analysis/Semantics/GenericPortInterface.scala rename to compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala index 9b7083fbf..c9738c935 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/GenericPortInterface.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala @@ -3,32 +3,52 @@ package fpp.compiler.analysis import fpp.compiler.ast.{Ast, AstNode, Locations} import fpp.compiler.util._ -trait GenericPortInterface[T <: GenericPortInterface[T]]( - /** Name of the parent symbol that defines this interface */ - defName: String, +/** An FPP Port Interface (set of port instances) */ +case class PortInterface( /** The map from port names to port instances */ portMap: Map[Name.Unqualified, PortInstance] = Map(), /** The map from special port kinds to special port instances */ specialPortMap: Map[Ast.SpecPortInstance.SpecialKind, PortInstance.Special] = Map(), ) { - def withPortMap(newPortMap: Map[Name.Unqualified, PortInstance]): T - def withSpecialPortMap(newSpecialPortMap: Map[Ast.SpecPortInstance.SpecialKind, PortInstance.Special]): T + def withPortMap(newPortMap: Map[Name.Unqualified, PortInstance]) = + this.copy(portMap = newPortMap) + + def withSpecialPortMap(newSpecialPortMap: Map[Ast.SpecPortInstance.SpecialKind, PortInstance.Special]) = + this.copy(specialPortMap = newSpecialPortMap) + + def isSubsetOf(other: PortInterface): Boolean = + // Find the first point that does not exist or does not match in the other interface + portMap.find((name, pi) => { + other.portMap.get(name) match { + case Some(opi) => + // The port exists, make sure its the same as ours + pi != opi + case None => true + } + }).isEmpty && specialPortMap.find((name, pi) => { + other.specialPortMap.get(name) match { + case Some(opi) => + // The port exists, make sure its the same as ours + pi != opi + case None => true + } + }).isEmpty /** Gets a port instance by name */ - def getPortInstance(name: AstNode[Ast.Ident]): Result.Result[PortInstance] = + def getPortInstance(name: AstNode[Ast.Ident], interfaceName: String): Result.Result[PortInstance] = portMap.get(name.data) match { case Some(portInstance) => Right(portInstance) case None => Left( SemanticError.InvalidPortInstanceId( Locations.get(name.id), name.data, - defName + interfaceName ) ) } /** Add a port instance */ - def addPortInstance(instance: PortInstance): Result.Result[T] = + def addPortInstance(instance: PortInstance): Result.Result[PortInterface] = for { c <- updatePortMap(instance) c <- instance match { @@ -41,9 +61,9 @@ trait GenericPortInterface[T <: GenericPortInterface[T]]( def addImportedInterface( interface: Interface, importNodeId: AstNode.Id, - ): Result.Result[T] = { + ): Result.Result[PortInterface] = { val init = this.withPortMap(portMap) - Result.foldLeft(interface.portMap.values.toList)(init)((c, pi) => { + Result.foldLeft(interface.portInterface.portMap.values.toList)(init)((c, pi) => { c.addPortInstance(pi.withImportSpecifier(importNodeId)) match { case Right(cc) => Right(cc) case Left(err) => Left(SemanticError.InterfaceImport( @@ -56,7 +76,7 @@ trait GenericPortInterface[T <: GenericPortInterface[T]]( /** Add a port instance to the port map */ private def updatePortMap(instance: PortInstance): - Result.Result[T] = { + Result.Result[PortInterface] = { val name = instance.getUnqualifiedName portMap.get(name) match { case Some(prevInstance) => @@ -74,7 +94,7 @@ trait GenericPortInterface[T <: GenericPortInterface[T]]( /** Add a port instance to the special port map */ private def updateSpecialPortMap(instance: PortInstance.Special): - Result.Result[T] = { + Result.Result[PortInterface] = { val kind = instance.specifier.kind specialPortMap.get(kind) match { case Some(prevInstance) => diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/GeneralPortNumbering.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/GeneralPortNumbering.scala index 8ea038e6d..f0a362672 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/GeneralPortNumbering.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/GeneralPortNumbering.scala @@ -45,10 +45,10 @@ object GeneralPortNumbering { /** Apply general numbering */ def apply(t: Topology): Topology = { // Fold over instances and ports - t.instanceMap.keys.foldLeft (t) ((t1, ci) => + t.componentInstanceMap.keys.foldLeft (t) ((t1, ci) => ci.component.portMap.values.foldLeft (t1) ((t2, pi) => { import PortInstance.Direction._ - val pii = PortInstanceIdentifier(ci, pi) + val pii = PortInstanceIdentifier(InterfaceInstance.fromComponentInstance(ci), pi) pi.getDirection match { case Some(Input) => numberInputPortArray(t2, pii) case Some(Output) => numberOutputPortArray(t2, pii) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/MatchedPortNumbering.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/MatchedPortNumbering.scala index c689af208..427fa2c69 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/MatchedPortNumbering.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/MatchedPortNumbering.scala @@ -203,7 +203,7 @@ object MatchedPortNumbering { /** Apply matched numbering */ def apply(t: Topology): Result.Result[Topology] = { // Fold over instances and matchings - Result.foldLeft (t.instanceMap.keys.toList) (t) ((t, ci) => + Result.foldLeft (t.componentInstanceMap.keys.toList) (t) ((t, ci) => Result.foldLeft (ci.component.portMatchingList) (t) ((t, pm) => handlePortMatching(t, ci, pm) ) @@ -242,14 +242,17 @@ object MatchedPortNumbering { // Map remote component instances to connections at pi def computeInstanceConnectionMap(pi: PortInstance): Result.Result[InstanceConnectionMap] = { val empty: InstanceConnectionMap = Map() - val pii = PortInstanceIdentifier(ci, pi) + val pii = PortInstanceIdentifier(InterfaceInstance.fromComponentInstance(ci), pi) val cs = t.getConnectionsAt(pii).toList.sorted Result.foldLeft (cs) (empty) ((m, c) => { if(c.isUnmatched) Right(m) else { val piiRemote = c.getOtherEndpoint(pi).port - val ciRemote = piiRemote.componentInstance + val ciRemote = piiRemote.interfaceInstance match { + case InterfaceInstance.InterfaceComponentInstance(ci) => ci + case _ => throw InternalError("topology connections not flattened") + } m.get(ciRemote) match { case Some(cPrev) => Left( SemanticError.DuplicateMatchedConnection( @@ -267,7 +270,7 @@ object MatchedPortNumbering { // Map port numbers to connections at pi // While computing the map, enforce the rule against duplicate connections def computePortConnectionMap(pi: PortInstance): Result.Result[PortConnectionMap] = { - val pii = PortInstanceIdentifier(ci, pi) + val pii = PortInstanceIdentifier(InterfaceInstance.fromComponentInstance(ci), pi) val cs = t.getConnectionsAt(pii).toList.sorted val empty: PortConnectionMap = Map() Result.foldLeft (cs) (empty) ((m, c) => { diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/PatternResolver.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/PatternResolver.scala index 7c66be44d..110cc6927 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/PatternResolver.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/PatternResolver.scala @@ -56,7 +56,7 @@ private sealed trait PatternResolver { loc, ci.getUnqualifiedName ) - } yield PortInstanceIdentifier(ci, pii) + } yield PortInstanceIdentifier(InterfaceInstance.fromComponentInstance(ci), pii) } private def resolveTargets: Result.Result[Iterable[Target]] = @@ -129,7 +129,7 @@ object PatternResolver { ): Result.Result[PortInstanceIdentifier] = { val (ci, loc) = ciUse ci.component.specialPortMap.get(kind) match { - case Some(pi) => Right(PortInstanceIdentifier(ci, pi)) + case Some(pi) => Right(PortInstanceIdentifier(InterfaceInstance.fromComponentInstance(ci), pi)) case None => missingPort(loc, kind.toString, ci.getUnqualifiedName) } } @@ -341,7 +341,7 @@ object PatternResolver { target: Target ) = // Health component does not ping itself - if (source.pingOut.componentInstance != target.pingIn.componentInstance) { + if (source.pingOut.interfaceInstance != target.pingIn.interfaceInstance) { val loc = pattern.getLoc List( connect(loc, source.pingOut, target.pingIn), diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePartiallyNumbered.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePartiallyNumbered.scala index 388edd4e1..13cdbb4d4 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePartiallyNumbered.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePartiallyNumbered.scala @@ -9,8 +9,8 @@ object ResolvePartiallyNumbered { /** Check that connection instances are legal */ private def checkConnectionInstances(t: Topology): Result.Result[Unit] = { def checkConnection(c: Connection) = { - val fromInstance = c.from.port.componentInstance - val toInstance = c.to.port.componentInstance + val fromInstance = c.from.port.interfaceInstance + val toInstance = c.to.port.interfaceInstance for { _ <- t.lookUpInstanceAt(fromInstance, c.from.loc) _ <- t.lookUpInstanceAt(toInstance, c.to.loc) @@ -32,14 +32,14 @@ object ResolvePartiallyNumbered { // Check the source _ <- { val (instance, loc) = pattern.source - t.lookUpInstanceAt(instance, loc) + t.lookUpInstanceAt(InterfaceInstance.fromComponentInstance(instance), loc) } // Check the targets _ <- Result.map( pattern.targets.toList, (pair: (ComponentInstance, Location)) => { val (instance, loc) = pair - t.lookUpInstanceAt(instance, loc) + t.lookUpInstanceAt(InterfaceInstance.fromComponentInstance(instance), loc) } ) } @@ -58,7 +58,7 @@ object ResolvePartiallyNumbered { private def resolvePatterns(a: Analysis, t: Topology): Result.Result[Topology] = { import Ast.SpecConnectionGraph._ Result.foldLeft (t.patternMap.values.toList) (t) ((t, p) => { - val instances = t.instanceMap.keys + val instances = t.componentInstanceMap.keys for { _ <- checkPatternInstances(t, p) connections <- PatternResolver.resolve(a, p, instances) @@ -80,7 +80,7 @@ object ResolvePartiallyNumbered { Result.Result[Topology] = { // Check whether an instance exists def endpointExists(endpoint: Connection.Endpoint) = { - val instance = endpoint.port.componentInstance + val instance = endpoint.port.interfaceInstance t.instanceMap.get(instance) match { case Some(_) => true case None => false @@ -101,11 +101,36 @@ object ResolvePartiallyNumbered { Right(result) } + /** Resolve connections to interface instances of t to component instances */ + private def resolveInterfacesToComponentInstances(a: Analysis, t: Topology): Result.Result[Topology] = { + def visitConnection (graphName: Name.Unqualified) (tt: Topology, c: Connection): Topology = { + tt.addLocalConnection(graphName, c.copy( + from = c.from.getUnderlyingEndpoint(), + to = c.to.getUnderlyingEndpoint(), + )) + } + + def visitConnectionGraph(tt: Topology, graph: (Name.Unqualified, List[Connection])): Topology = { + graph._2.foldLeft (tt) (visitConnection (graph._1)) + } + + // Clear out connections of T and reprocess them + // Resolve all port instance identifiers to their 'true' component instance port + Right(t.localConnectionMap.foldLeft (t.copy( + localConnectionMap = Map(), + connectionMap = Map(), + outputConnectionMap = Map(), + inputConnectionMap = Map(), + fromPortNumberMap = Map(), + toPortNumberMap = Map() + )) (visitConnectionGraph)) + } + /** Resolve the instances of t */ private def resolveInstances(a: Analysis, t: Topology): Result.Result[Topology] = { def importInstance( t: Topology, - mapEntry: (ComponentInstance, Location) + mapEntry: (InterfaceInstance, Location) ) = { val (instance, loc) = mapEntry t.addMergedInstance(instance, loc) @@ -121,6 +146,7 @@ object ResolvePartiallyNumbered { t <- Right(computeTransitiveImports(a, t)) t <- resolveInstances(a, t) _ <- checkConnectionInstances(t) + t <- resolveInterfacesToComponentInstances(a, t) t <- resolveImportedConnections(a, t) t <- resolvePatterns(a, t) } diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePortNumbers.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePortNumbers.scala index 2ff980667..61554ad89 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePortNumbers.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePortNumbers.scala @@ -55,7 +55,7 @@ object ResolvePortNumbers { Right(()) else { val loc = pi.getLoc - val instanceLoc = pii.componentInstance.getLoc + val instanceLoc = pii.interfaceInstance.getLoc Left( SemanticError.TooManyOutputPorts( loc, diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveUnconnectedPorts.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveUnconnectedPorts.scala index 67ffe208e..90d97dfa3 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveUnconnectedPorts.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveUnconnectedPorts.scala @@ -9,9 +9,9 @@ object ResolveUnconnectedPorts { /** Compute the unconnected ports of t */ def resolve(t: Topology): Topology = { // Fold over instances and ports - t.instanceMap.keys.foldLeft (t) ((t1, ci) => + t.componentInstanceMap.keys.foldLeft (t) ((t1, ci) => ci.component.portMap.values.foldLeft (t1) ((t2, pi) => { - val pii = PortInstanceIdentifier(ci, pi) + val pii = PortInstanceIdentifier(InterfaceInstance.fromComponentInstance(ci), pi) val direction = pi.getDirection val n = t2.getConnectionsAt(pii).size (direction, n) match { diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala b/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala index ed01ffe89..1431d4129 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala @@ -65,4 +65,6 @@ object Symbol { override def getUnqualifiedName = node._2.data.name } + type InterfaceInstance = ComponentInstance | Topology + } diff --git a/compiler/lib/src/main/scala/analysis/Semantics/TlmPacketSet.scala b/compiler/lib/src/main/scala/analysis/Semantics/TlmPacketSet.scala index ed021fcec..e3caac247 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/TlmPacketSet.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/TlmPacketSet.scala @@ -93,7 +93,7 @@ object TlmPacketSet { then { val entry = d.tlmChannelEntryMap(id) val channelName = entry.getQualifiedName - val instanceLoc = t.instanceMap(entry.instance) + val instanceLoc = t.instanceMap(InterfaceInstance.fromComponentInstance(entry.instance)) val channelLoc = entry.tlmChannel.getLoc val msg = s"""|telemetry channel $channelName is neither used nor marked as omitted | diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala b/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala index bfab21577..ed0171244 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala @@ -7,12 +7,18 @@ import fpp.compiler.util._ case class Topology( /** The AST node defining the topology */ aNode: Ast.Annotated[AstNode[Ast.DefTopology]], + /** Fully qualfied name of the topology */ + qualifiedName: Name.Qualified, /** The directly imported topologies */ directImportMap: Map[Symbol.Topology, Location] = Map(), /** The transitively imported topologies */ transitiveImportSet: Set[Symbol.Topology] = Set(), /** The instances of this topology */ - instanceMap: Map[ComponentInstance, Location] = Map(), + instanceMap: Map[InterfaceInstance, Location] = Map(), + /** The ports in the topology */ + portMap: Map[Name.Unqualified, PortInstanceIdentifier] = Map(), + /** Port interface of the topology */ + portInterface: PortInterface = PortInterface(), /** The connection patterns of this topology */ patternMap: Map[Ast.SpecConnectionGraph.Pattern.Kind, ConnectionPattern] = Map(), /** The connections of this topology, indexed by graph name */ @@ -101,7 +107,7 @@ case class Topology( } /** Add an imported topology */ - def addImportedTopology( + private def addImportedTopology( symbol: Symbol.Topology, loc: Location ): Result.Result[Topology] = @@ -120,7 +126,7 @@ case class Topology( /** Add an instance that may already be there */ def addMergedInstance( - instance: ComponentInstance, + instance: InterfaceInstance, loc: Location ): Topology = { // Private overrides public @@ -133,19 +139,33 @@ case class Topology( /** Add an instance that must be unique */ def addUniqueInstance( - instance: ComponentInstance, + symbol: Symbol.InterfaceInstance, + instance: InterfaceInstance, loc: Location ): Result.Result[Topology] = - instanceMap.get(instance) match { - case Some(prevLoc) => Left( - SemanticError.DuplicateInstance( - instance.getUnqualifiedName, - loc, - prevLoc - ) - ) - case None => Right(addMergedInstance(instance, loc)) - } + for { + t <- { + symbol match { + case ci: Symbol.ComponentInstance => + Right(this) + case top: Symbol.Topology => + addImportedTopology(top, loc) + } + } + + t <- { + t.instanceMap.get(instance) match { + case Some(prevLoc) => Left( + SemanticError.DuplicateInstance( + instance.getUnqualifiedName, + loc, + prevLoc + ) + ) + case None => Right(t.addMergedInstance(instance, loc)) + } + } + } yield t /** Assigns a port number to a connection at a port instance */ def assignPortNumber( @@ -204,9 +224,22 @@ case class Topology( } } + def getQualifiedName = qualifiedName + /** Gets the unqualified name of the topology */ def getUnqualifiedName = aNode._2.data.name + /** Gets the location of the topology */ + def getLoc: Location = Locations.get(aNode._2.id) + + /** Get the full port interface of this instance */ + def getInterface: PortInterface = portInterface + + /** Precompute the set of component instances in the topology */ + val componentInstanceMap: Map[ComponentInstance, Location] = { + instanceMap collect { case (InterfaceInstance.InterfaceComponentInstance(ci), loc: Location) => (ci, loc) } + } + /** Gets the set of used port numbers */ def getUsedPortNumbers(pi: PortInstance, cs: Iterable[Connection]): Set[Int] = cs.foldLeft (Set[Int]()) ((s, c) => @@ -216,15 +249,15 @@ case class Topology( } ) - /** Look up a component instance used at a location */ + /** Look up a interface instance used at a location */ def lookUpInstanceAt( - instance: ComponentInstance, + instance: InterfaceInstance, loc: Location ): Result.Result[Location] = instanceMap.get(instance) match { case Some(result) => Right(result) case None => Left( - SemanticError.InvalidComponentInstance( + SemanticError.InvalidInterfaceInstance( loc, instance.getUnqualifiedName, this.getUnqualifiedName diff --git a/compiler/lib/src/main/scala/analysis/UsedSymbols.scala b/compiler/lib/src/main/scala/analysis/UsedSymbols.scala index 58bf4e8e8..906923624 100644 --- a/compiler/lib/src/main/scala/analysis/UsedSymbols.scala +++ b/compiler/lib/src/main/scala/analysis/UsedSymbols.scala @@ -24,6 +24,12 @@ object UsedSymbols extends UseAnalyzer { use: Name.Qualified ) = addSymbol(a, node) + override def interfaceInstanceUse( + a: Analysis, + node: AstNode[Ast.QualIdent], + use: Name.Qualified + ) = addSymbol(a, node) + override def constantUse( a: Analysis, node: AstNode[Ast.Expr], diff --git a/compiler/lib/src/main/scala/ast/Ast.scala b/compiler/lib/src/main/scala/ast/Ast.scala index 30469f26a..01f84f8a1 100644 --- a/compiler/lib/src/main/scala/ast/Ast.scala +++ b/compiler/lib/src/main/scala/ast/Ast.scala @@ -308,12 +308,11 @@ object Ast { final case class TopologyMember(node: Annotated[TopologyMember.Node]) object TopologyMember { sealed trait Node - final case class SpecCompInstance(node: AstNode[Ast.SpecCompInstance]) extends Node + final case class SpecInstance(node: AstNode[Ast.SpecInstance]) extends Node final case class SpecConnectionGraph(node: AstNode[Ast.SpecConnectionGraph]) extends Node final case class SpecInclude(node: AstNode[Ast.SpecInclude]) extends Node final case class SpecTopPort(node: AstNode[Ast.SpecTopPort]) extends Node final case class SpecTlmPacketSet(node: AstNode[Ast.SpecTlmPacketSet]) extends Node - final case class SpecTopImport(node: AstNode[Ast.SpecImport]) extends Node } /** Formal parameter */ @@ -342,7 +341,7 @@ object Ast { /** Port instance identifier */ final case class PortInstanceIdentifier( - componentInstance: AstNode[QualIdent], + interfaceInstance: AstNode[QualIdent], portName: AstNode[Ident] ) @@ -457,7 +456,7 @@ object Ast { } /** Component instance specifier */ - final case class SpecCompInstance( + final case class SpecInstance( instance: AstNode[QualIdent] ) diff --git a/compiler/lib/src/main/scala/ast/AstTransformer.scala b/compiler/lib/src/main/scala/ast/AstTransformer.scala index 80e6d09e3..6bf5c3bb2 100644 --- a/compiler/lib/src/main/scala/ast/AstTransformer.scala +++ b/compiler/lib/src/main/scala/ast/AstTransformer.scala @@ -119,10 +119,10 @@ trait AstTransformer { node: Ast.Annotated[AstNode[Ast.SpecCommand]] ): ResultAnnotatedNode[Ast.SpecCommand] = Right(default(in), node) - def specCompInstanceAnnotatedNode( + def specInstanceAnnotatedNode( in: In, - node: Ast.Annotated[AstNode[Ast.SpecCompInstance]] - ): ResultAnnotatedNode[Ast.SpecCompInstance] = Right(default(in), node) + node: Ast.Annotated[AstNode[Ast.SpecInstance]] + ): ResultAnnotatedNode[Ast.SpecInstance] = Right(default(in), node) def specConnectionGraphAnnotatedNode( in: In, @@ -204,11 +204,6 @@ trait AstTransformer { node: Ast.Annotated[AstNode[Ast.SpecTlmPacketSet]] ): ResultAnnotatedNode[Ast.SpecTlmPacketSet] = Right(default(in), node) - def specTopImportAnnotatedNode( - in: In, - node: Ast.Annotated[AstNode[Ast.SpecImport]] - ): ResultAnnotatedNode[Ast.SpecImport] = Right(default(in), node) - def specInterfaceImportAnnotatedNode( in: In, node: Ast.Annotated[AstNode[Ast.SpecImport]] @@ -396,8 +391,8 @@ trait AstTransformer { } val (pre, node, post) = member.node node match { - case Ast.TopologyMember.SpecCompInstance(node1) => - transform(specCompInstanceAnnotatedNode(in, (pre, node1, post)), Ast.TopologyMember.SpecCompInstance(_)) + case Ast.TopologyMember.SpecInstance(node1) => + transform(specInstanceAnnotatedNode(in, (pre, node1, post)), Ast.TopologyMember.SpecInstance(_)) case Ast.TopologyMember.SpecConnectionGraph(node1) => transform(specConnectionGraphAnnotatedNode(in, (pre, node1, post)), Ast.TopologyMember.SpecConnectionGraph(_)) case Ast.TopologyMember.SpecInclude(node1) => @@ -406,8 +401,6 @@ trait AstTransformer { transform(specTopPortAnnotatedNode(in, (pre, node1, post)), Ast.TopologyMember.SpecTopPort(_)) case Ast.TopologyMember.SpecTlmPacketSet(node1) => transform(specTlmPacketSetAnnotatedNode(in, (pre, node1, post)), Ast.TopologyMember.SpecTlmPacketSet(_)) - case Ast.TopologyMember.SpecTopImport(node1) => - transform(specTopImportAnnotatedNode(in, (pre, node1, post)), Ast.TopologyMember.SpecTopImport(_)) } } diff --git a/compiler/lib/src/main/scala/ast/AstVisitor.scala b/compiler/lib/src/main/scala/ast/AstVisitor.scala index 918e9028d..7a404acbd 100644 --- a/compiler/lib/src/main/scala/ast/AstVisitor.scala +++ b/compiler/lib/src/main/scala/ast/AstVisitor.scala @@ -86,7 +86,7 @@ trait AstVisitor { def specCommandAnnotatedNode(in: In, node: Ast.Annotated[AstNode[Ast.SpecCommand]]): Out = default(in) - def specCompInstanceAnnotatedNode(in: In, node: Ast.Annotated[AstNode[Ast.SpecCompInstance]]): Out = default(in) + def specInstanceAnnotatedNode(in: In, node: Ast.Annotated[AstNode[Ast.SpecInstance]]): Out = default(in) def specConnectionGraphAnnotatedNode(in: In, node: Ast.Annotated[AstNode[Ast.SpecConnectionGraph]]): Out = default(in) @@ -128,8 +128,6 @@ trait AstVisitor { def specTlmPacketSetAnnotatedNode(in: In, node: Ast.Annotated[AstNode[Ast.SpecTlmPacketSet]]): Out = default(in) - def specTopImportAnnotatedNode(in: In, node: Ast.Annotated[AstNode[Ast.SpecImport]]): Out = default(in) - def specInterfaceImportAnnotatedNode(in: In, node: Ast.Annotated[AstNode[Ast.SpecImport]]): Out = default(in) def transUnit(in: In, tu: Ast.TransUnit): Out = default(in) @@ -249,12 +247,11 @@ trait AstVisitor { final def matchTopologyMember(in: In, member: Ast.TopologyMember): Out = { val (pre, node, post) = member.node node match { - case Ast.TopologyMember.SpecCompInstance(node1) => specCompInstanceAnnotatedNode(in, (pre, node1, post)) + case Ast.TopologyMember.SpecInstance(node1) => specInstanceAnnotatedNode(in, (pre, node1, post)) case Ast.TopologyMember.SpecConnectionGraph(node1) => specConnectionGraphAnnotatedNode(in, (pre, node1, post)) case Ast.TopologyMember.SpecInclude(node1) => specIncludeAnnotatedNode(in, (pre, node1, post)) case Ast.TopologyMember.SpecTopPort(node1) => specTopPortAnnotatedNode(in, (pre, node1, post)) case Ast.TopologyMember.SpecTlmPacketSet(node1) => specTlmPacketSetAnnotatedNode(in, (pre, node1, post)) - case Ast.TopologyMember.SpecTopImport(node1) => specTopImportAnnotatedNode(in, (pre, node1, post)) } } diff --git a/compiler/lib/src/main/scala/codegen/AstWriter.scala b/compiler/lib/src/main/scala/codegen/AstWriter.scala index c9b47c553..ffdc0a499 100644 --- a/compiler/lib/src/main/scala/codegen/AstWriter.scala +++ b/compiler/lib/src/main/scala/codegen/AstWriter.scala @@ -369,13 +369,13 @@ object AstWriter extends AstVisitor with LineUtils { ).map(indentIn) } - override def specCompInstanceAnnotatedNode( + override def specInstanceAnnotatedNode( in: In, - aNode: Ast.Annotated[AstNode[Ast.SpecCompInstance]] + aNode: Ast.Annotated[AstNode[Ast.SpecInstance]] ) = { val (_, node, _) = aNode val data = node.data - lines("spec comp instance") ++ ( + lines("spec interface instance") ++ ( qualIdent(data.instance.data) ).map(indentIn) } @@ -707,16 +707,6 @@ object AstWriter extends AstVisitor with LineUtils { ) } - override def specTopImportAnnotatedNode( - in: In, - aNode: Ast.Annotated[AstNode[Ast.SpecImport]] - ) = { - val (_, node, _) = aNode - val data = node.data - lines("spec top import") ++ - qualIdent(data.sym.data).map(indentIn) - } - override def specInterfaceImportAnnotatedNode( in: In, aNode: Ast.Annotated[AstNode[Ast.SpecImport]] @@ -856,7 +846,7 @@ object AstWriter extends AstVisitor with LineUtils { } private def portInstanceIdentifier(pii: Ast.PortInstanceIdentifier): Out = { - val qid = Ast.QualIdent.Qualified(pii.componentInstance, pii.portName) + val qid = Ast.QualIdent.Qualified(pii.interfaceInstance, pii.portName) qualIdent(qid) } diff --git a/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopComponentIncludes.scala b/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopComponentIncludes.scala index 6768039d7..20426c4c2 100644 --- a/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopComponentIncludes.scala +++ b/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopComponentIncludes.scala @@ -12,7 +12,7 @@ case class TopComponentIncludes( def getHeaderStrings: List[String] = { val t = s.a.topologyMap(Symbol.Topology(aNode)) - t.instanceMap.keys.toList.map(getHeaderString).distinct + t.componentInstanceMap.keys.toList.map(getHeaderString).distinct } private def getHeaderString(ci: ComponentInstance): String = diff --git a/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopConfigObjects.scala b/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopConfigObjects.scala index 2e6676810..e434c1182 100644 --- a/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopConfigObjects.scala +++ b/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopConfigObjects.scala @@ -145,13 +145,16 @@ case class TopConfigObjects( } // Map the port numbers to ports, and compute the max port number mapAndMaxNum <- { - val pii = PortInstanceIdentifier(ci, pingOutPort) + val pii = PortInstanceIdentifier(InterfaceInstance.fromComponentInstance(ci), pingOutPort) val m0: Map[Int, ComponentInstance] = Map() val mn = t.getConnectionsFrom(pii).foldLeft ((m0, 0)) { case ((m, n), c) => val n1 = t.getPortNumber(pii.portInstance, c).get ( - m + (n1 -> c.to.port.componentInstance), + m + (n1 -> (c.to.port.interfaceInstance match { + case InterfaceInstance.InterfaceComponentInstance(ci) => ci + case _ => throw InternalError("topology connections not flattened") + })), if (n1 > n) n1 else n ) } diff --git a/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopHelperFns.scala b/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopHelperFns.scala index 66d023ed5..4a0775d33 100644 --- a/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopHelperFns.scala +++ b/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopHelperFns.scala @@ -105,7 +105,7 @@ case class TopHelperFns( private def getConnectComponentsFn = { def getPortInfo(pii: PortInstanceIdentifier, c: Connection) = { - val cppQualifiedName = CppWriter.writeQualifiedName(pii.componentInstance.qualifiedName) + val cppQualifiedName = CppWriter.writeQualifiedName(pii.interfaceInstance.getQualifiedName) val portName = pii.portInstance.getUnqualifiedName val portNumber = t.getPortNumber(pii.portInstance, c).get (cppQualifiedName, portName, portNumber) diff --git a/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopologyCppWriterUtils.scala b/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopologyCppWriterUtils.scala index 886a309ad..d874b49bc 100644 --- a/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopologyCppWriterUtils.scala +++ b/compiler/lib/src/main/scala/codegen/CppWriter/TopologyCppWriter/TopologyCppWriterUtils.scala @@ -18,7 +18,7 @@ abstract class TopologyCppWriterUtils( val t: Topology = s.a.topologyMap(symbol) - val instances = t.instanceMap.keys.toList.sorted + val instances = t.componentInstanceMap.keys.toList.sorted val instancesByBaseId: List[ComponentInstance] = instances.sortWith { case (a, b) => if (a.baseId != b.baseId) a.baseId < b.baseId diff --git a/compiler/lib/src/main/scala/codegen/FppWriter.scala b/compiler/lib/src/main/scala/codegen/FppWriter.scala index 688657be9..6064d5705 100644 --- a/compiler/lib/src/main/scala/codegen/FppWriter.scala +++ b/compiler/lib/src/main/scala/codegen/FppWriter.scala @@ -435,9 +435,9 @@ object FppWriter extends AstVisitor with LineUtils { joinOptWithBreak (data.queueFull) ("") (applyToData(queueFull)) } - override def specCompInstanceAnnotatedNode( + override def specInstanceAnnotatedNode( in: In, - aNode: Ast.Annotated[AstNode[Ast.SpecCompInstance]] + aNode: Ast.Annotated[AstNode[Ast.SpecInstance]] ) = { val (_, node, _) = aNode val data = node.data @@ -728,15 +728,6 @@ object FppWriter extends AstVisitor with LineUtils { join("") (qualIdent(data.underylingPort.data)) } - override def specTopImportAnnotatedNode( - in: In, - aNode: Ast.Annotated[AstNode[Ast.SpecImport]] - ) = { - val (_, node, _) = aNode - val data = node.data - Line.addPrefix("import ", qualIdent(data.sym.data)) - } - override def specInterfaceImportAnnotatedNode( in: In, aNode: Ast.Annotated[AstNode[Ast.SpecImport]] @@ -851,7 +842,7 @@ object FppWriter extends AstVisitor with LineUtils { private def identAsLines = lines compose ident private def portInstanceId(pii: Ast.PortInstanceIdentifier) = - qualIdent(pii.componentInstance.data). + qualIdent(pii.interfaceInstance.data). addSuffix(s".${ident(pii.portName.data)}") private def qualIdent(qid: Ast.QualIdent): Out = diff --git a/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala b/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala index 9b70092bc..802821d51 100644 --- a/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala +++ b/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala @@ -8,6 +8,8 @@ import io.circe.syntax._ import io.circe._ import io.circe.generic.semiauto._ import io.circe.generic.auto._ +import io.circe.{ Decoder, Encoder }, io.circe.generic.auto._ +import io.circe.syntax._ import scala.util.parsing.input.Position import AstJsonEncoder._ import LocMapJsonEncoder._ @@ -111,7 +113,7 @@ object AnalysisJsonEncoder extends JsonEncoder{ private implicit val commandMapEncoder: Encoder[Map[Command.Opcode, Command]] = { def f1(opcode: Command.Opcode) = opcode.toString def f2(command: Command) = command.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val componentInstanceMapEncoder: @@ -133,7 +135,7 @@ object AnalysisJsonEncoder extends JsonEncoder{ { def f1(id: Container.Id) = id.toString def f2(c: Container) = c.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val directImportMapEncoder: @@ -146,13 +148,13 @@ object AnalysisJsonEncoder extends JsonEncoder{ private implicit val eventMapEncoder: Encoder[Map[Event.Id, Event]] = { def f1(id: Event.Id) = id.toString def f2(event: Event) = event.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val limitsEncoder: Encoder[TlmChannel.Limits] = { def f1(kind: Ast.SpecTlmChannel.LimitKind) = kind.toString def f2(tlmPoint: (AstNode.Id, Value)) = tlmPoint.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val nameGroupSymbolMapEncoder: @@ -160,7 +162,7 @@ object AnalysisJsonEncoder extends JsonEncoder{ { def f1(nameGroup: NameGroup) = getUnqualifiedClassName(nameGroup) def f2(map: NameSymbolMap) = map.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val nameSymbolMapEncoder: @@ -168,13 +170,13 @@ object AnalysisJsonEncoder extends JsonEncoder{ { def f1(name: Name.Unqualified) = name.toString def f2(symbol: Symbol) = symbol.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val paramMapEncoder: Encoder[Map[Param.Id, Param]] = { def f1(id: Param.Id) = id.toString def f2(param: Param) = param.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val patternMapEncoder: @@ -183,7 +185,7 @@ object AnalysisJsonEncoder extends JsonEncoder{ def f1(kind: Ast.SpecConnectionGraph.Pattern.Kind) = getUnqualifiedClassName(kind) def f2(pattern: ConnectionPattern) = pattern.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val recordMapEncoder: @@ -191,14 +193,14 @@ object AnalysisJsonEncoder extends JsonEncoder{ { def f1(id: Record.Id) = id.toString def f2(c: Record) = c.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val signalStateTransitionMapEncoder: Encoder[StateMachineAnalysis.SignalStateTransitionMap] = { def f1(s: StateMachineSymbol.Signal) = s.getNodeId.toString def f2(s: StateMachineSymbol.State) = s.getUnqualifiedName def f3(t: Transition.Guarded) = t.asJson - Encoder.instance (mapAsJsonMap (f1) (mapAsJsonMap (f2) (f3) _) _) + Encoder.instance (mapAsJsonMap(f1)(mapAsJsonMap(f2)(f3) _)) } private implicit val specialKindMapEncoder: @@ -206,7 +208,7 @@ object AnalysisJsonEncoder extends JsonEncoder{ { def f1(kind: Ast.SpecPortInstance.SpecialKind) = kind.toString def f2(pi: PortInstance.Special) = pi.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val stateMachineMapEncoder: @@ -221,7 +223,7 @@ object AnalysisJsonEncoder extends JsonEncoder{ { def f1(nameGroup: StateMachineNameGroup) = getUnqualifiedClassName(nameGroup) def f2(map: SmNameSymbolMap) = map.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val stateMachineNameSymbolMapEncoder: @@ -229,27 +231,27 @@ object AnalysisJsonEncoder extends JsonEncoder{ { def f1(name: Name.Unqualified) = name.toString def f2(symbol: StateMachineSymbol) = symbol.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val stateMachineSymbolScopeMapEncoder: Encoder[Map[StateMachineSymbol, StateMachineScope]] = { def f2(s: StateMachineScope) = s.asJson - Encoder.instance (mapAsJsonMap (stateMachineSymbolToIdString) (f2) _) + Encoder.instance (mapAsJsonMap(stateMachineSymbolToIdString)(f2)) } private implicit val stateMachineUseDefMapEncoder: Encoder[Map[AstNode.Id, StateMachineSymbol]] = { def f2(s: StateMachineSymbol) = s.asJson - Encoder.instance (mapAsJsonMap (astNodeIdToString) (f2) _) + Encoder.instance (mapAsJsonMap(astNodeIdToString)(f2)) } private implicit val symbolMapEncoder: Encoder[Map[Symbol, Symbol]] = { def f2(s: Symbol) = symbolAsJson(s) - Encoder.instance (mapAsJsonMap (symbolToIdString) (f2) _) + Encoder.instance (mapAsJsonMap(symbolToIdString)(f2)) } private implicit val symbolScopeMapEncoder: Encoder[Map[Symbol, Scope]] = { def f2(s: Scope) = s.asJson - Encoder.instance (mapAsJsonMap (symbolToIdString) (f2) _) + Encoder.instance (mapAsJsonMap(symbolToIdString)(f2)) } private implicit val tlmChannelMapEncoder: @@ -257,7 +259,7 @@ object AnalysisJsonEncoder extends JsonEncoder{ { def f1(id: TlmChannel.Id) = id.toString def f2(channel: TlmChannel) = channel.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val topologyMapEncoder: @@ -270,34 +272,34 @@ object AnalysisJsonEncoder extends JsonEncoder{ private implicit val transitionExprMapEncoder: Encoder[StateMachineAnalysis.TransitionExprMap] = { def f1(n: AstNode[Ast.TransitionExpr]) = n.id.toString def f2(t: Transition) = t.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val transitionGraphArcMapEncoder: Encoder[TransitionGraph.ArcMap] = { def f1(n: TransitionGraph.Node) = n.soc.getName def f2(as: Set[TransitionGraph.Arc]) = (as.map(elem => elem.asJson)).toList.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val typeMapEncoder: Encoder[Map[AstNode.Id, Type]] = { def f2(t: Type) = t.asJson - Encoder.instance (mapAsJsonMap (astNodeIdToString) (f2) _) + Encoder.instance (mapAsJsonMap(astNodeIdToString)(f2)) } private implicit val typeOptionMap: Encoder[Map[StateMachineTypedElement, Option[Type]]] = { def f1(e: StateMachineTypedElement) = e.getNodeId.toString def f2(t: Option[Type]) = t.asJson - Encoder.instance (mapAsJsonMap (f1) (f2) _) + Encoder.instance (mapAsJsonMap(f1)(f2)) } private implicit val useDefMapEncoder: Encoder[Map[AstNode.Id, Symbol]] = { def f2(s: Symbol) = s.asJson - Encoder.instance (mapAsJsonMap (astNodeIdToString) (f2) _) + Encoder.instance (mapAsJsonMap(astNodeIdToString)(f2)) } private implicit val valueMapEncoder: Encoder[Map[AstNode.Id, Value]] = { def f2(value: Value) = value.asJson - Encoder.instance (mapAsJsonMap (astNodeIdToString) (f2) _) + Encoder.instance (mapAsJsonMap(astNodeIdToString)(f2)) } // ---------------------------------------------------------------------- @@ -305,8 +307,8 @@ object AnalysisJsonEncoder extends JsonEncoder{ // We use this conversion when the keys cannot be converted to strings // ---------------------------------------------------------------------- - private implicit val componentInstanceLocationMapEncoder: - Encoder[Map[ComponentInstance, Location]] = + private implicit val interfaceInstanceLocationMapEncoder: + Encoder[Map[InterfaceInstance, Location]] = Encoder.instance(_.toList.asJson) private implicit val connectionMapEncoder: @@ -332,7 +334,7 @@ object AnalysisJsonEncoder extends JsonEncoder{ "flattenedStateTransitionMap" -> sma.flattenedStateTransitionMap.asJson, "flattenedChoiceTransitionMap" -> sma.flattenedChoiceTransitionMap.asJson ) - Encoder.instance(stateMachineAnalysisToJson(_)) + Encoder.instance(stateMachineAnalysisToJson) } // ---------------------------------------------------------------------- diff --git a/compiler/lib/src/main/scala/codegen/LayoutWriter/LayoutWriter.scala b/compiler/lib/src/main/scala/codegen/LayoutWriter/LayoutWriter.scala index c8c90f639..483275dad 100644 --- a/compiler/lib/src/main/scala/codegen/LayoutWriter/LayoutWriter.scala +++ b/compiler/lib/src/main/scala/codegen/LayoutWriter/LayoutWriter.scala @@ -52,10 +52,10 @@ object LayoutWriter extends AstStateVisitor with LineUtils { cl: Seq[Connection] ): List[Line] = { cl.foldLeft(List[Line]()) ((l, c) => { - var fromCi = c.from.port.componentInstance + var fromCi = c.from.port.interfaceInstance var fromPi = c.from.port.portInstance var fromPn = topology.fromPortNumberMap(c) - var toCi = c.to.port.componentInstance + var toCi = c.to.port.interfaceInstance var toPi = c.to.port.portInstance var toPn = topology.toPortNumberMap(c) l ++ List( diff --git a/compiler/lib/src/main/scala/codegen/XmlFppWriter/TopologyXmlFppWriter.scala b/compiler/lib/src/main/scala/codegen/XmlFppWriter/TopologyXmlFppWriter.scala index f8e41b890..c92399990 100644 --- a/compiler/lib/src/main/scala/codegen/XmlFppWriter/TopologyXmlFppWriter.scala +++ b/compiler/lib/src/main/scala/codegen/XmlFppWriter/TopologyXmlFppWriter.scala @@ -67,13 +67,13 @@ object TopologyXmlFppWriter extends LineUtils { def specCompInstanceAnnotated( file: XmlFppWriter.File, node: scala.xml.Node - ): Result.Result[Ast.Annotated[Ast.SpecCompInstance]] = + ): Result.Result[Ast.Annotated[Ast.SpecInstance]] = for (name <- file.getAttribute(node, "name")) yield { val qid = XmlFppWriter.FppBuilder.translateQualIdent(name) ( Nil, - Ast.SpecCompInstance(qid), + Ast.SpecInstance(qid), Nil ) } @@ -87,7 +87,7 @@ object TopologyXmlFppWriter extends LineUtils { /** Translates the component instance specifiers */ def specCompInstanceAnnotatedList(file: XmlFppWriter.File): - Result.Result[List[Ast.Annotated[Ast.SpecCompInstance]]] = { + Result.Result[List[Ast.Annotated[Ast.SpecInstance]]] = { val instances = file.elem \ "instance" Result.map(instances.toList, specCompInstanceAnnotated(file, _)) } @@ -172,7 +172,7 @@ object TopologyXmlFppWriter extends LineUtils { Ast.TopologyMember(a1, memberNode, a2) } val instanceMembers = instancesAnnotated.map( - member(Ast.TopologyMember.SpecCompInstance.apply) + member(Ast.TopologyMember.SpecInstance.apply) ) val graphMember = member(Ast.TopologyMember.SpecConnectionGraph.apply)( graphAnnotated diff --git a/compiler/lib/src/main/scala/syntax/Parser.scala b/compiler/lib/src/main/scala/syntax/Parser.scala index 211c76a95..06f76e55f 100644 --- a/compiler/lib/src/main/scala/syntax/Parser.scala +++ b/compiler/lib/src/main/scala/syntax/Parser.scala @@ -547,9 +547,9 @@ object Parser extends Parsers { } } - def specCompInstance: Parser[Ast.SpecCompInstance] = { - instance ~>! node(qualIdent) ^^ { - case instance => Ast.SpecCompInstance(instance) + def specInstance: Parser[Ast.SpecInstance] = { + (instance | importToken) ~>! node(qualIdent) ^^ { + case instance => Ast.SpecInstance(instance) } } @@ -940,15 +940,14 @@ object Parser extends Parsers { elementSequence(tlmPacketMember, comma) private def topologyMemberNode: Parser[Ast.TopologyMember.Node] = { - node(specCompInstance) ^^ (n => - Ast.TopologyMember.SpecCompInstance(n)) | + node(specInstance) ^^ (n => + Ast.TopologyMember.SpecInstance(n)) | node(specConnectionGraph) ^^ (n => Ast.TopologyMember.SpecConnectionGraph(n)) | node(specInclude) ^^ (n => Ast.TopologyMember.SpecInclude(n)) | node(specTopPort) ^^ (n => Ast.TopologyMember.SpecTopPort(n)) | node(specTlmPacketSet) ^^ (n => Ast.TopologyMember.SpecTlmPacketSet(n)) | - node(specImport) ^^ (n => Ast.TopologyMember.SpecTopImport(n)) | failure("topology member expected") } diff --git a/compiler/lib/src/main/scala/util/Error.scala b/compiler/lib/src/main/scala/util/Error.scala index 0faa397b3..bd6a4fc84 100644 --- a/compiler/lib/src/main/scala/util/Error.scala +++ b/compiler/lib/src/main/scala/util/Error.scala @@ -155,7 +155,7 @@ sealed trait Error { printNote("size must be greater than zero") case SemanticError.InvalidCommand(loc, msg) => Error.print (Some(loc)) (msg) - case SemanticError.InvalidComponentInstance(loc, instanceName, topName) => + case SemanticError.InvalidInterfaceInstance(loc, instanceName, topName) => Error.print (Some(loc)) (s"instance $instanceName is not a member of topology $topName") case SemanticError.InvalidConnection(loc, msg, fromLoc, toLoc, fromPortDefLoc, toPortDefLoc) => Error.print (Some(loc)) (msg) @@ -196,8 +196,8 @@ sealed trait Error { Error.print (Some(loc)) (msg) System.err.println(s"port definition is here:") System.err.println(defLoc) - case SemanticError.InvalidPortInstanceId(loc, portName, componentName) => - Error.print (Some(loc)) (s"$portName is not a port instance of component $componentName") + case SemanticError.InvalidPortInstanceId(loc, portName, interfaceName) => + Error.print (Some(loc)) (s"$portName is not a port instance of interface $interfaceName") case SemanticError.InvalidPortKind(loc, msg, specLoc) => Error.print (Some(loc)) (msg) System.err.println(s"port instance is specified here:") @@ -522,8 +522,8 @@ object SemanticError { final case class InvalidArraySize(loc: Location, size: BigInt) extends Error /** Invalid command */ final case class InvalidCommand(loc: Location, msg: String) extends Error - /** Invalid component instance */ - final case class InvalidComponentInstance( + /** Invalid interface instance */ + final case class InvalidInterfaceInstance( loc: Location, instanceName: String, topName: String @@ -577,7 +577,7 @@ object SemanticError { final case class InvalidPortInstanceId( loc: Location, portName: String, - componentName: String + interfaceName: String ) extends Error /** Invalid port kind */ final case class InvalidPortKind( diff --git a/compiler/lib/src/main/scala/util/Result.scala b/compiler/lib/src/main/scala/util/Result.scala index c6544d716..0b29eaa65 100644 --- a/compiler/lib/src/main/scala/util/Result.scala +++ b/compiler/lib/src/main/scala/util/Result.scala @@ -17,7 +17,7 @@ object Result { /** Left fold with a function that returns a result */ @tailrec def foldLeft[A,B] - (as: List[A]) + (as: Iterable[A]) (b: B) (f: (B, A) => Result.Result[B]): Result.Result[B] = as match { diff --git a/compiler/lib/src/main/scala/util/Version.scala b/compiler/lib/src/main/scala/util/Version.scala index 5e1209628..b9f16468d 100644 --- a/compiler/lib/src/main/scala/util/Version.scala +++ b/compiler/lib/src/main/scala/util/Version.scala @@ -3,6 +3,6 @@ package fpp.compiler.util /** The compiler version */ object Version { - val v = "[unknown version]" + val v = "v3.1.0a1-100-g7bc2ef646" } From cc1051554147f2e767363175e9641680e7949ce7 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Wed, 15 Oct 2025 09:08:25 -0700 Subject: [PATCH 02/26] Fix json build --- .../analysis/Semantics/PortInterface.scala | 14 +++++++------- .../scala/analysis/Semantics/Topology.scala | 2 +- .../JsonEncoder/AnalysisJsonEncoder.scala | 19 +++++++++++++++++++ .../lib/src/main/scala/util/Version.scala | 2 +- 4 files changed, 28 insertions(+), 9 deletions(-) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala b/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala index c9738c935..da9d78876 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala @@ -10,29 +10,29 @@ case class PortInterface( /** The map from special port kinds to special port instances */ specialPortMap: Map[Ast.SpecPortInstance.SpecialKind, PortInstance.Special] = Map(), ) { - def withPortMap(newPortMap: Map[Name.Unqualified, PortInstance]) = + private def withPortMap(newPortMap: Map[Name.Unqualified, PortInstance]) = this.copy(portMap = newPortMap) - def withSpecialPortMap(newSpecialPortMap: Map[Ast.SpecPortInstance.SpecialKind, PortInstance.Special]) = + private def withSpecialPortMap(newSpecialPortMap: Map[Ast.SpecPortInstance.SpecialKind, PortInstance.Special]) = this.copy(specialPortMap = newSpecialPortMap) def isSubsetOf(other: PortInterface): Boolean = // Find the first point that does not exist or does not match in the other interface - portMap.find((name, pi) => { + !portMap.exists((name, pi) => { other.portMap.get(name) match { case Some(opi) => - // The port exists, make sure its the same as ours + // The port exists, make sure it's the same as ours pi != opi case None => true } - }).isEmpty && specialPortMap.find((name, pi) => { + }) && !specialPortMap.exists((name, pi) => { other.specialPortMap.get(name) match { case Some(opi) => - // The port exists, make sure its the same as ours + // The port exists, make sure it's the same as ours pi != opi case None => true } - }).isEmpty + }) /** Gets a port instance by name */ def getPortInstance(name: AstNode[Ast.Ident], interfaceName: String): Result.Result[PortInstance] = diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala b/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala index ed0171244..757e72dc0 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala @@ -7,7 +7,7 @@ import fpp.compiler.util._ case class Topology( /** The AST node defining the topology */ aNode: Ast.Annotated[AstNode[Ast.DefTopology]], - /** Fully qualfied name of the topology */ + /** Fully qualified name of the topology */ qualifiedName: Name.Qualified, /** The directly imported topologies */ directImportMap: Map[Symbol.Topology, Location] = Map(), diff --git a/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala b/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala index 802821d51..dde2e436c 100644 --- a/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala +++ b/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala @@ -48,6 +48,16 @@ object AnalysisJsonEncoder extends JsonEncoder{ ) ) + // JSON encoder for interface instances + // Report the interface instance kind and the info in the InterfaceInstance trait + private def interfaceInstanceAsJson(instance: InterfaceInstance) = addTypeNameKey( + instance, + Json.obj( + "qualifiedName" -> instance.getQualifiedName.asJson, + "unqualifiedName" -> instance.getUnqualifiedName.asJson + ) + ) + // JSON encoder for component instances // Use the default Circe encoding, but replace the component instance // with its AST node. We can use the ID to look up the component @@ -69,6 +79,12 @@ object AnalysisJsonEncoder extends JsonEncoder{ private implicit val generalPortInstanceKindEncoder: Encoder[PortInstance.General.Kind] = Encoder.encodeString.contramap(getUnqualifiedClassName(_)) + private implicit val endpointEncoder: Encoder[Connection.Endpoint] = + io.circe.generic.semiauto.deriveEncoder[Connection.Endpoint] + + private implicit val interfaceInstanceEncoder: Encoder[InterfaceInstance] = + Encoder.instance(interfaceInstanceAsJson) + private implicit val portInstanceIdentifierEncoder: Encoder[PortInstanceIdentifier] = io.circe.generic.semiauto.deriveEncoder[PortInstanceIdentifier] @@ -292,6 +308,9 @@ object AnalysisJsonEncoder extends JsonEncoder{ Encoder.instance (mapAsJsonMap(f1)(f2)) } + private implicit val portInterfaceEncoder: Encoder[PortInterface] = + io.circe.generic.semiauto.deriveEncoder[PortInterface] + private implicit val useDefMapEncoder: Encoder[Map[AstNode.Id, Symbol]] = { def f2(s: Symbol) = s.asJson Encoder.instance (mapAsJsonMap(astNodeIdToString)(f2)) diff --git a/compiler/lib/src/main/scala/util/Version.scala b/compiler/lib/src/main/scala/util/Version.scala index b9f16468d..5e1209628 100644 --- a/compiler/lib/src/main/scala/util/Version.scala +++ b/compiler/lib/src/main/scala/util/Version.scala @@ -3,6 +3,6 @@ package fpp.compiler.util /** The compiler version */ object Version { - val v = "v3.1.0a1-100-g7bc2ef646" + val v = "[unknown version]" } From 668c966fe526b38c1ea1ce18a0d89d7dfaf2dbb1 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Wed, 15 Oct 2025 14:20:19 -0700 Subject: [PATCH 03/26] Fix instance resolution --- .../analysis/Analyzers/BasicUseAnalyzer.scala | 8 +-- .../CheckSemantics/CheckTopologyDefs.scala | 7 +- .../CheckSemantics/CheckUseDefCycles.scala | 2 +- .../analysis/CheckSemantics/CheckUses.scala | 7 +- .../CheckSemantics/EnterSymbols.scala | 10 +-- .../ComputeDependencies/MapUsesToLocs.scala | 8 +-- .../scala/analysis/Semantics/NameGroup.scala | 6 +- .../ResolvePartiallyNumbered.scala | 6 +- .../ResolveTopology/ResolveTopology.scala | 1 + .../ResolveTopologyInstances.scala | 27 ++++++++ .../scala/analysis/Semantics/Symbol.scala | 2 +- .../scala/analysis/Semantics/Topology.scala | 67 +++++++++---------- .../src/main/scala/analysis/UsedSymbols.scala | 12 ---- compiler/lib/src/main/scala/ast/Ast.scala | 5 +- .../JsonEncoder/AnalysisJsonEncoder.scala | 9 ++- .../scala/codegen/LocateDefsFppWriter.scala | 4 +- .../lib/src/main/scala/syntax/Parser.scala | 3 +- compiler/lib/src/main/scala/util/Error.scala | 9 --- .../lib/src/test/scala/syntax/Parser.scala | 4 +- .../top_import/duplicate_topology.ref.txt | 2 +- .../test/top_import/instance_public.fpp | 2 +- .../fpp/src/main/scala/fpp-locate-uses.scala | 4 +- 22 files changed, 94 insertions(+), 111 deletions(-) create mode 100644 compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopologyInstances.scala diff --git a/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala b/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala index 655d56390..dc0ddcba2 100644 --- a/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala +++ b/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala @@ -11,9 +11,6 @@ trait BasicUseAnalyzer extends TypeExpressionAnalyzer { /** A use of a component definition */ def componentUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified): Result = default(a) - - /** A use of a component instance definition */ - def componentInstanceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified): Result = default(a) /** A use of a interface instance (topology def or component instance def) */ def interfaceInstanceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified): Result = default(a) @@ -24,9 +21,6 @@ trait BasicUseAnalyzer extends TypeExpressionAnalyzer { /** A use of a port definition */ def portUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified): Result = default(a) - /** A use of a topology definition */ - def topologyUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified): Result = default(a) - /** A use of an interface definition */ def interfaceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified): Result = default(a) @@ -193,7 +187,7 @@ trait BasicUseAnalyzer extends TypeExpressionAnalyzer { a: Analysis, node: AstNode[Ast.TlmChannelIdentifier] ): Result = - qualIdentNode (componentInstanceUse) (a, node.data.componentInstance) + qualIdentNode (interfaceInstanceUse) (a, node.data.componentInstance) private def tlmPacketMember(a: Analysis, member: Ast.TlmPacketMember) = member match { diff --git a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTopologyDefs.scala b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTopologyDefs.scala index 729a11e07..b54a2d0b5 100644 --- a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTopologyDefs.scala +++ b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTopologyDefs.scala @@ -25,7 +25,7 @@ object CheckTopologyDefs top <- Right(a.topology.get) a <- { // Resolve topologies directly imported by top, updating a - val tops = top.directImportMap.toList + val tops = top.directTopologies.toList Result.foldLeft (tops) (a) ((a, tl) => { defTopologyAnnotatedNode(a, tl._1.node) }) @@ -49,10 +49,7 @@ object CheckTopologyDefs val instanceNode = node.data.instance for { symbol <- a.getInterfaceInstanceSymbol(instanceNode.id) - instance <- a.getInterfaceInstance(instanceNode.id) - topology <- a.topology.get.addUniqueInstance( - symbol, instance, Locations.get(node.id) - ) + topology <- a.topology.get.addInstanceSymbol(symbol, Locations.get(node.id)) } yield a.copy(topology = Some(topology)) } diff --git a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUseDefCycles.scala b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUseDefCycles.scala index 7a699749d..b4a2d37c0 100644 --- a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUseDefCycles.scala +++ b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUseDefCycles.scala @@ -52,7 +52,7 @@ object CheckUseDefCycles extends UseAnalyzer { override def interfaceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = visitUse(a, node, use) - override def topologyUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = + override def interfaceInstanceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = visitUse(a, node, use) override def typeUse(a: Analysis, node: AstNode[Ast.TypeName], use: Name.Qualified) = diff --git a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUses.scala b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUses.scala index a6d33fe93..3c0d43fe4 100644 --- a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUses.scala +++ b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUses.scala @@ -16,9 +16,6 @@ object CheckUses extends BasicUseAnalyzer { (a: Analysis, udm: Map[AstNode.Id, Symbol]) => a.copy(useDefMap = udm) ) - override def componentInstanceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = - helpers.visitQualIdentNode (NameGroup.ComponentInstance) (a, node) - override def componentUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = helpers.visitQualIdentNode (NameGroup.Component) (a, node) @@ -191,8 +188,8 @@ object CheckUses extends BasicUseAnalyzer { override def portUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = helpers.visitQualIdentNode (NameGroup.Port) (a, node) - override def topologyUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = - helpers.visitQualIdentNode (NameGroup.Topology) (a, node) + override def interfaceInstanceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = + helpers.visitQualIdentNode (NameGroup.Instance) (a, node) override def interfaceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = helpers.visitQualIdentNode (NameGroup.Interface) (a, node) diff --git a/compiler/lib/src/main/scala/analysis/CheckSemantics/EnterSymbols.scala b/compiler/lib/src/main/scala/analysis/CheckSemantics/EnterSymbols.scala index 27c4b783f..8241ad4a8 100644 --- a/compiler/lib/src/main/scala/analysis/CheckSemantics/EnterSymbols.scala +++ b/compiler/lib/src/main/scala/analysis/CheckSemantics/EnterSymbols.scala @@ -94,7 +94,7 @@ object EnterSymbols val name = data.name val symbol = Symbol.ComponentInstance(aNode) val nestedScope = a.nestedScope - for (nestedScope <- nestedScope.put(NameGroup.ComponentInstance)(name, symbol)) + for (nestedScope <- nestedScope.put(NameGroup.Instance)(name, symbol)) yield updateMap(a, symbol).copy(nestedScope = nestedScope) } @@ -180,12 +180,12 @@ object EnterSymbols val a1 = a.copy(scopeNameList = newScopeNameList) for { triple <- a1.nestedScope.innerScope.get (NameGroup.Value) (name) match { - case Some(symbol: Symbol.Module) => + case Some(symbol: Symbol.Module) => // We found a module symbol with the same name at the current level. // Re-open the scope. val scope = a1.symbolScopeMap(symbol) Right((a1, symbol, scope)) - case Some(symbol) => + case Some(symbol) => // We found a non-module symbol with the same name at the current level. // This is an error. val error = SemanticError.RedefinedSymbol( @@ -194,7 +194,7 @@ object EnterSymbols symbol.getLoc ) Left(error) - case None => + case None => // We did not find a symbol with the same name at the current level. // Create a new module symbol now. val symbol = Symbol.Module(aNode) @@ -280,7 +280,7 @@ object EnterSymbols val name = data.name val symbol = Symbol.Topology(aNode) val nestedScope = a.nestedScope - for (nestedScope <- nestedScope.put(NameGroup.Topology)(name, symbol)) + for (nestedScope <- nestedScope.put(NameGroup.Instance)(name, symbol)) yield updateMap(a, symbol).copy(nestedScope = nestedScope) } diff --git a/compiler/lib/src/main/scala/analysis/ComputeDependencies/MapUsesToLocs.scala b/compiler/lib/src/main/scala/analysis/ComputeDependencies/MapUsesToLocs.scala index 3959324eb..936715976 100644 --- a/compiler/lib/src/main/scala/analysis/ComputeDependencies/MapUsesToLocs.scala +++ b/compiler/lib/src/main/scala/analysis/ComputeDependencies/MapUsesToLocs.scala @@ -8,11 +8,8 @@ import fpp.compiler.util._ /** Map uses to locations */ object MapUsesToLocs extends BasicUseAnalyzer { - override def componentInstanceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = - analyzeUse(a, Ast.SpecLoc.ComponentInstance, use) - override def interfaceInstanceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = - analyzeUse(a, Ast.SpecLoc.ComponentInstance, use) + analyzeUse(a, Ast.SpecLoc.Instance, use) override def stateMachineUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = analyzeUse(a, Ast.SpecLoc.StateMachine, use) @@ -37,9 +34,6 @@ object MapUsesToLocs extends BasicUseAnalyzer { override def portUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = analyzeUse(a, Ast.SpecLoc.Port, use) - override def topologyUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = - analyzeUse(a, Ast.SpecLoc.Topology, use) - override def interfaceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = analyzeUse(a, Ast.SpecLoc.Interface, use) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala b/compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala index a0dc95426..fe4f5f51b 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala @@ -4,21 +4,19 @@ package fpp.compiler.analysis sealed trait NameGroup object NameGroup { - case object ComponentInstance extends NameGroup case object Component extends NameGroup case object Port extends NameGroup case object StateMachine extends NameGroup - case object Topology extends NameGroup + case object Instance extends NameGroup case object Interface extends NameGroup case object Type extends NameGroup case object Value extends NameGroup val groups: List[NameGroup] = List( - ComponentInstance, Component, Port, StateMachine, - Topology, + Instance, Interface, Type, Value diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePartiallyNumbered.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePartiallyNumbered.scala index 13cdbb4d4..10b20a131 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePartiallyNumbered.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePartiallyNumbered.scala @@ -47,7 +47,7 @@ object ResolvePartiallyNumbered { /** Compute the transitively imported topologies */ private def computeTransitiveImports(a: Analysis, t: Topology) = { - val tis = t.directImportMap.keys.foldLeft (Set[Symbol.Topology]()) ((tis, ts) => { + val tis = t.directTopologies.keys.foldLeft (Set[Symbol.Topology]()) ((tis, ts) => { val t = a.topologyMap(ts) tis.union(t.transitiveImportSet) + ts }) @@ -133,11 +133,11 @@ object ResolvePartiallyNumbered { mapEntry: (InterfaceInstance, Location) ) = { val (instance, loc) = mapEntry - t.addMergedInstance(instance, loc) + t.addInstance(instance, loc) } def importInstances(into: Topology, fromSymbol: Symbol.Topology) = a.topologyMap(fromSymbol).instanceMap.foldLeft (into) (importInstance) - Right(t.directImportMap.keys.foldLeft (t) (importInstances)) + Right(t.directTopologies.keys.foldLeft (t) (importInstances)) } /** Resolve this topology to a partially numbered topology */ diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopology.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopology.scala index c0b10f694..bc71535ba 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopology.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopology.scala @@ -8,6 +8,7 @@ object ResolveTopology { /** Resolve a topology */ def resolve(a: Analysis, t: Topology): Result.Result[Topology] = for { + t <- ResolveTopologyInstances.resolve(a, t) t <- ResolvePartiallyNumbered.resolve(a, t) t <- ResolvePortNumbers.resolve(t) t <- Right(ResolveUnconnectedPorts.resolve(t)) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopologyInstances.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopologyInstances.scala new file mode 100644 index 000000000..1f8014ccc --- /dev/null +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopologyInstances.scala @@ -0,0 +1,27 @@ +package fpp.compiler.analysis + +import fpp.compiler.ast._ +import fpp.compiler.util._ + +object ResolveTopologyInstances { + + /** Resolve a topology */ + def resolve(a: Analysis, t: Topology): Result.Result[Topology] = + for { + t <- { + val tops = t.directTopologies.toList + Right(tops.foldLeft (t) ((t, ti) => { + t.addInstance(InterfaceInstance.fromTopology(a.topologyMap(ti._1)), ti._2) + })) + } + + t <- { + val comps = t.directComponentInstances.toList + Right(comps.foldLeft (t) ((t, ci) => { + t.addInstance(InterfaceInstance.fromComponentInstance(a.componentInstanceMap(ci._1)), ci._2) + })) + } + } + yield t + +} diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala b/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala index 1431d4129..4150649b7 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala @@ -65,6 +65,6 @@ object Symbol { override def getUnqualifiedName = node._2.data.name } - type InterfaceInstance = ComponentInstance | Topology + type InterfaceInstance = Symbol.ComponentInstance | Symbol.Topology } diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala b/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala index 757e72dc0..decdad2d0 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala @@ -10,7 +10,9 @@ case class Topology( /** Fully qualified name of the topology */ qualifiedName: Name.Qualified, /** The directly imported topologies */ - directImportMap: Map[Symbol.Topology, Location] = Map(), + directTopologies: Map[Symbol.Topology, Location] = Map(), + /** The directly imported component instances */ + directComponentInstances: Map[Symbol.ComponentInstance, Location] = Map(), /** The transitively imported topologies */ transitiveImportSet: Set[Symbol.Topology] = Set(), /** The instances of this topology */ @@ -106,26 +108,8 @@ case class Topology( Right(this.copy(patternMap = pm)) } - /** Add an imported topology */ - private def addImportedTopology( - symbol: Symbol.Topology, - loc: Location - ): Result.Result[Topology] = - directImportMap.get(symbol) match { - case Some(prevLoc) => Left( - SemanticError.DuplicateTopology( - symbol.getUnqualifiedName, - loc, - prevLoc - ) - ) - case None => - val map = directImportMap + (symbol -> loc) - Right(this.copy(directImportMap = map)) - } - /** Add an instance that may already be there */ - def addMergedInstance( + def addInstance( instance: InterfaceInstance, loc: Location ): Topology = { @@ -138,31 +122,40 @@ case class Topology( } /** Add an instance that must be unique */ - def addUniqueInstance( + def addInstanceSymbol( symbol: Symbol.InterfaceInstance, - instance: InterfaceInstance, loc: Location ): Result.Result[Topology] = for { t <- { symbol match { case ci: Symbol.ComponentInstance => - Right(this) - case top: Symbol.Topology => - addImportedTopology(top, loc) - } - } + directComponentInstances.get(ci) match { + case Some(prevLoc) => Left( + SemanticError.DuplicateInstance( + symbol.getUnqualifiedName, + loc, + prevLoc + ) + ) + case None => + val map = directComponentInstances + (ci -> loc) + Right(this.copy(directComponentInstances = map)) + } - t <- { - t.instanceMap.get(instance) match { - case Some(prevLoc) => Left( - SemanticError.DuplicateInstance( - instance.getUnqualifiedName, - loc, - prevLoc - ) - ) - case None => Right(t.addMergedInstance(instance, loc)) + case top: Symbol.Topology => + directTopologies.get(top) match { + case Some(prevLoc) => Left( + SemanticError.DuplicateInstance( + symbol.getUnqualifiedName, + loc, + prevLoc + ) + ) + case None => + val map = directTopologies + (top -> loc) + Right(this.copy(directTopologies = map)) + } } } } yield t diff --git a/compiler/lib/src/main/scala/analysis/UsedSymbols.scala b/compiler/lib/src/main/scala/analysis/UsedSymbols.scala index 906923624..0bbed6e30 100644 --- a/compiler/lib/src/main/scala/analysis/UsedSymbols.scala +++ b/compiler/lib/src/main/scala/analysis/UsedSymbols.scala @@ -18,12 +18,6 @@ object UsedSymbols extends UseAnalyzer { use: Name.Qualified ) = addSymbol(a, node) - override def componentInstanceUse( - a: Analysis, - node: AstNode[Ast.QualIdent], - use: Name.Qualified - ) = addSymbol(a, node) - override def interfaceInstanceUse( a: Analysis, node: AstNode[Ast.QualIdent], @@ -36,12 +30,6 @@ object UsedSymbols extends UseAnalyzer { use: Name.Qualified ) = addSymbol(a, node) - override def topologyUse( - a: Analysis, - node: AstNode[Ast.QualIdent], - use: Name.Qualified - ) = addSymbol(a, node) - override def interfaceUse( a: Analysis, node: AstNode[Ast.QualIdent], diff --git a/compiler/lib/src/main/scala/ast/Ast.scala b/compiler/lib/src/main/scala/ast/Ast.scala index bd5717b3b..32cc6d5b5 100644 --- a/compiler/lib/src/main/scala/ast/Ast.scala +++ b/compiler/lib/src/main/scala/ast/Ast.scala @@ -581,7 +581,7 @@ object Ast { case object Component extends Kind { override def toString = "component" } - case object ComponentInstance extends Kind { + case object Instance extends Kind { override def toString = "instance" } case object Constant extends Kind { @@ -593,9 +593,6 @@ object Ast { case object StateMachine extends Kind { override def toString = "state machine" } - case object Topology extends Kind { - override def toString = "topology" - } case object Type extends Kind { override def toString = "type" } diff --git a/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala b/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala index dde2e436c..93cebade3 100644 --- a/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala +++ b/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala @@ -154,13 +154,20 @@ object AnalysisJsonEncoder extends JsonEncoder{ Encoder.instance (mapAsJsonMap(f1)(f2)) } - private implicit val directImportMapEncoder: + private implicit val directTopologiesMapEncoder: Encoder[Map[Symbol.Topology, Location]] = { def f2(loc: Location) = loc.asJson Encoder.instance (mapAsJsonMap (symbolToIdString) (f2) _) } + private implicit val directComponentInstancesEncoder: + Encoder[Map[Symbol.ComponentInstance, Location]] = + { + def f2(loc: Location) = loc.asJson + Encoder.instance (mapAsJsonMap (symbolToIdString) (f2) _) + } + private implicit val eventMapEncoder: Encoder[Map[Event.Id, Event]] = { def f1(id: Event.Id) = id.toString def f2(event: Event) = event.asJson diff --git a/compiler/lib/src/main/scala/codegen/LocateDefsFppWriter.scala b/compiler/lib/src/main/scala/codegen/LocateDefsFppWriter.scala index 2518e7bc1..c10e1a5c4 100644 --- a/compiler/lib/src/main/scala/codegen/LocateDefsFppWriter.scala +++ b/compiler/lib/src/main/scala/codegen/LocateDefsFppWriter.scala @@ -83,7 +83,7 @@ object LocateDefsFppWriter extends AstVisitor with LineUtils { ) = { val (_, node, _) = aNode val data = node.data - writeSpecLoc(s, Ast.SpecLoc.ComponentInstance, data.name, node) + writeSpecLoc(s, Ast.SpecLoc.Instance, data.name, node) } override def defConstantAnnotatedNode( @@ -138,7 +138,7 @@ object LocateDefsFppWriter extends AstVisitor with LineUtils { ) = { val (_, node, _) = aNode val data = node.data - writeSpecLoc(s, Ast.SpecLoc.Topology, data.name, node) + writeSpecLoc(s, Ast.SpecLoc.Instance, data.name, node) } override def transUnit(s: State, tu: Ast.TransUnit) = diff --git a/compiler/lib/src/main/scala/syntax/Parser.scala b/compiler/lib/src/main/scala/syntax/Parser.scala index 06f76e55f..dd54a16e8 100644 --- a/compiler/lib/src/main/scala/syntax/Parser.scala +++ b/compiler/lib/src/main/scala/syntax/Parser.scala @@ -667,10 +667,9 @@ object Parser extends Parsers { def kind = { component ^^ (_ => Ast.SpecLoc.Component) | constant ^^ (_ => Ast.SpecLoc.Constant) | - instance ^^ (_ => Ast.SpecLoc.ComponentInstance) | + instance ^^ (_ => Ast.SpecLoc.Instance) | port ^^ (_ => Ast.SpecLoc.Port) | state ~! machine ^^ (_ => Ast.SpecLoc.StateMachine) | - topology ^^ (_ => Ast.SpecLoc.Topology) | typeToken ^^ (_ => Ast.SpecLoc.Type) | interface ^^ (_ => Ast.SpecLoc.Interface) | failure("location kind expected") diff --git a/compiler/lib/src/main/scala/util/Error.scala b/compiler/lib/src/main/scala/util/Error.scala index ed7828075..d54e5ec82 100644 --- a/compiler/lib/src/main/scala/util/Error.scala +++ b/compiler/lib/src/main/scala/util/Error.scala @@ -123,9 +123,6 @@ sealed trait Error { Error.print (Some(loc)) (s"duplicate telemetry packet set ${name}") System.err.println("previous set is here:") System.err.println(prevLoc) - case SemanticError.DuplicateTopology(name, loc, prevLoc) => - Error.print (Some(loc)) (s"duplicate topology ${name}") - printPrevLoc(prevLoc) case SemanticError.DuplicateInterface(name, loc, prevLoc) => Error.print (Some(loc)) (s"duplicate interface ${name}") printPrevLoc(prevLoc) @@ -493,12 +490,6 @@ object SemanticError { loc: Location, prevLoc: Location ) extends Error - /** Duplicate topology */ - final case class DuplicateTopology( - name: String, - loc: Location, - prevLoc: Location - ) extends Error /** Duplicate interface */ final case class DuplicateInterface( name: String, diff --git a/compiler/lib/src/test/scala/syntax/Parser.scala b/compiler/lib/src/test/scala/syntax/Parser.scala index d8e70afbe..c0093e2d7 100644 --- a/compiler/lib/src/test/scala/syntax/Parser.scala +++ b/compiler/lib/src/test/scala/syntax/Parser.scala @@ -395,9 +395,9 @@ class ParserSpec extends AnyWordSpec { ) } - "spec component instance OK" should { + "spec instance OK" should { parseAllOK( - Parser.specCompInstance, + Parser.specInstance, List( "instance a", "instance a.b", diff --git a/compiler/tools/fpp-check/test/top_import/duplicate_topology.ref.txt b/compiler/tools/fpp-check/test/top_import/duplicate_topology.ref.txt index 4399ae3f4..3fc8d212d 100644 --- a/compiler/tools/fpp-check/test/top_import/duplicate_topology.ref.txt +++ b/compiler/tools/fpp-check/test/top_import/duplicate_topology.ref.txt @@ -2,7 +2,7 @@ fpp-check [ local path prefix ]/compiler/tools/fpp-check/test/top_import/duplicate_topology.fpp:8.3 import A ^ -error: duplicate topology A +error: duplicate instance A previous occurrence is here: [ local path prefix ]/compiler/tools/fpp-check/test/top_import/duplicate_topology.fpp:7.3 import A diff --git a/compiler/tools/fpp-check/test/top_import/instance_public.fpp b/compiler/tools/fpp-check/test/top_import/instance_public.fpp index 672ece62a..0a692ed81 100644 --- a/compiler/tools/fpp-check/test/top_import/instance_public.fpp +++ b/compiler/tools/fpp-check/test/top_import/instance_public.fpp @@ -5,7 +5,7 @@ passive component C { } instance c: C base id 0x100 topology B { - import A + import A connections C { c.pOut -> c.pIn } diff --git a/compiler/tools/fpp/src/main/scala/fpp-locate-uses.scala b/compiler/tools/fpp/src/main/scala/fpp-locate-uses.scala index e987be4b0..72165482e 100644 --- a/compiler/tools/fpp/src/main/scala/fpp-locate-uses.scala +++ b/compiler/tools/fpp/src/main/scala/fpp-locate-uses.scala @@ -73,7 +73,7 @@ object FPPLocateUses { case _: Symbol.AliasType => Ast.SpecLoc.Type case _: Symbol.Array => Ast.SpecLoc.Type case _: Symbol.Component => Ast.SpecLoc.Component - case _: Symbol.ComponentInstance => Ast.SpecLoc.ComponentInstance + case _: Symbol.ComponentInstance => Ast.SpecLoc.Instance case _: Symbol.Constant => Ast.SpecLoc.Constant case _: Symbol.Enum => Ast.SpecLoc.Type case _: Symbol.EnumConstant => Ast.SpecLoc.Type @@ -82,7 +82,7 @@ object FPPLocateUses { case _: Symbol.Port => Ast.SpecLoc.Port case _: Symbol.StateMachine => Ast.SpecLoc.StateMachine case _: Symbol.Struct => Ast.SpecLoc.Type - case _: Symbol.Topology => Ast.SpecLoc.Topology + case _: Symbol.Topology => Ast.SpecLoc.Instance } val specLocNode = AstNode.create(Ast.SpecLoc(kind, qualIdentNode, fileNode)) val specLocAnnotatedNode = (Nil, specLocNode, Nil) From 374c8b5577fa34bffb14fa794548ecacdf177f5d Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Tue, 21 Oct 2025 09:32:07 -0700 Subject: [PATCH 04/26] Update tests with new messages --- .../main/scala/analysis/Semantics/Connection.scala | 14 +++++++++----- compiler/lib/src/main/scala/util/Location.scala | 7 +++++++ .../invalid_port_instance.ref.txt | 2 +- .../module_as_component_instance.ref.txt | 2 +- .../invalid_symbols/module_as_topology.ref.txt | 2 +- .../port_matching/p1_not_port_instance.ref.txt | 2 +- .../port_matching/p2_not_port_instance.ref.txt | 2 +- .../duplicate_output_connection.ref.txt | 4 ++-- 8 files changed, 23 insertions(+), 12 deletions(-) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Connection.scala b/compiler/lib/src/main/scala/analysis/Semantics/Connection.scala index a53de041f..b4e4342f4 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Connection.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Connection.scala @@ -109,12 +109,12 @@ case class Connection( def portMatchingExists(pml: List[Component.PortMatching], pi: PortInstance): Boolean = pml.exists(pm => pi.equals(pm.instance1) || pi.equals(pm.instance2)) - from.port.interfaceInstance match { - case InterfaceInstance.InterfaceComponentInstance(ci) => { + (from.port.interfaceInstance, to.port.interfaceInstance) match { + case (InterfaceInstance.InterfaceComponentInstance(fromCi), InterfaceInstance.InterfaceComponentInstance(toCi)) => { val fromPi = from.port.portInstance val toPi = to.port.portInstance - val fromPml = ci.component.portMatchingList - val toPml = ci.component.portMatchingList + val fromPml = fromCi.component.portMatchingList + val toPml = toCi.component.portMatchingList portMatchingExists(fromPml, fromPi) || portMatchingExists(toPml, toPi) } @@ -127,7 +127,11 @@ case class Connection( override def compare(that: Connection) = { val fromCompare = this.from.compare(that.from) if (fromCompare != 0) fromCompare - else this.to.compare(that.to) + else { + val toCompare = this.to.compare(that.to) + if (toCompare != 0) toCompare + else this.from.loc.compare(that.from.loc) + } } /** Gets the location of the connection */ diff --git a/compiler/lib/src/main/scala/util/Location.scala b/compiler/lib/src/main/scala/util/Location.scala index 72b227600..1d38b8624 100644 --- a/compiler/lib/src/main/scala/util/Location.scala +++ b/compiler/lib/src/main/scala/util/Location.scala @@ -48,4 +48,11 @@ final case class Location( def getRelativePath(path: String): java.nio.file.Path = getDirPath.resolve(path).normalize + def compare(that: Location) = { + val fileCompare = this.file.toString().compare(that.file.toString()) + if (fileCompare != 0) fileCompare + else if (this.pos.line != that.pos.line) this.pos.line - that.pos.line + else this.pos.column - that.pos.column + } + } diff --git a/compiler/tools/fpp-check/test/connection_direct/invalid_port_instance.ref.txt b/compiler/tools/fpp-check/test/connection_direct/invalid_port_instance.ref.txt index d5c0b2c18..3a052f705 100644 --- a/compiler/tools/fpp-check/test/connection_direct/invalid_port_instance.ref.txt +++ b/compiler/tools/fpp-check/test/connection_direct/invalid_port_instance.ref.txt @@ -2,4 +2,4 @@ fpp-check [ local path prefix ]/compiler/tools/fpp-check/test/connection_direct/invalid_port_instance.fpp:6.7 c.out -> c.in ^ -error: out is not a port instance of component C +error: out is not a port instance of interface c diff --git a/compiler/tools/fpp-check/test/invalid_symbols/module_as_component_instance.ref.txt b/compiler/tools/fpp-check/test/invalid_symbols/module_as_component_instance.ref.txt index c8a166516..408f26b55 100644 --- a/compiler/tools/fpp-check/test/invalid_symbols/module_as_component_instance.ref.txt +++ b/compiler/tools/fpp-check/test/invalid_symbols/module_as_component_instance.ref.txt @@ -2,7 +2,7 @@ fpp-check [ local path prefix ]/compiler/tools/fpp-check/test/invalid_symbols/module_as_component_instance.fpp:5.14 instance M ^ -error: invalid symbol M: not a component instance symbol +error: invalid symbol M: not a component instance or topology symbol symbol is defined here: [ local path prefix ]/compiler/tools/fpp-check/test/invalid_symbols/module_as_component_instance.fpp:1.1 module M { diff --git a/compiler/tools/fpp-check/test/invalid_symbols/module_as_topology.ref.txt b/compiler/tools/fpp-check/test/invalid_symbols/module_as_topology.ref.txt index 8936ca74f..09573b389 100644 --- a/compiler/tools/fpp-check/test/invalid_symbols/module_as_topology.ref.txt +++ b/compiler/tools/fpp-check/test/invalid_symbols/module_as_topology.ref.txt @@ -2,7 +2,7 @@ fpp-check [ local path prefix ]/compiler/tools/fpp-check/test/invalid_symbols/module_as_topology.fpp:5.12 import M ^ -error: invalid symbol M: not a topology symbol +error: invalid symbol M: not a component instance or topology symbol symbol is defined here: [ local path prefix ]/compiler/tools/fpp-check/test/invalid_symbols/module_as_topology.fpp:1.1 module M { diff --git a/compiler/tools/fpp-check/test/port_matching/p1_not_port_instance.ref.txt b/compiler/tools/fpp-check/test/port_matching/p1_not_port_instance.ref.txt index c49e47d2a..b169b46d7 100644 --- a/compiler/tools/fpp-check/test/port_matching/p1_not_port_instance.ref.txt +++ b/compiler/tools/fpp-check/test/port_matching/p1_not_port_instance.ref.txt @@ -2,4 +2,4 @@ fpp-check [ local path prefix ]/compiler/tools/fpp-check/test/port_matching/p1_not_port_instance.fpp:6.9 match p1 with p2 ^ -error: p1 is not a port instance of component C +error: p1 is not a port instance of interface C diff --git a/compiler/tools/fpp-check/test/port_matching/p2_not_port_instance.ref.txt b/compiler/tools/fpp-check/test/port_matching/p2_not_port_instance.ref.txt index 760962ec5..6423e37f3 100644 --- a/compiler/tools/fpp-check/test/port_matching/p2_not_port_instance.ref.txt +++ b/compiler/tools/fpp-check/test/port_matching/p2_not_port_instance.ref.txt @@ -2,4 +2,4 @@ fpp-check [ local path prefix ]/compiler/tools/fpp-check/test/port_matching/p2_not_port_instance.fpp:6.17 match p1 with p2 ^ -error: p2 is not a port instance of component C +error: p2 is not a port instance of interface C diff --git a/compiler/tools/fpp-check/test/port_numbering/duplicate_output_connection.ref.txt b/compiler/tools/fpp-check/test/port_numbering/duplicate_output_connection.ref.txt index edf0a6da9..1224fbd58 100644 --- a/compiler/tools/fpp-check/test/port_numbering/duplicate_output_connection.ref.txt +++ b/compiler/tools/fpp-check/test/port_numbering/duplicate_output_connection.ref.txt @@ -1,9 +1,9 @@ fpp-check -[ local path prefix ]/compiler/tools/fpp-check/test/port_numbering/duplicate_output_connection.fpp:25.5 +[ local path prefix ]/compiler/tools/fpp-check/test/port_numbering/duplicate_output_connection.fpp:24.5 c1.pOut[0] -> c2.pIn ^ error: duplicate connection at output port 0 previous occurrence is here: -[ local path prefix ]/compiler/tools/fpp-check/test/port_numbering/duplicate_output_connection.fpp:24.5 +[ local path prefix ]/compiler/tools/fpp-check/test/port_numbering/duplicate_output_connection.fpp:25.5 c1.pOut[0] -> c2.pIn ^ From 0009de3b638fa8009256a5ba33abacba330625e3 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Tue, 21 Oct 2025 09:35:04 -0700 Subject: [PATCH 05/26] Add topology instance test --- .../duplicate_instance.ref.txt | 9 --------- .../undef_instance.ref.txt | 5 ----- .../clean | 0 .../duplicate_instance.fpp | 0 .../instance_spec/duplicate_instance.ref.txt | 9 +++++++++ .../ok.fpp | 0 .../ok.ref.txt | 0 .../run | 0 .../tests.sh | 1 + .../test/instance_spec/topology_instance.fpp | 17 +++++++++++++++++ .../instance_spec/topology_instance.ref.txt | 0 .../undef_instance.fpp | 0 .../test/instance_spec/undef_instance.ref.txt | 5 +++++ .../update-ref | 0 14 files changed, 32 insertions(+), 14 deletions(-) delete mode 100644 compiler/tools/fpp-check/test/component_instance_spec/duplicate_instance.ref.txt delete mode 100644 compiler/tools/fpp-check/test/component_instance_spec/undef_instance.ref.txt rename compiler/tools/fpp-check/test/{component_instance_spec => instance_spec}/clean (100%) rename compiler/tools/fpp-check/test/{component_instance_spec => instance_spec}/duplicate_instance.fpp (100%) create mode 100644 compiler/tools/fpp-check/test/instance_spec/duplicate_instance.ref.txt rename compiler/tools/fpp-check/test/{component_instance_spec => instance_spec}/ok.fpp (100%) rename compiler/tools/fpp-check/test/{component_instance_spec => instance_spec}/ok.ref.txt (100%) rename compiler/tools/fpp-check/test/{component_instance_spec => instance_spec}/run (100%) rename compiler/tools/fpp-check/test/{component_instance_spec => instance_spec}/tests.sh (72%) create mode 100644 compiler/tools/fpp-check/test/instance_spec/topology_instance.fpp create mode 100644 compiler/tools/fpp-check/test/instance_spec/topology_instance.ref.txt rename compiler/tools/fpp-check/test/{component_instance_spec => instance_spec}/undef_instance.fpp (100%) create mode 100644 compiler/tools/fpp-check/test/instance_spec/undef_instance.ref.txt rename compiler/tools/fpp-check/test/{component_instance_spec => instance_spec}/update-ref (100%) diff --git a/compiler/tools/fpp-check/test/component_instance_spec/duplicate_instance.ref.txt b/compiler/tools/fpp-check/test/component_instance_spec/duplicate_instance.ref.txt deleted file mode 100644 index 98567602b..000000000 --- a/compiler/tools/fpp-check/test/component_instance_spec/duplicate_instance.ref.txt +++ /dev/null @@ -1,9 +0,0 @@ -fpp-check -[ local path prefix ]/compiler/tools/fpp-check/test/component_instance_spec/duplicate_instance.fpp:10.3 - instance c - ^ -error: duplicate instance c -previous occurrence is here: -[ local path prefix ]/compiler/tools/fpp-check/test/component_instance_spec/duplicate_instance.fpp:9.3 - instance c - ^ diff --git a/compiler/tools/fpp-check/test/component_instance_spec/undef_instance.ref.txt b/compiler/tools/fpp-check/test/component_instance_spec/undef_instance.ref.txt deleted file mode 100644 index 87ce715bb..000000000 --- a/compiler/tools/fpp-check/test/component_instance_spec/undef_instance.ref.txt +++ /dev/null @@ -1,5 +0,0 @@ -fpp-check -[ local path prefix ]/compiler/tools/fpp-check/test/component_instance_spec/undef_instance.fpp:3.12 - instance c - ^ -error: undefined symbol c diff --git a/compiler/tools/fpp-check/test/component_instance_spec/clean b/compiler/tools/fpp-check/test/instance_spec/clean similarity index 100% rename from compiler/tools/fpp-check/test/component_instance_spec/clean rename to compiler/tools/fpp-check/test/instance_spec/clean diff --git a/compiler/tools/fpp-check/test/component_instance_spec/duplicate_instance.fpp b/compiler/tools/fpp-check/test/instance_spec/duplicate_instance.fpp similarity index 100% rename from compiler/tools/fpp-check/test/component_instance_spec/duplicate_instance.fpp rename to compiler/tools/fpp-check/test/instance_spec/duplicate_instance.fpp diff --git a/compiler/tools/fpp-check/test/instance_spec/duplicate_instance.ref.txt b/compiler/tools/fpp-check/test/instance_spec/duplicate_instance.ref.txt new file mode 100644 index 000000000..89e042b48 --- /dev/null +++ b/compiler/tools/fpp-check/test/instance_spec/duplicate_instance.ref.txt @@ -0,0 +1,9 @@ +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/instance_spec/duplicate_instance.fpp:10.3 + instance c + ^ +error: duplicate instance c +previous occurrence is here: +[ local path prefix ]/compiler/tools/fpp-check/test/instance_spec/duplicate_instance.fpp:9.3 + instance c + ^ diff --git a/compiler/tools/fpp-check/test/component_instance_spec/ok.fpp b/compiler/tools/fpp-check/test/instance_spec/ok.fpp similarity index 100% rename from compiler/tools/fpp-check/test/component_instance_spec/ok.fpp rename to compiler/tools/fpp-check/test/instance_spec/ok.fpp diff --git a/compiler/tools/fpp-check/test/component_instance_spec/ok.ref.txt b/compiler/tools/fpp-check/test/instance_spec/ok.ref.txt similarity index 100% rename from compiler/tools/fpp-check/test/component_instance_spec/ok.ref.txt rename to compiler/tools/fpp-check/test/instance_spec/ok.ref.txt diff --git a/compiler/tools/fpp-check/test/component_instance_spec/run b/compiler/tools/fpp-check/test/instance_spec/run similarity index 100% rename from compiler/tools/fpp-check/test/component_instance_spec/run rename to compiler/tools/fpp-check/test/instance_spec/run diff --git a/compiler/tools/fpp-check/test/component_instance_spec/tests.sh b/compiler/tools/fpp-check/test/instance_spec/tests.sh similarity index 72% rename from compiler/tools/fpp-check/test/component_instance_spec/tests.sh rename to compiler/tools/fpp-check/test/instance_spec/tests.sh index 53ddd24ab..3026e2c86 100644 --- a/compiler/tools/fpp-check/test/component_instance_spec/tests.sh +++ b/compiler/tools/fpp-check/test/instance_spec/tests.sh @@ -1,5 +1,6 @@ tests=" duplicate_instance ok +topology_instance undef_instance " diff --git a/compiler/tools/fpp-check/test/instance_spec/topology_instance.fpp b/compiler/tools/fpp-check/test/instance_spec/topology_instance.fpp new file mode 100644 index 000000000..21eb7903e --- /dev/null +++ b/compiler/tools/fpp-check/test/instance_spec/topology_instance.fpp @@ -0,0 +1,17 @@ +passive component C { + +} + +instance c: C base id 0x100 + +topology T1 { + + instance c + +} + +topology T2 { + + instance T1 + +} diff --git a/compiler/tools/fpp-check/test/instance_spec/topology_instance.ref.txt b/compiler/tools/fpp-check/test/instance_spec/topology_instance.ref.txt new file mode 100644 index 000000000..e69de29bb diff --git a/compiler/tools/fpp-check/test/component_instance_spec/undef_instance.fpp b/compiler/tools/fpp-check/test/instance_spec/undef_instance.fpp similarity index 100% rename from compiler/tools/fpp-check/test/component_instance_spec/undef_instance.fpp rename to compiler/tools/fpp-check/test/instance_spec/undef_instance.fpp diff --git a/compiler/tools/fpp-check/test/instance_spec/undef_instance.ref.txt b/compiler/tools/fpp-check/test/instance_spec/undef_instance.ref.txt new file mode 100644 index 000000000..f284ad61a --- /dev/null +++ b/compiler/tools/fpp-check/test/instance_spec/undef_instance.ref.txt @@ -0,0 +1,5 @@ +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/instance_spec/undef_instance.fpp:3.12 + instance c + ^ +error: undefined symbol c diff --git a/compiler/tools/fpp-check/test/component_instance_spec/update-ref b/compiler/tools/fpp-check/test/instance_spec/update-ref similarity index 100% rename from compiler/tools/fpp-check/test/component_instance_spec/update-ref rename to compiler/tools/fpp-check/test/instance_spec/update-ref From f707a95ce695ff62d00ae92f494d82525361ff06 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Wed, 22 Oct 2025 15:01:50 -0700 Subject: [PATCH 06/26] Working topology ports --- .../src/main/scala/analysis/Analysis.scala | 3 + .../analysis/Analyzers/BasicUseAnalyzer.scala | 6 + .../CheckSemantics/CheckTopologyDefs.scala | 9 +- .../scala/analysis/Semantics/Component.scala | 1 + .../scala/analysis/Semantics/Connection.scala | 2 +- .../Semantics/InterfaceInstance.scala | 2 +- .../analysis/Semantics/PortInstance.scala | 23 ++++ .../ResolvePartiallyNumbered.scala | 19 +++ .../ResolveTopology/ResolveTopology.scala | 1 + .../ResolveTopologyPortInterface.scala | 24 ++++ .../scala/analysis/Semantics/Topology.scala | 123 ++++++++++++------ compiler/lib/src/main/scala/ast/Ast.scala | 2 +- .../src/main/scala/codegen/AstWriter.scala | 2 +- .../ComponentCppWriterUtils.scala | 2 + .../ComponentTesterBaseWriter.scala | 1 + .../src/main/scala/codegen/FppWriter.scala | 2 +- .../JsonEncoder/AnalysisJsonEncoder.scala | 3 + .../lib/src/main/scala/syntax/Parser.scala | 2 +- .../tools/fpp-check/test/top_ports/basic.fpp | 34 +++++ .../fpp-check/test/top_ports/basic.ref.txt | 0 compiler/tools/fpp-check/test/top_ports/clean | 6 + .../test/top_ports/internal_port.fpp | 35 +++++ .../fpp-check/test/top_ports/out_to_out.fpp | 34 +++++ .../test/top_ports/out_to_out.ref.txt | 13 ++ compiler/tools/fpp-check/test/top_ports/run | 4 + .../tools/fpp-check/test/top_ports/tests.sh | 5 + .../test/top_ports/unmatched_types.fpp | 38 ++++++ .../test/top_ports/unmatched_types.ref.txt | 13 ++ .../tools/fpp-check/test/top_ports/update-ref | 4 + docs/fpp-spec.html | 5 +- docs/fpp-users-guide.html | 2 +- .../Topology-Port-Instance-Specifiers.adoc | 3 + 32 files changed, 376 insertions(+), 47 deletions(-) create mode 100644 compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopologyPortInterface.scala create mode 100644 compiler/tools/fpp-check/test/top_ports/basic.fpp create mode 100644 compiler/tools/fpp-check/test/top_ports/basic.ref.txt create mode 100755 compiler/tools/fpp-check/test/top_ports/clean create mode 100644 compiler/tools/fpp-check/test/top_ports/internal_port.fpp create mode 100644 compiler/tools/fpp-check/test/top_ports/out_to_out.fpp create mode 100644 compiler/tools/fpp-check/test/top_ports/out_to_out.ref.txt create mode 100755 compiler/tools/fpp-check/test/top_ports/run create mode 100644 compiler/tools/fpp-check/test/top_ports/tests.sh create mode 100644 compiler/tools/fpp-check/test/top_ports/unmatched_types.fpp create mode 100644 compiler/tools/fpp-check/test/top_ports/unmatched_types.ref.txt create mode 100755 compiler/tools/fpp-check/test/top_ports/update-ref diff --git a/compiler/lib/src/main/scala/analysis/Analysis.scala b/compiler/lib/src/main/scala/analysis/Analysis.scala index 2f589e244..ab8198495 100644 --- a/compiler/lib/src/main/scala/analysis/Analysis.scala +++ b/compiler/lib/src/main/scala/analysis/Analysis.scala @@ -65,6 +65,9 @@ case class Analysis( interfaceMap: Map[Symbol.Interface, Interface] = Map(), /** The interface under construction */ interface: Option[Interface] = None, + /** The map from topology symbols to 'partial' topologies + * with only port interface/instance information */ + partialTopologyMap: Map[Symbol.Topology, Topology] = Map(), /** The map from topology symbols to topologies */ topologyMap: Map[Symbol.Topology, Topology] = Map(), /** The topology under construction */ diff --git a/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala b/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala index dc0ddcba2..d09ee9694 100644 --- a/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala +++ b/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala @@ -168,6 +168,12 @@ trait BasicUseAnalyzer extends TypeExpressionAnalyzer { qualIdentNode(interfaceUse)(a, data.sym) } + override def specTopPortAnnotatedNode(a: Analysis, node: Ast.Annotated[AstNode[Ast.SpecTopPort]]) = { + val (_, node1, _) = node + val data = node1.data + portInstanceIdentifierNode(a, data.underlyingPort) + } + override def typeNameQualIdentNode(a: Analysis, node: AstNode[Ast.TypeName], tn: Ast.TypeNameQualIdent) = { val use = Name.Qualified.fromQualIdent(tn.name.data) typeUse(a, node, use) diff --git a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTopologyDefs.scala b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTopologyDefs.scala index b54a2d0b5..d53249f64 100644 --- a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTopologyDefs.scala +++ b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTopologyDefs.scala @@ -5,7 +5,7 @@ import fpp.compiler.util._ /** Check topology definitions */ object CheckTopologyDefs - extends Analyzer + extends Analyzer with ModuleAnalyzer with TopologyAnalyzer { @@ -41,6 +41,13 @@ object CheckTopologyDefs } } + override def specTopPortAnnotatedNode( + a: Analysis, + aNode: Ast.Annotated[AstNode[Ast.SpecTopPort]] + ) = { + Right(a.copy(topology = Some(a.topology.get.addPortNode(aNode)))) + } + override def specInstanceAnnotatedNode( a: Analysis, aNode: Ast.Annotated[AstNode[Ast.SpecInstance]] diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Component.scala b/compiler/lib/src/main/scala/analysis/Semantics/Component.scala index f1d962f13..b6a5fddae 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Component.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Component.scala @@ -382,6 +382,7 @@ case class Component( case _ => Right(()) } case internal: PortInstance.Internal => Left(error) + case _: PortInstance.Topology => throw InternalError("topology port cannot exist in component") } } ) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Connection.scala b/compiler/lib/src/main/scala/analysis/Semantics/Connection.scala index b4e4342f4..e7edd464f 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Connection.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Connection.scala @@ -222,7 +222,7 @@ object Connection { case InterfaceInstance.InterfaceComponentInstance(ci) => this case InterfaceInstance.InterfaceTopology(top) => this.copy( // Look up the mapping for this port instance - port = top.portMap(port.portInstance.getUnqualifiedName), + port = top.portMap(port.portInstance.getUnqualifiedName)._1, topologyPort = Some(this) // Recursively resolve the endpoint to a component instance ).getUnderlyingEndpoint() diff --git a/compiler/lib/src/main/scala/analysis/Semantics/InterfaceInstance.scala b/compiler/lib/src/main/scala/analysis/Semantics/InterfaceInstance.scala index 9e9112b6a..7ecece8d3 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/InterfaceInstance.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/InterfaceInstance.scala @@ -36,7 +36,7 @@ object InterfaceInstance { override def getQualifiedName: Name.Qualified = top.getQualifiedName override def getUnqualifiedName: String = top.getUnqualifiedName override def getLoc: Location = top.getLoc - override def getInterface: PortInterface = top.getInterface + override def getInterface: PortInterface = top.portInterface } def fromComponentInstance(ci: ComponentInstance) = diff --git a/compiler/lib/src/main/scala/analysis/Semantics/PortInstance.scala b/compiler/lib/src/main/scala/analysis/Semantics/PortInstance.scala index 2c4325758..479884970 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/PortInstance.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/PortInstance.scala @@ -140,6 +140,29 @@ object PortInstance { def getImportNodeIds = importNodeIds } + final case class Topology( + aNode: Ast.Annotated[AstNode[Ast.SpecTopPort]], + underlyingPort: PortInstance + ) extends PortInstance { + override def getDirection = underlyingPort.getDirection + + override def getArraySize = underlyingPort.getArraySize + + override def getNodeId = aNode._2.id + + override def getType = underlyingPort.getType + + override def getUnqualifiedName = aNode._2.data.name + + // Topology ports cannot be imported + def withImportSpecifier(importNode: AstNode.Id): PortInstance = + this + + def getImportNodeIds = List() + + override def toString = s"${getUnqualifiedName.toString} -> ${underlyingPort.toString}" + } + /** A special port instance */ final case class Special( aNode: Ast.Annotated[AstNode[Ast.SpecPortInstance]], diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePartiallyNumbered.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePartiallyNumbered.scala index 10b20a131..2231be60b 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePartiallyNumbered.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolvePartiallyNumbered.scala @@ -26,6 +26,24 @@ object ResolvePartiallyNumbered { yield () } + /** Check that connection instances are legal */ + private def checkPortInstances(t: Topology): Result.Result[Unit] = { + def checkPort(i: (PortInstanceIdentifier, Location)) = { + val (port, loc) = i + for { + _ <- t.lookUpInstanceAt(port.interfaceInstance, loc) + } + yield () + } + for { + _ <- Result.map( + t.portMap.toList.map(_._2), + checkPort + ) + } + yield () + } + /** Check the instances of a pattern */ private def checkPatternInstances(t: Topology, pattern: ConnectionPattern) = for { @@ -145,6 +163,7 @@ object ResolvePartiallyNumbered { for { t <- Right(computeTransitiveImports(a, t)) t <- resolveInstances(a, t) + _ <- checkPortInstances(t) _ <- checkConnectionInstances(t) t <- resolveInterfacesToComponentInstances(a, t) t <- resolveImportedConnections(a, t) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopology.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopology.scala index bc71535ba..ad908489a 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopology.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopology.scala @@ -9,6 +9,7 @@ object ResolveTopology { def resolve(a: Analysis, t: Topology): Result.Result[Topology] = for { t <- ResolveTopologyInstances.resolve(a, t) + t <- ResolveTopologyPortInterface.resolve(a, t) t <- ResolvePartiallyNumbered.resolve(a, t) t <- ResolvePortNumbers.resolve(t) t <- Right(ResolveUnconnectedPorts.resolve(t)) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopologyPortInterface.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopologyPortInterface.scala new file mode 100644 index 000000000..3527f488a --- /dev/null +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopologyPortInterface.scala @@ -0,0 +1,24 @@ +package fpp.compiler.analysis + +import fpp.compiler.ast._ +import fpp.compiler.util._ + +object ResolveTopologyPortInterface { + + /** Resolve a topology's port interface */ + def resolve(a: Analysis, t: Topology): Result.Result[Topology] = + Result.foldLeft (t.ports) (t) ((t, aNode) => { + val (_, node, _) = aNode + val topPort = node.data + + for { + instance <- PortInstanceIdentifier.fromNode(a, topPort.underlyingPort) + t <- t.addPort( + aNode, + instance, + Locations.get(node.id) + ) + } yield t + }) + +} diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala b/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala index decdad2d0..efe3fa05b 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala @@ -17,9 +17,11 @@ case class Topology( transitiveImportSet: Set[Symbol.Topology] = Set(), /** The instances of this topology */ instanceMap: Map[InterfaceInstance, Location] = Map(), - /** The ports in the topology */ - portMap: Map[Name.Unqualified, PortInstanceIdentifier] = Map(), - /** Port interface of the topology */ + /** List of the ports in the topology to resolve later */ + ports: List[Ast.Annotated[AstNode[Ast.SpecTopPort]]] = List(), + /** The ports in the topology resolved to their port instance identifiers */ + portMap: Map[Name.Unqualified, (PortInstanceIdentifier, Location)] = Map(), + /** Resolved port interface of the topology */ portInterface: PortInterface = PortInterface(), /** The connection patterns of this topology */ patternMap: Map[Ast.SpecConnectionGraph.Pattern.Kind, ConnectionPattern] = Map(), @@ -42,6 +44,59 @@ case class Topology( /** Gets the name of the topology */ def getName = aNode._2.data.name + /** Add a port to the topology */ + def addPortNode( + node: Ast.Annotated[AstNode[Ast.SpecTopPort]] + ) = { + this.copy(ports = this.ports :+ node) + } + + /** Add a port to the topology */ + def addPort( + node: Ast.Annotated[AstNode[Ast.SpecTopPort]], + underlyingPort: PortInstanceIdentifier, + loc: Location, + ) = { + val name = node._2.data.name + + for { + // Check that the topology port for a general port + pi <- underlyingPort.portInstance match { + case _: (PortInstance.General | PortInstance.Topology) => { + for { + iface <- this.portInterface.addPortInstance( + PortInstance.Topology( + node, + underlyingPort.portInstance + ) + ) + } yield iface + } + case _ => Left(SemanticError.InvalidPortInstance( + loc, + "topology port must name a general port or topology port", + Locations.get(underlyingPort.portInstance.getNodeId) + )) + } + + t <- portMap.get(name) match { + case Some((_, prevPortLoc)) => + Left(SemanticError.DuplicatePortInstance( + name, + loc, + List(), + prevPortLoc, + List() + )) + case None => + Right(this.copy( + portMap = portMap + (name -> (underlyingPort, loc)), + portInterface = pi + )) + } + } yield t + } + /** Add a connection */ def addConnection( graphName: Name.Unqualified, @@ -113,7 +168,6 @@ case class Topology( instance: InterfaceInstance, loc: Location ): Topology = { - // Private overrides public val pairOpt = instanceMap.get(instance) // Use the previous location, if it exists val mergedLoc = pairOpt.getOrElse(loc) @@ -126,39 +180,35 @@ case class Topology( symbol: Symbol.InterfaceInstance, loc: Location ): Result.Result[Topology] = - for { - t <- { - symbol match { - case ci: Symbol.ComponentInstance => - directComponentInstances.get(ci) match { - case Some(prevLoc) => Left( - SemanticError.DuplicateInstance( - symbol.getUnqualifiedName, - loc, - prevLoc - ) - ) - case None => - val map = directComponentInstances + (ci -> loc) - Right(this.copy(directComponentInstances = map)) - } + symbol match { + case ci: Symbol.ComponentInstance => + directComponentInstances.get(ci) match { + case Some(prevLoc) => Left( + SemanticError.DuplicateInstance( + symbol.getUnqualifiedName, + loc, + prevLoc + ) + ) + case None => + val map = directComponentInstances + (ci -> loc) + Right(this.copy(directComponentInstances = map)) + } - case top: Symbol.Topology => - directTopologies.get(top) match { - case Some(prevLoc) => Left( - SemanticError.DuplicateInstance( - symbol.getUnqualifiedName, - loc, - prevLoc - ) - ) - case None => - val map = directTopologies + (top -> loc) - Right(this.copy(directTopologies = map)) - } + case top: Symbol.Topology => + directTopologies.get(top) match { + case Some(prevLoc) => Left( + SemanticError.DuplicateInstance( + symbol.getUnqualifiedName, + loc, + prevLoc + ) + ) + case None => + val map = directTopologies + (top -> loc) + Right(this.copy(directTopologies = map)) } - } - } yield t + } /** Assigns a port number to a connection at a port instance */ def assignPortNumber( @@ -225,9 +275,6 @@ case class Topology( /** Gets the location of the topology */ def getLoc: Location = Locations.get(aNode._2.id) - /** Get the full port interface of this instance */ - def getInterface: PortInterface = portInterface - /** Precompute the set of component instances in the topology */ val componentInstanceMap: Map[ComponentInstance, Location] = { instanceMap collect { case (InterfaceInstance.InterfaceComponentInstance(ci), loc: Location) => (ci, loc) } diff --git a/compiler/lib/src/main/scala/ast/Ast.scala b/compiler/lib/src/main/scala/ast/Ast.scala index 32cc6d5b5..3c8cccdc9 100644 --- a/compiler/lib/src/main/scala/ast/Ast.scala +++ b/compiler/lib/src/main/scala/ast/Ast.scala @@ -784,7 +784,7 @@ object Ast { /** Topology port specifier */ final case class SpecTopPort( name: Ident, - underlyingPort: AstNode[QualIdent], + underlyingPort: AstNode[PortInstanceIdentifier], ) /** Import specifier */ diff --git a/compiler/lib/src/main/scala/codegen/AstWriter.scala b/compiler/lib/src/main/scala/codegen/AstWriter.scala index 80c5f51b7..c710dd51a 100644 --- a/compiler/lib/src/main/scala/codegen/AstWriter.scala +++ b/compiler/lib/src/main/scala/codegen/AstWriter.scala @@ -702,7 +702,7 @@ object AstWriter extends AstVisitor with LineUtils { lines("spec top port"), List.concat( ident(data.name), - qualIdent(data.underlyingPort.data) + portInstanceIdentifier(data.underlyingPort.data) ).map(indentIn) ) } diff --git a/compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/ComponentCppWriterUtils.scala b/compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/ComponentCppWriterUtils.scala index f04946dd5..c3c86d728 100644 --- a/compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/ComponentCppWriterUtils.scala +++ b/compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/ComponentCppWriterUtils.scala @@ -494,6 +494,7 @@ abstract class ComponentCppWriterUtils( case PortInstance.General(aNode, _, _, _, _, _) => aNode case PortInstance.Special(aNode, _, _, _, _, _) => aNode case PortInstance.Internal(aNode, _, _) => aNode + case _: PortInstance.Topology => throw InternalError("topology port not flattened") } AnnotationCppWriter.asStringOpt(aNode) @@ -581,6 +582,7 @@ abstract class ComponentCppWriterUtils( } case _: PortInstance.Special => "special" case _: PortInstance.Internal => "internal" + case _: PortInstance.Topology => throw InternalError("topology port not flattened") } def getPortListTypeString(ports: List[PortInstance]): String = diff --git a/compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/TestWriter/ComponentTesterBaseWriter.scala b/compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/TestWriter/ComponentTesterBaseWriter.scala index 14df588b2..a8d821e69 100644 --- a/compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/TestWriter/ComponentTesterBaseWriter.scala +++ b/compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/TestWriter/ComponentTesterBaseWriter.scala @@ -1523,6 +1523,7 @@ case class ComponentTesterBaseWriter( ) } case _: PortInstance.Internal => Nil + case _: PortInstance.Topology => throw InternalError("topology port not flattened") } lazy val member = functionClassMember( Some(s"Static function for port ${testerPortName(p)}"), diff --git a/compiler/lib/src/main/scala/codegen/FppWriter.scala b/compiler/lib/src/main/scala/codegen/FppWriter.scala index 5e3409dbf..9cb631f09 100644 --- a/compiler/lib/src/main/scala/codegen/FppWriter.scala +++ b/compiler/lib/src/main/scala/codegen/FppWriter.scala @@ -723,7 +723,7 @@ object FppWriter extends AstVisitor with LineUtils { val (_, node, _) = aNode val data = node.data lines(s"port ${ident(data.name)} = "). - join("") (qualIdent(data.underlyingPort.data)) + join("") (portInstanceId(data.underlyingPort.data)) } override def specInterfaceImportAnnotatedNode( diff --git a/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala b/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala index 93cebade3..6e78d0fcb 100644 --- a/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala +++ b/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala @@ -85,6 +85,9 @@ object AnalysisJsonEncoder extends JsonEncoder{ private implicit val interfaceInstanceEncoder: Encoder[InterfaceInstance] = Encoder.instance(interfaceInstanceAsJson) + private implicit val portInstanceEncoder: Encoder[PortInstance] = + io.circe.generic.semiauto.deriveEncoder[PortInstance] + private implicit val portInstanceIdentifierEncoder: Encoder[PortInstanceIdentifier] = io.circe.generic.semiauto.deriveEncoder[PortInstanceIdentifier] diff --git a/compiler/lib/src/main/scala/syntax/Parser.scala b/compiler/lib/src/main/scala/syntax/Parser.scala index dd54a16e8..2348ddded 100644 --- a/compiler/lib/src/main/scala/syntax/Parser.scala +++ b/compiler/lib/src/main/scala/syntax/Parser.scala @@ -850,7 +850,7 @@ object Parser extends Parsers { } def specTopPort: Parser[Ast.SpecTopPort] = - port ~>! ident ~! (equals ~>! node(qualIdent)) ^^ { + port ~>! ident ~! (equals ~>! node(portInstanceIdentifier)) ^^ { case name ~ underlying => Ast.SpecTopPort(name, underlying) } diff --git a/compiler/tools/fpp-check/test/top_ports/basic.fpp b/compiler/tools/fpp-check/test/top_ports/basic.fpp new file mode 100644 index 000000000..4f88b26bd --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/basic.fpp @@ -0,0 +1,34 @@ +port P + +passive component C1 { + + output port pOut: [2] P + +} + +passive component C2 { + + sync input port pIn: P + +} + +instance c1: C1 base id 0x100 +instance c2: C2 base id 0x200 + +topology A { + instance c1 + instance c2 + + port a = c1.pOut + port b = c2.pIn +} + +topology B { + + instance A + + connections P { + A.a -> A.b + } + +} diff --git a/compiler/tools/fpp-check/test/top_ports/basic.ref.txt b/compiler/tools/fpp-check/test/top_ports/basic.ref.txt new file mode 100644 index 000000000..e69de29bb diff --git a/compiler/tools/fpp-check/test/top_ports/clean b/compiler/tools/fpp-check/test/top_ports/clean new file mode 100755 index 000000000..32e49663c --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/clean @@ -0,0 +1,6 @@ +#!/bin/sh -e + +. ../../../../scripts/utils.sh + +clean +rm -f default-tests.sh default-update-ref.sh diff --git a/compiler/tools/fpp-check/test/top_ports/internal_port.fpp b/compiler/tools/fpp-check/test/top_ports/internal_port.fpp new file mode 100644 index 000000000..45294358f --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/internal_port.fpp @@ -0,0 +1,35 @@ +port P + +passive component C1 { + + output port pOut: [2] P + internal port + +} + +passive component C2 { + + sync input port pIn: P + +} + +instance c1: C1 base id 0x100 +instance c2: C2 base id 0x200 + +topology A { + instance c1 + instance c2 + + port a = c1.pOut + port b = c2.pIn +} + +topology B { + + instance A + + connections P { + A.a -> A.b + } + +} diff --git a/compiler/tools/fpp-check/test/top_ports/out_to_out.fpp b/compiler/tools/fpp-check/test/top_ports/out_to_out.fpp new file mode 100644 index 000000000..f51d91c4c --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/out_to_out.fpp @@ -0,0 +1,34 @@ +port P + +passive component C1 { + + output port pOut: [2] P + +} + +passive component C2 { + + sync input port pIn: P + +} + +instance c1: C1 base id 0x100 +instance c2: C2 base id 0x200 + +topology A { + instance c1 + instance c2 + + port a = c1.pOut + port b = c2.pIn +} + +topology B { + + instance A + + connections P { + A.a -> A.a + } + +} diff --git a/compiler/tools/fpp-check/test/top_ports/out_to_out.ref.txt b/compiler/tools/fpp-check/test/top_ports/out_to_out.ref.txt new file mode 100644 index 000000000..5a05f6a38 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/out_to_out.ref.txt @@ -0,0 +1,13 @@ +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/out_to_out.fpp:31.5 + A.a -> A.a + ^ +error: invalid directions output -> output (should be output -> input) +from port is specified here: +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/out_to_out.fpp:22.3 + port a = c1.pOut + ^ +to port is specified here: +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/out_to_out.fpp:22.3 + port a = c1.pOut + ^ diff --git a/compiler/tools/fpp-check/test/top_ports/run b/compiler/tools/fpp-check/test/top_ports/run new file mode 100755 index 000000000..92816cad0 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/run @@ -0,0 +1,4 @@ +#!/bin/sh + +export LOCAL_PATH_PREFIX=`cd ../../../../..; echo $PWD` +../run-script diff --git a/compiler/tools/fpp-check/test/top_ports/tests.sh b/compiler/tools/fpp-check/test/top_ports/tests.sh new file mode 100644 index 000000000..bf8885c1f --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/tests.sh @@ -0,0 +1,5 @@ +tests=" +basic +out_to_out +unmatched_types +" diff --git a/compiler/tools/fpp-check/test/top_ports/unmatched_types.fpp b/compiler/tools/fpp-check/test/top_ports/unmatched_types.fpp new file mode 100644 index 000000000..560c886fe --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/unmatched_types.fpp @@ -0,0 +1,38 @@ +port P1 +port P2 + +passive component C1 { + + output port pOut: [2] P1 + + internal port P(x: U32) + +} + +passive component C2 { + + sync input port pIn: P2 + +} + +instance c1: C1 base id 0x100 +instance c2: C2 base id 0x200 + +topology A { + instance c1 + instance c2 + + port a = c1.pOut + port b = c2.pIn + port c = c1.P +} + +topology B { + + instance A + + connections P { + A.a -> A.b + } + +} diff --git a/compiler/tools/fpp-check/test/top_ports/unmatched_types.ref.txt b/compiler/tools/fpp-check/test/top_ports/unmatched_types.ref.txt new file mode 100644 index 000000000..fb35b92d2 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/unmatched_types.ref.txt @@ -0,0 +1,13 @@ +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/unmatched_types.fpp:32.5 + A.a -> A.b + ^ +error: cannot connect port types P1 and P2 +from port is specified here: +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/unmatched_types.fpp:23.3 + port a = c1.pOut + ^ +to port is specified here: +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/unmatched_types.fpp:24.3 + port b = c2.pIn + ^ diff --git a/compiler/tools/fpp-check/test/top_ports/update-ref b/compiler/tools/fpp-check/test/top_ports/update-ref new file mode 100755 index 000000000..0f11071e7 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/update-ref @@ -0,0 +1,4 @@ +#!/bin/sh + +export LOCAL_PATH_PREFIX=`cd ../../../../..; echo $PWD` +../update-ref-script diff --git a/docs/fpp-spec.html b/docs/fpp-spec.html index 4751d9411..f75b1e6d7 100644 --- a/docs/fpp-spec.html +++ b/docs/fpp-spec.html @@ -8144,6 +8144,9 @@

7.19.2. Semantic

The port instance identifier must be valid.

  • +

    The port instance identifier must name a general port instance.

    +
  • +
  • The whole specifier makes I part of the interface of the enclosing topology, after renaming it with name N.

    @@ -12202,7 +12205,7 @@

    23.4. Translation Tools

    diff --git a/docs/fpp-users-guide.html b/docs/fpp-users-guide.html index fe99f0929..c117984bd 100644 --- a/docs/fpp-users-guide.html +++ b/docs/fpp-users-guide.html @@ -15716,7 +15716,7 @@

    16.4. S diff --git a/docs/spec/Specifiers/Topology-Port-Instance-Specifiers.adoc b/docs/spec/Specifiers/Topology-Port-Instance-Specifiers.adoc index 001343790..a072af8ff 100644 --- a/docs/spec/Specifiers/Topology-Port-Instance-Specifiers.adoc +++ b/docs/spec/Specifiers/Topology-Port-Instance-Specifiers.adoc @@ -22,6 +22,9 @@ Such a specifier can be the endpoint of a . The port instance identifier must be valid. +. The port instance identifier must name a <>. + . The whole specifier makes _I_ part of the <>, after renaming it with name _N_. From 47d76d394c067f7ab6660afaf0f9f3b2272b90a2 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Wed, 22 Oct 2025 21:23:24 -0700 Subject: [PATCH 07/26] Added tests --- .../analysis/CheckSemantics/CheckUses.scala | 4 +- .../CheckSemantics/EnterSymbols.scala | 6 +- .../scala/analysis/Semantics/NameGroup.scala | 8 +- .../MatchedPortNumbering.scala | 5 +- .../scala/analysis/Semantics/Topology.scala | 13 +- .../test/top_ports/internal_port.fpp | 8 +- .../test/top_ports/internal_port.ref.txt | 9 + .../tools/fpp-check/test/top_ports/nested.fpp | 42 ++++ .../fpp-check/test/top_ports/nested.ref.txt | 0 .../tools/fpp-check/test/top_ports/tests.sh | 2 + .../test/top_ports/unmatched_types.fpp | 3 - .../test/top/Ports1TopologyAc.ref.cpp | 150 ++++++++++++++ .../test/top/Ports1TopologyAc.ref.hpp | 183 ++++++++++++++++++ .../test/top/Ports2TopologyAc.ref.cpp | 156 +++++++++++++++ .../test/top/Ports2TopologyAc.ref.hpp | 183 ++++++++++++++++++ .../test/top/check-cpp-dir/Ports/.gitignore | 4 + .../test/top/check-cpp-dir/Ports/Active.hpp | 58 ++++++ .../test/top/check-cpp-dir/Ports/Passive.hpp | 29 +++ .../Ports/Ports1TopologyDefs.hpp | 5 + .../Ports/Ports2TopologyDefs.hpp | 5 + .../test/top/check-cpp-dir/Ports/check | 22 +++ .../test/top/check-cpp-dir/Ports/clean | 6 + .../test/top/check-cpp-dir/subdirs.txt | 1 + compiler/tools/fpp-to-cpp/test/top/ports.fpp | 107 ++++++++++ .../fpp-to-cpp/test/top/ports.names.ref.txt | 10 + .../tools/fpp-to-cpp/test/top/ports.ref.txt | 0 compiler/tools/fpp-to-cpp/test/top/run.sh | 8 + compiler/tools/fpp-to-cpp/test/top/tests.sh | 1 + .../tools/fpp-to-cpp/test/top/update-ref.sh | 8 + 29 files changed, 1011 insertions(+), 25 deletions(-) create mode 100644 compiler/tools/fpp-check/test/top_ports/internal_port.ref.txt create mode 100644 compiler/tools/fpp-check/test/top_ports/nested.fpp create mode 100644 compiler/tools/fpp-check/test/top_ports/nested.ref.txt create mode 100644 compiler/tools/fpp-to-cpp/test/top/Ports1TopologyAc.ref.cpp create mode 100644 compiler/tools/fpp-to-cpp/test/top/Ports1TopologyAc.ref.hpp create mode 100644 compiler/tools/fpp-to-cpp/test/top/Ports2TopologyAc.ref.cpp create mode 100644 compiler/tools/fpp-to-cpp/test/top/Ports2TopologyAc.ref.hpp create mode 100644 compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/.gitignore create mode 100644 compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Active.hpp create mode 100644 compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Passive.hpp create mode 100644 compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Ports1TopologyDefs.hpp create mode 100644 compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Ports2TopologyDefs.hpp create mode 100755 compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/check create mode 100755 compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/clean create mode 100644 compiler/tools/fpp-to-cpp/test/top/ports.fpp create mode 100644 compiler/tools/fpp-to-cpp/test/top/ports.names.ref.txt create mode 100644 compiler/tools/fpp-to-cpp/test/top/ports.ref.txt diff --git a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUses.scala b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUses.scala index 3c0d43fe4..7655991dd 100644 --- a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUses.scala +++ b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUses.scala @@ -189,10 +189,10 @@ object CheckUses extends BasicUseAnalyzer { helpers.visitQualIdentNode (NameGroup.Port) (a, node) override def interfaceInstanceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = - helpers.visitQualIdentNode (NameGroup.Instance) (a, node) + helpers.visitQualIdentNode (NameGroup.PortInterfaceInstance) (a, node) override def interfaceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = - helpers.visitQualIdentNode (NameGroup.Interface) (a, node) + helpers.visitQualIdentNode (NameGroup.PortInterfaceInstance) (a, node) override def typeUse(a: Analysis, node: AstNode[Ast.TypeName], use: Name.Qualified) = { val data = node.data diff --git a/compiler/lib/src/main/scala/analysis/CheckSemantics/EnterSymbols.scala b/compiler/lib/src/main/scala/analysis/CheckSemantics/EnterSymbols.scala index 8241ad4a8..00bcde8a7 100644 --- a/compiler/lib/src/main/scala/analysis/CheckSemantics/EnterSymbols.scala +++ b/compiler/lib/src/main/scala/analysis/CheckSemantics/EnterSymbols.scala @@ -94,7 +94,7 @@ object EnterSymbols val name = data.name val symbol = Symbol.ComponentInstance(aNode) val nestedScope = a.nestedScope - for (nestedScope <- nestedScope.put(NameGroup.Instance)(name, symbol)) + for (nestedScope <- nestedScope.put(NameGroup.PortInterfaceInstance)(name, symbol)) yield updateMap(a, symbol).copy(nestedScope = nestedScope) } @@ -164,7 +164,7 @@ object EnterSymbols val name = data.name val symbol = Symbol.Interface(aNode) val nestedScope = a.nestedScope - for (nestedScope <- nestedScope.put(NameGroup.Interface)(name, symbol)) + for (nestedScope <- nestedScope.put(NameGroup.PortInterface)(name, symbol)) yield updateMap(a, symbol).copy(nestedScope = nestedScope) } @@ -280,7 +280,7 @@ object EnterSymbols val name = data.name val symbol = Symbol.Topology(aNode) val nestedScope = a.nestedScope - for (nestedScope <- nestedScope.put(NameGroup.Instance)(name, symbol)) + for (nestedScope <- nestedScope.put(NameGroup.PortInterfaceInstance)(name, symbol)) yield updateMap(a, symbol).copy(nestedScope = nestedScope) } diff --git a/compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala b/compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala index fe4f5f51b..3282d7e6d 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala @@ -7,8 +7,8 @@ object NameGroup { case object Component extends NameGroup case object Port extends NameGroup case object StateMachine extends NameGroup - case object Instance extends NameGroup - case object Interface extends NameGroup + case object PortInterfaceInstance extends NameGroup + case object PortInterface extends NameGroup case object Type extends NameGroup case object Value extends NameGroup @@ -16,8 +16,8 @@ object NameGroup { Component, Port, StateMachine, - Instance, - Interface, + PortInterfaceInstance, + PortInterface, Type, Value ) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/MatchedPortNumbering.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/MatchedPortNumbering.scala index 427fa2c69..61c73fcd6 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/MatchedPortNumbering.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/MatchedPortNumbering.scala @@ -249,10 +249,7 @@ object MatchedPortNumbering { Right(m) else { val piiRemote = c.getOtherEndpoint(pi).port - val ciRemote = piiRemote.interfaceInstance match { - case InterfaceInstance.InterfaceComponentInstance(ci) => ci - case _ => throw InternalError("topology connections not flattened") - } + val _ @ InterfaceInstance.InterfaceComponentInstance(ciRemote) = piiRemote.interfaceInstance m.get(ciRemote) match { case Some(cPrev) => Left( SemanticError.DuplicateMatchedConnection( diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala b/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala index efe3fa05b..92e2c2311 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala @@ -62,7 +62,13 @@ case class Topology( for { // Check that the topology port for a general port pi <- underlyingPort.portInstance match { - case _: (PortInstance.General | PortInstance.Topology) => { + case _: PortInstance.Internal => Left(SemanticError.InvalidPortInstance( + loc, + "topology port cannot point to an internal port", + Locations.get(underlyingPort.portInstance.getNodeId) + )) + + case _ => { for { iface <- this.portInterface.addPortInstance( PortInstance.Topology( @@ -72,11 +78,6 @@ case class Topology( ) } yield iface } - case _ => Left(SemanticError.InvalidPortInstance( - loc, - "topology port must name a general port or topology port", - Locations.get(underlyingPort.portInstance.getNodeId) - )) } t <- portMap.get(name) match { diff --git a/compiler/tools/fpp-check/test/top_ports/internal_port.fpp b/compiler/tools/fpp-check/test/top_ports/internal_port.fpp index 45294358f..2ee186a3d 100644 --- a/compiler/tools/fpp-check/test/top_ports/internal_port.fpp +++ b/compiler/tools/fpp-check/test/top_ports/internal_port.fpp @@ -1,9 +1,10 @@ port P -passive component C1 { +active component C1 { output port pOut: [2] P - internal port + + internal port P(x: U32) } @@ -13,7 +14,7 @@ passive component C2 { } -instance c1: C1 base id 0x100 +instance c1: C1 base id 0x100 queue size 10 instance c2: C2 base id 0x200 topology A { @@ -22,6 +23,7 @@ topology A { port a = c1.pOut port b = c2.pIn + port c = c1.P } topology B { diff --git a/compiler/tools/fpp-check/test/top_ports/internal_port.ref.txt b/compiler/tools/fpp-check/test/top_ports/internal_port.ref.txt new file mode 100644 index 000000000..55600ab25 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/internal_port.ref.txt @@ -0,0 +1,9 @@ +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/internal_port.fpp:26.3 + port c = c1.P + ^ +error: topology port cannot point to an internal port +port definition is here: +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/internal_port.fpp:7.3 + internal port P(x: U32) + ^ diff --git a/compiler/tools/fpp-check/test/top_ports/nested.fpp b/compiler/tools/fpp-check/test/top_ports/nested.fpp new file mode 100644 index 000000000..56ac92838 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/nested.fpp @@ -0,0 +1,42 @@ +port P + +passive component C1 { + + output port pOut: [2] P + +} + +passive component C2 { + + sync input port pIn: P + +} + +instance c1: C1 base id 0x100 +instance c2: C2 base id 0x200 + +topology A { + instance c1 + instance c2 + + port out = c1.pOut + port in = c2.pIn +} + +topology B { + + instance A + + port out = A.out + +} + +topology C { + + instance B + + connections P { + B.out -> A.in + } + +} diff --git a/compiler/tools/fpp-check/test/top_ports/nested.ref.txt b/compiler/tools/fpp-check/test/top_ports/nested.ref.txt new file mode 100644 index 000000000..e69de29bb diff --git a/compiler/tools/fpp-check/test/top_ports/tests.sh b/compiler/tools/fpp-check/test/top_ports/tests.sh index bf8885c1f..bc289ea06 100644 --- a/compiler/tools/fpp-check/test/top_ports/tests.sh +++ b/compiler/tools/fpp-check/test/top_ports/tests.sh @@ -1,5 +1,7 @@ tests=" basic +internal_port +nested out_to_out unmatched_types " diff --git a/compiler/tools/fpp-check/test/top_ports/unmatched_types.fpp b/compiler/tools/fpp-check/test/top_ports/unmatched_types.fpp index 560c886fe..89a2ea623 100644 --- a/compiler/tools/fpp-check/test/top_ports/unmatched_types.fpp +++ b/compiler/tools/fpp-check/test/top_ports/unmatched_types.fpp @@ -5,8 +5,6 @@ passive component C1 { output port pOut: [2] P1 - internal port P(x: U32) - } passive component C2 { @@ -24,7 +22,6 @@ topology A { port a = c1.pOut port b = c2.pIn - port c = c1.P } topology B { diff --git a/compiler/tools/fpp-to-cpp/test/top/Ports1TopologyAc.ref.cpp b/compiler/tools/fpp-to-cpp/test/top/Ports1TopologyAc.ref.cpp new file mode 100644 index 000000000..52f2fff26 --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/Ports1TopologyAc.ref.cpp @@ -0,0 +1,150 @@ +// ====================================================================== +// \title Ports1TopologyAc.cpp +// \author Generated by fpp-to-cpp +// \brief cpp file for Ports1 topology +// ====================================================================== + +#include "Ports1TopologyAc.hpp" + +// ---------------------------------------------------------------------- +// Component instances +// ---------------------------------------------------------------------- + +namespace M { + Active active2; + +} + +namespace M { + + M::Active active3(FW_OPTIONAL_NAME("active3")); + +} + +namespace M { + + M::Passive passive1(FW_OPTIONAL_NAME("passive1")); + +} + +namespace M { + + ConcretePassive passive2(FW_OPTIONAL_NAME("passive2")); + +} + +M::Active active1(FW_OPTIONAL_NAME("active1")); + +namespace M { + + // ---------------------------------------------------------------------- + // Component configuration objects + // ---------------------------------------------------------------------- + + namespace ConfigObjects { + + namespace M_active2 { + U32 x = 0; + } + + } + + // ---------------------------------------------------------------------- + // Helper functions + // ---------------------------------------------------------------------- + + void initComponents(const TopologyState& state) { + M::active2.initSpecial(); + M::active3.init(QueueSizes::M_active3, InstanceIds::M_active3); + M::passive1.init(InstanceIds::M_passive1); + M::passive2.init(InstanceIds::M_passive2); + active1.init(QueueSizes::active1, InstanceIds::active1); + } + + void configComponents(const TopologyState& state) { + M::active2.config(); + } + + void setBaseIds() { + active1.setIdBase(BaseIds::active1); + M::active2.setIdBase(BaseIds::M_active2); + M::active3.setIdBase(BaseIds::M_active3); + M::passive1.setIdBase(BaseIds::M_passive1); + M::passive2.setIdBase(BaseIds::M_passive2); + } + + void connectComponents() { + + // C1 + M::passive1.set_p_OutputPort( + 0, + active1.get_p_InputPort(0) + ); + } + + void regCommands() { + // Nothing to do + } + + void readParameters() { + // Nothing to do + } + + void loadParameters() { + // Nothing to do + } + + void startTasks(const TopologyState& state) { + M::active2.startSpecial(); + M::active3.start( + Os::Task::TASK_PRIORITY_DEFAULT, // Default priority + Os::Task::TASK_DEFAULT, // Default stack size + Os::Task::TASK_DEFAULT, // Default CPU + static_cast(TaskIds::M_active3) + ); + active1.start( + static_cast(Priorities::active1), + static_cast(StackSizes::active1), + static_cast(CPUs::active1), + static_cast(TaskIds::active1) + ); + } + + void stopTasks(const TopologyState& state) { + M::active2.stopSpecial(); + M::active3.exit(); + active1.exit(); + } + + void freeThreads(const TopologyState& state) { + M::active2.freeSpecial(); + (void) M::active3.ActiveComponentBase::join(); + (void) active1.ActiveComponentBase::join(); + } + + void tearDownComponents(const TopologyState& state) { + M::active2.tearDown(); + } + + // ---------------------------------------------------------------------- + // Setup and teardown functions + // ---------------------------------------------------------------------- + + void setup(const TopologyState& state) { + initComponents(state); + configComponents(state); + setBaseIds(); + connectComponents(); + regCommands(); + readParameters(); + loadParameters(); + startTasks(state); + } + + void teardown(const TopologyState& state) { + stopTasks(state); + freeThreads(state); + tearDownComponents(state); + } + +} diff --git a/compiler/tools/fpp-to-cpp/test/top/Ports1TopologyAc.ref.hpp b/compiler/tools/fpp-to-cpp/test/top/Ports1TopologyAc.ref.hpp new file mode 100644 index 000000000..fc39d1050 --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/Ports1TopologyAc.ref.hpp @@ -0,0 +1,183 @@ +// ====================================================================== +// \title Ports1TopologyAc.hpp +// \author Generated by fpp-to-cpp +// \brief hpp file for Ports1 topology +// ====================================================================== + +#ifndef M_Ports1TopologyAc_HPP +#define M_Ports1TopologyAc_HPP + +#include "Active.hpp" +#include "Passive.hpp" +#include "Ports1TopologyDefs.hpp" + +// ---------------------------------------------------------------------- +// Component instances +// ---------------------------------------------------------------------- + +namespace M { + + //! active2 + extern M::Active active2; + +} + +namespace M { + + //! active3 + extern M::Active active3; + +} + +namespace M { + + //! passive1 + extern M::Passive passive1; + +} + +namespace M { + + //! passive2 + extern ConcretePassive passive2; + +} + +//! active1 +extern M::Active active1; + +namespace M { + + // ---------------------------------------------------------------------- + // Constants + // ---------------------------------------------------------------------- + + namespace ConfigConstants { + namespace M_active2 { + enum { + X = 0, + Y = 1 + }; + } + } + + namespace BaseIds { + enum { + active1 = 0x100, + M_active2 = 0x200, + M_active3 = 0x300, + M_passive1 = 0x300, + M_passive2 = 0x400, + }; + } + + namespace CPUs { + enum { + active1 = 0, + }; + } + + namespace InstanceIds { + enum { + M_active2, + M_active3, + M_passive1, + M_passive2, + active1, + }; + } + + namespace Priorities { + enum { + active1 = 1, + }; + } + + namespace QueueSizes { + enum { + M_active2 = 10, + M_active3 = 10, + active1 = 10, + }; + } + + namespace StackSizes { + enum { + active1 = 1024, + }; + } + + namespace TaskIds { + enum { + M_active2, + M_active3, + active1, + }; + } + + // ---------------------------------------------------------------------- + // Helper functions + // ---------------------------------------------------------------------- + + //! Initialize components + void initComponents( + const TopologyState& state //!< The topology state + ); + + //! Configure components + void configComponents( + const TopologyState& state //!< The topology state + ); + + //! Set component base Ids + void setBaseIds(); + + //! Connect components + void connectComponents(); + + //! Register commands + void regCommands(); + + //! Read parameters + void readParameters(); + + //! Load parameters + void loadParameters(); + + //! Start tasks + void startTasks( + const TopologyState& state //!< The topology state + ); + + //! Stop tasks + void stopTasks( + const TopologyState& state //!< The topology state + ); + + //! Free threads + void freeThreads( + const TopologyState& state //!< The topology state + ); + + //! Tear down components + void tearDownComponents( + const TopologyState& state //!< The topology state + ); + + // ---------------------------------------------------------------------- + // Setup and teardown functions + // ---------------------------------------------------------------------- + + //! Set up the topology + void setup( + const TopologyState& state //!< The topology state + ); + + //! Tear down the topology + void teardown( + const TopologyState& state //!< The topology state + ); + +} + +#endif diff --git a/compiler/tools/fpp-to-cpp/test/top/Ports2TopologyAc.ref.cpp b/compiler/tools/fpp-to-cpp/test/top/Ports2TopologyAc.ref.cpp new file mode 100644 index 000000000..d24aab092 --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/Ports2TopologyAc.ref.cpp @@ -0,0 +1,156 @@ +// ====================================================================== +// \title Ports2TopologyAc.cpp +// \author Generated by fpp-to-cpp +// \brief cpp file for Ports2 topology +// ====================================================================== + +#include "Ports2TopologyAc.hpp" + +// ---------------------------------------------------------------------- +// Component instances +// ---------------------------------------------------------------------- + +namespace M { + Active active2; + +} + +namespace M { + + M::Active active3(FW_OPTIONAL_NAME("active3")); + +} + +namespace M { + + M::Passive passive1(FW_OPTIONAL_NAME("passive1")); + +} + +namespace M { + + ConcretePassive passive2(FW_OPTIONAL_NAME("passive2")); + +} + +M::Active active1(FW_OPTIONAL_NAME("active1")); + +namespace M { + + // ---------------------------------------------------------------------- + // Component configuration objects + // ---------------------------------------------------------------------- + + namespace ConfigObjects { + + namespace M_active2 { + U32 x = 0; + } + + } + + // ---------------------------------------------------------------------- + // Helper functions + // ---------------------------------------------------------------------- + + void initComponents(const TopologyState& state) { + M::active2.initSpecial(); + M::active3.init(QueueSizes::M_active3, InstanceIds::M_active3); + M::passive1.init(InstanceIds::M_passive1); + M::passive2.init(InstanceIds::M_passive2); + active1.init(QueueSizes::active1, InstanceIds::active1); + } + + void configComponents(const TopologyState& state) { + M::active2.config(); + } + + void setBaseIds() { + active1.setIdBase(BaseIds::active1); + M::active2.setIdBase(BaseIds::M_active2); + M::active3.setIdBase(BaseIds::M_active3); + M::passive1.setIdBase(BaseIds::M_passive1); + M::passive2.setIdBase(BaseIds::M_passive2); + } + + void connectComponents() { + + // C1 + M::passive1.set_p_OutputPort( + 0, + active1.get_p_InputPort(0) + ); + + // C2 + M::passive2.set_p_OutputPort( + 0, + M::active2.get_p_InputPort(0) + ); + } + + void regCommands() { + // Nothing to do + } + + void readParameters() { + // Nothing to do + } + + void loadParameters() { + // Nothing to do + } + + void startTasks(const TopologyState& state) { + M::active2.startSpecial(); + M::active3.start( + Os::Task::TASK_PRIORITY_DEFAULT, // Default priority + Os::Task::TASK_DEFAULT, // Default stack size + Os::Task::TASK_DEFAULT, // Default CPU + static_cast(TaskIds::M_active3) + ); + active1.start( + static_cast(Priorities::active1), + static_cast(StackSizes::active1), + static_cast(CPUs::active1), + static_cast(TaskIds::active1) + ); + } + + void stopTasks(const TopologyState& state) { + M::active2.stopSpecial(); + M::active3.exit(); + active1.exit(); + } + + void freeThreads(const TopologyState& state) { + M::active2.freeSpecial(); + (void) M::active3.ActiveComponentBase::join(); + (void) active1.ActiveComponentBase::join(); + } + + void tearDownComponents(const TopologyState& state) { + M::active2.tearDown(); + } + + // ---------------------------------------------------------------------- + // Setup and teardown functions + // ---------------------------------------------------------------------- + + void setup(const TopologyState& state) { + initComponents(state); + configComponents(state); + setBaseIds(); + connectComponents(); + regCommands(); + readParameters(); + loadParameters(); + startTasks(state); + } + + void teardown(const TopologyState& state) { + stopTasks(state); + freeThreads(state); + tearDownComponents(state); + } + +} diff --git a/compiler/tools/fpp-to-cpp/test/top/Ports2TopologyAc.ref.hpp b/compiler/tools/fpp-to-cpp/test/top/Ports2TopologyAc.ref.hpp new file mode 100644 index 000000000..16bee7cda --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/Ports2TopologyAc.ref.hpp @@ -0,0 +1,183 @@ +// ====================================================================== +// \title Ports2TopologyAc.hpp +// \author Generated by fpp-to-cpp +// \brief hpp file for Ports2 topology +// ====================================================================== + +#ifndef M_Ports2TopologyAc_HPP +#define M_Ports2TopologyAc_HPP + +#include "Active.hpp" +#include "Passive.hpp" +#include "Ports2TopologyDefs.hpp" + +// ---------------------------------------------------------------------- +// Component instances +// ---------------------------------------------------------------------- + +namespace M { + + //! active2 + extern M::Active active2; + +} + +namespace M { + + //! active3 + extern M::Active active3; + +} + +namespace M { + + //! passive1 + extern M::Passive passive1; + +} + +namespace M { + + //! passive2 + extern ConcretePassive passive2; + +} + +//! active1 +extern M::Active active1; + +namespace M { + + // ---------------------------------------------------------------------- + // Constants + // ---------------------------------------------------------------------- + + namespace ConfigConstants { + namespace M_active2 { + enum { + X = 0, + Y = 1 + }; + } + } + + namespace BaseIds { + enum { + active1 = 0x100, + M_active2 = 0x200, + M_active3 = 0x300, + M_passive1 = 0x300, + M_passive2 = 0x400, + }; + } + + namespace CPUs { + enum { + active1 = 0, + }; + } + + namespace InstanceIds { + enum { + M_active2, + M_active3, + M_passive1, + M_passive2, + active1, + }; + } + + namespace Priorities { + enum { + active1 = 1, + }; + } + + namespace QueueSizes { + enum { + M_active2 = 10, + M_active3 = 10, + active1 = 10, + }; + } + + namespace StackSizes { + enum { + active1 = 1024, + }; + } + + namespace TaskIds { + enum { + M_active2, + M_active3, + active1, + }; + } + + // ---------------------------------------------------------------------- + // Helper functions + // ---------------------------------------------------------------------- + + //! Initialize components + void initComponents( + const TopologyState& state //!< The topology state + ); + + //! Configure components + void configComponents( + const TopologyState& state //!< The topology state + ); + + //! Set component base Ids + void setBaseIds(); + + //! Connect components + void connectComponents(); + + //! Register commands + void regCommands(); + + //! Read parameters + void readParameters(); + + //! Load parameters + void loadParameters(); + + //! Start tasks + void startTasks( + const TopologyState& state //!< The topology state + ); + + //! Stop tasks + void stopTasks( + const TopologyState& state //!< The topology state + ); + + //! Free threads + void freeThreads( + const TopologyState& state //!< The topology state + ); + + //! Tear down components + void tearDownComponents( + const TopologyState& state //!< The topology state + ); + + // ---------------------------------------------------------------------- + // Setup and teardown functions + // ---------------------------------------------------------------------- + + //! Set up the topology + void setup( + const TopologyState& state //!< The topology state + ); + + //! Tear down the topology + void teardown( + const TopologyState& state //!< The topology state + ); + +} + +#endif diff --git a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/.gitignore b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/.gitignore new file mode 100644 index 000000000..a0a72d811 --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/.gitignore @@ -0,0 +1,4 @@ +*.xml +*.o +*Ac.* +*Ai.* diff --git a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Active.hpp b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Active.hpp new file mode 100644 index 000000000..faf5b9332 --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Active.hpp @@ -0,0 +1,58 @@ +#ifndef M_Active_HPP +#define M_Active_HPP + +#include "ActiveComponentAc.hpp" + +namespace M { + + class Active : + public ActiveComponentBase + { + + public: + + Active() { + + } + + Active(const char* name) { + + } + + void init(U32 queueSize, U32 instanceId) { + + } + + void initSpecial() { + + } + + void config() { + + } + + void startSpecial() { + + } + + void p_handler(FwIndexType portNum) { + + } + + void stopSpecial() { + + } + + void freeSpecial() { + + } + + void tearDown() { + + } + + }; + +} + +#endif diff --git a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Passive.hpp b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Passive.hpp new file mode 100644 index 000000000..880d1918d --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Passive.hpp @@ -0,0 +1,29 @@ +#ifndef M_Passive_HPP +#define M_Passive_HPP + +#include "PassiveComponentAc.hpp" + +namespace M { + + class Passive : + public PassiveComponentBase + { + + public: + + Passive(const char* name) { + + } + + void init(U32 instanceId) { + + } + + }; + + // Simulate a concrete implementation + typedef Passive ConcretePassive; + +} + +#endif diff --git a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Ports1TopologyDefs.hpp b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Ports1TopologyDefs.hpp new file mode 100644 index 000000000..c6a6a77ae --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Ports1TopologyDefs.hpp @@ -0,0 +1,5 @@ +namespace M { + + typedef int TopologyState; + +} diff --git a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Ports2TopologyDefs.hpp b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Ports2TopologyDefs.hpp new file mode 100644 index 000000000..c6a6a77ae --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/Ports2TopologyDefs.hpp @@ -0,0 +1,5 @@ +namespace M { + + typedef int TopologyState; + +} diff --git a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/check b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/check new file mode 100755 index 000000000..996603170 --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/check @@ -0,0 +1,22 @@ +#!/bin/sh -e + +fpp_to_cpp=../../../../../../bin/fpp-to-cpp +fprime_gcc=../../../../../../scripts/fprime-gcc + +echo ' removing old files' +./clean + +dir=`cd ../..; echo $PWD` + +echo ' generating C++' +$fpp_to_cpp -p $dir -i ../../builtin.fpp ../../basic.fpp + +for suffix in hpp cpp +do + cp ../../Ports1TopologyAc.ref.$suffix Ports1TopologyAc.$suffix + cp ../../Ports2TopologyAc.ref.$suffix Ports2TopologyAc.$suffix +done + +echo ' compiling C++' +$fprime_gcc -I.. -I../../../fprime -I../../../fprime/config -Wno-unused-parameter -c Ports1TopologyAc.cpp +$fprime_gcc -I.. -I../../../fprime -I../../../fprime/config -Wno-unused-parameter -c Ports2TopologyAc.cpp diff --git a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/clean b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/clean new file mode 100755 index 000000000..702bd41ed --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Ports/clean @@ -0,0 +1,6 @@ +#!/bin/sh -e + +for file in `find . -name '*~' -or -name '*Ac.*' -or -name '*Ai.xml' -or -name '*.o'` +do + rm $file +done diff --git a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/subdirs.txt b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/subdirs.txt index 773d58fdd..28c72d484 100644 --- a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/subdirs.txt +++ b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/subdirs.txt @@ -2,4 +2,5 @@ Basic Commands Health Params +Ports TlmPackets diff --git a/compiler/tools/fpp-to-cpp/test/top/ports.fpp b/compiler/tools/fpp-to-cpp/test/top/ports.fpp new file mode 100644 index 000000000..f2a5a8a2e --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/ports.fpp @@ -0,0 +1,107 @@ +module M { + + port P + + active component Active { + + async input port p: P + + } + + passive component Passive { + + output port p: P + + } + +} + +instance active1: M.Active base id 0x100 \ + at "Active.hpp" \ + queue size 10 stack size 1024 priority 1 cpu 0 + +module M { + + instance active2: Active base id 0x200 \ + queue size 10 \ + { + + phase Phases.configConstants """ + enum { + X = 0, + Y = 1 + }; + """ + + phase Phases.configObjects """ + U32 x = 0; + """ + + phase Phases.instances """ + Active active2; + """ + + phase Phases.initComponents """ + M::active2.initSpecial(); + """ + + phase Phases.configComponents """ + M::active2.config(); + """ + + phase Phases.startTasks """ + M::active2.startSpecial(); + """ + + phase Phases.stopTasks """ + M::active2.stopSpecial(); + """ + + phase Phases.freeThreads """ + M::active2.freeSpecial(); + """ + + phase Phases.tearDownComponents """ + M::active2.tearDown(); + """ + + } + instance active3: Active base id 0x300 \ + at "Active.hpp" \ + queue size 10 + + instance passive1: Passive base id 0x300 + instance passive2: Passive base id 0x400 type "ConcretePassive" + + topology Ports1 { + + instance active1 + instance active2 + instance active3 + instance passive1 + instance passive2 + + connections C1 { + + passive1.p -> active1.p + + } + + port out = passive2.p + port in = active2.p + + } + + topology Ports2 { + + instance Ports1 + + connections C2 { + + Ports1.out -> Ports1.in + + } + + } + +} diff --git a/compiler/tools/fpp-to-cpp/test/top/ports.names.ref.txt b/compiler/tools/fpp-to-cpp/test/top/ports.names.ref.txt new file mode 100644 index 000000000..49a339e0d --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/top/ports.names.ref.txt @@ -0,0 +1,10 @@ +ActiveComponentAc.cpp +ActiveComponentAc.hpp +PPortAc.cpp +PPortAc.hpp +PassiveComponentAc.cpp +PassiveComponentAc.hpp +Ports1TopologyAc.cpp +Ports1TopologyAc.hpp +Ports2TopologyAc.cpp +Ports2TopologyAc.hpp diff --git a/compiler/tools/fpp-to-cpp/test/top/ports.ref.txt b/compiler/tools/fpp-to-cpp/test/top/ports.ref.txt new file mode 100644 index 000000000..e69de29bb diff --git a/compiler/tools/fpp-to-cpp/test/top/run.sh b/compiler/tools/fpp-to-cpp/test/top/run.sh index ae6213a8f..c0e39e36d 100644 --- a/compiler/tools/fpp-to-cpp/test/top/run.sh +++ b/compiler/tools/fpp-to-cpp/test/top/run.sh @@ -35,6 +35,14 @@ params() diff_cpp ParamsTopology } +ports() +{ + run_test "-i builtin.fpp -n ports.names.txt -p $PWD" ports && \ + diff -u ports.names.txt ports.names.ref.txt && \ + diff_cpp Ports1Topology && \ + diff_cpp Ports2Topology +} + tlm_packets() { run_test "-i builtin.fpp -p $PWD" tlm_packets && \ diff --git a/compiler/tools/fpp-to-cpp/test/top/tests.sh b/compiler/tools/fpp-to-cpp/test/top/tests.sh index 7e2b18c65..bcd837351 100644 --- a/compiler/tools/fpp-to-cpp/test/top/tests.sh +++ b/compiler/tools/fpp-to-cpp/test/top/tests.sh @@ -5,5 +5,6 @@ health nested_namespaces no_namespace params +ports tlm_packets " diff --git a/compiler/tools/fpp-to-cpp/test/top/update-ref.sh b/compiler/tools/fpp-to-cpp/test/top/update-ref.sh index d13fff7c3..772d2da4c 100644 --- a/compiler/tools/fpp-to-cpp/test/top/update-ref.sh +++ b/compiler/tools/fpp-to-cpp/test/top/update-ref.sh @@ -35,6 +35,14 @@ params() move_cpp ParamsTopology } +ports() +{ + update "-i ports.fpp -n ports.names.txt -p $PWD" ports + mv ports.names.txt ports.names.ref.txt + move_cpp Ports1Topology + move_cpp Ports2Topology +} + tlm_packets() { update "-i builtin.fpp -p $PWD" tlm_packets From 7e8ced0bf86d4e86e0563cf4153901ad3eca2c4b Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Wed, 22 Oct 2025 21:29:23 -0700 Subject: [PATCH 08/26] Clean up spec --- docs/fpp-spec.html | 7 ++----- .../spec/Specifiers/Topology-Port-Instance-Specifiers.adoc | 6 ++---- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/docs/fpp-spec.html b/docs/fpp-spec.html index f75b1e6d7..c82300f4f 100644 --- a/docs/fpp-spec.html +++ b/docs/fpp-spec.html @@ -8141,10 +8141,7 @@

    7.19.2. Semantic

    The identifier specifies the name N of the port instance.

  • -

    The port instance identifier must be valid.

    -
  • -
  • -

    The port instance identifier must name a general port instance.

    +

    The port instance identifier must be valid and refer to a port instance I.

  • The whole specifier makes I part of the @@ -12205,7 +12202,7 @@

    23.4. Translation Tools

    diff --git a/docs/spec/Specifiers/Topology-Port-Instance-Specifiers.adoc b/docs/spec/Specifiers/Topology-Port-Instance-Specifiers.adoc index a072af8ff..39be56243 100644 --- a/docs/spec/Specifiers/Topology-Port-Instance-Specifiers.adoc +++ b/docs/spec/Specifiers/Topology-Port-Instance-Specifiers.adoc @@ -20,10 +20,8 @@ Such a specifier can be the endpoint of a . The identifier specifies the name _N_ of the port instance. -. The port instance identifier must be valid. - -. The port instance identifier must name a <>. +. The port instance identifier must be valid and <> a port instance _I_. . The whole specifier makes _I_ part of the < Date: Wed, 22 Oct 2025 21:51:02 -0700 Subject: [PATCH 09/26] Update location specifier spec --- .../scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala | 2 -- docs/fpp-spec.html | 9 ++------- docs/spec/Specifiers/Location-Specifiers.adoc | 6 +----- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala b/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala index 6e78d0fcb..9c29c5257 100644 --- a/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala +++ b/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala @@ -8,8 +8,6 @@ import io.circe.syntax._ import io.circe._ import io.circe.generic.semiauto._ import io.circe.generic.auto._ -import io.circe.{ Decoder, Encoder }, io.circe.generic.auto._ -import io.circe.syntax._ import scala.util.parsing.input.Position import AstJsonEncoder._ import LocMapJsonEncoder._ diff --git a/docs/fpp-spec.html b/docs/fpp-spec.html index c82300f4f..63da23ebf 100644 --- a/docs/fpp-spec.html +++ b/docs/fpp-spec.html @@ -6722,7 +6722,7 @@

    7.9.1. Syntax

    diff --git a/docs/spec/Specifiers/Location-Specifiers.adoc b/docs/spec/Specifiers/Location-Specifiers.adoc index f36c7c8b9..948d45b68 100644 --- a/docs/spec/Specifiers/Location-Specifiers.adoc +++ b/docs/spec/Specifiers/Location-Specifiers.adoc @@ -8,7 +8,7 @@ of a <>. A location specifier is one of the following: -* A *component instance location specifier* `locate` `instance` +* An *interface instance location specifier* `locate` `instance` <> `at` <> @@ -28,10 +28,6 @@ A location specifier is one of the following: <> `at` <> -* A *topology location specifier* `locate` `topology` -<> `at` -<> - * A *type location specifier* `locate` `type` <> `at` <> From 6c49836ec08a61065fc34e5930f096177e175607 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Wed, 22 Oct 2025 22:00:22 -0700 Subject: [PATCH 10/26] Fix scala tests --- compiler/lib/src/test/scala/syntax/Parser.scala | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/compiler/lib/src/test/scala/syntax/Parser.scala b/compiler/lib/src/test/scala/syntax/Parser.scala index c0093e2d7..5796bb8c7 100644 --- a/compiler/lib/src/test/scala/syntax/Parser.scala +++ b/compiler/lib/src/test/scala/syntax/Parser.scala @@ -489,7 +489,6 @@ class ParserSpec extends AnyWordSpec { "locate instance a.b at \"c.fpp\"", "locate constant a.b at \"c.fpp\"", "locate port a.b at \"c.fpp\"", - "locate topology a.b at \"c.fpp\"", "locate type a.b at \"c.fpp\"", ) ) @@ -643,7 +642,7 @@ class ParserSpec extends AnyWordSpec { parseAllOK( Parser.specTopPort, List( - "port a = b", + "port a = a.b.c.d", "port b = c.b", ) ) From 9cd056e5284c4a8983c7d3fcbe577d90af05bab5 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Wed, 22 Oct 2025 22:05:06 -0700 Subject: [PATCH 11/26] Update syntax tests --- compiler/tools/fpp-syntax/test/include-topology.ref.txt | 2 +- compiler/tools/fpp-syntax/test/syntax-ast.ref.txt | 4 ++-- compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt | 4 ++-- compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt | 4 ++-- compiler/tools/fpp-syntax/test/topology-ports.ref.txt | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/compiler/tools/fpp-syntax/test/include-topology.ref.txt b/compiler/tools/fpp-syntax/test/include-topology.ref.txt index 427d45e4f..c14553c8f 100644 --- a/compiler/tools/fpp-syntax/test/include-topology.ref.txt +++ b/compiler/tools/fpp-syntax/test/include-topology.ref.txt @@ -1,6 +1,6 @@ def topology ident T @ Included instance - spec comp instance + spec interface instance qual ident x @< Included instance diff --git a/compiler/tools/fpp-syntax/test/syntax-ast.ref.txt b/compiler/tools/fpp-syntax/test/syntax-ast.ref.txt index 3ea6710fc..d67445651 100644 --- a/compiler/tools/fpp-syntax/test/syntax-ast.ref.txt +++ b/compiler/tools/fpp-syntax/test/syntax-ast.ref.txt @@ -315,7 +315,7 @@ def module def topology ident T @ Public instance specifier - spec comp instance + spec interface instance qual ident i1 @< Public instance specifier @ Direct connection graph specifier @@ -344,7 +344,7 @@ def module target qual ident i4 @< Graph pattern specifier @ Topology import specifier - spec top import + spec interface instance qual ident T1 @< Topology import specifier @ Telemetry packet group diff --git a/compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt b/compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt index d8ac15e88..8c2183df9 100644 --- a/compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt +++ b/compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt @@ -316,7 +316,7 @@ def module def topology ident T @ Public instance specifier - spec comp instance + spec interface instance qual ident i1 @< Public instance specifier @ Direct connection graph specifier @@ -345,7 +345,7 @@ def module target qual ident i4 @< Graph pattern specifier @ Topology import specifier - spec top import + spec interface instance qual ident T1 @< Topology import specifier @ Telemetry packet group diff --git a/compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt b/compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt index d8ac15e88..8c2183df9 100644 --- a/compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt +++ b/compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt @@ -316,7 +316,7 @@ def module def topology ident T @ Public instance specifier - spec comp instance + spec interface instance qual ident i1 @< Public instance specifier @ Direct connection graph specifier @@ -345,7 +345,7 @@ def module target qual ident i4 @< Graph pattern specifier @ Topology import specifier - spec top import + spec interface instance qual ident T1 @< Topology import specifier @ Telemetry packet group diff --git a/compiler/tools/fpp-syntax/test/topology-ports.ref.txt b/compiler/tools/fpp-syntax/test/topology-ports.ref.txt index d896a81a2..33a35e4a9 100644 --- a/compiler/tools/fpp-syntax/test/topology-ports.ref.txt +++ b/compiler/tools/fpp-syntax/test/topology-ports.ref.txt @@ -1,6 +1,6 @@ def topology ident T - spec comp instance + spec interface instance qual ident i spec top port ident p1 From 2d302df96463f4aa8b7e4371311762b28f03f189 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Mon, 27 Oct 2025 09:57:45 -0700 Subject: [PATCH 12/26] Fix check uses --- .../src/main/scala/analysis/CheckSemantics/CheckUses.scala | 2 +- compiler/tools/fpp-locate-uses/test/stdin.ref.txt | 4 ++-- compiler/tools/fpp-locate-uses/test/uses.ref.txt | 4 ++-- compiler/tools/fpp-locate-uses/test/uses_dir.ref.txt | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUses.scala b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUses.scala index 7655991dd..61fab2ca3 100644 --- a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUses.scala +++ b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckUses.scala @@ -192,7 +192,7 @@ object CheckUses extends BasicUseAnalyzer { helpers.visitQualIdentNode (NameGroup.PortInterfaceInstance) (a, node) override def interfaceUse(a: Analysis, node: AstNode[Ast.QualIdent], use: Name.Qualified) = - helpers.visitQualIdentNode (NameGroup.PortInterfaceInstance) (a, node) + helpers.visitQualIdentNode (NameGroup.PortInterface) (a, node) override def typeUse(a: Analysis, node: AstNode[Ast.TypeName], use: Name.Qualified) = { val data = node.data diff --git a/compiler/tools/fpp-locate-uses/test/stdin.ref.txt b/compiler/tools/fpp-locate-uses/test/stdin.ref.txt index 4bab4c446..b1348fe29 100644 --- a/compiler/tools/fpp-locate-uses/test/stdin.ref.txt +++ b/compiler/tools/fpp-locate-uses/test/stdin.ref.txt @@ -15,7 +15,9 @@ locate constant record_id at "defs.fpp" locate constant stack_size_def at "defs.fpp" locate constant tlm_packet_group at "defs.fpp" locate constant tlm_packet_id at "defs.fpp" +locate instance M.T1 at "defs.fpp" locate instance M.c11 at "defs.fpp" +locate instance T1 at "defs.fpp" locate instance c11 at "defs.fpp" locate port Fw.Cmd at "defs.fpp" locate port Fw.CmdReg at "defs.fpp" @@ -34,8 +36,6 @@ locate state machine C1.S at "defs.fpp" locate state machine M.C1.S at "defs.fpp" locate state machine M.S at "defs.fpp" locate state machine S at "defs.fpp" -locate topology M.T1 at "defs.fpp" -locate topology T1 at "defs.fpp" locate type A at "defs.fpp" locate type ActionType at "defs.fpp" locate type C1.A at "defs.fpp" diff --git a/compiler/tools/fpp-locate-uses/test/uses.ref.txt b/compiler/tools/fpp-locate-uses/test/uses.ref.txt index af392c3c9..bf66a7661 100644 --- a/compiler/tools/fpp-locate-uses/test/uses.ref.txt +++ b/compiler/tools/fpp-locate-uses/test/uses.ref.txt @@ -15,7 +15,9 @@ locate constant record_id at "defs.fpp" locate constant stack_size_def at "defs.fpp" locate constant tlm_packet_group at "defs.fpp" locate constant tlm_packet_id at "defs.fpp" +locate instance M.T1 at "defs.fpp" locate instance M.c11 at "defs.fpp" +locate instance T1 at "defs.fpp" locate instance c11 at "defs.fpp" locate interface I at "uses/uses.fpp" locate port Fw.Cmd at "defs.fpp" @@ -35,8 +37,6 @@ locate state machine C1.S at "defs.fpp" locate state machine M.C1.S at "defs.fpp" locate state machine M.S at "defs.fpp" locate state machine S at "defs.fpp" -locate topology M.T1 at "defs.fpp" -locate topology T1 at "defs.fpp" locate type A at "defs.fpp" locate type ActionType at "defs.fpp" locate type C1.A at "defs.fpp" diff --git a/compiler/tools/fpp-locate-uses/test/uses_dir.ref.txt b/compiler/tools/fpp-locate-uses/test/uses_dir.ref.txt index 155065080..b48ea3309 100644 --- a/compiler/tools/fpp-locate-uses/test/uses_dir.ref.txt +++ b/compiler/tools/fpp-locate-uses/test/uses_dir.ref.txt @@ -15,7 +15,9 @@ locate constant record_id at "../defs.fpp" locate constant stack_size_def at "../defs.fpp" locate constant tlm_packet_group at "../defs.fpp" locate constant tlm_packet_id at "../defs.fpp" +locate instance M.T1 at "../defs.fpp" locate instance M.c11 at "../defs.fpp" +locate instance T1 at "../defs.fpp" locate instance c11 at "../defs.fpp" locate interface I at "uses.fpp" locate port Fw.Cmd at "../defs.fpp" @@ -35,8 +37,6 @@ locate state machine C1.S at "../defs.fpp" locate state machine M.C1.S at "../defs.fpp" locate state machine M.S at "../defs.fpp" locate state machine S at "../defs.fpp" -locate topology M.T1 at "../defs.fpp" -locate topology T1 at "../defs.fpp" locate type A at "../defs.fpp" locate type ActionType at "../defs.fpp" locate type C1.A at "../defs.fpp" From d737ea8c41b56ccb31b4fcf69509106f9b309d6a Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Mon, 27 Oct 2025 11:29:44 -0700 Subject: [PATCH 13/26] Check implements clause --- .../analysis/Analyzers/BasicUseAnalyzer.scala | 7 + .../analysis/Semantics/PortInterface.scala | 56 +- .../CheckTopologyInterface.scala | 25 + .../ResolveTopology/ResolveTopology.scala | 3 + compiler/lib/src/main/scala/util/Error.scala | 30 + .../fpp-check/test/top_ports/implements.fpp | 38 + .../test/top_ports/implements.ref.txt | 13 + .../top_ports/implements_port_mismatch_1.fpp | 38 + .../implements_port_mismatch_1.ref.txt | 13 + .../top_ports/implements_port_mismatch_2.fpp | 29 + .../implements_port_mismatch_2.ref.txt | 13 + .../top_ports/implements_port_missing.fpp | 39 + .../top_ports/implements_port_missing.ref.txt | 13 + .../tools/fpp-check/test/top_ports/tests.sh | 4 + .../fpp-to-json/test/activeComponents.ref.txt | 248 +- .../tools/fpp-to-json/test/commands.ref.txt | 184 +- .../test/constTypesComponents.ref.txt | 184 +- .../fpp-to-json/test/dataProducts.ref.txt | 268 +- .../tools/fpp-to-json/test/events.ref.txt | 368 +- .../test/importedTopologies.ref.txt | 4704 ++++++----------- .../tools/fpp-to-json/test/interfaces.ref.txt | 266 +- .../fpp-to-json/test/internalPorts.ref.txt | 32 +- .../fpp-to-json/test/matchedPorts.ref.txt | 152 +- .../tools/fpp-to-json/test/modules.ref.txt | 20 +- .../tools/fpp-to-json/test/parameters.ref.txt | 354 +- .../fpp-to-json/test/passiveComponent.ref.txt | 182 +- .../test/patternedConnections.ref.txt | 1562 +++--- compiler/tools/fpp-to-json/test/ports.ref.txt | 198 +- .../fpp-to-json/test/queuedComponents.ref.txt | 248 +- .../fpp-to-json/test/simpleComponents.ref.txt | 752 +-- .../tools/fpp-to-json/test/simpleTopology.fpp | 4 +- .../fpp-to-json/test/simpleTopology.ref.txt | 2453 +-------- .../fpp-to-json/test/specialPorts.ref.txt | 560 +- .../tools/fpp-to-json/test/syntaxOnly.ref.txt | 38 +- .../tools/fpp-to-json/test/telemetry.ref.txt | 241 +- .../fpp-to-json/test/telemetryPackets.ref.txt | 708 ++- .../tools/fpp-to-json/test/topologyPorts.fpp | 31 + 37 files changed, 5114 insertions(+), 8964 deletions(-) create mode 100644 compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/CheckTopologyInterface.scala create mode 100644 compiler/tools/fpp-check/test/top_ports/implements.fpp create mode 100644 compiler/tools/fpp-check/test/top_ports/implements.ref.txt create mode 100644 compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_1.fpp create mode 100644 compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_1.ref.txt create mode 100644 compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_2.fpp create mode 100644 compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_2.ref.txt create mode 100644 compiler/tools/fpp-check/test/top_ports/implements_port_missing.fpp create mode 100644 compiler/tools/fpp-check/test/top_ports/implements_port_missing.ref.txt create mode 100644 compiler/tools/fpp-to-json/test/topologyPorts.fpp diff --git a/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala b/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala index d09ee9694..5aebe17f5 100644 --- a/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala +++ b/compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala @@ -43,6 +43,13 @@ trait BasicUseAnalyzer extends TypeExpressionAnalyzer { val id = node._2.id for { a <- visitImpliedUses(a, id) + + // Visit port interface uses in the implements clause + a <- { + Result.foldLeft (node._2.data.implements) (a) ((a, impl) => + qualIdentNode(interfaceUse) (a, impl) + )} + a <- super.defTopologyAnnotatedNode(a, node) } yield a } diff --git a/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala b/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala index da9d78876..322f4df97 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala @@ -16,23 +16,49 @@ case class PortInterface( private def withSpecialPortMap(newSpecialPortMap: Map[Ast.SpecPortInstance.SpecialKind, PortInstance.Special]) = this.copy(specialPortMap = newSpecialPortMap) - def isSubsetOf(other: PortInterface): Boolean = - // Find the first point that does not exist or does not match in the other interface - !portMap.exists((name, pi) => { - other.portMap.get(name) match { - case Some(opi) => - // The port exists, make sure it's the same as ours - pi != opi - case None => true + /* Check if 'this' port interface implements 'other' */ + def implements(other: PortInterface): Result.Result[Unit] = + for { + _ <- { + // Check all the ports in 'other' to make sure they exist and match to 'this' + Result.foldLeft (other.portMap.toList) (()) ((_, pii) => { + val (name, pi) = pii + this.portMap.get(name) match { + case Some(found) => + // Port exists, make sure it matches theirs + if found == pi then Right(()) + else Left(SemanticError.PortInterfaceInvalidPort( + found.getLoc, + pi.getLoc + )) + case None => + Left(SemanticError.PortInterfaceMissingPort( + pi.getLoc + )) + } + }) } - }) && !specialPortMap.exists((name, pi) => { - other.specialPortMap.get(name) match { - case Some(opi) => - // The port exists, make sure it's the same as ours - pi != opi - case None => true + + _ <- { + Result.foldLeft (other.specialPortMap) (()) ((_, pii) => { + val (kind, pi) = pii + + this.specialPortMap.get(kind) match { + case Some(found) => + // The port exists, make sure it's the same theirs + if found == pi then Right(()) + else Left(SemanticError.PortInterfaceInvalidPort( + found.getLoc, + pi.getLoc + )) + case None => + Left(SemanticError.PortInterfaceMissingPort( + pi.getLoc + )) + } + }) } - }) + } yield () /** Gets a port instance by name */ def getPortInstance(name: AstNode[Ast.Ident], interfaceName: String): Result.Result[PortInstance] = diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/CheckTopologyInterface.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/CheckTopologyInterface.scala new file mode 100644 index 000000000..55d1df998 --- /dev/null +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/CheckTopologyInterface.scala @@ -0,0 +1,25 @@ +package fpp.compiler.analysis + +import fpp.compiler.ast._ +import fpp.compiler.util._ + +object CheckTopologyInterface { + + /** Check a topology implements all the interfaces that are listed in the AST */ + def check(a: Analysis, t: Topology): Result.Result[Unit] = + Result.foldLeft (t.aNode._2.data.implements) (()) ((_, impl) => { + for { + iface <- a.getInterface(impl.id) + _ <- { + t.portInterface.implements(iface.portInterface) match { + case Right(_) => Right(()) + case Left(err) => Left(SemanticError.InterfaceImplements( + Locations.get(impl.id), + err + )) + } + } + } yield (()) + }) + +} diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopology.scala b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopology.scala index ad908489a..e44aead51 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopology.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ResolveTopology/ResolveTopology.scala @@ -13,6 +13,9 @@ object ResolveTopology { t <- ResolvePartiallyNumbered.resolve(a, t) t <- ResolvePortNumbers.resolve(t) t <- Right(ResolveUnconnectedPorts.resolve(t)) + + // Check the topologies interface against the `implements` clause + _ <- CheckTopologyInterface.check(a, t) } yield t diff --git a/compiler/lib/src/main/scala/util/Error.scala b/compiler/lib/src/main/scala/util/Error.scala index d54e5ec82..4f7e265e0 100644 --- a/compiler/lib/src/main/scala/util/Error.scala +++ b/compiler/lib/src/main/scala/util/Error.scala @@ -333,6 +333,22 @@ sealed trait Error { ) => Error.print (Some(importLoc)) (s"failed to import interface") err.print + case SemanticError.PortInterfaceMissingPort( + loc + ) => + Error.print (Some(loc)) ("port instance missing definition") + case SemanticError.PortInterfaceInvalidPort( + loc, + defLoc + ) => + Error.print (Some(loc)) ("port instance does not match definition in interface:") + System.err.println(defLoc) + case SemanticError.InterfaceImplements( + loc, + err + ) => + Error.print (Some(loc)) ("port interface not implemented") + err.print case SemanticError.UseDefCycle(loc, msg) => Error.print (Some(loc)) (msg) case XmlError.ParseError(file, msg) => Error.printXml (file) (msg) case XmlError.SemanticError(file, msg) => Error.printXml (file) (msg) @@ -688,6 +704,20 @@ object SemanticError { importLoc: Location, err: Error ) extends Error + /** A port is missing from a port interface */ + final case class PortInterfaceMissingPort( + loc: Location + ) extends Error + /** A port does not match an expected signature */ + final case class PortInterfaceInvalidPort( + loc: Location, + defLoc: Location + ) extends Error + /** Error while checking if instance implements interface */ + final case class InterfaceImplements( + loc: Location, + err: Error + ) extends Error /** Passive async input */ final case class PassiveAsync(loc: Location, importLocs: List[Location]) extends Error final case class PassiveStateMachine(loc: Location) extends Error diff --git a/compiler/tools/fpp-check/test/top_ports/implements.fpp b/compiler/tools/fpp-check/test/top_ports/implements.fpp new file mode 100644 index 000000000..b1ab1eb63 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/implements.fpp @@ -0,0 +1,38 @@ +port P + +interface I { + output port pOut: [2] P +} + +passive component C1 { + + output port pOutDifferentName: [2] P + +} + +passive component C2 { + + sync input port pIn: P + +} + +instance c1: C1 base id 0x100 +instance c2: C2 base id 0x200 + +topology A implements I { + instance c1 + instance c2 + + port pOut = c1.pOutDifferentName + port b = c2.pIn +} + +topology B { + + instance A + + connections P { + A.pOut -> A.b + } + +} diff --git a/compiler/tools/fpp-check/test/top_ports/implements.ref.txt b/compiler/tools/fpp-check/test/top_ports/implements.ref.txt new file mode 100644 index 000000000..c53bca770 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/implements.ref.txt @@ -0,0 +1,13 @@ +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements.fpp:22.23 +topology A implements I { + ^ +error: port interface not implemented +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements.fpp:26.3 + port pOut = c1.pOutDifferentName + ^ +error: port instance does not match definition in interface: +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements.fpp:4.5 + output port pOut: [2] P + ^ diff --git a/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_1.fpp b/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_1.fpp new file mode 100644 index 000000000..df34851d5 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_1.fpp @@ -0,0 +1,38 @@ +port P + +interface I { + output port pOut: [2] P +} + +passive component C1 { + + output port pOutDifferentName: [3] P + +} + +passive component C2 { + + sync input port pIn: P + +} + +instance c1: C1 base id 0x100 +instance c2: C2 base id 0x200 + +topology A implements I { + instance c1 + instance c2 + + port pOut = c1.pOutDifferentName + port b = c2.pIn +} + +topology B { + + instance A + + connections P { + A.pOut -> A.b + } + +} diff --git a/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_1.ref.txt b/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_1.ref.txt new file mode 100644 index 000000000..c969a9a3b --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_1.ref.txt @@ -0,0 +1,13 @@ +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_1.fpp:22.23 +topology A implements I { + ^ +error: port interface not implemented +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_1.fpp:26.3 + port pOut = c1.pOutDifferentName + ^ +error: port instance does not match definition in interface: +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_1.fpp:4.5 + output port pOut: [2] P + ^ diff --git a/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_2.fpp b/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_2.fpp new file mode 100644 index 000000000..fd90d9b18 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_2.fpp @@ -0,0 +1,29 @@ +port P +port P2 + +interface I { + output port pOut: [2] P +} + +passive component C1 { + + output port pOutDifferentName: [2] P2 + +} + +passive component C2 { + + sync input port pIn: P + +} + +instance c1: C1 base id 0x100 +instance c2: C2 base id 0x200 + +topology A implements I { + instance c1 + instance c2 + + port pOut = c1.pOutDifferentName + port b = c2.pIn +} diff --git a/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_2.ref.txt b/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_2.ref.txt new file mode 100644 index 000000000..ef9fa9d80 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_2.ref.txt @@ -0,0 +1,13 @@ +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_2.fpp:23.23 +topology A implements I { + ^ +error: port interface not implemented +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_2.fpp:27.3 + port pOut = c1.pOutDifferentName + ^ +error: port instance does not match definition in interface: +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements_port_mismatch_2.fpp:5.5 + output port pOut: [2] P + ^ diff --git a/compiler/tools/fpp-check/test/top_ports/implements_port_missing.fpp b/compiler/tools/fpp-check/test/top_ports/implements_port_missing.fpp new file mode 100644 index 000000000..20f080ef0 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/implements_port_missing.fpp @@ -0,0 +1,39 @@ +port P + +interface I { + output port pOut: [2] P + output port pOut2: [3] P +} + +passive component C1 { + + output port pOutDifferentName: [2] P + +} + +passive component C2 { + + sync input port pIn: P + +} + +instance c1: C1 base id 0x100 +instance c2: C2 base id 0x200 + +topology A implements I { + instance c1 + instance c2 + + port pOut = c1.pOutDifferentName + port b = c2.pIn +} + +topology B { + + instance A + + connections P { + A.pOut -> A.b + } + +} diff --git a/compiler/tools/fpp-check/test/top_ports/implements_port_missing.ref.txt b/compiler/tools/fpp-check/test/top_ports/implements_port_missing.ref.txt new file mode 100644 index 000000000..d1b776295 --- /dev/null +++ b/compiler/tools/fpp-check/test/top_ports/implements_port_missing.ref.txt @@ -0,0 +1,13 @@ +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements_port_missing.fpp:23.23 +topology A implements I { + ^ +error: port interface not implemented +fpp-check +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements_port_missing.fpp:27.3 + port pOut = c1.pOutDifferentName + ^ +error: port instance does not match definition in interface: +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements_port_missing.fpp:4.5 + output port pOut: [2] P + ^ diff --git a/compiler/tools/fpp-check/test/top_ports/tests.sh b/compiler/tools/fpp-check/test/top_ports/tests.sh index bc289ea06..e18bb7639 100644 --- a/compiler/tools/fpp-check/test/top_ports/tests.sh +++ b/compiler/tools/fpp-check/test/top_ports/tests.sh @@ -1,5 +1,9 @@ tests=" basic +implements +implements_port_mismatch_1 +implements_port_mismatch_2 +implements_port_missing internal_port nested out_to_out diff --git a/compiler/tools/fpp-to-json/test/activeComponents.ref.txt b/compiler/tools/fpp-to-json/test/activeComponents.ref.txt index 721732fbe..1b7966fd6 100644 --- a/compiler/tools/fpp-to-json/test/activeComponents.ref.txt +++ b/compiler/tools/fpp-to-json/test/activeComponents.ref.txt @@ -1964,84 +1964,86 @@ "aNode" : { "astNodeId" : 58 }, - "portMap" : { - "bufferSendIn" : { - "General" : { - "aNode" : { - "astNodeId" : 45 - }, - "specifier" : { - "kind" : { - "AsyncInput" : { - - } + "portInterface" : { + "portMap" : { + "bufferSendIn" : { + "General" : { + "aNode" : { + "astNodeId" : 45 }, - "name" : "bufferSendIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 44 - } + "specifier" : { + "kind" : { + "AsyncInput" : { + + } + }, + "name" : "bufferSendIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 44 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "AsyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 2, - "unqualifiedName" : "BufferSend" + "kind" : "AsyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 2, + "unqualifiedName" : "BufferSend" + } } } - } - }, - "importNodeIds" : [ - ] - } - }, - "bufferSendOut" : { - "General" : { - "aNode" : { - "astNodeId" : 57 - }, - "specifier" : { - "kind" : { - "Output" : { - - } }, - "name" : "bufferSendOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 56 - } + "importNodeIds" : [ + ] + } + }, + "bufferSendOut" : { + "General" : { + "aNode" : { + "astNodeId" : 57 }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 2, - "unqualifiedName" : "BufferSend" + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "bufferSendOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 56 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 2, + "unqualifiedName" : "BufferSend" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -2082,47 +2084,49 @@ "aNode" : { "astNodeId" : 137 }, - "portMap" : { - "schedIn" : { - "General" : { - "aNode" : { - "astNodeId" : 115 - }, - "specifier" : { - "kind" : { - "AsyncInput" : { - - } + "portInterface" : { + "portMap" : { + "schedIn" : { + "General" : { + "aNode" : { + "astNodeId" : 115 }, - "name" : "schedIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 114 - } + "specifier" : { + "kind" : { + "AsyncInput" : { + + } + }, + "name" : "schedIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 114 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "AsyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 6, - "unqualifiedName" : "Sched" + "kind" : "AsyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 6, + "unqualifiedName" : "Sched" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -2377,7 +2381,17 @@ }, "202" : { "map" : { - "ComponentInstance" : { + "StateMachine" : { + "map" : { + "Default" : { + "Module" : { + "nodeId" : 153, + "unqualifiedName" : "Default" + } + } + } + }, + "PortInterfaceInstance" : { "map" : { "Default" : { "Module" : { @@ -2399,27 +2413,7 @@ } } }, - "Topology" : { - "map" : { - "Default" : { - "Module" : { - "nodeId" : 153, - "unqualifiedName" : "Default" - } - } - } - }, - "Interface" : { - "map" : { - "Default" : { - "Module" : { - "nodeId" : 153, - "unqualifiedName" : "Default" - } - } - } - }, - "StateMachine" : { + "Value" : { "map" : { "Default" : { "Module" : { @@ -2429,7 +2423,7 @@ } } }, - "Value" : { + "Port" : { "map" : { "Default" : { "Module" : { @@ -2439,7 +2433,7 @@ } } }, - "Port" : { + "PortInterface" : { "map" : { "Default" : { "Module" : { diff --git a/compiler/tools/fpp-to-json/test/commands.ref.txt b/compiler/tools/fpp-to-json/test/commands.ref.txt index 560b88301..a9b05cf1b 100644 --- a/compiler/tools/fpp-to-json/test/commands.ref.txt +++ b/compiler/tools/fpp-to-json/test/commands.ref.txt @@ -709,9 +709,95 @@ "aNode" : { "astNodeId" : 45 }, - "portMap" : { - "cmdRegOut" : { - "Special" : { + "portInterface" : { + "portMap" : { + "cmdRegOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 0 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandReg" : { + + } + }, + "name" : "cmdRegOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 47, + "unqualifiedName" : "CmdReg" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "cmdIn" : { + "Special" : { + "aNode" : { + "astNodeId" : 1 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandRecv" : { + + } + }, + "name" : "cmdIn", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 46, + "unqualifiedName" : "Cmd" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "cmdResponseOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 2 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandResp" : { + + } + }, + "name" : "cmdResponseOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 50, + "unqualifiedName" : "CmdResponse" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "command reg" : { "aNode" : { "astNodeId" : 0 }, @@ -736,10 +822,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "cmdIn" : { - "Special" : { + }, + "command recv" : { "aNode" : { "astNodeId" : 1 }, @@ -764,10 +848,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "cmdResponseOut" : { - "Special" : { + }, + "command resp" : { "aNode" : { "astNodeId" : 2 }, @@ -795,86 +877,6 @@ } } }, - "specialPortMap" : { - "command reg" : { - "aNode" : { - "astNodeId" : 0 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandReg" : { - - } - }, - "name" : "cmdRegOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 47, - "unqualifiedName" : "CmdReg" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "command recv" : { - "aNode" : { - "astNodeId" : 1 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandRecv" : { - - } - }, - "name" : "cmdIn", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 46, - "unqualifiedName" : "Cmd" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "command resp" : { - "aNode" : { - "astNodeId" : 2 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandResp" : { - - } - }, - "name" : "cmdResponseOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 50, - "unqualifiedName" : "CmdResponse" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { "0" : { "NonParam" : { diff --git a/compiler/tools/fpp-to-json/test/constTypesComponents.ref.txt b/compiler/tools/fpp-to-json/test/constTypesComponents.ref.txt index dde43098d..b3cf51a80 100644 --- a/compiler/tools/fpp-to-json/test/constTypesComponents.ref.txt +++ b/compiler/tools/fpp-to-json/test/constTypesComponents.ref.txt @@ -544,9 +544,95 @@ "aNode" : { "astNodeId" : 35 }, - "portMap" : { - "cmdRegOut" : { - "Special" : { + "portInterface" : { + "portMap" : { + "cmdRegOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 5 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandReg" : { + + } + }, + "name" : "cmdRegOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 37, + "unqualifiedName" : "CmdReg" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "cmdIn" : { + "Special" : { + "aNode" : { + "astNodeId" : 6 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandRecv" : { + + } + }, + "name" : "cmdIn", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 36, + "unqualifiedName" : "Cmd" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "cmdResponseOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 7 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandResp" : { + + } + }, + "name" : "cmdResponseOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 40, + "unqualifiedName" : "CmdResponse" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "command reg" : { "aNode" : { "astNodeId" : 5 }, @@ -571,10 +657,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "cmdIn" : { - "Special" : { + }, + "command recv" : { "aNode" : { "astNodeId" : 6 }, @@ -599,10 +683,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "cmdResponseOut" : { - "Special" : { + }, + "command resp" : { "aNode" : { "astNodeId" : 7 }, @@ -630,86 +712,6 @@ } } }, - "specialPortMap" : { - "command reg" : { - "aNode" : { - "astNodeId" : 5 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandReg" : { - - } - }, - "name" : "cmdRegOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 37, - "unqualifiedName" : "CmdReg" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "command recv" : { - "aNode" : { - "astNodeId" : 6 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandRecv" : { - - } - }, - "name" : "cmdIn", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 36, - "unqualifiedName" : "Cmd" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "command resp" : { - "aNode" : { - "astNodeId" : 7 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandResp" : { - - } - }, - "name" : "cmdResponseOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 40, - "unqualifiedName" : "CmdResponse" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { "0" : { "NonParam" : { diff --git a/compiler/tools/fpp-to-json/test/dataProducts.ref.txt b/compiler/tools/fpp-to-json/test/dataProducts.ref.txt index 5892dfd02..f24e53fd3 100644 --- a/compiler/tools/fpp-to-json/test/dataProducts.ref.txt +++ b/compiler/tools/fpp-to-json/test/dataProducts.ref.txt @@ -584,9 +584,135 @@ "aNode" : { "astNodeId" : 28 }, - "portMap" : { - "productRequestOut" : { - "Special" : { + "portInterface" : { + "portMap" : { + "productRequestOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 7 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "ProductRequest" : { + + } + }, + "name" : "productRequestOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "DpRequest" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "productRecvIn" : { + "Special" : { + "aNode" : { + "astNodeId" : 8 + }, + "specifier" : { + "inputKind" : { + "Some" : { + "Sync" : { + + } + } + }, + "kind" : { + "ProductRecv" : { + + } + }, + "name" : "productRecvIn", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 1, + "unqualifiedName" : "DpResponse" + } + }, + "priority" : "None", + "queueFull" : { + "Some" : { + "Assert" : { + + } + } + }, + "importNodeIds" : [ + ] + } + }, + "productSendOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 9 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "ProductSend" : { + + } + }, + "name" : "productSendOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 2, + "unqualifiedName" : "DpSend" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "timeGetOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 10 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "TimeGet" : { + + } + }, + "name" : "timeGetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 5, + "unqualifiedName" : "Time" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "product request" : { "aNode" : { "astNodeId" : 7 }, @@ -611,10 +737,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "productRecvIn" : { - "Special" : { + }, + "product recv" : { "aNode" : { "astNodeId" : 8 }, @@ -651,10 +775,8 @@ }, "importNodeIds" : [ ] - } - }, - "productSendOut" : { - "Special" : { + }, + "product send" : { "aNode" : { "astNodeId" : 9 }, @@ -679,10 +801,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "timeGetOut" : { - "Special" : { + }, + "time get" : { "aNode" : { "astNodeId" : 10 }, @@ -710,124 +830,6 @@ } } }, - "specialPortMap" : { - "product request" : { - "aNode" : { - "astNodeId" : 7 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "ProductRequest" : { - - } - }, - "name" : "productRequestOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "DpRequest" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "product recv" : { - "aNode" : { - "astNodeId" : 8 - }, - "specifier" : { - "inputKind" : { - "Some" : { - "Sync" : { - - } - } - }, - "kind" : { - "ProductRecv" : { - - } - }, - "name" : "productRecvIn", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 1, - "unqualifiedName" : "DpResponse" - } - }, - "priority" : "None", - "queueFull" : { - "Some" : { - "Assert" : { - - } - } - }, - "importNodeIds" : [ - ] - }, - "product send" : { - "aNode" : { - "astNodeId" : 9 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "ProductSend" : { - - } - }, - "name" : "productSendOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 2, - "unqualifiedName" : "DpSend" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "time get" : { - "aNode" : { - "astNodeId" : 10 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "TimeGet" : { - - } - }, - "name" : "timeGetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 5, - "unqualifiedName" : "Time" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, diff --git a/compiler/tools/fpp-to-json/test/events.ref.txt b/compiler/tools/fpp-to-json/test/events.ref.txt index e97a47005..efe81478c 100644 --- a/compiler/tools/fpp-to-json/test/events.ref.txt +++ b/compiler/tools/fpp-to-json/test/events.ref.txt @@ -1741,9 +1741,95 @@ "aNode" : { "astNodeId" : 19 }, - "portMap" : { - "eventOut" : { - "Special" : { + "portInterface" : { + "portMap" : { + "eventOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 0 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "Event" : { + + } + }, + "name" : "eventOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 171, + "unqualifiedName" : "Log" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "textEventOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 1 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "TextEvent" : { + + } + }, + "name" : "textEventOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 172, + "unqualifiedName" : "LogText" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "timeGetOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 2 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "TimeGet" : { + + } + }, + "name" : "timeGetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 175, + "unqualifiedName" : "Time" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "event" : { "aNode" : { "astNodeId" : 0 }, @@ -1768,10 +1854,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "textEventOut" : { - "Special" : { + }, + "text event" : { "aNode" : { "astNodeId" : 1 }, @@ -1796,10 +1880,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "timeGetOut" : { - "Special" : { + }, + "time get" : { "aNode" : { "astNodeId" : 2 }, @@ -1827,86 +1909,6 @@ } } }, - "specialPortMap" : { - "event" : { - "aNode" : { - "astNodeId" : 0 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "Event" : { - - } - }, - "name" : "eventOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 171, - "unqualifiedName" : "Log" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "text event" : { - "aNode" : { - "astNodeId" : 1 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "TextEvent" : { - - } - }, - "name" : "textEventOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 172, - "unqualifiedName" : "LogText" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "time get" : { - "aNode" : { - "astNodeId" : 2 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "TimeGet" : { - - } - }, - "name" : "timeGetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 175, - "unqualifiedName" : "Time" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, @@ -1986,9 +1988,95 @@ "aNode" : { "astNodeId" : 169 }, - "portMap" : { - "eventOut" : { - "Special" : { + "portInterface" : { + "portMap" : { + "eventOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 120 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "Event" : { + + } + }, + "name" : "eventOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 171, + "unqualifiedName" : "Log" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "textEventOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 121 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "TextEvent" : { + + } + }, + "name" : "textEventOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 172, + "unqualifiedName" : "LogText" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "timeGetOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 122 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "TimeGet" : { + + } + }, + "name" : "timeGetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 175, + "unqualifiedName" : "Time" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "event" : { "aNode" : { "astNodeId" : 120 }, @@ -2013,10 +2101,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "textEventOut" : { - "Special" : { + }, + "text event" : { "aNode" : { "astNodeId" : 121 }, @@ -2041,10 +2127,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "timeGetOut" : { - "Special" : { + }, + "time get" : { "aNode" : { "astNodeId" : 122 }, @@ -2072,86 +2156,6 @@ } } }, - "specialPortMap" : { - "event" : { - "aNode" : { - "astNodeId" : 120 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "Event" : { - - } - }, - "name" : "eventOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 171, - "unqualifiedName" : "Log" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "text event" : { - "aNode" : { - "astNodeId" : 121 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "TextEvent" : { - - } - }, - "name" : "textEventOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 172, - "unqualifiedName" : "LogText" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "time get" : { - "aNode" : { - "astNodeId" : 122 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "TimeGet" : { - - } - }, - "name" : "timeGetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 175, - "unqualifiedName" : "Time" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, diff --git a/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt b/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt index c23a54ab2..f5c892a90 100644 --- a/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt +++ b/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt @@ -327,7 +327,7 @@ "This specifier says that instance c1 is part of the topology" ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -355,7 +355,7 @@ "This specifier says that instance c2 is part of the topology" ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -395,7 +395,7 @@ "fromPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -419,7 +419,7 @@ "toPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -469,7 +469,7 @@ "fromPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -493,7 +493,7 @@ "toPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -553,11 +553,11 @@ [ ], { - "SpecTopImport" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { - "sym" : { + "instance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -581,7 +581,7 @@ "This specifier says that instance c3 is part of the topology" ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -609,7 +609,7 @@ "This specifier says that instance c4 is part of the topology" ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -649,7 +649,7 @@ "fromPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -673,7 +673,7 @@ "toPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -723,7 +723,7 @@ "fromPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -747,7 +747,7 @@ "toPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -807,11 +807,11 @@ [ ], { - "SpecTopImport" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { - "sym" : { + "instance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -1592,84 +1592,86 @@ "aNode" : { "astNodeId" : 13 }, - "portMap" : { - "pIn" : { - "General" : { - "aNode" : { - "astNodeId" : 3 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } + "portInterface" : { + "portMap" : { + "pIn" : { + "General" : { + "aNode" : { + "astNodeId" : 3 }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 2 - } + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 2 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } } } - } - }, - "importNodeIds" : [ - ] - } - }, - "pOut" : { - "General" : { - "aNode" : { - "astNodeId" : 12 - }, - "specifier" : { - "kind" : { - "Output" : { - - } }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 11 - } + "importNodeIds" : [ + ] + } + }, + "pOut" : { + "General" : { + "aNode" : { + "astNodeId" : 12 }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 11 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -1729,34 +1731,38 @@ "aNode" : { "astNodeId" : 72 }, - "directImportMap" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "Simple1" + }, + "directTopologies" : { + }, + "directComponentInstances" : { + "17" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", + "pos" : "17.3", + "includingLoc" : "None" + }, + "21" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", + "pos" : "19.3", + "includingLoc" : "None" + } }, "transitiveImportSet" : [ ], "instanceMap" : [ [ { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, { @@ -1767,26 +1773,13 @@ ], [ { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, { @@ -1796,6 +1789,19 @@ } ] ], + "ports" : [ + ], + "portMap" : { + + }, + "portInterface" : { + "portMap" : { + + }, + "specialPortMap" : { + + } + }, "patternMap" : { }, @@ -1809,27 +1815,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -1870,7 +1863,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -1879,27 +1873,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -1940,7 +1921,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -1954,27 +1936,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -2015,7 +1984,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -2024,27 +1994,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -2085,7 +2042,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -2101,27 +2059,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -2162,7 +2107,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -2171,27 +2117,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -2232,7 +2165,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -2246,27 +2180,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -2307,7 +2228,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -2316,27 +2238,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -2377,7 +2286,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -2386,27 +2296,14 @@ "outputConnectionMap" : [ [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -2456,27 +2353,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -2517,7 +2401,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -2526,27 +2411,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -2587,7 +2459,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -2595,27 +2468,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -2665,27 +2525,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -2726,7 +2573,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -2735,27 +2583,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -2796,7 +2631,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -2806,27 +2642,14 @@ "inputConnectionMap" : [ [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -2876,27 +2699,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -2937,7 +2747,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -2946,27 +2757,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -3007,7 +2805,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -3015,27 +2814,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -3085,27 +2871,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -3146,7 +2919,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -3155,27 +2929,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -3216,7 +2977,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -3233,27 +2995,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -3294,7 +3043,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -3303,27 +3053,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -3364,7 +3101,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -3379,27 +3117,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -3440,7 +3165,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -3449,27 +3175,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -3510,7 +3223,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -3527,27 +3241,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -3588,7 +3289,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -3597,27 +3299,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -3658,7 +3347,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -3673,27 +3363,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -3734,7 +3411,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -3743,27 +3421,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -3804,7 +3469,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -3818,13 +3484,30 @@ "aNode" : { "astNodeId" : 118 }, - "directImportMap" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "Simple2" + }, + "directTopologies" : { "72" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", "pos" : "35.3", "includingLoc" : "None" } }, + "directComponentInstances" : { + "25" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", + "pos" : "37.3", + "includingLoc" : "None" + }, + "29" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", + "pos" : "39.3", + "includingLoc" : "None" + } + }, "transitiveImportSet" : [ { "node" : { @@ -3835,26 +3518,13 @@ "instanceMap" : [ [ { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, { @@ -3865,56 +3535,30 @@ ], [ { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "39.3", + "pos" : "19.3", "includingLoc" : "None" } ], [ { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, { @@ -3925,69 +3569,73 @@ ], [ { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceTopology" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "Simple1" + }, + "unqualifiedName" : "Simple1" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "19.3", + "pos" : "35.3", + "includingLoc" : "None" + } + ], + [ + { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" + } + }, + { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", + "pos" : "39.3", "includingLoc" : "None" } ] ], - "patternMap" : { + "ports" : [ + ], + "portMap" : { }, - "connectionMap" : { - "C3" : [ - { - "from" : { - "loc" : { + "portInterface" : { + "portMap" : { + + }, + "specialPortMap" : { + + } + }, + "patternMap" : { + + }, + "connectionMap" : { + "C3" : [ + { + "from" : { + "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", "pos" : "43.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -4028,7 +3676,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -4037,27 +3686,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -4098,7 +3734,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -4112,27 +3749,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -4173,7 +3797,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -4182,27 +3807,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -4243,7 +3855,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -4257,27 +3870,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -4318,7 +3918,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -4327,27 +3928,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -4388,7 +3976,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -4402,27 +3991,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -4463,7 +4039,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -4472,27 +4049,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -4533,7 +4097,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -4549,27 +4114,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -4610,7 +4162,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -4619,27 +4172,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -4680,7 +4220,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -4694,27 +4235,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -4755,7 +4283,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -4764,27 +4293,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -4825,7 +4341,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -4834,27 +4351,14 @@ "outputConnectionMap" : [ [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -4904,27 +4408,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -4965,7 +4456,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -4974,27 +4466,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -5035,7 +4514,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -5043,27 +4523,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -5113,27 +4580,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -5174,7 +4628,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -5183,27 +4638,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -5244,7 +4686,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -5252,27 +4695,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -5322,27 +4752,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -5383,7 +4800,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -5392,27 +4810,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -5453,7 +4858,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -5461,27 +4867,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -5531,27 +4924,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -5592,7 +4972,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -5601,27 +4982,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -5662,7 +5030,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -5672,27 +5041,14 @@ "inputConnectionMap" : [ [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -5742,27 +5098,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -5803,7 +5146,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -5812,27 +5156,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -5873,7 +5204,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -5881,27 +5213,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -5951,27 +5270,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -6012,7 +5318,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -6021,27 +5328,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -6082,7 +5376,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -6090,27 +5385,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -6160,27 +5442,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -6221,7 +5490,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -6230,27 +5500,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -6291,7 +5548,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -6299,27 +5557,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -6369,27 +5614,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -6430,7 +5662,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -6439,27 +5672,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -6500,7 +5720,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -6513,31 +5734,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.5", + "pos" : "48.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -6578,36 +5786,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.16", + "pos" : "48.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -6648,7 +5844,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -6659,31 +5856,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.5", + "pos" : "28.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -6724,36 +5908,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.16", + "pos" : "28.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -6794,7 +5966,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -6805,31 +5978,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.5", + "pos" : "43.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -6870,36 +6030,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.16", + "pos" : "43.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -6940,7 +6088,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -6951,31 +6100,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.5", + "pos" : "23.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -7016,36 +6152,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.16", + "pos" : "23.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -7086,7 +6210,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -7099,31 +6224,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.5", + "pos" : "43.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -7164,36 +6276,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.16", + "pos" : "43.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -7234,7 +6334,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -7245,31 +6346,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.5", + "pos" : "23.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -7310,36 +6398,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.16", + "pos" : "23.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -7380,7 +6456,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -7391,31 +6468,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.5", + "pos" : "48.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -7456,36 +6520,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.16", + "pos" : "48.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -7526,7 +6578,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -7537,31 +6590,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.5", + "pos" : "28.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -7602,36 +6642,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.16", + "pos" : "28.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -7672,7 +6700,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -7686,12 +6715,20 @@ "aNode" : { "astNodeId" : 128 }, - "directImportMap" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "Simple3" + }, + "directTopologies" : { "118" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", "pos" : "55.3", "includingLoc" : "None" } + }, + "directComponentInstances" : { + }, "transitiveImportSet" : [ { @@ -7708,26 +6745,13 @@ "instanceMap" : [ [ { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, { @@ -7738,56 +6762,30 @@ ], [ { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "39.3", + "pos" : "19.3", "includingLoc" : "None" } ], [ { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, { @@ -7798,35 +6796,69 @@ ], [ { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceTopology" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "Simple1" + }, + "unqualifiedName" : "Simple1" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "19.3", + "pos" : "35.3", + "includingLoc" : "None" + } + ], + [ + { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" + } + }, + { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", + "pos" : "39.3", + "includingLoc" : "None" + } + ], + [ + { + "InterfaceTopology" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "Simple2" + }, + "unqualifiedName" : "Simple2" + } + }, + { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", + "pos" : "55.3", "includingLoc" : "None" } ] ], + "ports" : [ + ], + "portMap" : { + + }, + "portInterface" : { + "portMap" : { + + }, + "specialPortMap" : { + + } + }, "patternMap" : { }, @@ -7840,27 +6872,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -7901,7 +6920,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -7910,27 +6930,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -7971,7 +6978,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -7985,27 +6993,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -8046,7 +7041,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -8055,27 +7051,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -8116,7 +7099,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -8130,27 +7114,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -8191,7 +7162,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -8200,27 +7172,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -8261,7 +7220,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -8275,27 +7235,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -8336,36 +7283,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", "pos" : "48.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -8406,7 +7341,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -8418,27 +7354,14 @@ "outputConnectionMap" : [ [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -8488,27 +7411,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -8549,7 +7459,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -8558,27 +7469,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -8619,7 +7517,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -8627,27 +7526,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -8697,27 +7583,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -8758,7 +7631,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -8767,27 +7641,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -8828,7 +7689,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -8836,27 +7698,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -8906,27 +7755,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -8967,7 +7803,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -8976,27 +7813,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -9037,7 +7861,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -9045,27 +7870,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -9115,27 +7927,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -9176,7 +7975,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -9185,27 +7985,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -9246,7 +8033,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -9256,27 +8044,14 @@ "inputConnectionMap" : [ [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -9326,27 +8101,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -9387,7 +8149,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -9396,27 +8159,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -9457,7 +8207,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -9465,27 +8216,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -9535,27 +8273,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -9596,7 +8321,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -9605,27 +8331,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -9666,7 +8379,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -9674,27 +8388,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -9744,27 +8445,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -9805,7 +8493,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -9814,27 +8503,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -9875,7 +8551,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -9883,27 +8560,14 @@ ], [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -9953,27 +8617,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -10014,7 +8665,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { @@ -10023,27 +8675,14 @@ "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -10084,7 +8723,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false } @@ -10097,31 +8737,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.5", + "pos" : "48.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -10162,36 +8789,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.16", + "pos" : "48.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -10232,7 +8847,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -10243,31 +8859,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.5", + "pos" : "28.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -10308,36 +8911,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.16", + "pos" : "28.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -10378,7 +8969,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -10389,31 +8981,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.5", + "pos" : "43.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -10454,36 +9033,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.16", + "pos" : "43.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -10524,7 +9091,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -10535,31 +9103,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.5", + "pos" : "23.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -10600,36 +9155,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.16", + "pos" : "23.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -10670,7 +9213,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -10683,31 +9227,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.5", + "pos" : "43.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -10748,36 +9279,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.16", + "pos" : "43.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -10818,7 +9337,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -10829,31 +9349,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.5", + "pos" : "23.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 25 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -10894,36 +9401,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.16", + "pos" : "23.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 29 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -10964,7 +9459,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -10975,31 +9471,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.5", + "pos" : "48.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -11040,36 +9523,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.16", + "pos" : "48.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -11110,7 +9581,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, @@ -11121,31 +9593,18 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.5", + "pos" : "28.5", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 17 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -11186,36 +9645,24 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.16", + "pos" : "28.16", "includingLoc" : "None" }, "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 21 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 13 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -11256,7 +9703,8 @@ } } }, - "portNumber" : "None" + "portNumber" : "None", + "topologyPort" : "None" }, "isUnmatched" : false }, diff --git a/compiler/tools/fpp-to-json/test/interfaces.ref.txt b/compiler/tools/fpp-to-json/test/interfaces.ref.txt index 639424bdb..ca0455c3f 100644 --- a/compiler/tools/fpp-to-json/test/interfaces.ref.txt +++ b/compiler/tools/fpp-to-json/test/interfaces.ref.txt @@ -1462,9 +1462,136 @@ "aNode" : { "astNodeId" : 169 }, - "portMap" : { - "cmdRegOut" : { - "Special" : { + "portInterface" : { + "portMap" : { + "cmdRegOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 7 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandReg" : { + + } + }, + "name" : "cmdRegOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 1, + "unqualifiedName" : "CmdReg" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + 123 + ] + } + }, + "cmdIn" : { + "Special" : { + "aNode" : { + "astNodeId" : 8 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandRecv" : { + + } + }, + "name" : "cmdIn", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "Cmd" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + 123 + ] + } + }, + "cmdResponseOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 11 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandResp" : { + + } + }, + "name" : "cmdResponseOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 4, + "unqualifiedName" : "CmdResponse" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + 123 + ] + } + }, + "general" : { + "General" : { + "aNode" : { + "astNodeId" : 21 + }, + "specifier" : { + "kind" : { + "AsyncInput" : { + + } + }, + "name" : "general", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 20 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "AsyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 6, + "unqualifiedName" : "General" + } + } + } + }, + "importNodeIds" : [ + 126 + ] + } + } + }, + "specialPortMap" : { + "command reg" : { "aNode" : { "astNodeId" : 7 }, @@ -1490,10 +1617,8 @@ "importNodeIds" : [ 123 ] - } - }, - "cmdIn" : { - "Special" : { + }, + "command recv" : { "aNode" : { "astNodeId" : 8 }, @@ -1519,10 +1644,8 @@ "importNodeIds" : [ 123 ] - } - }, - "cmdResponseOut" : { - "Special" : { + }, + "command resp" : { "aNode" : { "astNodeId" : 11 }, @@ -1549,127 +1672,6 @@ 123 ] } - }, - "general" : { - "General" : { - "aNode" : { - "astNodeId" : 21 - }, - "specifier" : { - "kind" : { - "AsyncInput" : { - - } - }, - "name" : "general", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 20 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "AsyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 6, - "unqualifiedName" : "General" - } - } - } - }, - "importNodeIds" : [ - 126 - ] - } - } - }, - "specialPortMap" : { - "command reg" : { - "aNode" : { - "astNodeId" : 7 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandReg" : { - - } - }, - "name" : "cmdRegOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 1, - "unqualifiedName" : "CmdReg" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - 123 - ] - }, - "command recv" : { - "aNode" : { - "astNodeId" : 8 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandRecv" : { - - } - }, - "name" : "cmdIn", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "Cmd" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - 123 - ] - }, - "command resp" : { - "aNode" : { - "astNodeId" : 11 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandResp" : { - - } - }, - "name" : "cmdResponseOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 4, - "unqualifiedName" : "CmdResponse" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - 123 - ] } }, "commandMap" : { diff --git a/compiler/tools/fpp-to-json/test/internalPorts.ref.txt b/compiler/tools/fpp-to-json/test/internalPorts.ref.txt index 385863b99..5eb390737 100644 --- a/compiler/tools/fpp-to-json/test/internalPorts.ref.txt +++ b/compiler/tools/fpp-to-json/test/internalPorts.ref.txt @@ -359,25 +359,27 @@ "aNode" : { "astNodeId" : 43 }, - "portMap" : { - "pInternal" : { - "Internal" : { - "aNode" : { - "astNodeId" : 42 - }, - "priority" : { - "Some" : 10 - }, - "queueFull" : { - "Drop" : { - + "portInterface" : { + "portMap" : { + "pInternal" : { + "Internal" : { + "aNode" : { + "astNodeId" : 42 + }, + "priority" : { + "Some" : 10 + }, + "queueFull" : { + "Drop" : { + + } } } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { diff --git a/compiler/tools/fpp-to-json/test/matchedPorts.ref.txt b/compiler/tools/fpp-to-json/test/matchedPorts.ref.txt index ebe59b5c0..cd048a198 100644 --- a/compiler/tools/fpp-to-json/test/matchedPorts.ref.txt +++ b/compiler/tools/fpp-to-json/test/matchedPorts.ref.txt @@ -404,92 +404,94 @@ "aNode" : { "astNodeId" : 21 }, - "portMap" : { - "pingOut" : { - "General" : { - "aNode" : { - "astNodeId" : 6 - }, - "specifier" : { - "kind" : { - "Output" : { - - } + "portInterface" : { + "portMap" : { + "pingOut" : { + "General" : { + "aNode" : { + "astNodeId" : 6 }, - "name" : "pingOut", - "size" : { - "Some" : { - "astNodeId" : 2 - } - }, - "port" : { - "Some" : { - "astNodeId" : 5 - } + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pingOut", + "size" : { + "Some" : { + "astNodeId" : 2 + } + }, + "port" : { + "Some" : { + "astNodeId" : 5 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 10, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 24, - "unqualifiedName" : "Ping" + "kind" : "Output", + "size" : 10, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 24, + "unqualifiedName" : "Ping" + } } } - } - }, - "importNodeIds" : [ - ] - } - }, - "pingIn" : { - "General" : { - "aNode" : { - "astNodeId" : 11 - }, - "specifier" : { - "kind" : { - "AsyncInput" : { - - } }, - "name" : "pingIn", - "size" : { - "Some" : { - "astNodeId" : 7 - } + "importNodeIds" : [ + ] + } + }, + "pingIn" : { + "General" : { + "aNode" : { + "astNodeId" : 11 }, - "port" : { - "Some" : { - "astNodeId" : 10 - } + "specifier" : { + "kind" : { + "AsyncInput" : { + + } + }, + "name" : "pingIn", + "size" : { + "Some" : { + "astNodeId" : 7 + } + }, + "port" : { + "Some" : { + "astNodeId" : 10 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "AsyncInput", - "size" : 10, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 24, - "unqualifiedName" : "Ping" + "kind" : "AsyncInput", + "size" : 10, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 24, + "unqualifiedName" : "Ping" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { diff --git a/compiler/tools/fpp-to-json/test/modules.ref.txt b/compiler/tools/fpp-to-json/test/modules.ref.txt index f830f1298..78b5a3a02 100644 --- a/compiler/tools/fpp-to-json/test/modules.ref.txt +++ b/compiler/tools/fpp-to-json/test/modules.ref.txt @@ -827,17 +827,7 @@ }, "56" : { "map" : { - "ComponentInstance" : { - "map" : { - "B" : { - "Module" : { - "nodeId" : 55, - "unqualifiedName" : "B" - } - } - } - }, - "Topology" : { + "StateMachine" : { "map" : { "B" : { "Module" : { @@ -847,7 +837,7 @@ } } }, - "Interface" : { + "PortInterfaceInstance" : { "map" : { "B" : { "Module" : { @@ -857,7 +847,7 @@ } } }, - "StateMachine" : { + "Value" : { "map" : { "B" : { "Module" : { @@ -867,7 +857,7 @@ } } }, - "Value" : { + "Port" : { "map" : { "B" : { "Module" : { @@ -877,7 +867,7 @@ } } }, - "Port" : { + "PortInterface" : { "map" : { "B" : { "Module" : { diff --git a/compiler/tools/fpp-to-json/test/parameters.ref.txt b/compiler/tools/fpp-to-json/test/parameters.ref.txt index f08b43055..90e9573a5 100644 --- a/compiler/tools/fpp-to-json/test/parameters.ref.txt +++ b/compiler/tools/fpp-to-json/test/parameters.ref.txt @@ -860,139 +860,273 @@ "aNode" : { "astNodeId" : 35 }, - "portMap" : { - "cmdIn" : { - "Special" : { + "portInterface" : { + "portMap" : { + "cmdIn" : { + "Special" : { + "aNode" : { + "astNodeId" : 3 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandRecv" : { + + } + }, + "name" : "cmdIn", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 38, + "unqualifiedName" : "Cmd" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "prmGetOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 6 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "ParamGet" : { + + } + }, + "name" : "prmGetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 36, + "unqualifiedName" : "PrmGet" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "cmdResponseOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 5 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandResp" : { + + } + }, + "name" : "cmdResponseOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 42, + "unqualifiedName" : "CmdResponse" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "prmSetOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 7 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "ParamSet" : { + + } + }, + "name" : "prmSetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 37, + "unqualifiedName" : "PrmSet" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "cmdRegOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandReg" : { + + } + }, + "name" : "cmdRegOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 39, + "unqualifiedName" : "CmdReg" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "param set" : { "aNode" : { - "astNodeId" : 3 + "astNodeId" : 7 }, "specifier" : { "inputKind" : "None", "kind" : { - "CommandRecv" : { + "ParamSet" : { } }, - "name" : "cmdIn", + "name" : "prmSetOut", "priority" : "None", "queueFull" : "None" }, "symbol" : { "Port" : { - "nodeId" : 38, - "unqualifiedName" : "Cmd" + "nodeId" : 37, + "unqualifiedName" : "PrmSet" } }, "priority" : "None", "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "prmGetOut" : { - "Special" : { + }, + "command recv" : { "aNode" : { - "astNodeId" : 6 + "astNodeId" : 3 }, "specifier" : { "inputKind" : "None", "kind" : { - "ParamGet" : { + "CommandRecv" : { } }, - "name" : "prmGetOut", + "name" : "cmdIn", "priority" : "None", "queueFull" : "None" }, "symbol" : { "Port" : { - "nodeId" : 36, - "unqualifiedName" : "PrmGet" + "nodeId" : 38, + "unqualifiedName" : "Cmd" } }, "priority" : "None", "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "cmdResponseOut" : { - "Special" : { + }, + "command reg" : { "aNode" : { - "astNodeId" : 5 + "astNodeId" : 4 }, "specifier" : { "inputKind" : "None", "kind" : { - "CommandResp" : { + "CommandReg" : { } }, - "name" : "cmdResponseOut", + "name" : "cmdRegOut", "priority" : "None", "queueFull" : "None" }, "symbol" : { "Port" : { - "nodeId" : 42, - "unqualifiedName" : "CmdResponse" + "nodeId" : 39, + "unqualifiedName" : "CmdReg" } }, "priority" : "None", "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "prmSetOut" : { - "Special" : { + }, + "command resp" : { "aNode" : { - "astNodeId" : 7 + "astNodeId" : 5 }, "specifier" : { "inputKind" : "None", "kind" : { - "ParamSet" : { + "CommandResp" : { } }, - "name" : "prmSetOut", + "name" : "cmdResponseOut", "priority" : "None", "queueFull" : "None" }, "symbol" : { "Port" : { - "nodeId" : 37, - "unqualifiedName" : "PrmSet" + "nodeId" : 42, + "unqualifiedName" : "CmdResponse" } }, "priority" : "None", "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "cmdRegOut" : { - "Special" : { + }, + "param get" : { "aNode" : { - "astNodeId" : 4 + "astNodeId" : 6 }, "specifier" : { "inputKind" : "None", "kind" : { - "CommandReg" : { + "ParamGet" : { } }, - "name" : "cmdRegOut", + "name" : "prmGetOut", "priority" : "None", "queueFull" : "None" }, "symbol" : { "Port" : { - "nodeId" : 39, - "unqualifiedName" : "CmdReg" + "nodeId" : 36, + "unqualifiedName" : "PrmGet" } }, "priority" : "None", @@ -1002,138 +1136,6 @@ } } }, - "specialPortMap" : { - "param set" : { - "aNode" : { - "astNodeId" : 7 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "ParamSet" : { - - } - }, - "name" : "prmSetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 37, - "unqualifiedName" : "PrmSet" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "command recv" : { - "aNode" : { - "astNodeId" : 3 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandRecv" : { - - } - }, - "name" : "cmdIn", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 38, - "unqualifiedName" : "Cmd" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "command reg" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandReg" : { - - } - }, - "name" : "cmdRegOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 39, - "unqualifiedName" : "CmdReg" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "command resp" : { - "aNode" : { - "astNodeId" : 5 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandResp" : { - - } - }, - "name" : "cmdResponseOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 42, - "unqualifiedName" : "CmdResponse" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "param get" : { - "aNode" : { - "astNodeId" : 6 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "ParamGet" : { - - } - }, - "name" : "prmGetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 36, - "unqualifiedName" : "PrmGet" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { "34" : { "Param" : { diff --git a/compiler/tools/fpp-to-json/test/passiveComponent.ref.txt b/compiler/tools/fpp-to-json/test/passiveComponent.ref.txt index eb64730ee..b8c900ac1 100644 --- a/compiler/tools/fpp-to-json/test/passiveComponent.ref.txt +++ b/compiler/tools/fpp-to-json/test/passiveComponent.ref.txt @@ -818,46 +818,104 @@ "aNode" : { "astNodeId" : 44 }, - "portMap" : { - "schedIn" : { - "General" : { - "aNode" : { - "astNodeId" : 33 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - + "portInterface" : { + "portMap" : { + "schedIn" : { + "General" : { + "aNode" : { + "astNodeId" : 33 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "schedIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 32 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 64, + "unqualifiedName" : "Sched" + } + } } }, - "name" : "schedIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 32 + "importNodeIds" : [ + ] + } + }, + "tlmOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 34 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "Telemetry" : { + + } + }, + "name" : "tlmOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 66, + "unqualifiedName" : "Tlm" } }, "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 64, - "unqualifiedName" : "Sched" + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "timeGetOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 35 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "TimeGet" : { + } + }, + "name" : "timeGetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 69, + "unqualifiedName" : "Time" } - } - }, - "importNodeIds" : [ - ] + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } } }, - "tlmOut" : { - "Special" : { + "specialPortMap" : { + "telemetry" : { "aNode" : { "astNodeId" : 34 }, @@ -882,10 +940,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "timeGetOut" : { - "Special" : { + }, + "time get" : { "aNode" : { "astNodeId" : 35 }, @@ -913,60 +969,6 @@ } } }, - "specialPortMap" : { - "telemetry" : { - "aNode" : { - "astNodeId" : 34 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "Telemetry" : { - - } - }, - "name" : "tlmOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 66, - "unqualifiedName" : "Tlm" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "time get" : { - "aNode" : { - "astNodeId" : 35 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "TimeGet" : { - - } - }, - "name" : "timeGetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 69, - "unqualifiedName" : "Time" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, @@ -1204,7 +1206,7 @@ }, "61" : { "map" : { - "ComponentInstance" : { + "PortInterfaceInstance" : { "map" : { "engineTemp" : { "ComponentInstance" : { diff --git a/compiler/tools/fpp-to-json/test/patternedConnections.ref.txt b/compiler/tools/fpp-to-json/test/patternedConnections.ref.txt index 9b3acaf21..842a0aa1d 100644 --- a/compiler/tools/fpp-to-json/test/patternedConnections.ref.txt +++ b/compiler/tools/fpp-to-json/test/patternedConnections.ref.txt @@ -1172,7 +1172,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1199,7 +1199,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1226,7 +1226,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1253,7 +1253,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1280,7 +1280,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1307,7 +1307,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1334,7 +1334,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -3585,84 +3585,86 @@ "aNode" : { "astNodeId" : 67 }, - "portMap" : { - "PingSend" : { - "General" : { - "aNode" : { - "astNodeId" : 54 - }, - "specifier" : { - "kind" : { - "Output" : { - - } + "portInterface" : { + "portMap" : { + "PingSend" : { + "General" : { + "aNode" : { + "astNodeId" : 54 }, - "name" : "PingSend", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 53 - } + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "PingSend", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 53 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 301, - "unqualifiedName" : "Ping" + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 301, + "unqualifiedName" : "Ping" + } } } - } - }, - "importNodeIds" : [ - ] - } - }, - "PingReturn" : { - "General" : { - "aNode" : { - "astNodeId" : 66 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } }, - "name" : "PingReturn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 65 - } + "importNodeIds" : [ + ] + } + }, + "PingReturn" : { + "General" : { + "aNode" : { + "astNodeId" : 66 }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 301, - "unqualifiedName" : "Ping" + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "PingReturn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 65 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 301, + "unqualifiedName" : "Ping" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -3703,47 +3705,49 @@ "aNode" : { "astNodeId" : 12 }, - "portMap" : { - "timeGetPort" : { - "General" : { - "aNode" : { - "astNodeId" : 11 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } + "portInterface" : { + "portMap" : { + "timeGetPort" : { + "General" : { + "aNode" : { + "astNodeId" : 11 }, - "name" : "timeGetPort", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 10 - } + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "timeGetPort", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 10 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 293, - "unqualifiedName" : "Time" + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 293, + "unqualifiedName" : "Time" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -3784,84 +3788,86 @@ "aNode" : { "astNodeId" : 84 }, - "portMap" : { - "paramGet" : { - "General" : { - "aNode" : { - "astNodeId" : 71 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } + "portInterface" : { + "portMap" : { + "paramGet" : { + "General" : { + "aNode" : { + "astNodeId" : 71 }, - "name" : "paramGet", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 70 - } + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "paramGet", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 70 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 291, - "unqualifiedName" : "PrmGet" + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 291, + "unqualifiedName" : "PrmGet" + } } } - } - }, - "importNodeIds" : [ - ] - } - }, - "paramSet" : { - "General" : { - "aNode" : { - "astNodeId" : 83 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } }, - "name" : "paramSet", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 82 - } + "importNodeIds" : [ + ] + } + }, + "paramSet" : { + "General" : { + "aNode" : { + "astNodeId" : 83 }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 292, - "unqualifiedName" : "PrmSet" + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "paramSet", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 82 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 292, + "unqualifiedName" : "PrmSet" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -3902,47 +3908,49 @@ "aNode" : { "astNodeId" : 110 }, - "portMap" : { - "textEventLog" : { - "General" : { - "aNode" : { - "astNodeId" : 109 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } + "portInterface" : { + "portMap" : { + "textEventLog" : { + "General" : { + "aNode" : { + "astNodeId" : 109 }, - "name" : "textEventLog", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 108 - } + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "textEventLog", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 108 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 290, - "unqualifiedName" : "LogText" + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 290, + "unqualifiedName" : "LogText" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -3983,47 +3991,49 @@ "aNode" : { "astNodeId" : 97 }, - "portMap" : { - "tlm" : { - "General" : { - "aNode" : { - "astNodeId" : 96 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } + "portInterface" : { + "portMap" : { + "tlm" : { + "General" : { + "aNode" : { + "astNodeId" : 96 }, - "name" : "tlm", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 95 - } + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "tlm", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 95 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 294, - "unqualifiedName" : "Tlm" + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 294, + "unqualifiedName" : "Tlm" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -4064,47 +4074,49 @@ "aNode" : { "astNodeId" : 50 }, - "portMap" : { - "eventLog" : { - "General" : { - "aNode" : { - "astNodeId" : 49 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } + "portInterface" : { + "portMap" : { + "eventLog" : { + "General" : { + "aNode" : { + "astNodeId" : 49 }, - "name" : "eventLog", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 48 - } + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "eventLog", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 48 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 289, - "unqualifiedName" : "Log" + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 289, + "unqualifiedName" : "Log" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -4145,158 +4157,160 @@ "aNode" : { "astNodeId" : 37 }, - "portMap" : { - "cmdIn" : { - "General" : { - "aNode" : { - "astNodeId" : 16 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } + "portInterface" : { + "portMap" : { + "cmdIn" : { + "General" : { + "aNode" : { + "astNodeId" : 16 }, - "name" : "cmdIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 15 - } + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "cmdIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 15 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 286, - "unqualifiedName" : "Cmd" + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 286, + "unqualifiedName" : "Cmd" + } } } - } - }, - "importNodeIds" : [ - ] - } - }, - "cmdRegOut" : { - "General" : { - "aNode" : { - "astNodeId" : 20 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } }, - "name" : "cmdRegOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 19 - } + "importNodeIds" : [ + ] + } + }, + "cmdRegOut" : { + "General" : { + "aNode" : { + "astNodeId" : 20 }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 287, - "unqualifiedName" : "CmdReg" + "specifier" : { + "kind" : { + "SyncInput" : { + } - } - } - }, - "importNodeIds" : [ - ] - } - }, - "cmdResponseOut" : { - "General" : { - "aNode" : { - "astNodeId" : 24 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } + }, + "name" : "cmdRegOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 19 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "name" : "cmdResponseOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 23 + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 287, + "unqualifiedName" : "CmdReg" + } + } } }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 288, - "unqualifiedName" : "CmdResponse" + "importNodeIds" : [ + ] + } + }, + "cmdResponseOut" : { + "General" : { + "aNode" : { + "astNodeId" : 24 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + } - } - } - }, - "importNodeIds" : [ - ] - } - }, - "cmdSend" : { - "General" : { - "aNode" : { - "astNodeId" : 36 - }, - "specifier" : { - "kind" : { - "Output" : { - - } + }, + "name" : "cmdResponseOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 23 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "name" : "cmdSend", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 35 + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 288, + "unqualifiedName" : "CmdResponse" + } + } } }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 286, - "unqualifiedName" : "Cmd" + "importNodeIds" : [ + ] + } + }, + "cmdSend" : { + "General" : { + "aNode" : { + "astNodeId" : 36 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "cmdSend", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 35 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 286, + "unqualifiedName" : "Cmd" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -4534,94 +4548,97 @@ "aNode" : { "astNodeId" : 285 }, - "directImportMap" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "T" + }, + "directTopologies" : { + }, + "directComponentInstances" : { + "134" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", + "pos" : "48.5", + "includingLoc" : "None" + }, + "138" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", + "pos" : "49.5", + "includingLoc" : "None" + }, + "126" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", + "pos" : "46.5", + "includingLoc" : "None" + }, + "122" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", + "pos" : "45.5", + "includingLoc" : "None" + }, + "118" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", + "pos" : "44.5", + "includingLoc" : "None" + }, + "130" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", + "pos" : "47.5", + "includingLoc" : "None" + }, + "114" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", + "pos" : "43.5", + "includingLoc" : "None" + } }, "transitiveImportSet" : [ ], "instanceMap" : [ [ { - "aNode" : { - "astNodeId" : 130 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c5" - }, - "component" : { - "astNodeId" : 84 - }, - "baseId" : 1280, - "maxId" : 1279, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", - "pos" : "47.5", + "pos" : "44.5", "includingLoc" : "None" } ], [ { - "aNode" : { - "astNodeId" : 138 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c7" - }, - "component" : { - "astNodeId" : 110 - }, - "baseId" : 1792, - "maxId" : 1791, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", - "pos" : "49.5", + "pos" : "45.5", "includingLoc" : "None" } ], [ { - "aNode" : { - "astNodeId" : 134 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c6" - }, - "component" : { - "astNodeId" : 97 - }, - "baseId" : 1536, - "maxId" : 1535, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c6" + }, + "unqualifiedName" : "c6" } }, { @@ -4632,125 +4649,86 @@ ], [ { - "aNode" : { - "astNodeId" : 126 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 67 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", - "pos" : "46.5", + "pos" : "43.5", "includingLoc" : "None" } ], [ { - "aNode" : { - "astNodeId" : 114 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 12 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", - "pos" : "43.5", + "pos" : "46.5", "includingLoc" : "None" } ], [ { - "aNode" : { - "astNodeId" : 118 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 37 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c5" + }, + "unqualifiedName" : "c5" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", - "pos" : "44.5", + "pos" : "47.5", "includingLoc" : "None" } ], [ { - "aNode" : { - "astNodeId" : 122 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 50 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c7" + }, + "unqualifiedName" : "c7" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", - "pos" : "45.5", + "pos" : "49.5", "includingLoc" : "None" } ] ], + "ports" : [ + ], + "portMap" : { + + }, + "portInterface" : { + "portMap" : { + + }, + "specialPortMap" : { + + } + }, "patternMap" : { "Event" : { "aNode" : { @@ -5112,33 +5090,20 @@ ], "unconnectedPortSet" : [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 118 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 37 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 24 + "astNodeId" : 16 }, "specifier" : { "kind" : { @@ -5146,11 +5111,11 @@ } }, - "name" : "cmdResponseOut", + "name" : "cmdIn", "size" : "None", "port" : { "Some" : { - "astNodeId" : 23 + "astNodeId" : 15 } }, "priority" : "None", @@ -5162,8 +5127,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 288, - "unqualifiedName" : "CmdResponse" + "nodeId" : 286, + "unqualifiedName" : "Cmd" } } } @@ -5174,33 +5139,20 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 118 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 37 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 16 + "astNodeId" : 24 }, "specifier" : { "kind" : { @@ -5208,11 +5160,11 @@ } }, - "name" : "cmdIn", + "name" : "cmdResponseOut", "size" : "None", "port" : { "Some" : { - "astNodeId" : 15 + "astNodeId" : 23 } }, "priority" : "None", @@ -5224,8 +5176,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 286, - "unqualifiedName" : "Cmd" + "nodeId" : 288, + "unqualifiedName" : "CmdResponse" } } } @@ -5236,27 +5188,14 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 118 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 37 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -5298,33 +5237,20 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 130 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c5" - }, - "component" : { - "astNodeId" : 84 - }, - "baseId" : 1280, - "maxId" : 1279, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c3" + }, + "unqualifiedName" : "c3" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 71 + "astNodeId" : 49 }, "specifier" : { "kind" : { @@ -5332,11 +5258,11 @@ } }, - "name" : "paramGet", + "name" : "eventLog", "size" : "None", "port" : { "Some" : { - "astNodeId" : 70 + "astNodeId" : 48 } }, "priority" : "None", @@ -5348,8 +5274,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 291, - "unqualifiedName" : "PrmGet" + "nodeId" : 289, + "unqualifiedName" : "Log" } } } @@ -5360,58 +5286,45 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 118 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 37 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c6" + }, + "unqualifiedName" : "c6" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 36 + "astNodeId" : 96 }, "specifier" : { "kind" : { - "Output" : { + "SyncInput" : { } }, - "name" : "cmdSend", + "name" : "tlm", "size" : "None", "port" : { "Some" : { - "astNodeId" : 35 + "astNodeId" : 95 } }, "priority" : "None", "queueFull" : "None" }, - "kind" : "Output", + "kind" : "SyncInput", "size" : 1, "ty" : { "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 286, - "unqualifiedName" : "Cmd" + "nodeId" : 294, + "unqualifiedName" : "Tlm" } } } @@ -5422,27 +5335,14 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 114 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 12 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -5484,33 +5384,20 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 138 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c7" - }, - "component" : { - "astNodeId" : 110 - }, - "baseId" : 1792, - "maxId" : 1791, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c5" + }, + "unqualifiedName" : "c5" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 109 + "astNodeId" : 71 }, "specifier" : { "kind" : { @@ -5518,11 +5405,11 @@ } }, - "name" : "textEventLog", + "name" : "paramGet", "size" : "None", "port" : { "Some" : { - "astNodeId" : 108 + "astNodeId" : 70 } }, "priority" : "None", @@ -5534,8 +5421,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 290, - "unqualifiedName" : "LogText" + "nodeId" : 291, + "unqualifiedName" : "PrmGet" } } } @@ -5546,58 +5433,45 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 122 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c3" - }, - "component" : { - "astNodeId" : 50 - }, - "baseId" : 768, - "maxId" : 767, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 49 + "astNodeId" : 54 }, "specifier" : { "kind" : { - "SyncInput" : { + "Output" : { } }, - "name" : "eventLog", + "name" : "PingSend", "size" : "None", "port" : { "Some" : { - "astNodeId" : 48 + "astNodeId" : 53 } }, "priority" : "None", "queueFull" : "None" }, - "kind" : "SyncInput", + "kind" : "Output", "size" : 1, "ty" : { "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 289, - "unqualifiedName" : "Log" + "nodeId" : 301, + "unqualifiedName" : "Ping" } } } @@ -5608,33 +5482,20 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 134 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c6" - }, - "component" : { - "astNodeId" : 97 - }, - "baseId" : 1536, - "maxId" : 1535, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c7" + }, + "unqualifiedName" : "c7" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 96 + "astNodeId" : 109 }, "specifier" : { "kind" : { @@ -5642,11 +5503,11 @@ } }, - "name" : "tlm", + "name" : "textEventLog", "size" : "None", "port" : { "Some" : { - "astNodeId" : 95 + "astNodeId" : 108 } }, "priority" : "None", @@ -5658,8 +5519,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 294, - "unqualifiedName" : "Tlm" + "nodeId" : 290, + "unqualifiedName" : "LogText" } } } @@ -5670,33 +5531,20 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 126 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 67 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 54 + "astNodeId" : 36 }, "specifier" : { "kind" : { @@ -5704,11 +5552,11 @@ } }, - "name" : "PingSend", + "name" : "cmdSend", "size" : "None", "port" : { "Some" : { - "astNodeId" : 53 + "astNodeId" : 35 } }, "priority" : "None", @@ -5720,8 +5568,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 301, - "unqualifiedName" : "Ping" + "nodeId" : 286, + "unqualifiedName" : "Cmd" } } } @@ -5732,33 +5580,20 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 126 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c4" - }, - "component" : { - "astNodeId" : 67 - }, - "baseId" : 1024, - "maxId" : 1023, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c5" + }, + "unqualifiedName" : "c5" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 66 + "astNodeId" : 83 }, "specifier" : { "kind" : { @@ -5766,11 +5601,11 @@ } }, - "name" : "PingReturn", + "name" : "paramSet", "size" : "None", "port" : { "Some" : { - "astNodeId" : 65 + "astNodeId" : 82 } }, "priority" : "None", @@ -5782,8 +5617,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 301, - "unqualifiedName" : "Ping" + "nodeId" : 292, + "unqualifiedName" : "PrmSet" } } } @@ -5794,33 +5629,20 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 130 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c5" - }, - "component" : { - "astNodeId" : 84 - }, - "baseId" : 1280, - "maxId" : 1279, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c4" + }, + "unqualifiedName" : "c4" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 83 + "astNodeId" : 66 }, "specifier" : { "kind" : { @@ -5828,11 +5650,11 @@ } }, - "name" : "paramSet", + "name" : "PingReturn", "size" : "None", "port" : { "Some" : { - "astNodeId" : 82 + "astNodeId" : 65 } }, "priority" : "None", @@ -5844,8 +5666,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 292, - "unqualifiedName" : "PrmSet" + "nodeId" : 301, + "unqualifiedName" : "Ping" } } } diff --git a/compiler/tools/fpp-to-json/test/ports.ref.txt b/compiler/tools/fpp-to-json/test/ports.ref.txt index 26b5ebe0f..a77e42322 100644 --- a/compiler/tools/fpp-to-json/test/ports.ref.txt +++ b/compiler/tools/fpp-to-json/test/ports.ref.txt @@ -804,7 +804,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1487,9 +1487,51 @@ "aNode" : { "astNodeId" : 81 }, - "portMap" : { - "productRecvIn" : { - "Special" : { + "portInterface" : { + "portMap" : { + "productRecvIn" : { + "Special" : { + "aNode" : { + "astNodeId" : 80 + }, + "specifier" : { + "inputKind" : { + "Some" : { + "Async" : { + + } + } + }, + "kind" : { + "ProductRecv" : { + + } + }, + "name" : "productRecvIn", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 67, + "unqualifiedName" : "DpResponse" + } + }, + "priority" : "None", + "queueFull" : { + "Some" : { + "Assert" : { + + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "product recv" : { "aNode" : { "astNodeId" : 80 }, @@ -1529,46 +1571,6 @@ } } }, - "specialPortMap" : { - "product recv" : { - "aNode" : { - "astNodeId" : 80 - }, - "specifier" : { - "inputKind" : { - "Some" : { - "Async" : { - - } - } - }, - "kind" : { - "ProductRecv" : { - - } - }, - "name" : "productRecvIn", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 67, - "unqualifiedName" : "DpResponse" - } - }, - "priority" : "None", - "queueFull" : { - "Some" : { - "Assert" : { - - } - } - }, - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, @@ -1719,16 +1721,6 @@ }, "82" : { "map" : { - "Topology" : { - "map" : { - "T" : { - "Topology" : { - "nodeId" : 118, - "unqualifiedName" : "T" - } - } - } - }, "StateMachine" : { "map" : { "Q" : { @@ -1739,6 +1731,16 @@ } } }, + "PortInterfaceInstance" : { + "map" : { + "T" : { + "Topology" : { + "nodeId" : 118, + "unqualifiedName" : "T" + } + } + } + }, "Value" : { "map" : { "Q" : { @@ -1792,36 +1794,34 @@ "aNode" : { "astNodeId" : 118 }, - "directImportMap" : { + "qualifiedName" : { + "qualifier" : [ + "M" + ], + "base" : "T" + }, + "directTopologies" : { + }, + "directComponentInstances" : { + "88" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/ports.fpp", + "pos" : "39.9", + "includingLoc" : "None" + } }, "transitiveImportSet" : [ ], "instanceMap" : [ [ { - "aNode" : { - "astNodeId" : 88 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "i" - }, - "component" : { - "astNodeId" : 81 - }, - "baseId" : 8448, - "maxId" : 8447, - "file" : "None", - "queueSize" : { - "Some" : 10 - }, - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "i" + }, + "unqualifiedName" : "i" } }, { @@ -1831,6 +1831,19 @@ } ] ], + "ports" : [ + ], + "portMap" : { + + }, + "portInterface" : { + "portMap" : { + + }, + "specialPortMap" : { + + } + }, "patternMap" : { }, @@ -1850,29 +1863,14 @@ ], "unconnectedPortSet" : [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 88 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "i" - }, - "component" : { - "astNodeId" : 81 - }, - "baseId" : 8448, - "maxId" : 8447, - "file" : "None", - "queueSize" : { - "Some" : 10 - }, - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "i" + }, + "unqualifiedName" : "i" } }, "portInstance" : { diff --git a/compiler/tools/fpp-to-json/test/queuedComponents.ref.txt b/compiler/tools/fpp-to-json/test/queuedComponents.ref.txt index 01e6fb7e4..0c2af95b0 100644 --- a/compiler/tools/fpp-to-json/test/queuedComponents.ref.txt +++ b/compiler/tools/fpp-to-json/test/queuedComponents.ref.txt @@ -1022,83 +1022,141 @@ "aNode" : { "astNodeId" : 60 }, - "portMap" : { - "schedIn" : { - "General" : { - "aNode" : { - "astNodeId" : 46 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } + "portInterface" : { + "portMap" : { + "schedIn" : { + "General" : { + "aNode" : { + "astNodeId" : 46 }, - "name" : "schedIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 45 - } + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "schedIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 45 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 83, - "unqualifiedName" : "Sched" + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 83, + "unqualifiedName" : "Sched" + } } } - } - }, - "importNodeIds" : [ - ] - } - }, - "calibrationIn" : { - "General" : { - "aNode" : { - "astNodeId" : 49 - }, - "specifier" : { - "kind" : { - "AsyncInput" : { - + }, + "importNodeIds" : [ + ] + } + }, + "calibrationIn" : { + "General" : { + "aNode" : { + "astNodeId" : 49 + }, + "specifier" : { + "kind" : { + "AsyncInput" : { + + } + }, + "name" : "calibrationIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 48 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "AsyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 6, + "unqualifiedName" : "Calibration" + } + } } }, - "name" : "calibrationIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 48 + "importNodeIds" : [ + ] + } + }, + "tlmOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 50 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "Telemetry" : { + + } + }, + "name" : "tlmOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 85, + "unqualifiedName" : "Tlm" } }, "priority" : "None", - "queueFull" : "None" - }, - "kind" : "AsyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 6, - "unqualifiedName" : "Calibration" + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "timeGetOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 51 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "TimeGet" : { + } + }, + "name" : "timeGetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 88, + "unqualifiedName" : "Time" } - } - }, - "importNodeIds" : [ - ] + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } } }, - "tlmOut" : { - "Special" : { + "specialPortMap" : { + "telemetry" : { "aNode" : { "astNodeId" : 50 }, @@ -1123,10 +1181,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "timeGetOut" : { - "Special" : { + }, + "time get" : { "aNode" : { "astNodeId" : 51 }, @@ -1154,60 +1210,6 @@ } } }, - "specialPortMap" : { - "telemetry" : { - "aNode" : { - "astNodeId" : 50 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "Telemetry" : { - - } - }, - "name" : "tlmOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 85, - "unqualifiedName" : "Tlm" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "time get" : { - "aNode" : { - "astNodeId" : 51 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "TimeGet" : { - - } - }, - "name" : "timeGetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 88, - "unqualifiedName" : "Time" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, @@ -1490,7 +1492,7 @@ }, "80" : { "map" : { - "ComponentInstance" : { + "PortInterfaceInstance" : { "map" : { "engineTemp" : { "ComponentInstance" : { diff --git a/compiler/tools/fpp-to-json/test/simpleComponents.ref.txt b/compiler/tools/fpp-to-json/test/simpleComponents.ref.txt index 8f9132450..eb75e1987 100644 --- a/compiler/tools/fpp-to-json/test/simpleComponents.ref.txt +++ b/compiler/tools/fpp-to-json/test/simpleComponents.ref.txt @@ -1033,121 +1033,123 @@ "aNode" : { "astNodeId" : 22 }, - "portMap" : { - "f32ValueIn1" : { - "General" : { - "aNode" : { - "astNodeId" : 9 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } + "portInterface" : { + "portMap" : { + "f32ValueIn1" : { + "General" : { + "aNode" : { + "astNodeId" : 9 }, - "name" : "f32ValueIn1", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 8 - } + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "f32ValueIn1", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 8 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 6, - "unqualifiedName" : "F32Value" + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 6, + "unqualifiedName" : "F32Value" + } } } - } - }, - "importNodeIds" : [ - ] - } - }, - "f32ValueIn2" : { - "General" : { - "aNode" : { - "astNodeId" : 12 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } }, - "name" : "f32ValueIn2", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 11 - } + "importNodeIds" : [ + ] + } + }, + "f32ValueIn2" : { + "General" : { + "aNode" : { + "astNodeId" : 12 }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 6, - "unqualifiedName" : "F32Value" + "specifier" : { + "kind" : { + "SyncInput" : { + } - } - } - }, - "importNodeIds" : [ - ] - } - }, - "f32ValueOut" : { - "General" : { - "aNode" : { - "astNodeId" : 21 - }, - "specifier" : { - "kind" : { - "Output" : { - - } + }, + "name" : "f32ValueIn2", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 11 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "name" : "f32ValueOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 20 + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 6, + "unqualifiedName" : "F32Value" + } + } } }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 6, - "unqualifiedName" : "F32Value" + "importNodeIds" : [ + ] + } + }, + "f32ValueOut" : { + "General" : { + "aNode" : { + "astNodeId" : 21 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "f32ValueOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 20 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 6, + "unqualifiedName" : "F32Value" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -1188,121 +1190,123 @@ "aNode" : { "astNodeId" : 38 }, - "portMap" : { - "f32ValueIn1" : { - "General" : { - "aNode" : { - "astNodeId" : 25 - }, - "specifier" : { - "kind" : { - "AsyncInput" : { - - } + "portInterface" : { + "portMap" : { + "f32ValueIn1" : { + "General" : { + "aNode" : { + "astNodeId" : 25 }, - "name" : "f32ValueIn1", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 24 - } + "specifier" : { + "kind" : { + "AsyncInput" : { + + } + }, + "name" : "f32ValueIn1", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 24 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "AsyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 6, - "unqualifiedName" : "F32Value" + "kind" : "AsyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 6, + "unqualifiedName" : "F32Value" + } } } - } - }, - "importNodeIds" : [ - ] - } - }, - "f32ValueIn2" : { - "General" : { - "aNode" : { - "astNodeId" : 28 - }, - "specifier" : { - "kind" : { - "AsyncInput" : { - - } }, - "name" : "f32ValueIn2", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 27 - } + "importNodeIds" : [ + ] + } + }, + "f32ValueIn2" : { + "General" : { + "aNode" : { + "astNodeId" : 28 }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "AsyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 6, - "unqualifiedName" : "F32Value" + "specifier" : { + "kind" : { + "AsyncInput" : { + } - } - } - }, - "importNodeIds" : [ - ] - } - }, - "f32ValueOut" : { - "General" : { - "aNode" : { - "astNodeId" : 37 - }, - "specifier" : { - "kind" : { - "Output" : { - - } + }, + "name" : "f32ValueIn2", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 27 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "name" : "f32ValueOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 36 + "kind" : "AsyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 6, + "unqualifiedName" : "F32Value" + } + } } }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 6, - "unqualifiedName" : "F32Value" + "importNodeIds" : [ + ] + } + }, + "f32ValueOut" : { + "General" : { + "aNode" : { + "astNodeId" : 37 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "f32ValueOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 36 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 6, + "unqualifiedName" : "F32Value" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -1343,137 +1347,139 @@ "aNode" : { "astNodeId" : 58 }, - "portMap" : { - "f32ValueIn1" : { - "General" : { - "aNode" : { - "astNodeId" : 43 - }, - "specifier" : { - "kind" : { - "AsyncInput" : { - - } - }, - "name" : "f32ValueIn1", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 40 - } + "portInterface" : { + "portMap" : { + "f32ValueIn1" : { + "General" : { + "aNode" : { + "astNodeId" : 43 }, - "priority" : { - "Some" : { - "astNodeId" : 41 + "specifier" : { + "kind" : { + "AsyncInput" : { + + } + }, + "name" : "f32ValueIn1", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 40 + } + }, + "priority" : { + "Some" : { + "astNodeId" : 41 + } + }, + "queueFull" : { + "Some" : { + "astNodeId" : 42 + } } }, - "queueFull" : { - "Some" : { - "astNodeId" : 42 - } - } - }, - "kind" : "AsyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 6, - "unqualifiedName" : "F32Value" + "kind" : "AsyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 6, + "unqualifiedName" : "F32Value" + } } } - } - }, - "importNodeIds" : [ - ] - } - }, - "f32ValueIn2" : { - "General" : { - "aNode" : { - "astNodeId" : 48 - }, - "specifier" : { - "kind" : { - "AsyncInput" : { - - } }, - "name" : "f32ValueIn2", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 45 - } + "importNodeIds" : [ + ] + } + }, + "f32ValueIn2" : { + "General" : { + "aNode" : { + "astNodeId" : 48 }, - "priority" : { - "Some" : { - "astNodeId" : 46 + "specifier" : { + "kind" : { + "AsyncInput" : { + + } + }, + "name" : "f32ValueIn2", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 45 + } + }, + "priority" : { + "Some" : { + "astNodeId" : 46 + } + }, + "queueFull" : { + "Some" : { + "astNodeId" : 47 + } } }, - "queueFull" : { - "Some" : { - "astNodeId" : 47 - } - } - }, - "kind" : "AsyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 6, - "unqualifiedName" : "F32Value" + "kind" : "AsyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 6, + "unqualifiedName" : "F32Value" + } } } - } - }, - "importNodeIds" : [ - ] - } - }, - "f32ValueOut" : { - "General" : { - "aNode" : { - "astNodeId" : 57 - }, - "specifier" : { - "kind" : { - "Output" : { - - } }, - "name" : "f32ValueOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 56 - } + "importNodeIds" : [ + ] + } + }, + "f32ValueOut" : { + "General" : { + "aNode" : { + "astNodeId" : 57 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "f32ValueOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 56 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 6, - "unqualifiedName" : "F32Value" + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 6, + "unqualifiedName" : "F32Value" + } } } - } - }, - "importNodeIds" : [ - ] + }, + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { @@ -1514,70 +1520,72 @@ "aNode" : { "astNodeId" : 68 }, - "portMap" : { - "serialIn" : { - "General" : { - "aNode" : { - "astNodeId" : 61 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } + "portInterface" : { + "portMap" : { + "serialIn" : { + "General" : { + "aNode" : { + "astNodeId" : 61 }, - "name" : "serialIn", - "size" : "None", - "port" : "None", - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "Serial" : { - - } - }, - "importNodeIds" : [ - ] - } - }, - "serialOut" : { - "General" : { - "aNode" : { - "astNodeId" : 67 - }, - "specifier" : { - "kind" : { - "Output" : { + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "serialIn", + "size" : "None", + "port" : "None", + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "Serial" : { } }, - "name" : "serialOut", - "size" : { - "Some" : { - "astNodeId" : 66 + "importNodeIds" : [ + ] + } + }, + "serialOut" : { + "General" : { + "aNode" : { + "astNodeId" : 67 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "serialOut", + "size" : { + "Some" : { + "astNodeId" : 66 + } + }, + "port" : "None", + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 10, + "ty" : { + "Serial" : { + } }, - "port" : "None", - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 10, - "ty" : { - "Serial" : { - - } - }, - "importNodeIds" : [ - ] + "importNodeIds" : [ + ] + } } + }, + "specialPortMap" : { + } - }, - "specialPortMap" : { - }, "commandMap" : { diff --git a/compiler/tools/fpp-to-json/test/simpleTopology.fpp b/compiler/tools/fpp-to-json/test/simpleTopology.fpp index 25b9a06c1..8d5d255f6 100644 --- a/compiler/tools/fpp-to-json/test/simpleTopology.fpp +++ b/compiler/tools/fpp-to-json/test/simpleTopology.fpp @@ -11,7 +11,7 @@ instance c1: C base id 0x100 instance c2: C base id 0x200 @ A simple topology -topology Simple implements I { +topology Simple { @ This specifier says that instance c1 is part of the topology instance c1 @@ -28,6 +28,4 @@ topology Simple implements I { c2.pOut -> c1.pIn } - port a = c1.a - } diff --git a/compiler/tools/fpp-to-json/test/simpleTopology.ref.txt b/compiler/tools/fpp-to-json/test/simpleTopology.ref.txt index c93455d55..81ec3eb79 100644 --- a/compiler/tools/fpp-to-json/test/simpleTopology.ref.txt +++ b/compiler/tools/fpp-to-json/test/simpleTopology.ref.txt @@ -1,3 +1,8 @@ +fpp-to-json +[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp:31.15 + port a = c1.a + ^ +error: a is not a port instance of interface c1 [ { "members" : [ @@ -255,7 +260,7 @@ "This specifier says that instance c1 is part of the topology" ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -283,7 +288,7 @@ "This specifier says that instance c2 is part of the topology" ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -323,7 +328,7 @@ "fromPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -347,7 +352,7 @@ "toPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -397,7 +402,7 @@ "fromPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -421,7 +426,7 @@ "toPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -466,30 +471,28 @@ "underlyingPort" : { "AstNode" : { "data" : { - "Qualified" : { - "qualifier" : { - "AstNode" : { - "data" : { - "Unqualified" : { - "name" : "c1" - } - }, - "id" : 57 - } - }, - "name" : { - "AstNode" : { - "data" : "a", - "id" : 58 - } + "interfaceInstance" : { + "AstNode" : { + "data" : { + "Unqualified" : { + "name" : "c1" + } + }, + "id" : 61 + } + }, + "portName" : { + "AstNode" : { + "data" : "a", + "id" : 60 } } }, - "id" : 59 + "id" : 62 } } }, - "id" : 60 + "id" : 63 } } } @@ -511,7 +514,7 @@ } ] }, - "id" : 61 + "id" : 64 } } } @@ -785,27 +788,27 @@ }, "52" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.3", + "pos" : "31.12", "includingLoc" : "None" }, "53" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.12", + "pos" : "31.3", "includingLoc" : "None" }, "54" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.15", + "pos" : "31.12", "includingLoc" : "None" }, "55" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.12", + "pos" : "31.15", "includingLoc" : "None" }, "56" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.3", + "pos" : "31.12", "includingLoc" : "None" }, "57" : { @@ -815,7 +818,7 @@ }, "58" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.15", + "pos" : "31.3", "includingLoc" : "None" }, "59" : { @@ -825,2383 +828,27 @@ }, "60" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.3", + "pos" : "31.15", "includingLoc" : "None" }, "61" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "31.12", + "includingLoc" : "None" + }, + "62" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "31.12", + "includingLoc" : "None" + }, + "63" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "31.3", + "includingLoc" : "None" + }, + "64" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", "pos" : "14.1", "includingLoc" : "None" } } -{ - "componentInstanceMap" : { - "18" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "22" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - } - }, - "componentMap" : { - "14" : { - "aNode" : { - "astNodeId" : 14 - }, - "portMap" : { - "pIn" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - }, - "pOut" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "specialPortMap" : { - - }, - "commandMap" : { - - }, - "defaultOpcode" : 0, - "tlmChannelMap" : { - - }, - "tlmChannelNameMap" : { - - }, - "defaultTlmChannelId" : 0, - "eventMap" : { - - }, - "defaultEventId" : 0, - "paramMap" : { - - }, - "specPortMatchingList" : [ - ], - "stateMachineInstanceMap" : { - - }, - "portMatchingList" : [ - ], - "defaultParamId" : 0, - "containerMap" : { - - }, - "defaultContainerId" : 0, - "recordMap" : { - - }, - "defaultRecordId" : 0 - } - }, - "includedFileSet" : [ - ], - "inputFileSet" : [ - "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp" - ], - "locationSpecifierMap" : [ - ], - "parentSymbolMap" : { - - }, - "symbolScopeMap" : { - "14" : { - "map" : { - - } - } - }, - "topologyMap" : { - "61" : { - "aNode" : { - "astNodeId" : 61 - }, - "directImportMap" : { - - }, - "transitiveImportSet" : [ - ], - "instanceMap" : [ - [ - { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "17.3", - "includingLoc" : "None" - } - ], - [ - { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "19.3", - "includingLoc" : "None" - } - ] - ], - "patternMap" : { - - }, - "connectionMap" : { - "C1" : [ - { - "from" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.5", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "to" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "isUnmatched" : false - } - ], - "C2" : [ - { - "from" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.5", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "to" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "isUnmatched" : false - } - ] - }, - "localConnectionMap" : { - "C1" : [ - { - "from" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.5", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "to" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "isUnmatched" : false - } - ], - "C2" : [ - { - "from" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.5", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "to" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "isUnmatched" : false - } - ] - }, - "outputConnectionMap" : [ - [ - { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - [ - { - "from" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.5", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "to" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "isUnmatched" : false - } - ] - ], - [ - { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - [ - { - "from" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.5", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "to" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "isUnmatched" : false - } - ] - ] - ], - "inputConnectionMap" : [ - [ - { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - [ - { - "from" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.5", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "to" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "isUnmatched" : false - } - ] - ], - [ - { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - [ - { - "from" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.5", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "to" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "isUnmatched" : false - } - ] - ] - ], - "fromPortNumberMap" : [ - [ - { - "from" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.5", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "to" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "isUnmatched" : false - }, - 0 - ], - [ - { - "from" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.5", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "to" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "isUnmatched" : false - }, - 0 - ] - ], - "toPortNumberMap" : [ - [ - { - "from" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.5", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "to" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "isUnmatched" : false - }, - 0 - ], - [ - { - "from" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.5", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 18 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 256, - "maxId" : 255, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "kind" : { - "Output" : { - - } - }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 12 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "to" : { - "loc" : { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.16", - "includingLoc" : "None" - }, - "port" : { - "componentInstance" : { - "aNode" : { - "astNodeId" : 22 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 14 - }, - "baseId" : 512, - "maxId" : 511, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "General" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } - }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 3 - } - }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - } - } - }, - "importNodeIds" : [ - ] - } - } - }, - "portNumber" : "None" - }, - "isUnmatched" : false - }, - 0 - ] - ], - "unconnectedPortSet" : [ - ] - } - }, - "typeMap" : { - "17" : { - "Int" : { - "Integer" : { - - } - } - }, - "21" : { - "Int" : { - "Integer" : { - - } - } - } - }, - "useDefMap" : { - "12" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - }, - "33" : { - "ComponentInstance" : { - "nodeId" : 18, - "unqualifiedName" : "c1" - } - }, - "46" : { - "ComponentInstance" : { - "nodeId" : 18, - "unqualifiedName" : "c1" - } - }, - "16" : { - "Component" : { - "nodeId" : 14, - "unqualifiedName" : "C" - } - }, - "42" : { - "ComponentInstance" : { - "nodeId" : 22, - "unqualifiedName" : "c2" - } - }, - "20" : { - "Component" : { - "nodeId" : 14, - "unqualifiedName" : "C" - } - }, - "29" : { - "ComponentInstance" : { - "nodeId" : 22, - "unqualifiedName" : "c2" - } - }, - "3" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "P" - } - }, - "26" : { - "ComponentInstance" : { - "nodeId" : 18, - "unqualifiedName" : "c1" - } - }, - "37" : { - "ComponentInstance" : { - "nodeId" : 22, - "unqualifiedName" : "c2" - } - } - }, - "valueMap" : { - "17" : { - "Integer" : { - "value" : 256 - } - }, - "21" : { - "Integer" : { - "value" : 512 - } - } - }, - "stateMachineMap" : { - - } -} diff --git a/compiler/tools/fpp-to-json/test/specialPorts.ref.txt b/compiler/tools/fpp-to-json/test/specialPorts.ref.txt index 95d69efd3..ece8e93e5 100644 --- a/compiler/tools/fpp-to-json/test/specialPorts.ref.txt +++ b/compiler/tools/fpp-to-json/test/specialPorts.ref.txt @@ -795,9 +795,95 @@ "aNode" : { "astNodeId" : 5 }, - "portMap" : { - "cmdIn" : { - "Special" : { + "portInterface" : { + "portMap" : { + "cmdIn" : { + "Special" : { + "aNode" : { + "astNodeId" : 0 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandRecv" : { + + } + }, + "name" : "cmdIn", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 24, + "unqualifiedName" : "Cmd" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "cmdRegOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 1 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandReg" : { + + } + }, + "name" : "cmdRegOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 25, + "unqualifiedName" : "CmdReg" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "cmdResponseOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "CommandResp" : { + + } + }, + "name" : "cmdResponseOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 26, + "unqualifiedName" : "CmdResponse" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "command recv" : { "aNode" : { "astNodeId" : 0 }, @@ -822,10 +908,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "cmdRegOut" : { - "Special" : { + }, + "command reg" : { "aNode" : { "astNodeId" : 1 }, @@ -850,10 +934,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "cmdResponseOut" : { - "Special" : { + }, + "command resp" : { "aNode" : { "astNodeId" : 4 }, @@ -881,86 +963,6 @@ } } }, - "specialPortMap" : { - "command recv" : { - "aNode" : { - "astNodeId" : 0 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandRecv" : { - - } - }, - "name" : "cmdIn", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 24, - "unqualifiedName" : "Cmd" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "command reg" : { - "aNode" : { - "astNodeId" : 1 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandReg" : { - - } - }, - "name" : "cmdRegOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 25, - "unqualifiedName" : "CmdReg" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "command resp" : { - "aNode" : { - "astNodeId" : 4 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "CommandResp" : { - - } - }, - "name" : "cmdResponseOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 26, - "unqualifiedName" : "CmdResponse" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, @@ -1000,9 +1002,67 @@ "aNode" : { "astNodeId" : 10 }, - "portMap" : { - "eventOut" : { - "Special" : { + "portInterface" : { + "portMap" : { + "eventOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 6 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "Event" : { + + } + }, + "name" : "eventOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 27, + "unqualifiedName" : "Log" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "textEventOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 9 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "TextEvent" : { + + } + }, + "name" : "textEventOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 28, + "unqualifiedName" : "LogText" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "event" : { "aNode" : { "astNodeId" : 6 }, @@ -1027,10 +1087,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "textEventOut" : { - "Special" : { + }, + "text event" : { "aNode" : { "astNodeId" : 9 }, @@ -1058,60 +1116,6 @@ } } }, - "specialPortMap" : { - "event" : { - "aNode" : { - "astNodeId" : 6 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "Event" : { - - } - }, - "name" : "eventOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 27, - "unqualifiedName" : "Log" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "text event" : { - "aNode" : { - "astNodeId" : 9 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "TextEvent" : { - - } - }, - "name" : "textEventOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 28, - "unqualifiedName" : "LogText" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, @@ -1151,9 +1155,39 @@ "aNode" : { "astNodeId" : 14 }, - "portMap" : { - "tlmOut" : { - "Special" : { + "portInterface" : { + "portMap" : { + "tlmOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "Telemetry" : { + + } + }, + "name" : "tlmOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 29, + "unqualifiedName" : "Tlm" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "telemetry" : { "aNode" : { "astNodeId" : 13 }, @@ -1181,34 +1215,6 @@ } } }, - "specialPortMap" : { - "telemetry" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "Telemetry" : { - - } - }, - "name" : "tlmOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 29, - "unqualifiedName" : "Tlm" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, @@ -1248,9 +1254,67 @@ "aNode" : { "astNodeId" : 19 }, - "portMap" : { - "prmGetOut" : { - "Special" : { + "portInterface" : { + "portMap" : { + "prmGetOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 15 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "ParamGet" : { + + } + }, + "name" : "prmGetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 30, + "unqualifiedName" : "PrmGet" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "prmSetOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 18 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "ParamSet" : { + + } + }, + "name" : "prmSetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 31, + "unqualifiedName" : "PrmSet" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "param get" : { "aNode" : { "astNodeId" : 15 }, @@ -1275,10 +1339,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "prmSetOut" : { - "Special" : { + }, + "param set" : { "aNode" : { "astNodeId" : 18 }, @@ -1306,60 +1368,6 @@ } } }, - "specialPortMap" : { - "param get" : { - "aNode" : { - "astNodeId" : 15 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "ParamGet" : { - - } - }, - "name" : "prmGetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 30, - "unqualifiedName" : "PrmGet" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "param set" : { - "aNode" : { - "astNodeId" : 18 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "ParamSet" : { - - } - }, - "name" : "prmSetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 31, - "unqualifiedName" : "PrmSet" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, @@ -1399,9 +1407,39 @@ "aNode" : { "astNodeId" : 23 }, - "portMap" : { - "timeGetOut" : { - "Special" : { + "portInterface" : { + "portMap" : { + "timeGetOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 22 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "TimeGet" : { + + } + }, + "name" : "timeGetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 34, + "unqualifiedName" : "Time" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "time get" : { "aNode" : { "astNodeId" : 22 }, @@ -1429,34 +1467,6 @@ } } }, - "specialPortMap" : { - "time get" : { - "aNode" : { - "astNodeId" : 22 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "TimeGet" : { - - } - }, - "name" : "timeGetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 34, - "unqualifiedName" : "Time" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, diff --git a/compiler/tools/fpp-to-json/test/syntaxOnly.ref.txt b/compiler/tools/fpp-to-json/test/syntaxOnly.ref.txt index 313a87f5c..023dee1d3 100644 --- a/compiler/tools/fpp-to-json/test/syntaxOnly.ref.txt +++ b/compiler/tools/fpp-to-json/test/syntaxOnly.ref.txt @@ -1060,7 +1060,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1087,7 +1087,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1114,7 +1114,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1141,7 +1141,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1168,7 +1168,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1195,7 +1195,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1222,7 +1222,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1261,7 +1261,7 @@ "fromPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -1285,7 +1285,7 @@ "toPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -1312,7 +1312,7 @@ "fromPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -1336,7 +1336,7 @@ "toPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -1363,7 +1363,7 @@ "fromPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -1387,7 +1387,7 @@ "toPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -1414,7 +1414,7 @@ "fromPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -1438,7 +1438,7 @@ "toPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -1465,7 +1465,7 @@ "fromPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -1489,7 +1489,7 @@ "toPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -1516,7 +1516,7 @@ "fromPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { @@ -1540,7 +1540,7 @@ "toPort" : { "AstNode" : { "data" : { - "componentInstance" : { + "interfaceInstance" : { "AstNode" : { "data" : { "Unqualified" : { diff --git a/compiler/tools/fpp-to-json/test/telemetry.ref.txt b/compiler/tools/fpp-to-json/test/telemetry.ref.txt index fc9dc74bf..2effc438f 100644 --- a/compiler/tools/fpp-to-json/test/telemetry.ref.txt +++ b/compiler/tools/fpp-to-json/test/telemetry.ref.txt @@ -698,7 +698,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1274,9 +1274,67 @@ "aNode" : { "astNodeId" : 58 }, - "portMap" : { - "tlmOut" : { - "Special" : { + "portInterface" : { + "portMap" : { + "tlmOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 0 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "Telemetry" : { + + } + }, + "name" : "tlmOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 59, + "unqualifiedName" : "Tlm" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "timeGetOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 1 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "TimeGet" : { + + } + }, + "name" : "timeGetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 62, + "unqualifiedName" : "Time" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + "telemetry" : { "aNode" : { "astNodeId" : 0 }, @@ -1301,10 +1359,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "timeGetOut" : { - "Special" : { + }, + "time get" : { "aNode" : { "astNodeId" : 1 }, @@ -1332,60 +1388,6 @@ } } }, - "specialPortMap" : { - "telemetry" : { - "aNode" : { - "astNodeId" : 0 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "Telemetry" : { - - } - }, - "name" : "tlmOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 59, - "unqualifiedName" : "Tlm" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "time get" : { - "aNode" : { - "astNodeId" : 1 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "TimeGet" : { - - } - }, - "name" : "timeGetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 62, - "unqualifiedName" : "Time" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, @@ -1935,7 +1937,7 @@ }, "98" : { "map" : { - "Topology" : { + "PortInterfaceInstance" : { "map" : { "T" : { "Topology" : { @@ -1953,34 +1955,34 @@ "aNode" : { "astNodeId" : 97 }, - "directImportMap" : { + "qualifiedName" : { + "qualifier" : [ + "M" + ], + "base" : "T" + }, + "directTopologies" : { + }, + "directComponentInstances" : { + "67" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/telemetry.fpp", + "pos" : "47.9", + "includingLoc" : "None" + } }, "transitiveImportSet" : [ ], "instanceMap" : [ [ { - "aNode" : { - "astNodeId" : 67 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "i" - }, - "component" : { - "astNodeId" : 58 - }, - "baseId" : 18944, - "maxId" : 18961, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "i" + }, + "unqualifiedName" : "i" } }, { @@ -1990,6 +1992,19 @@ } ] ], + "ports" : [ + ], + "portMap" : { + + }, + "portInterface" : { + "portMap" : { + + }, + "specialPortMap" : { + + } + }, "patternMap" : { }, @@ -2009,27 +2024,14 @@ ], "unconnectedPortSet" : [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 67 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "i" - }, - "component" : { - "astNodeId" : 58 - }, - "baseId" : 18944, - "maxId" : 18961, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "i" + }, + "unqualifiedName" : "i" } }, "portInstance" : { @@ -2062,27 +2064,14 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 67 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "i" - }, - "component" : { - "astNodeId" : 58 - }, - "baseId" : 18944, - "maxId" : 18961, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "i" + }, + "unqualifiedName" : "i" } }, "portInstance" : { diff --git a/compiler/tools/fpp-to-json/test/telemetryPackets.ref.txt b/compiler/tools/fpp-to-json/test/telemetryPackets.ref.txt index bf162e63c..3a7b9d1cb 100644 --- a/compiler/tools/fpp-to-json/test/telemetryPackets.ref.txt +++ b/compiler/tools/fpp-to-json/test/telemetryPackets.ref.txt @@ -391,7 +391,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -418,7 +418,7 @@ [ ], { - "SpecCompInstance" : { + "SpecInstance" : { "node" : { "AstNode" : { "data" : { @@ -1198,83 +1198,141 @@ "aNode" : { "astNodeId" : 20 }, - "portMap" : { - "pIn" : { - "General" : { - "aNode" : { - "astNodeId" : 8 - }, - "specifier" : { - "kind" : { - "SyncInput" : { - - } + "portInterface" : { + "portMap" : { + "pIn" : { + "General" : { + "aNode" : { + "astNodeId" : 8 }, - "name" : "pIn", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 7 - } + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 7 + } + }, + "priority" : "None", + "queueFull" : "None" }, - "priority" : "None", - "queueFull" : "None" - }, - "kind" : "SyncInput", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 5, - "unqualifiedName" : "P" + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 5, + "unqualifiedName" : "P" + } } } - } - }, - "importNodeIds" : [ - ] - } - }, - "pOut" : { - "General" : { - "aNode" : { - "astNodeId" : 11 - }, - "specifier" : { - "kind" : { - "Output" : { - + }, + "importNodeIds" : [ + ] + } + }, + "pOut" : { + "General" : { + "aNode" : { + "astNodeId" : 11 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 10 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 5, + "unqualifiedName" : "P" + } + } } }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 10 + "importNodeIds" : [ + ] + } + }, + "tlmOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 12 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "Telemetry" : { + + } + }, + "name" : "tlmOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "Tlm" } }, "priority" : "None", - "queueFull" : "None" - }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 5, - "unqualifiedName" : "P" + "queueFull" : "None", + "importNodeIds" : [ + ] + } + }, + "timeGetOut" : { + "Special" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "TimeGet" : { + } + }, + "name" : "timeGetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 3, + "unqualifiedName" : "Time" } - } - }, - "importNodeIds" : [ - ] + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } } }, - "tlmOut" : { - "Special" : { + "specialPortMap" : { + "telemetry" : { "aNode" : { "astNodeId" : 12 }, @@ -1299,10 +1357,8 @@ "queueFull" : "None", "importNodeIds" : [ ] - } - }, - "timeGetOut" : { - "Special" : { + }, + "time get" : { "aNode" : { "astNodeId" : 13 }, @@ -1330,60 +1386,6 @@ } } }, - "specialPortMap" : { - "telemetry" : { - "aNode" : { - "astNodeId" : 12 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "Telemetry" : { - - } - }, - "name" : "tlmOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "Tlm" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - }, - "time get" : { - "aNode" : { - "astNodeId" : 13 - }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "TimeGet" : { - - } - }, - "name" : "timeGetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 3, - "unqualifiedName" : "Time" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - }, "commandMap" : { }, @@ -1527,34 +1529,38 @@ "aNode" : { "astNodeId" : 113 }, - "directImportMap" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "TelemetryPackets" + }, + "directTopologies" : { + }, + "directComponentInstances" : { + "24" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/telemetryPackets.fpp", + "pos" : "22.3", + "includingLoc" : "None" + }, + "28" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/telemetryPackets.fpp", + "pos" : "23.3", + "includingLoc" : "None" + } }, "transitiveImportSet" : [ ], "instanceMap" : [ [ { - "aNode" : { - "astNodeId" : 24 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 20 - }, - "baseId" : 256, - "maxId" : 256, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, { @@ -1565,26 +1571,13 @@ ], [ { - "aNode" : { - "astNodeId" : 28 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 20 - }, - "baseId" : 512, - "maxId" : 512, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, { @@ -1594,6 +1587,19 @@ } ] ], + "ports" : [ + ], + "portMap" : { + + }, + "portInterface" : { + "portMap" : { + + }, + "specialPortMap" : { + + } + }, "patternMap" : { }, @@ -1613,89 +1619,94 @@ ], "unconnectedPortSet" : [ { - "componentInstance" : { - "aNode" : { - "astNodeId" : 28 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 20 - }, - "baseId" : 512, - "maxId" : 512, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { - "General" : { + "Special" : { "aNode" : { - "astNodeId" : 11 + "astNodeId" : 13 }, "specifier" : { + "inputKind" : "None", "kind" : { - "Output" : { + "TimeGet" : { } }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 10 + "name" : "timeGetOut", + "priority" : "None", + "queueFull" : "None" + }, + "symbol" : { + "Port" : { + "nodeId" : 3, + "unqualifiedName" : "Time" + } + }, + "priority" : "None", + "queueFull" : "None", + "importNodeIds" : [ + ] + } + } + }, + { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "Special" : { + "aNode" : { + "astNodeId" : 12 + }, + "specifier" : { + "inputKind" : "None", + "kind" : { + "Telemetry" : { + } }, + "name" : "tlmOut", "priority" : "None", "queueFull" : "None" }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 5, - "unqualifiedName" : "P" - } - } + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "Tlm" } }, + "priority" : "None", + "queueFull" : "None", "importNodeIds" : [ ] } } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 28 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 20 - }, - "baseId" : 512, - "maxId" : 512, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -1737,51 +1748,38 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 24 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 20 - }, - "baseId" : 256, - "maxId" : 256, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 11 + "astNodeId" : 8 }, "specifier" : { "kind" : { - "Output" : { + "SyncInput" : { } }, - "name" : "pOut", + "name" : "pIn", "size" : "None", "port" : { "Some" : { - "astNodeId" : 10 + "astNodeId" : 7 } }, "priority" : "None", "queueFull" : "None" }, - "kind" : "Output", + "kind" : "SyncInput", "size" : 1, "ty" : { "DefPort" : { @@ -1799,80 +1797,14 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 24 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 20 - }, - "baseId" : 256, - "maxId" : 256, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - - } - }, - "portInstance" : { - "Special" : { - "aNode" : { - "astNodeId" : 13 + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" }, - "specifier" : { - "inputKind" : "None", - "kind" : { - "TimeGet" : { - - } - }, - "name" : "timeGetOut", - "priority" : "None", - "queueFull" : "None" - }, - "symbol" : { - "Port" : { - "nodeId" : 3, - "unqualifiedName" : "Time" - } - }, - "priority" : "None", - "queueFull" : "None", - "importNodeIds" : [ - ] - } - } - }, - { - "componentInstance" : { - "aNode" : { - "astNodeId" : 28 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 20 - }, - "baseId" : 512, - "maxId" : 512, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -1905,104 +1837,87 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 24 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 20 - }, - "baseId" : 256, - "maxId" : 256, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" } }, "portInstance" : { - "Special" : { + "General" : { "aNode" : { - "astNodeId" : 12 + "astNodeId" : 11 }, "specifier" : { - "inputKind" : "None", "kind" : { - "Telemetry" : { + "Output" : { } }, - "name" : "tlmOut", + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 10 + } + }, "priority" : "None", "queueFull" : "None" }, - "symbol" : { - "Port" : { - "nodeId" : 0, - "unqualifiedName" : "Tlm" + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 5, + "unqualifiedName" : "P" + } + } } }, - "priority" : "None", - "queueFull" : "None", "importNodeIds" : [ ] } } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 24 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c1" - }, - "component" : { - "astNodeId" : 20 - }, - "baseId" : 256, - "maxId" : 256, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 8 + "astNodeId" : 11 }, "specifier" : { "kind" : { - "SyncInput" : { + "Output" : { } }, - "name" : "pIn", + "name" : "pOut", "size" : "None", "port" : { "Some" : { - "astNodeId" : 7 + "astNodeId" : 10 } }, "priority" : "None", "queueFull" : "None" }, - "kind" : "SyncInput", + "kind" : "Output", "size" : 1, "ty" : { "DefPort" : { @@ -2020,27 +1935,14 @@ } }, { - "componentInstance" : { - "aNode" : { - "astNodeId" : 28 - }, - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "c2" - }, - "component" : { - "astNodeId" : 20 - }, - "baseId" : 512, - "maxId" : 512, - "file" : "None", - "queueSize" : "None", - "stackSize" : "None", - "priority" : "None", - "cpu" : "None", - "initSpecifierMap" : { - + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" } }, "portInstance" : { diff --git a/compiler/tools/fpp-to-json/test/topologyPorts.fpp b/compiler/tools/fpp-to-json/test/topologyPorts.fpp new file mode 100644 index 000000000..9914e9292 --- /dev/null +++ b/compiler/tools/fpp-to-json/test/topologyPorts.fpp @@ -0,0 +1,31 @@ +port P + +interface I {} + +passive component C { + sync input port pIn: P + output port pOut: P +} + +instance c1: C base id 0x100 +instance c2: C base id 0x200 + +@ A simple topology +topology TopPorts implements I { + + @ This specifier says that instance c1 is part of the topology + instance c1 + @ This specifier says that instance c2 is part of the topology + instance c2 + + @ This code specifies a connection graph C1 + connections C1 { + c1.pOut -> c2.pIn + } + + @ This code specifies a connection graph C2 + connections C2 { + c2.pOut -> c1.pIn + } + +} From 2c4ef9fe447b9b18817f89c072815e2dbf0968e2 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Mon, 27 Oct 2025 11:39:03 -0700 Subject: [PATCH 14/26] Fixed port instance compare --- .../scala/analysis/Semantics/PortInstance.scala | 12 ++++++++++++ .../scala/analysis/Semantics/PortInterface.scala | 2 +- compiler/lib/src/main/scala/util/Error.scala | 2 +- .../fpp-check/test/top_ports/implements.ref.txt | 13 ------------- .../test/top_ports/implements_port_missing.ref.txt | 9 +++------ 5 files changed, 17 insertions(+), 21 deletions(-) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/PortInstance.scala b/compiler/lib/src/main/scala/analysis/Semantics/PortInstance.scala index 479884970..e5b96d211 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/PortInstance.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/PortInstance.scala @@ -43,6 +43,18 @@ sealed trait PortInstance { loc: Location // The location whether the connection is requested ): Result.Result[Unit] = Right(()) + override def equals(obj: Any): Boolean = + obj match { + case other: PortInstance => + return ( + this.getArraySize == other.getArraySize && + this.getDirection == other.getDirection && + this.getType == other.getType && + this.getUnqualifiedName == other.getUnqualifiedName + ) + case _ => false + } + } object PortInstance { diff --git a/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala b/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala index 322f4df97..20aef397d 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala @@ -40,7 +40,7 @@ case class PortInterface( } _ <- { - Result.foldLeft (other.specialPortMap) (()) ((_, pii) => { + Result.foldLeft (other.specialPortMap.toList) (()) ((_, pii) => { val (kind, pi) = pii this.specialPortMap.get(kind) match { diff --git a/compiler/lib/src/main/scala/util/Error.scala b/compiler/lib/src/main/scala/util/Error.scala index 4f7e265e0..8949bd624 100644 --- a/compiler/lib/src/main/scala/util/Error.scala +++ b/compiler/lib/src/main/scala/util/Error.scala @@ -336,7 +336,7 @@ sealed trait Error { case SemanticError.PortInterfaceMissingPort( loc ) => - Error.print (Some(loc)) ("port instance missing definition") + Error.print (Some(loc)) ("port instance missing") case SemanticError.PortInterfaceInvalidPort( loc, defLoc diff --git a/compiler/tools/fpp-check/test/top_ports/implements.ref.txt b/compiler/tools/fpp-check/test/top_ports/implements.ref.txt index c53bca770..e69de29bb 100644 --- a/compiler/tools/fpp-check/test/top_ports/implements.ref.txt +++ b/compiler/tools/fpp-check/test/top_ports/implements.ref.txt @@ -1,13 +0,0 @@ -fpp-check -[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements.fpp:22.23 -topology A implements I { - ^ -error: port interface not implemented -fpp-check -[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements.fpp:26.3 - port pOut = c1.pOutDifferentName - ^ -error: port instance does not match definition in interface: -[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements.fpp:4.5 - output port pOut: [2] P - ^ diff --git a/compiler/tools/fpp-check/test/top_ports/implements_port_missing.ref.txt b/compiler/tools/fpp-check/test/top_ports/implements_port_missing.ref.txt index d1b776295..8d15e12e9 100644 --- a/compiler/tools/fpp-check/test/top_ports/implements_port_missing.ref.txt +++ b/compiler/tools/fpp-check/test/top_ports/implements_port_missing.ref.txt @@ -4,10 +4,7 @@ topology A implements I { ^ error: port interface not implemented fpp-check -[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements_port_missing.fpp:27.3 - port pOut = c1.pOutDifferentName - ^ -error: port instance does not match definition in interface: -[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements_port_missing.fpp:4.5 - output port pOut: [2] P +[ local path prefix ]/compiler/tools/fpp-check/test/top_ports/implements_port_missing.fpp:5.5 + output port pOut2: [3] P ^ +error: port instance missing From 62bb0da63253207cde549c0c8aed7ed4daf7702b Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Mon, 27 Oct 2025 11:51:02 -0700 Subject: [PATCH 15/26] Fix depend, added some depend tests, fix dict naming of comp inst --- .../scala/analysis/Semantics/ComponentInstance.scala | 2 ++ compiler/tools/fpp-depend/test/spec_top_import.fpp | 2 +- compiler/tools/fpp-depend/test/spec_top_port.fpp | 10 ++++++++++ compiler/tools/fpp-depend/test/spec_top_port.ref.txt | 1 + compiler/tools/fpp-depend/test/tests.sh | 2 ++ compiler/tools/fpp-depend/test/top_implements.fpp | 5 +++++ compiler/tools/fpp-depend/test/top_implements.ref.txt | 1 + 7 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 compiler/tools/fpp-depend/test/spec_top_port.fpp create mode 100644 compiler/tools/fpp-depend/test/spec_top_port.ref.txt create mode 100644 compiler/tools/fpp-depend/test/top_implements.fpp create mode 100644 compiler/tools/fpp-depend/test/top_implements.ref.txt diff --git a/compiler/lib/src/main/scala/analysis/Semantics/ComponentInstance.scala b/compiler/lib/src/main/scala/analysis/Semantics/ComponentInstance.scala index 0ea980d8f..d63a89cec 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/ComponentInstance.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/ComponentInstance.scala @@ -18,6 +18,8 @@ final case class ComponentInstance( initSpecifierMap: Map[Int, InitSpecifier] = Map() ) extends Ordered[ComponentInstance] { + override def toString = qualifiedName.toString + /** Adds an init specifier */ def addInitSpecifier(initSpecifier: InitSpecifier): Result.Result[ComponentInstance] = { diff --git a/compiler/tools/fpp-depend/test/spec_top_import.fpp b/compiler/tools/fpp-depend/test/spec_top_import.fpp index 6ab03da80..4d8b6dc24 100644 --- a/compiler/tools/fpp-depend/test/spec_top_import.fpp +++ b/compiler/tools/fpp-depend/test/spec_top_import.fpp @@ -1,4 +1,4 @@ -locate topology T at "T.fpp" +locate instance T at "T.fpp" topology T1 { diff --git a/compiler/tools/fpp-depend/test/spec_top_port.fpp b/compiler/tools/fpp-depend/test/spec_top_port.fpp new file mode 100644 index 000000000..262857e92 --- /dev/null +++ b/compiler/tools/fpp-depend/test/spec_top_port.fpp @@ -0,0 +1,10 @@ +locate instance i1 at "instances.fpp" +locate instance i2 at "instances.fpp" + +topology T1 { + instance i1 + instance i2 + + port p1 = i1.p + port p2 = i2.p +} diff --git a/compiler/tools/fpp-depend/test/spec_top_port.ref.txt b/compiler/tools/fpp-depend/test/spec_top_port.ref.txt new file mode 100644 index 000000000..a62ca9748 --- /dev/null +++ b/compiler/tools/fpp-depend/test/spec_top_port.ref.txt @@ -0,0 +1 @@ +[ local path prefix ]/compiler/tools/fpp-depend/test/instances.fpp diff --git a/compiler/tools/fpp-depend/test/tests.sh b/compiler/tools/fpp-depend/test/tests.sh index 58b95fc91..c10737a69 100644 --- a/compiler/tools/fpp-depend/test/tests.sh +++ b/compiler/tools/fpp-depend/test/tests.sh @@ -52,7 +52,9 @@ spec_state_machine_instance spec_tlm_channel spec_tlm_packet spec_top_import +spec_top_port special_ports +top_implements topology_implied_type transitive_instance " diff --git a/compiler/tools/fpp-depend/test/top_implements.fpp b/compiler/tools/fpp-depend/test/top_implements.fpp new file mode 100644 index 000000000..32288dcf4 --- /dev/null +++ b/compiler/tools/fpp-depend/test/top_implements.fpp @@ -0,0 +1,5 @@ +locate interface I at "I.fpp" + +topology T1 implements I { + +} diff --git a/compiler/tools/fpp-depend/test/top_implements.ref.txt b/compiler/tools/fpp-depend/test/top_implements.ref.txt new file mode 100644 index 000000000..d5dca0ae8 --- /dev/null +++ b/compiler/tools/fpp-depend/test/top_implements.ref.txt @@ -0,0 +1 @@ +[ local path prefix ]/compiler/tools/fpp-depend/test/I.fpp From aca94531a31aa5b25ce5953904d3b22fd8d0e9e9 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Mon, 27 Oct 2025 13:24:08 -0700 Subject: [PATCH 16/26] Update outputs --- .../test/importedTopologies.ref.txt | 50 +- .../fpp-to-json/test/simpleTopology.ref.txt | 2210 ++++++++++++++++- 2 files changed, 2123 insertions(+), 137 deletions(-) diff --git a/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt b/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt index f5c892a90..6ca66d620 100644 --- a/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt +++ b/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt @@ -3535,18 +3535,18 @@ ], [ { - "InterfaceComponentInstance" : { + "InterfaceTopology" : { "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "Simple1" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "Simple1" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "19.3", + "pos" : "35.3", "includingLoc" : "None" } ], @@ -3556,31 +3556,31 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c2" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c2" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "17.3", + "pos" : "19.3", "includingLoc" : "None" } ], [ { - "InterfaceTopology" : { + "InterfaceComponentInstance" : { "qualifiedName" : { "qualifier" : [ ], - "base" : "Simple1" + "base" : "c1" }, - "unqualifiedName" : "Simple1" + "unqualifiedName" : "c1" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "35.3", + "pos" : "17.3", "includingLoc" : "None" } ], @@ -6762,18 +6762,18 @@ ], [ { - "InterfaceComponentInstance" : { + "InterfaceTopology" : { "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "Simple1" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "Simple1" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "19.3", + "pos" : "35.3", "includingLoc" : "None" } ], @@ -6783,31 +6783,31 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c2" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c2" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "17.3", + "pos" : "19.3", "includingLoc" : "None" } ], [ { - "InterfaceTopology" : { + "InterfaceComponentInstance" : { "qualifiedName" : { "qualifier" : [ ], - "base" : "Simple1" + "base" : "c4" }, - "unqualifiedName" : "Simple1" + "unqualifiedName" : "c4" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "35.3", + "pos" : "39.3", "includingLoc" : "None" } ], @@ -6817,14 +6817,14 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c4" + "base" : "c1" }, - "unqualifiedName" : "c4" + "unqualifiedName" : "c1" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "39.3", + "pos" : "17.3", "includingLoc" : "None" } ], diff --git a/compiler/tools/fpp-to-json/test/simpleTopology.ref.txt b/compiler/tools/fpp-to-json/test/simpleTopology.ref.txt index 81ec3eb79..1c3b55bc7 100644 --- a/compiler/tools/fpp-to-json/test/simpleTopology.ref.txt +++ b/compiler/tools/fpp-to-json/test/simpleTopology.ref.txt @@ -1,8 +1,3 @@ -fpp-to-json -[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp:31.15 - port a = c1.a - ^ -error: a is not a port instance of interface c1 [ { "members" : [ @@ -271,11 +266,11 @@ error: a is not a port instance of interface c1 "name" : "c1" } }, - "id" : 26 + "id" : 24 } } }, - "id" : 27 + "id" : 25 } } } @@ -299,11 +294,11 @@ error: a is not a port instance of interface c1 "name" : "c2" } }, - "id" : 29 + "id" : 27 } } }, - "id" : 30 + "id" : 28 } } } @@ -335,17 +330,17 @@ error: a is not a port instance of interface c1 "name" : "c1" } }, - "id" : 33 + "id" : 31 } }, "portName" : { "AstNode" : { "data" : "pOut", - "id" : 32 + "id" : 30 } } }, - "id" : 34 + "id" : 32 } }, "fromIndex" : "None", @@ -359,17 +354,17 @@ error: a is not a port instance of interface c1 "name" : "c2" } }, - "id" : 37 + "id" : 35 } }, "portName" : { "AstNode" : { "data" : "pIn", - "id" : 36 + "id" : 34 } } }, - "id" : 38 + "id" : 36 } }, "toIndex" : "None" @@ -377,7 +372,7 @@ error: a is not a port instance of interface c1 ] } }, - "id" : 39 + "id" : 37 } } } @@ -409,17 +404,17 @@ error: a is not a port instance of interface c1 "name" : "c2" } }, - "id" : 42 + "id" : 58 } }, "portName" : { "AstNode" : { "data" : "pOut", - "id" : 41 + "id" : 57 } } }, - "id" : 43 + "id" : 59 } }, "fromIndex" : "None", @@ -433,17 +428,17 @@ error: a is not a port instance of interface c1 "name" : "c1" } }, - "id" : 46 + "id" : 62 } }, "portName" : { "AstNode" : { "data" : "pIn", - "id" : 45 + "id" : 61 } } }, - "id" : 47 + "id" : 63 } }, "toIndex" : "None" @@ -451,48 +446,7 @@ error: a is not a port instance of interface c1 ] } }, - "id" : 48 - } - } - } - }, - [ - ] - ], - [ - [ - ], - { - "SpecTopPort" : { - "node" : { - "AstNode" : { - "data" : { - "name" : "a", - "underlyingPort" : { - "AstNode" : { - "data" : { - "interfaceInstance" : { - "AstNode" : { - "data" : { - "Unqualified" : { - "name" : "c1" - } - }, - "id" : 61 - } - }, - "portName" : { - "AstNode" : { - "data" : "a", - "id" : 60 - } - } - }, - "id" : 62 - } - } - }, - "id" : 63 + "id" : 64 } } } @@ -502,19 +456,9 @@ error: a is not a port instance of interface c1 ] ], "implements" : [ - { - "AstNode" : { - "data" : { - "Unqualified" : { - "name" : "I" - } - }, - "id" : 24 - } - } ] }, - "id" : 64 + "id" : 65 } } } @@ -643,42 +587,42 @@ error: a is not a port instance of interface c1 }, "23" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "14.28", + "pos" : "17.12", "includingLoc" : "None" }, "24" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "14.28", + "pos" : "17.12", "includingLoc" : "None" }, "25" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "17.12", + "pos" : "17.3", "includingLoc" : "None" }, "26" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "17.12", + "pos" : "19.12", "includingLoc" : "None" }, "27" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "17.3", + "pos" : "19.12", "includingLoc" : "None" }, "28" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "19.12", + "pos" : "19.3", "includingLoc" : "None" }, "29" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "19.12", + "pos" : "23.5", "includingLoc" : "None" }, "30" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "19.3", + "pos" : "23.8", "includingLoc" : "None" }, "31" : { @@ -688,17 +632,17 @@ error: a is not a port instance of interface c1 }, "32" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.8", + "pos" : "23.5", "includingLoc" : "None" }, "33" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.5", + "pos" : "23.16", "includingLoc" : "None" }, "34" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.5", + "pos" : "23.19", "includingLoc" : "None" }, "35" : { @@ -708,22 +652,22 @@ error: a is not a port instance of interface c1 }, "36" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.19", + "pos" : "23.16", "includingLoc" : "None" }, "37" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.16", + "pos" : "22.3", "includingLoc" : "None" }, "38" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "23.16", + "pos" : "28.5", "includingLoc" : "None" }, "39" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "22.3", + "pos" : "28.8", "includingLoc" : "None" }, "40" : { @@ -733,17 +677,17 @@ error: a is not a port instance of interface c1 }, "41" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.8", + "pos" : "28.5", "includingLoc" : "None" }, "42" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.5", + "pos" : "28.16", "includingLoc" : "None" }, "43" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.5", + "pos" : "28.19", "includingLoc" : "None" }, "44" : { @@ -753,102 +697,2144 @@ error: a is not a port instance of interface c1 }, "45" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.19", + "pos" : "28.16", "includingLoc" : "None" }, "46" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.16", + "pos" : "27.3", "includingLoc" : "None" }, "47" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "28.16", + "pos" : "28.5", "includingLoc" : "None" }, "48" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "27.3", + "pos" : "28.8", "includingLoc" : "None" }, "49" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.12", + "pos" : "28.5", "includingLoc" : "None" }, "50" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.15", + "pos" : "28.5", "includingLoc" : "None" }, "51" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.12", + "pos" : "28.16", "includingLoc" : "None" }, "52" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.12", + "pos" : "28.19", "includingLoc" : "None" }, "53" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.3", + "pos" : "28.16", "includingLoc" : "None" }, "54" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.12", + "pos" : "28.16", "includingLoc" : "None" }, "55" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.15", + "pos" : "27.3", "includingLoc" : "None" }, "56" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.12", + "pos" : "28.5", "includingLoc" : "None" }, "57" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.12", + "pos" : "28.8", "includingLoc" : "None" }, "58" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.3", + "pos" : "28.5", "includingLoc" : "None" }, "59" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.12", + "pos" : "28.5", "includingLoc" : "None" }, "60" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.15", + "pos" : "28.16", "includingLoc" : "None" }, "61" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.12", + "pos" : "28.19", "includingLoc" : "None" }, "62" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.12", + "pos" : "28.16", "includingLoc" : "None" }, "63" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", - "pos" : "31.3", + "pos" : "28.16", "includingLoc" : "None" }, "64" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "27.3", + "includingLoc" : "None" + }, + "65" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", "pos" : "14.1", "includingLoc" : "None" } } +{ + "componentInstanceMap" : { + "18" : { + "aNode" : { + "astNodeId" : 18 + }, + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "component" : { + "astNodeId" : 14 + }, + "baseId" : 256, + "maxId" : 255, + "file" : "None", + "queueSize" : "None", + "stackSize" : "None", + "priority" : "None", + "cpu" : "None", + "initSpecifierMap" : { + + } + }, + "22" : { + "aNode" : { + "astNodeId" : 22 + }, + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "component" : { + "astNodeId" : 14 + }, + "baseId" : 512, + "maxId" : 511, + "file" : "None", + "queueSize" : "None", + "stackSize" : "None", + "priority" : "None", + "cpu" : "None", + "initSpecifierMap" : { + + } + } + }, + "componentMap" : { + "14" : { + "aNode" : { + "astNodeId" : 14 + }, + "portInterface" : { + "portMap" : { + "pIn" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + }, + "pOut" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "specialPortMap" : { + + } + }, + "commandMap" : { + + }, + "defaultOpcode" : 0, + "tlmChannelMap" : { + + }, + "tlmChannelNameMap" : { + + }, + "defaultTlmChannelId" : 0, + "eventMap" : { + + }, + "defaultEventId" : 0, + "paramMap" : { + + }, + "specPortMatchingList" : [ + ], + "stateMachineInstanceMap" : { + + }, + "portMatchingList" : [ + ], + "defaultParamId" : 0, + "containerMap" : { + + }, + "defaultContainerId" : 0, + "recordMap" : { + + }, + "defaultRecordId" : 0 + } + }, + "includedFileSet" : [ + ], + "inputFileSet" : [ + "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp" + ], + "locationSpecifierMap" : [ + ], + "parentSymbolMap" : { + + }, + "symbolScopeMap" : { + "14" : { + "map" : { + + } + } + }, + "topologyMap" : { + "65" : { + "aNode" : { + "astNodeId" : 65 + }, + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "Simple" + }, + "directTopologies" : { + + }, + "directComponentInstances" : { + "18" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "17.3", + "includingLoc" : "None" + }, + "22" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "19.3", + "includingLoc" : "None" + } + }, + "transitiveImportSet" : [ + ], + "instanceMap" : [ + [ + { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "17.3", + "includingLoc" : "None" + } + ], + [ + { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "19.3", + "includingLoc" : "None" + } + ] + ], + "ports" : [ + ], + "portMap" : { + + }, + "portInterface" : { + "portMap" : { + + }, + "specialPortMap" : { + + } + }, + "patternMap" : { + + }, + "connectionMap" : { + "C1" : [ + { + "from" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "23.5", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "to" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "23.16", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "isUnmatched" : false + } + ], + "C2" : [ + { + "from" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "28.5", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "to" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "28.16", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "isUnmatched" : false + } + ] + }, + "localConnectionMap" : { + "C1" : [ + { + "from" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "23.5", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "to" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "23.16", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "isUnmatched" : false + } + ], + "C2" : [ + { + "from" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "28.5", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "to" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "28.16", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "isUnmatched" : false + } + ] + }, + "outputConnectionMap" : [ + [ + { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + [ + { + "from" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "23.5", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "to" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "23.16", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "isUnmatched" : false + } + ] + ], + [ + { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + [ + { + "from" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "28.5", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "to" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "28.16", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "isUnmatched" : false + } + ] + ] + ], + "inputConnectionMap" : [ + [ + { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + [ + { + "from" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "23.5", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "to" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "23.16", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "isUnmatched" : false + } + ] + ], + [ + { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + [ + { + "from" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "28.5", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "to" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "28.16", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "isUnmatched" : false + } + ] + ] + ], + "fromPortNumberMap" : [ + [ + { + "from" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "23.5", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "to" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "23.16", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "isUnmatched" : false + }, + 0 + ], + [ + { + "from" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "28.5", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "to" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "28.16", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "isUnmatched" : false + }, + 0 + ] + ], + "toPortNumberMap" : [ + [ + { + "from" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "28.5", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "to" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "28.16", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "isUnmatched" : false + }, + 0 + ], + [ + { + "from" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "23.5", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c1" + }, + "unqualifiedName" : "c1" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 13 + }, + "specifier" : { + "kind" : { + "Output" : { + + } + }, + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 12 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "to" : { + "loc" : { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/simpleTopology.fpp", + "pos" : "23.16", + "includingLoc" : "None" + }, + "port" : { + "interfaceInstance" : { + "InterfaceComponentInstance" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "c2" + }, + "unqualifiedName" : "c2" + } + }, + "portInstance" : { + "General" : { + "aNode" : { + "astNodeId" : 4 + }, + "specifier" : { + "kind" : { + "SyncInput" : { + + } + }, + "name" : "pIn", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 3 + } + }, + "priority" : "None", + "queueFull" : "None" + }, + "kind" : "SyncInput", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + } + } + }, + "importNodeIds" : [ + ] + } + } + }, + "portNumber" : "None", + "topologyPort" : "None" + }, + "isUnmatched" : false + }, + 0 + ] + ], + "unconnectedPortSet" : [ + ] + } + }, + "typeMap" : { + "17" : { + "Int" : { + "Integer" : { + + } + } + }, + "21" : { + "Int" : { + "Integer" : { + + } + } + } + }, + "useDefMap" : { + "12" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + }, + "62" : { + "ComponentInstance" : { + "nodeId" : 18, + "unqualifiedName" : "c1" + } + }, + "31" : { + "ComponentInstance" : { + "nodeId" : 18, + "unqualifiedName" : "c1" + } + }, + "58" : { + "ComponentInstance" : { + "nodeId" : 22, + "unqualifiedName" : "c2" + } + }, + "3" : { + "Port" : { + "nodeId" : 0, + "unqualifiedName" : "P" + } + }, + "24" : { + "ComponentInstance" : { + "nodeId" : 18, + "unqualifiedName" : "c1" + } + }, + "35" : { + "ComponentInstance" : { + "nodeId" : 22, + "unqualifiedName" : "c2" + } + }, + "16" : { + "Component" : { + "nodeId" : 14, + "unqualifiedName" : "C" + } + }, + "20" : { + "Component" : { + "nodeId" : 14, + "unqualifiedName" : "C" + } + }, + "27" : { + "ComponentInstance" : { + "nodeId" : 22, + "unqualifiedName" : "c2" + } + } + }, + "valueMap" : { + "17" : { + "Integer" : { + "value" : 256 + } + }, + "21" : { + "Integer" : { + "value" : 512 + } + } + }, + "stateMachineMap" : { + + } +} From 1f66709040557e991f17a23baac61bec8a088b41 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Mon, 27 Oct 2025 13:29:27 -0700 Subject: [PATCH 17/26] Update format tests --- compiler/tools/fpp-format/test/include.ref.txt | 4 ++-- compiler/tools/fpp-format/test/no_include.ref.txt | 4 ++-- compiler/tools/fpp-format/test/topology.ref.txt | 2 +- compiler/tools/fpp-syntax/test/syntax-ast.ref.txt | 4 ++-- compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt | 4 ++-- compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt | 4 ++-- compiler/tools/fpp-syntax/test/syntax.fpp | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/compiler/tools/fpp-format/test/include.ref.txt b/compiler/tools/fpp-format/test/include.ref.txt index deed67d6e..223e09e45 100644 --- a/compiler/tools/fpp-format/test/include.ref.txt +++ b/compiler/tools/fpp-format/test/include.ref.txt @@ -212,8 +212,8 @@ module DefinitionsAndSpecifiers { i4 } @< Graph pattern specifier - @ Topology import specifier - import T1 @< Topology import specifier + @ Topology instance specifier + instance T1 @< Topology instance specifier @ Telemetry packet group telemetry packets P { diff --git a/compiler/tools/fpp-format/test/no_include.ref.txt b/compiler/tools/fpp-format/test/no_include.ref.txt index 67b335e4e..60a22bc65 100644 --- a/compiler/tools/fpp-format/test/no_include.ref.txt +++ b/compiler/tools/fpp-format/test/no_include.ref.txt @@ -212,8 +212,8 @@ module DefinitionsAndSpecifiers { i4 } @< Graph pattern specifier - @ Topology import specifier - import T1 @< Topology import specifier + @ Topology instance specifier + instance T1 @< Topology instance specifier @ Telemetry packet group telemetry packets P { diff --git a/compiler/tools/fpp-format/test/topology.ref.txt b/compiler/tools/fpp-format/test/topology.ref.txt index 0d27823b6..70e95e7a1 100644 --- a/compiler/tools/fpp-format/test/topology.ref.txt +++ b/compiler/tools/fpp-format/test/topology.ref.txt @@ -8,7 +8,7 @@ topology T implements \ instance i2 - import T2 + instance T2 port p2 = i1.p2 diff --git a/compiler/tools/fpp-syntax/test/syntax-ast.ref.txt b/compiler/tools/fpp-syntax/test/syntax-ast.ref.txt index d67445651..a880781af 100644 --- a/compiler/tools/fpp-syntax/test/syntax-ast.ref.txt +++ b/compiler/tools/fpp-syntax/test/syntax-ast.ref.txt @@ -343,10 +343,10 @@ def module target qual ident i3 target qual ident i4 @< Graph pattern specifier - @ Topology import specifier + @ Topology instance specifier spec interface instance qual ident T1 - @< Topology import specifier + @< Topology instance specifier @ Telemetry packet group spec tlm packet set ident P diff --git a/compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt b/compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt index 8c2183df9..48df5de53 100644 --- a/compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt +++ b/compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt @@ -344,10 +344,10 @@ def module target qual ident i3 target qual ident i4 @< Graph pattern specifier - @ Topology import specifier + @ Topology instance specifier spec interface instance qual ident T1 - @< Topology import specifier + @< Topology instance specifier @ Telemetry packet group spec tlm packet set ident P diff --git a/compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt b/compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt index 8c2183df9..48df5de53 100644 --- a/compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt +++ b/compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt @@ -344,10 +344,10 @@ def module target qual ident i3 target qual ident i4 @< Graph pattern specifier - @ Topology import specifier + @ Topology instance specifier spec interface instance qual ident T1 - @< Topology import specifier + @< Topology instance specifier @ Telemetry packet group spec tlm packet set ident P diff --git a/compiler/tools/fpp-syntax/test/syntax.fpp b/compiler/tools/fpp-syntax/test/syntax.fpp index 3dc48426b..635d51274 100644 --- a/compiler/tools/fpp-syntax/test/syntax.fpp +++ b/compiler/tools/fpp-syntax/test/syntax.fpp @@ -187,9 +187,9 @@ module DefinitionsAndSpecifiers { command connections instance i1 { i2, i3, i4 } @< Graph pattern specifier - @ Topology import specifier + @ Topology instance specifier import T1 - @< Topology import specifier + @< Topology instance specifier @ Telemetry packet group telemetry packets P { From d6023a4e5790bc5d07c7ff308955abc23ad5fcea Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Mon, 27 Oct 2025 13:44:48 -0700 Subject: [PATCH 18/26] All tests passing --- compiler/tools/fpp-locate-defs/test/defs.ref.txt | 4 ++-- compiler/tools/fpp-locate-defs/test/defs_dir.ref.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/compiler/tools/fpp-locate-defs/test/defs.ref.txt b/compiler/tools/fpp-locate-defs/test/defs.ref.txt index 9b71fcdf9..16e539759 100644 --- a/compiler/tools/fpp-locate-defs/test/defs.ref.txt +++ b/compiler/tools/fpp-locate-defs/test/defs.ref.txt @@ -4,15 +4,15 @@ locate constant C.a at "defs/defs-1.fpp" locate constant M.C.a at "defs/defs-2.fpp" locate constant M.a at "defs/defs-2.fpp" locate constant a at "defs/defs-1.fpp" +locate instance M.T at "defs/defs-2.fpp" locate instance M.c at "defs/defs-2.fpp" +locate instance T at "defs/defs-1.fpp" locate instance c at "defs/defs-1.fpp" locate interface I at "defs/defs-1.fpp" locate port M.P at "defs/defs-2.fpp" locate port P at "defs/defs-1.fpp" locate state machine M.C.S at "defs/defs-2.fpp" locate state machine M.S at "defs/defs-2.fpp" -locate topology M.T at "defs/defs-2.fpp" -locate topology T at "defs/defs-1.fpp" locate type A at "defs/defs-1.fpp" locate type Alias at "defs/defs-1.fpp" locate type C.A at "defs/defs-1.fpp" diff --git a/compiler/tools/fpp-locate-defs/test/defs_dir.ref.txt b/compiler/tools/fpp-locate-defs/test/defs_dir.ref.txt index ac6ce86e2..929e8b8ad 100644 --- a/compiler/tools/fpp-locate-defs/test/defs_dir.ref.txt +++ b/compiler/tools/fpp-locate-defs/test/defs_dir.ref.txt @@ -4,15 +4,15 @@ locate constant C.a at "defs-1.fpp" locate constant M.C.a at "defs-2.fpp" locate constant M.a at "defs-2.fpp" locate constant a at "defs-1.fpp" +locate instance M.T at "defs-2.fpp" locate instance M.c at "defs-2.fpp" +locate instance T at "defs-1.fpp" locate instance c at "defs-1.fpp" locate interface I at "defs-1.fpp" locate port M.P at "defs-2.fpp" locate port P at "defs-1.fpp" locate state machine M.C.S at "defs-2.fpp" locate state machine M.S at "defs-2.fpp" -locate topology M.T at "defs-2.fpp" -locate topology T at "defs-1.fpp" locate type A at "defs-1.fpp" locate type Alias at "defs-1.fpp" locate type C.A at "defs-1.fpp" From df25af5aa2e90afd4e0502ac013c489be8c4c9b5 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Mon, 27 Oct 2025 15:51:17 -0700 Subject: [PATCH 19/26] Regen trace --- .../META-INF/native-image/reflect-config.json | 2855 +++++++---------- 1 file changed, 1243 insertions(+), 1612 deletions(-) diff --git a/compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json b/compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json index 458bd77b3..cf8ed5fe0 100644 --- a/compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json +++ b/compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json @@ -8,6 +8,9 @@ { "name":"[Lio.circe.Encoder;" }, +{ + "name":"[Ljava.io.File;" +}, { "name":"[Ljava.lang.String;" }, @@ -21,1443 +24,1267 @@ }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1", - "fields":[{"name":"0bitmap$424"}] + "fields":[{"name":"0bitmap$291"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1001", - "fields":[{"name":"0bitmap$1335"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1007", + "fields":[{"name":"0bitmap$951"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1002", - "fields":[{"name":"0bitmap$1050"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1008", + "fields":[{"name":"0bitmap$933"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1147", - "fields":[{"name":"0bitmap$1184"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1023", + "fields":[{"name":"0bitmap$936"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1148", - "fields":[{"name":"0bitmap$1101"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1024", + "fields":[{"name":"0bitmap$934"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1149", - "fields":[{"name":"0bitmap$1086"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1025", + "fields":[{"name":"0bitmap$935"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1188", - "fields":[{"name":"0bitmap$1097"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1027", + "fields":[{"name":"0bitmap$950"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1189", - "fields":[{"name":"0bitmap$1091"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1028", + "fields":[{"name":"0bitmap$949"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1190", - "fields":[{"name":"0bitmap$1087"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1029", + "fields":[{"name":"0bitmap$937"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1191", - "fields":[{"name":"0bitmap$1088"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1030", + "fields":[{"name":"0bitmap$943"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1192", - "fields":[{"name":"0bitmap$1089"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1037", + "fields":[{"name":"0bitmap$948"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1193", - "fields":[{"name":"0bitmap$1090"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1038", + "fields":[{"name":"0bitmap$947"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1195", - "fields":[{"name":"0bitmap$1096"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1039", + "fields":[{"name":"0bitmap$944"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1200", - "fields":[{"name":"0bitmap$1100"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1040", + "fields":[{"name":"0bitmap$945"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1201", - "fields":[{"name":"0bitmap$1098"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1041", + "fields":[{"name":"0bitmap$946"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1202", - "fields":[{"name":"0bitmap$1099"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1043", + "fields":[{"name":"0bitmap$952"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1203", - "fields":[{"name":"0bitmap$1167"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1044", + "fields":[{"name":"0bitmap$967"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1204", - "fields":[{"name":"0bitmap$1137"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1045", + "fields":[{"name":"0bitmap$958"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1243", - "fields":[{"name":"0bitmap$1161"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1051", + "fields":[{"name":"0bitmap$961"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1244", - "fields":[{"name":"0bitmap$1141"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1052", + "fields":[{"name":"0bitmap$960"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1245", - "fields":[{"name":"0bitmap$1138"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1054", + "fields":[{"name":"0bitmap$966"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1246", - "fields":[{"name":"0bitmap$1139"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1055", + "fields":[{"name":"0bitmap$962"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1247", - "fields":[{"name":"0bitmap$1140"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1056", + "fields":[{"name":"0bitmap$963"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1249", - "fields":[{"name":"0bitmap$1155"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1057", + "fields":[{"name":"0bitmap$964"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1250", - "fields":[{"name":"0bitmap$1142"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1058", + "fields":[{"name":"0bitmap$965"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1251", - "fields":[{"name":"0bitmap$1143"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1059", + "fields":[{"name":"0bitmap$1071"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1252", - "fields":[{"name":"0bitmap$1144"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1060", + "fields":[{"name":"0bitmap$968"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1253", - "fields":[{"name":"0bitmap$1145"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1061", + "fields":[{"name":"0bitmap$1019"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1254", - "fields":[{"name":"0bitmap$1146"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1062", + "fields":[{"name":"0bitmap$1004"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1255", - "fields":[{"name":"0bitmap$1147"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1101", + "fields":[{"name":"0bitmap$1015"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1256", - "fields":[{"name":"0bitmap$1148"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1102", + "fields":[{"name":"0bitmap$1009"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1257", - "fields":[{"name":"0bitmap$1149"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1103", + "fields":[{"name":"0bitmap$1005"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1258", - "fields":[{"name":"0bitmap$1150"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1104", + "fields":[{"name":"0bitmap$1006"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1259", - "fields":[{"name":"0bitmap$1151"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1105", + "fields":[{"name":"0bitmap$1007"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1260", - "fields":[{"name":"0bitmap$1152"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1106", + "fields":[{"name":"0bitmap$1008"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1261", - "fields":[{"name":"0bitmap$1153"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1108", + "fields":[{"name":"0bitmap$1014"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1262", - "fields":[{"name":"0bitmap$1154"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1113", + "fields":[{"name":"0bitmap$1018"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1264", - "fields":[{"name":"0bitmap$1160"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1114", + "fields":[{"name":"0bitmap$1016"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1269", - "fields":[{"name":"0bitmap$1166"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1115", + "fields":[{"name":"0bitmap$1017"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1270", - "fields":[{"name":"0bitmap$1162"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1116", + "fields":[{"name":"0bitmap$1070"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1271", - "fields":[{"name":"0bitmap$1163"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1117", + "fields":[{"name":"0bitmap$1055"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1272", - "fields":[{"name":"0bitmap$1164"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1156", + "fields":[{"name":"0bitmap$1066"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1273", - "fields":[{"name":"0bitmap$1165"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1157", + "fields":[{"name":"0bitmap$1060"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1274", - "fields":[{"name":"0bitmap$1183"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1158", + "fields":[{"name":"0bitmap$1056"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1275", - "fields":[{"name":"0bitmap$1177"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1159", + "fields":[{"name":"0bitmap$1057"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1286", - "fields":[{"name":"0bitmap$1182"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1160", + "fields":[{"name":"0bitmap$1058"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1287", - "fields":[{"name":"0bitmap$1178"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1161", + "fields":[{"name":"0bitmap$1059"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1288", - "fields":[{"name":"0bitmap$1179"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1163", + "fields":[{"name":"0bitmap$1065"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1289", - "fields":[{"name":"0bitmap$1180"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1168", + "fields":[{"name":"0bitmap$1069"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1290", - "fields":[{"name":"0bitmap$1181"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1169", + "fields":[{"name":"0bitmap$1067"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1291", - "fields":[{"name":"0bitmap$1214"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1170", + "fields":[{"name":"0bitmap$1068"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1292", - "fields":[{"name":"0bitmap$1196"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1171", + "fields":[{"name":"0bitmap$1074"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1307", - "fields":[{"name":"0bitmap$1199"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1172", + "fields":[{"name":"0bitmap$1073"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1308", - "fields":[{"name":"0bitmap$1197"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1173", + "fields":[{"name":"0bitmap$1102"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1309", - "fields":[{"name":"0bitmap$1198"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1174", + "fields":[{"name":"0bitmap$1087"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1311", - "fields":[{"name":"0bitmap$1213"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1189", + "fields":[{"name":"0bitmap$1101"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1312", - "fields":[{"name":"0bitmap$1212"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1190", + "fields":[{"name":"0bitmap$1100"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1313", - "fields":[{"name":"0bitmap$1200"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1191", + "fields":[{"name":"0bitmap$1088"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1314", - "fields":[{"name":"0bitmap$1206"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1192", + "fields":[{"name":"0bitmap$1094"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1321", - "fields":[{"name":"0bitmap$1211"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1193", + "fields":[{"name":"0bitmap$1093"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1322", - "fields":[{"name":"0bitmap$1210"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1194", + "fields":[{"name":"0bitmap$1089"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1323", - "fields":[{"name":"0bitmap$1207"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1195", + "fields":[{"name":"0bitmap$1090"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1324", - "fields":[{"name":"0bitmap$1208"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1196", + "fields":[{"name":"0bitmap$1091"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1325", - "fields":[{"name":"0bitmap$1209"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1197", + "fields":[{"name":"0bitmap$1092"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1327", - "fields":[{"name":"0bitmap$1215"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1199", + "fields":[{"name":"0bitmap$1099"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1328", - "fields":[{"name":"0bitmap$1230"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1200", + "fields":[{"name":"0bitmap$1098"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1329", - "fields":[{"name":"0bitmap$1221"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1201", + "fields":[{"name":"0bitmap$1095"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1335", - "fields":[{"name":"0bitmap$1224"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1202", + "fields":[{"name":"0bitmap$1096"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1336", - "fields":[{"name":"0bitmap$1223"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1203", + "fields":[{"name":"0bitmap$1097"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1338", - "fields":[{"name":"0bitmap$1229"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1205", + "fields":[{"name":"0bitmap$1123"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1339", - "fields":[{"name":"0bitmap$1225"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1206", + "fields":[{"name":"0bitmap$1112"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1340", - "fields":[{"name":"0bitmap$1226"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1217", + "fields":[{"name":"0bitmap$1113"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1341", - "fields":[{"name":"0bitmap$1227"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1218", + "fields":[{"name":"0bitmap$1117"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1342", - "fields":[{"name":"0bitmap$1228"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1223", + "fields":[{"name":"0bitmap$1118"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1343", - "fields":[{"name":"0bitmap$1334"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1224", + "fields":[{"name":"0bitmap$1119"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1344", - "fields":[{"name":"0bitmap$1231"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1225", + "fields":[{"name":"0bitmap$1122"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1345", - "fields":[{"name":"0bitmap$1282"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1228", + "fields":[{"name":"0bitmap$1124"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1346", - "fields":[{"name":"0bitmap$1267"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1229", + "fields":[{"name":"0bitmap$1147"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1385", - "fields":[{"name":"0bitmap$1278"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1230", + "fields":[{"name":"0bitmap$1125"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1386", - "fields":[{"name":"0bitmap$1272"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1231", + "fields":[{"name":"0bitmap$1146"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1387", - "fields":[{"name":"0bitmap$1268"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1232", + "fields":[{"name":"0bitmap$1135"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1388", - "fields":[{"name":"0bitmap$1269"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1233", + "fields":[{"name":"0bitmap$1134"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1389", - "fields":[{"name":"0bitmap$1270"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1234", + "fields":[{"name":"0bitmap$1126"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1390", - "fields":[{"name":"0bitmap$1271"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1235", + "fields":[{"name":"0bitmap$1127"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1392", - "fields":[{"name":"0bitmap$1277"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1236", + "fields":[{"name":"0bitmap$1128"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1397", - "fields":[{"name":"0bitmap$1281"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1237", + "fields":[{"name":"0bitmap$1129"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1398", - "fields":[{"name":"0bitmap$1279"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1238", + "fields":[{"name":"0bitmap$1130"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1399", - "fields":[{"name":"0bitmap$1280"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1239", + "fields":[{"name":"0bitmap$1131"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1400", - "fields":[{"name":"0bitmap$1333"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1240", + "fields":[{"name":"0bitmap$1132"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1401", - "fields":[{"name":"0bitmap$1318"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1241", + "fields":[{"name":"0bitmap$1133"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1440", - "fields":[{"name":"0bitmap$1329"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1243", + "fields":[{"name":"0bitmap$1136"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1441", - "fields":[{"name":"0bitmap$1323"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1244", + "fields":[{"name":"0bitmap$1140"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1442", - "fields":[{"name":"0bitmap$1319"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1245", + "fields":[{"name":"0bitmap$1139"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1443", - "fields":[{"name":"0bitmap$1320"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1246", + "fields":[{"name":"0bitmap$1137"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1444", - "fields":[{"name":"0bitmap$1321"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1247", + "fields":[{"name":"0bitmap$1138"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1445", - "fields":[{"name":"0bitmap$1322"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1249", + "fields":[{"name":"0bitmap$1141"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1447", - "fields":[{"name":"0bitmap$1328"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1250", + "fields":[{"name":"0bitmap$1142"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1452", - "fields":[{"name":"0bitmap$1332"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1251", + "fields":[{"name":"0bitmap$1145"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1453", - "fields":[{"name":"0bitmap$1330"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1254", + "fields":[{"name":"0bitmap$1171"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1454", - "fields":[{"name":"0bitmap$1331"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1255", + "fields":[{"name":"0bitmap$1161"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1455", - "fields":[{"name":"0bitmap$1337"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1270", + "fields":[{"name":"0bitmap$1170"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1456", - "fields":[{"name":"0bitmap$1336"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1271", + "fields":[{"name":"0bitmap$1169"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1457", - "fields":[{"name":"0bitmap$1365"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1272", + "fields":[{"name":"0bitmap$1162"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1458", - "fields":[{"name":"0bitmap$1350"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1273", + "fields":[{"name":"0bitmap$1163"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1473", - "fields":[{"name":"0bitmap$1364"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1274", + "fields":[{"name":"0bitmap$1164"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1474", - "fields":[{"name":"0bitmap$1363"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1275", + "fields":[{"name":"0bitmap$1165"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1475", - "fields":[{"name":"0bitmap$1351"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1276", + "fields":[{"name":"0bitmap$1166"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1476", - "fields":[{"name":"0bitmap$1357"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1277", + "fields":[{"name":"0bitmap$1167"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1477", - "fields":[{"name":"0bitmap$1356"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1278", + "fields":[{"name":"0bitmap$1168"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1478", - "fields":[{"name":"0bitmap$1352"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1280", + "fields":[{"name":"0bitmap$1173"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1479", - "fields":[{"name":"0bitmap$1353"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1281", + "fields":[{"name":"0bitmap$1172"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1480", - "fields":[{"name":"0bitmap$1354"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1282", + "fields":[{"name":"0bitmap$1193"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1481", - "fields":[{"name":"0bitmap$1355"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1283", + "fields":[{"name":"0bitmap$1175"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1483", - "fields":[{"name":"0bitmap$1362"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1284", + "fields":[{"name":"0bitmap$1174"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1484", - "fields":[{"name":"0bitmap$1361"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1285", + "fields":[{"name":"0bitmap$1192"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1485", - "fields":[{"name":"0bitmap$1358"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1286", + "fields":[{"name":"0bitmap$1188"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1486", - "fields":[{"name":"0bitmap$1359"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1287", + "fields":[{"name":"0bitmap$1177"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1487", - "fields":[{"name":"0bitmap$1360"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1288", + "fields":[{"name":"0bitmap$1176"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1489", - "fields":[{"name":"0bitmap$1386"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1289", + "fields":[{"name":"0bitmap$1187"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1490", - "fields":[{"name":"0bitmap$1375"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1290", + "fields":[{"name":"0bitmap$1181"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1501", - "fields":[{"name":"0bitmap$1376"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1291", + "fields":[{"name":"0bitmap$1180"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1502", - "fields":[{"name":"0bitmap$1380"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1292", + "fields":[{"name":"0bitmap$1179"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1507", - "fields":[{"name":"0bitmap$1381"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1294", + "fields":[{"name":"0bitmap$1186"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1508", - "fields":[{"name":"0bitmap$1382"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1295", + "fields":[{"name":"0bitmap$1185"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1509", - "fields":[{"name":"0bitmap$1385"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1296", + "fields":[{"name":"0bitmap$1184"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$151", - "fields":[{"name":"0bitmap$270"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1299", + "fields":[{"name":"0bitmap$1191"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1512", - "fields":[{"name":"0bitmap$1387"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1300", + "fields":[{"name":"0bitmap$1190"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1513", - "fields":[{"name":"0bitmap$1410"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1301", + "fields":[{"name":"0bitmap$1189"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1514", - "fields":[{"name":"0bitmap$1388"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1302", + "fields":[{"name":"0bitmap$1259"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1515", - "fields":[{"name":"0bitmap$1409"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1303", + "fields":[{"name":"0bitmap$1229"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1516", - "fields":[{"name":"0bitmap$1398"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1342", + "fields":[{"name":"0bitmap$1253"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1517", - "fields":[{"name":"0bitmap$1397"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1343", + "fields":[{"name":"0bitmap$1233"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1518", - "fields":[{"name":"0bitmap$1389"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1344", + "fields":[{"name":"0bitmap$1230"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1519", - "fields":[{"name":"0bitmap$1390"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1345", + "fields":[{"name":"0bitmap$1231"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$152", - "fields":[{"name":"0bitmap$187"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1346", + "fields":[{"name":"0bitmap$1232"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1520", - "fields":[{"name":"0bitmap$1391"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1348", + "fields":[{"name":"0bitmap$1247"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1521", - "fields":[{"name":"0bitmap$1392"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1349", + "fields":[{"name":"0bitmap$1234"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1522", - "fields":[{"name":"0bitmap$1393"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1350", + "fields":[{"name":"0bitmap$1235"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1523", - "fields":[{"name":"0bitmap$1394"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1351", + "fields":[{"name":"0bitmap$1236"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1524", - "fields":[{"name":"0bitmap$1395"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1352", + "fields":[{"name":"0bitmap$1237"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1525", - "fields":[{"name":"0bitmap$1396"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1353", + "fields":[{"name":"0bitmap$1238"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1527", - "fields":[{"name":"0bitmap$1399"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1354", + "fields":[{"name":"0bitmap$1239"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1528", - "fields":[{"name":"0bitmap$1403"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1355", + "fields":[{"name":"0bitmap$1240"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1529", - "fields":[{"name":"0bitmap$1402"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1356", + "fields":[{"name":"0bitmap$1241"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$153", - "fields":[{"name":"0bitmap$172"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1357", + "fields":[{"name":"0bitmap$1242"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1530", - "fields":[{"name":"0bitmap$1400"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1358", + "fields":[{"name":"0bitmap$1243"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1531", - "fields":[{"name":"0bitmap$1401"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1359", + "fields":[{"name":"0bitmap$1244"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1533", - "fields":[{"name":"0bitmap$1404"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1360", + "fields":[{"name":"0bitmap$1245"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1534", - "fields":[{"name":"0bitmap$1405"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1361", + "fields":[{"name":"0bitmap$1246"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1535", - "fields":[{"name":"0bitmap$1408"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1363", + "fields":[{"name":"0bitmap$1252"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1538", - "fields":[{"name":"0bitmap$1434"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1368", + "fields":[{"name":"0bitmap$1258"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1539", - "fields":[{"name":"0bitmap$1424"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1369", + "fields":[{"name":"0bitmap$1254"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1554", - "fields":[{"name":"0bitmap$1433"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1370", + "fields":[{"name":"0bitmap$1255"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1555", - "fields":[{"name":"0bitmap$1432"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1371", + "fields":[{"name":"0bitmap$1256"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1556", - "fields":[{"name":"0bitmap$1425"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1372", + "fields":[{"name":"0bitmap$1257"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1557", - "fields":[{"name":"0bitmap$1426"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1373", + "fields":[{"name":"0bitmap$1262"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1558", - "fields":[{"name":"0bitmap$1427"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1374", + "fields":[{"name":"0bitmap$1261"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1559", - "fields":[{"name":"0bitmap$1428"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1376", + "fields":[{"name":"0bitmap$1263"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1560", - "fields":[{"name":"0bitmap$1429"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1377", + "fields":[{"name":"0bitmap$1264"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1561", - "fields":[{"name":"0bitmap$1430"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1378", + "fields":[{"name":"0bitmap$1265"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1562", - "fields":[{"name":"0bitmap$1431"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1379", + "fields":[{"name":"0bitmap$1295"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1564", - "fields":[{"name":"0bitmap$1436"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1380", + "fields":[{"name":"0bitmap$1277"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1565", - "fields":[{"name":"0bitmap$1435"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1395", + "fields":[{"name":"0bitmap$1280"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1566", - "fields":[{"name":"0bitmap$1456"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1396", + "fields":[{"name":"0bitmap$1278"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1567", - "fields":[{"name":"0bitmap$1438"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1397", + "fields":[{"name":"0bitmap$1279"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1568", - "fields":[{"name":"0bitmap$1437"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1399", + "fields":[{"name":"0bitmap$1294"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1569", - "fields":[{"name":"0bitmap$1455"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1400", + "fields":[{"name":"0bitmap$1293"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1570", - "fields":[{"name":"0bitmap$1451"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1401", + "fields":[{"name":"0bitmap$1281"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1571", - "fields":[{"name":"0bitmap$1440"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1402", + "fields":[{"name":"0bitmap$1287"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1572", - "fields":[{"name":"0bitmap$1439"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1409", + "fields":[{"name":"0bitmap$1292"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1573", - "fields":[{"name":"0bitmap$1450"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1410", + "fields":[{"name":"0bitmap$1291"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1574", - "fields":[{"name":"0bitmap$1444"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1411", + "fields":[{"name":"0bitmap$1288"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1575", - "fields":[{"name":"0bitmap$1443"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1412", + "fields":[{"name":"0bitmap$1289"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1576", - "fields":[{"name":"0bitmap$1442"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1413", + "fields":[{"name":"0bitmap$1290"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1578", - "fields":[{"name":"0bitmap$1449"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1415", + "fields":[{"name":"0bitmap$1380"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1579", - "fields":[{"name":"0bitmap$1448"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1416", + "fields":[{"name":"0bitmap$1334"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1580", - "fields":[{"name":"0bitmap$1447"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1458", + "fields":[{"name":"0bitmap$1335"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1583", - "fields":[{"name":"0bitmap$1454"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1459", + "fields":[{"name":"0bitmap$1375"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1584", - "fields":[{"name":"0bitmap$1453"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1460", + "fields":[{"name":"0bitmap$1374"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1585", - "fields":[{"name":"0bitmap$1452"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1502", + "fields":[{"name":"0bitmap$1377"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1586", - "fields":[{"name":"0bitmap$1522"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1504", + "fields":[{"name":"0bitmap$1378"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1587", - "fields":[{"name":"0bitmap$1492"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1505", + "fields":[{"name":"0bitmap$1379"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1626", - "fields":[{"name":"0bitmap$1516"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1506", + "fields":[{"name":"0bitmap$1397"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1627", - "fields":[{"name":"0bitmap$1496"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1628", - "fields":[{"name":"0bitmap$1493"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1629", - "fields":[{"name":"0bitmap$1494"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1630", - "fields":[{"name":"0bitmap$1495"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1632", - "fields":[{"name":"0bitmap$1510"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1633", - "fields":[{"name":"0bitmap$1497"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1634", - "fields":[{"name":"0bitmap$1498"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1635", - "fields":[{"name":"0bitmap$1499"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1636", - "fields":[{"name":"0bitmap$1500"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1637", - "fields":[{"name":"0bitmap$1501"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1638", - "fields":[{"name":"0bitmap$1502"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1639", - "fields":[{"name":"0bitmap$1503"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1640", - "fields":[{"name":"0bitmap$1504"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1641", - "fields":[{"name":"0bitmap$1505"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1642", - "fields":[{"name":"0bitmap$1506"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1643", - "fields":[{"name":"0bitmap$1507"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1644", - "fields":[{"name":"0bitmap$1508"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1645", - "fields":[{"name":"0bitmap$1509"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1647", - "fields":[{"name":"0bitmap$1515"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1652", - "fields":[{"name":"0bitmap$1521"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1653", - "fields":[{"name":"0bitmap$1517"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1654", - "fields":[{"name":"0bitmap$1518"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1655", - "fields":[{"name":"0bitmap$1519"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1656", - "fields":[{"name":"0bitmap$1520"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1657", - "fields":[{"name":"0bitmap$1525"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1658", - "fields":[{"name":"0bitmap$1524"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1660", - "fields":[{"name":"0bitmap$1526"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1507", + "fields":[{"name":"0bitmap$1393"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1661", - "fields":[{"name":"0bitmap$1527"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1508", + "fields":[{"name":"0bitmap$1382"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1662", - "fields":[{"name":"0bitmap$1528"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1509", + "fields":[{"name":"0bitmap$1381"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1663", - "fields":[{"name":"0bitmap$1558"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$151", + "fields":[{"name":"0bitmap$167"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1664", - "fields":[{"name":"0bitmap$1540"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1510", + "fields":[{"name":"0bitmap$1392"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1679", - "fields":[{"name":"0bitmap$1543"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1511", + "fields":[{"name":"0bitmap$1386"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1680", - "fields":[{"name":"0bitmap$1541"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1512", + "fields":[{"name":"0bitmap$1385"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1681", - "fields":[{"name":"0bitmap$1542"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1513", + "fields":[{"name":"0bitmap$1384"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1683", - "fields":[{"name":"0bitmap$1557"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1515", + "fields":[{"name":"0bitmap$1391"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1684", - "fields":[{"name":"0bitmap$1556"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$152", + "fields":[{"name":"0bitmap$149"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1685", - "fields":[{"name":"0bitmap$1544"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1520", + "fields":[{"name":"0bitmap$1396"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1686", - "fields":[{"name":"0bitmap$1550"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1523", + "fields":[{"name":"0bitmap$1452"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1693", - "fields":[{"name":"0bitmap$1555"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1524", + "fields":[{"name":"0bitmap$1414"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1694", - "fields":[{"name":"0bitmap$1554"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1525", + "fields":[{"name":"0bitmap$1400"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1695", - "fields":[{"name":"0bitmap$1551"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1526", + "fields":[{"name":"0bitmap$1399"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1696", - "fields":[{"name":"0bitmap$1552"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1528", + "fields":[{"name":"0bitmap$1402"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1697", - "fields":[{"name":"0bitmap$1553"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1530", + "fields":[{"name":"0bitmap$1413"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1699", - "fields":[{"name":"0bitmap$1646"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1531", + "fields":[{"name":"0bitmap$1412"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1700", - "fields":[{"name":"0bitmap$1598"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1532", + "fields":[{"name":"0bitmap$1406"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1743", - "fields":[{"name":"0bitmap$1639"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1533", + "fields":[{"name":"0bitmap$1405"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1744", - "fields":[{"name":"0bitmap$1638"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1534", + "fields":[{"name":"0bitmap$1404"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1787", - "fields":[{"name":"0bitmap$1642"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1536", + "fields":[{"name":"0bitmap$1411"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1788", - "fields":[{"name":"0bitmap$1640"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1537", + "fields":[{"name":"0bitmap$1410"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1789", - "fields":[{"name":"0bitmap$1641"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1538", + "fields":[{"name":"0bitmap$1409"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1790", - "fields":[{"name":"0bitmap$1645"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1541", + "fields":[{"name":"0bitmap$1434"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1791", - "fields":[{"name":"0bitmap$1643"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1542", + "fields":[{"name":"0bitmap$1417"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1792", - "fields":[{"name":"0bitmap$1644"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1543", + "fields":[{"name":"0bitmap$1416"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1793", - "fields":[{"name":"0bitmap$1663"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1545", + "fields":[{"name":"0bitmap$1422"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1794", - "fields":[{"name":"0bitmap$1659"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1550", + "fields":[{"name":"0bitmap$1433"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1795", - "fields":[{"name":"0bitmap$1648"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1551", + "fields":[{"name":"0bitmap$1432"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1796", - "fields":[{"name":"0bitmap$1647"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1552", + "fields":[{"name":"0bitmap$1426"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1797", - "fields":[{"name":"0bitmap$1658"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1553", + "fields":[{"name":"0bitmap$1425"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1798", - "fields":[{"name":"0bitmap$1652"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1554", + "fields":[{"name":"0bitmap$1424"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1799", - "fields":[{"name":"0bitmap$1651"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1556", + "fields":[{"name":"0bitmap$1431"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1800", - "fields":[{"name":"0bitmap$1650"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1557", + "fields":[{"name":"0bitmap$1430"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1802", - "fields":[{"name":"0bitmap$1657"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1558", + "fields":[{"name":"0bitmap$1429"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1807", - "fields":[{"name":"0bitmap$1662"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1561", + "fields":[{"name":"0bitmap$1451"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1810", - "fields":[{"name":"0bitmap$1718"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1562", + "fields":[{"name":"0bitmap$1438"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1811", - "fields":[{"name":"0bitmap$1680"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1563", + "fields":[{"name":"0bitmap$1437"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1812", - "fields":[{"name":"0bitmap$1666"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1566", + "fields":[{"name":"0bitmap$1439"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1813", - "fields":[{"name":"0bitmap$1665"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1567", + "fields":[{"name":"0bitmap$1450"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1815", - "fields":[{"name":"0bitmap$1668"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1568", + "fields":[{"name":"0bitmap$1449"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1817", - "fields":[{"name":"0bitmap$1679"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1569", + "fields":[{"name":"0bitmap$1443"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1818", - "fields":[{"name":"0bitmap$1678"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1570", + "fields":[{"name":"0bitmap$1442"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1819", - "fields":[{"name":"0bitmap$1672"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1571", + "fields":[{"name":"0bitmap$1441"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1820", - "fields":[{"name":"0bitmap$1671"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1573", + "fields":[{"name":"0bitmap$1448"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1821", - "fields":[{"name":"0bitmap$1670"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1578", + "fields":[{"name":"0bitmap$1453"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1823", - "fields":[{"name":"0bitmap$1677"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1579", + "fields":[{"name":"0bitmap$1474"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1824", - "fields":[{"name":"0bitmap$1676"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1580", + "fields":[{"name":"0bitmap$1463"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1825", - "fields":[{"name":"0bitmap$1675"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1591", + "fields":[{"name":"0bitmap$1464"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1828", - "fields":[{"name":"0bitmap$1700"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1592", + "fields":[{"name":"0bitmap$1468"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1829", - "fields":[{"name":"0bitmap$1683"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1593", + "fields":[{"name":"0bitmap$1467"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1830", - "fields":[{"name":"0bitmap$1682"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1594", + "fields":[{"name":"0bitmap$1465"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1832", - "fields":[{"name":"0bitmap$1688"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1595", + "fields":[{"name":"0bitmap$1466"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1837", - "fields":[{"name":"0bitmap$1699"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1597", + "fields":[{"name":"0bitmap$1469"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1838", - "fields":[{"name":"0bitmap$1698"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1598", + "fields":[{"name":"0bitmap$1470"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1839", - "fields":[{"name":"0bitmap$1692"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1599", + "fields":[{"name":"0bitmap$1473"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1840", - "fields":[{"name":"0bitmap$1691"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1602", + "fields":[{"name":"0bitmap$1475"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1841", - "fields":[{"name":"0bitmap$1690"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1603", + "fields":[{"name":"0bitmap$1483"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1843", - "fields":[{"name":"0bitmap$1697"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1604", + "fields":[{"name":"0bitmap$1476"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1844", - "fields":[{"name":"0bitmap$1696"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1605", + "fields":[{"name":"0bitmap$1477"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1845", - "fields":[{"name":"0bitmap$1695"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1606", + "fields":[{"name":"0bitmap$1478"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1848", - "fields":[{"name":"0bitmap$1717"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1607", + "fields":[{"name":"0bitmap$1479"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1849", - "fields":[{"name":"0bitmap$1704"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1608", + "fields":[{"name":"0bitmap$1480"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1850", - "fields":[{"name":"0bitmap$1703"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1609", + "fields":[{"name":"0bitmap$1481"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1853", - "fields":[{"name":"0bitmap$1705"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1610", + "fields":[{"name":"0bitmap$1482"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1854", - "fields":[{"name":"0bitmap$1716"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1612", + "fields":[{"name":"0bitmap$1484"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1855", - "fields":[{"name":"0bitmap$1715"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1613", + "fields":[{"name":"0bitmap$1493"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1856", - "fields":[{"name":"0bitmap$1709"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1614", + "fields":[{"name":"0bitmap$1492"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1857", - "fields":[{"name":"0bitmap$1708"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1615", + "fields":[{"name":"0bitmap$1485"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1858", - "fields":[{"name":"0bitmap$1707"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1616", + "fields":[{"name":"0bitmap$1486"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1860", - "fields":[{"name":"0bitmap$1714"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1617", + "fields":[{"name":"0bitmap$1487"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1865", - "fields":[{"name":"0bitmap$1739"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1618", + "fields":[{"name":"0bitmap$1488"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1866", - "fields":[{"name":"0bitmap$1728"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1619", + "fields":[{"name":"0bitmap$1489"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1877", - "fields":[{"name":"0bitmap$1729"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1620", + "fields":[{"name":"0bitmap$1490"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1878", - "fields":[{"name":"0bitmap$1733"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1621", + "fields":[{"name":"0bitmap$1491"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1879", - "fields":[{"name":"0bitmap$1732"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1623", + "fields":[{"name":"0bitmap$1494"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1880", - "fields":[{"name":"0bitmap$1730"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1624", + "fields":[{"name":"0bitmap$1497"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1881", - "fields":[{"name":"0bitmap$1731"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1625", + "fields":[{"name":"0bitmap$1496"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1883", - "fields":[{"name":"0bitmap$1734"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1627", + "fields":[{"name":"0bitmap$1509"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1884", - "fields":[{"name":"0bitmap$1735"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1628", + "fields":[{"name":"0bitmap$1508"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1885", - "fields":[{"name":"0bitmap$1738"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1629", + "fields":[{"name":"0bitmap$1507"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1888", - "fields":[{"name":"0bitmap$1742"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1630", + "fields":[{"name":"0bitmap$1501"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1889", - "fields":[{"name":"0bitmap$1740"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1631", + "fields":[{"name":"0bitmap$1500"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1890", - "fields":[{"name":"0bitmap$1741"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1632", + "fields":[{"name":"0bitmap$1499"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1891", - "fields":[{"name":"0bitmap$1751"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1634", + "fields":[{"name":"0bitmap$1506"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1892", - "fields":[{"name":"0bitmap$1743"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1635", + "fields":[{"name":"0bitmap$1505"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1893", - "fields":[{"name":"0bitmap$1744"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1636", + "fields":[{"name":"0bitmap$1504"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1894", - "fields":[{"name":"0bitmap$1745"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1639", + "fields":[{"name":"0bitmap$1521"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1895", - "fields":[{"name":"0bitmap$1746"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1640", + "fields":[{"name":"0bitmap$1520"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1896", - "fields":[{"name":"0bitmap$1747"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1641", + "fields":[{"name":"0bitmap$1519"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1897", - "fields":[{"name":"0bitmap$1748"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1642", + "fields":[{"name":"0bitmap$1513"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1898", - "fields":[{"name":"0bitmap$1749"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1643", + "fields":[{"name":"0bitmap$1512"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1899", - "fields":[{"name":"0bitmap$1750"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1644", + "fields":[{"name":"0bitmap$1511"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1901", - "fields":[{"name":"0bitmap$1752"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1646", + "fields":[{"name":"0bitmap$1518"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1902", - "fields":[{"name":"0bitmap$1762"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1647", + "fields":[{"name":"0bitmap$1517"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1903", - "fields":[{"name":"0bitmap$1761"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1648", + "fields":[{"name":"0bitmap$1516"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1904", - "fields":[{"name":"0bitmap$1753"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1653", + "fields":[{"name":"0bitmap$1"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1905", - "fields":[{"name":"0bitmap$1754"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$167", + "fields":[{"name":"0bitmap$152"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1906", - "fields":[{"name":"0bitmap$1755"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$168", + "fields":[{"name":"0bitmap$150"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1907", - "fields":[{"name":"0bitmap$1756"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$169", + "fields":[{"name":"0bitmap$151"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1908", - "fields":[{"name":"0bitmap$1757"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$171", + "fields":[{"name":"0bitmap$166"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1909", - "fields":[{"name":"0bitmap$1758"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$172", + "fields":[{"name":"0bitmap$165"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1910", - "fields":[{"name":"0bitmap$1759"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$173", + "fields":[{"name":"0bitmap$153"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1911", - "fields":[{"name":"0bitmap$1760"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$174", + "fields":[{"name":"0bitmap$159"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1913", - "fields":[{"name":"0bitmap$1765"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$181", + "fields":[{"name":"0bitmap$164"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1914", - "fields":[{"name":"0bitmap$1763"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$182", + "fields":[{"name":"0bitmap$163"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1915", - "fields":[{"name":"0bitmap$1764"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$183", + "fields":[{"name":"0bitmap$160"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1916", - "fields":[{"name":"0bitmap$1768"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$184", + "fields":[{"name":"0bitmap$161"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1917", - "fields":[{"name":"0bitmap$1767"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$185", + "fields":[{"name":"0bitmap$162"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1919", - "fields":[{"name":"0bitmap$1780"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$187", + "fields":[{"name":"0bitmap$168"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$192", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$188", "fields":[{"name":"0bitmap$183"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1920", - "fields":[{"name":"0bitmap$1779"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1921", - "fields":[{"name":"0bitmap$1778"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1922", - "fields":[{"name":"0bitmap$1772"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1923", - "fields":[{"name":"0bitmap$1771"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1924", - "fields":[{"name":"0bitmap$1770"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1926", - "fields":[{"name":"0bitmap$1777"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1927", - "fields":[{"name":"0bitmap$1776"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1928", - "fields":[{"name":"0bitmap$1775"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$189", + "fields":[{"name":"0bitmap$174"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$193", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$195", "fields":[{"name":"0bitmap$177"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1931", - "fields":[{"name":"0bitmap$1792"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1932", - "fields":[{"name":"0bitmap$1791"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1933", - "fields":[{"name":"0bitmap$1790"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1934", - "fields":[{"name":"0bitmap$1784"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1935", - "fields":[{"name":"0bitmap$1783"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1936", - "fields":[{"name":"0bitmap$1782"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1938", - "fields":[{"name":"0bitmap$1789"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1939", - "fields":[{"name":"0bitmap$1788"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$196", + "fields":[{"name":"0bitmap$176"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$194", - "fields":[{"name":"0bitmap$173"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$198", + "fields":[{"name":"0bitmap$182"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1940", - "fields":[{"name":"0bitmap$1787"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$199", + "fields":[{"name":"0bitmap$178"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$195", - "fields":[{"name":"0bitmap$174"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$2", + "fields":[{"name":"0bitmap$3"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$196", - "fields":[{"name":"0bitmap$175"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$200", + "fields":[{"name":"0bitmap$179"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$197", - "fields":[{"name":"0bitmap$176"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$201", + "fields":[{"name":"0bitmap$180"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$199", - "fields":[{"name":"0bitmap$182"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$202", + "fields":[{"name":"0bitmap$181"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$2", - "fields":[{"name":"0bitmap$2"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$203", + "fields":[{"name":"0bitmap$287"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$204", - "fields":[{"name":"0bitmap$186"}] + "fields":[{"name":"0bitmap$184"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$205", - "fields":[{"name":"0bitmap$184"}] + "fields":[{"name":"0bitmap$235"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$206", - "fields":[{"name":"0bitmap$185"}] + "fields":[{"name":"0bitmap$220"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$207", - "fields":[{"name":"0bitmap$253"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$245", + "fields":[{"name":"0bitmap$231"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$208", - "fields":[{"name":"0bitmap$223"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$246", + "fields":[{"name":"0bitmap$225"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$247", - "fields":[{"name":"0bitmap$247"}] + "fields":[{"name":"0bitmap$221"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$248", - "fields":[{"name":"0bitmap$227"}] + "fields":[{"name":"0bitmap$222"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$249", - "fields":[{"name":"0bitmap$224"}] + "fields":[{"name":"0bitmap$223"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$250", - "fields":[{"name":"0bitmap$225"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$251", - "fields":[{"name":"0bitmap$226"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$253", - "fields":[{"name":"0bitmap$241"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$254", - "fields":[{"name":"0bitmap$228"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$255", - "fields":[{"name":"0bitmap$229"}] + "fields":[{"name":"0bitmap$224"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$256", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$252", "fields":[{"name":"0bitmap$230"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$257", - "fields":[{"name":"0bitmap$231"}] + "fields":[{"name":"0bitmap$234"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$258", @@ -1469,1119 +1296,931 @@ }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$260", - "fields":[{"name":"0bitmap$234"}] + "fields":[{"name":"0bitmap$286"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$261", - "fields":[{"name":"0bitmap$235"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$262", - "fields":[{"name":"0bitmap$236"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$263", - "fields":[{"name":"0bitmap$237"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$264", - "fields":[{"name":"0bitmap$238"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$265", - "fields":[{"name":"0bitmap$239"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$266", - "fields":[{"name":"0bitmap$240"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$268", - "fields":[{"name":"0bitmap$246"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$273", - "fields":[{"name":"0bitmap$252"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$274", - "fields":[{"name":"0bitmap$248"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$275", - "fields":[{"name":"0bitmap$249"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$276", - "fields":[{"name":"0bitmap$250"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$277", - "fields":[{"name":"0bitmap$251"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$278", - "fields":[{"name":"0bitmap$269"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$279", - "fields":[{"name":"0bitmap$263"}] + "fields":[{"name":"0bitmap$271"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$290", - "fields":[{"name":"0bitmap$268"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$300", + "fields":[{"name":"0bitmap$282"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$291", - "fields":[{"name":"0bitmap$264"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$301", + "fields":[{"name":"0bitmap$276"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$292", - "fields":[{"name":"0bitmap$265"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$302", + "fields":[{"name":"0bitmap$272"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$293", - "fields":[{"name":"0bitmap$266"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$303", + "fields":[{"name":"0bitmap$273"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$294", - "fields":[{"name":"0bitmap$267"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$304", + "fields":[{"name":"0bitmap$274"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$295", - "fields":[{"name":"0bitmap$300"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$305", + "fields":[{"name":"0bitmap$275"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$296", - "fields":[{"name":"0bitmap$282"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$307", + "fields":[{"name":"0bitmap$281"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$311", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$312", "fields":[{"name":"0bitmap$285"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$312", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$313", "fields":[{"name":"0bitmap$283"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$313", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$314", "fields":[{"name":"0bitmap$284"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$315", - "fields":[{"name":"0bitmap$299"}] + "fields":[{"name":"0bitmap$290"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$316", - "fields":[{"name":"0bitmap$298"}] + "fields":[{"name":"0bitmap$289"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$317", - "fields":[{"name":"0bitmap$286"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$318", - "fields":[{"name":"0bitmap$292"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$325", - "fields":[{"name":"0bitmap$297"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$326", - "fields":[{"name":"0bitmap$296"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$327", - "fields":[{"name":"0bitmap$293"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$328", - "fields":[{"name":"0bitmap$294"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$329", - "fields":[{"name":"0bitmap$295"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$331", - "fields":[{"name":"0bitmap$301"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$332", - "fields":[{"name":"0bitmap$316"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$333", - "fields":[{"name":"0bitmap$307"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$339", - "fields":[{"name":"0bitmap$310"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$340", - "fields":[{"name":"0bitmap$309"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$342", - "fields":[{"name":"0bitmap$315"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$343", - "fields":[{"name":"0bitmap$311"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$344", - "fields":[{"name":"0bitmap$312"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$345", - "fields":[{"name":"0bitmap$313"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$346", - "fields":[{"name":"0bitmap$314"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$347", - "fields":[{"name":"0bitmap$420"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$348", - "fields":[{"name":"0bitmap$317"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$349", - "fields":[{"name":"0bitmap$368"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$350", - "fields":[{"name":"0bitmap$353"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$389", - "fields":[{"name":"0bitmap$364"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$390", - "fields":[{"name":"0bitmap$358"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$391", - "fields":[{"name":"0bitmap$354"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$392", - "fields":[{"name":"0bitmap$355"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$393", - "fields":[{"name":"0bitmap$356"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$394", - "fields":[{"name":"0bitmap$357"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$396", - "fields":[{"name":"0bitmap$363"}] + "fields":[{"name":"0bitmap$424"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$4", - "fields":[{"name":"0bitmap$3"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$401", - "fields":[{"name":"0bitmap$367"}] + "fields":[{"name":"0bitmap$4"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$402", - "fields":[{"name":"0bitmap$365"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$462", + "fields":[{"name":"0bitmap$438"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$403", - "fields":[{"name":"0bitmap$366"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$463", + "fields":[{"name":"0bitmap$437"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$404", - "fields":[{"name":"0bitmap$419"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$464", + "fields":[{"name":"0bitmap$426"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$405", - "fields":[{"name":"0bitmap$404"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$466", + "fields":[{"name":"0bitmap$436"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$444", - "fields":[{"name":"0bitmap$415"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$467", + "fields":[{"name":"0bitmap$435"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$445", - "fields":[{"name":"0bitmap$409"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$468", + "fields":[{"name":"0bitmap$427"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$446", - "fields":[{"name":"0bitmap$405"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$469", + "fields":[{"name":"0bitmap$428"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$447", - "fields":[{"name":"0bitmap$406"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$470", + "fields":[{"name":"0bitmap$429"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$448", - "fields":[{"name":"0bitmap$407"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$471", + "fields":[{"name":"0bitmap$430"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$449", - "fields":[{"name":"0bitmap$408"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$472", + "fields":[{"name":"0bitmap$431"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$451", - "fields":[{"name":"0bitmap$414"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$473", + "fields":[{"name":"0bitmap$432"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$456", - "fields":[{"name":"0bitmap$418"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$474", + "fields":[{"name":"0bitmap$433"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$457", - "fields":[{"name":"0bitmap$416"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$475", + "fields":[{"name":"0bitmap$434"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$458", - "fields":[{"name":"0bitmap$417"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$477", + "fields":[{"name":"0bitmap$439"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$459", - "fields":[{"name":"0bitmap$423"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$478", + "fields":[{"name":"0bitmap$576"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$460", - "fields":[{"name":"0bitmap$422"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$479", + "fields":[{"name":"0bitmap$490"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$461", - "fields":[{"name":"0bitmap$557"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$480", + "fields":[{"name":"0bitmap$475"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$5", - "fields":[{"name":"0bitmap$421"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$6", - "fields":[{"name":"0bitmap$136"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$606", - "fields":[{"name":"0bitmap$571"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$607", - "fields":[{"name":"0bitmap$570"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$608", - "fields":[{"name":"0bitmap$559"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$610", - "fields":[{"name":"0bitmap$569"}] + "fields":[{"name":"0bitmap$288"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$611", - "fields":[{"name":"0bitmap$568"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$519", + "fields":[{"name":"0bitmap$486"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$612", - "fields":[{"name":"0bitmap$560"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$520", + "fields":[{"name":"0bitmap$480"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$613", - "fields":[{"name":"0bitmap$561"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$521", + "fields":[{"name":"0bitmap$476"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$614", - "fields":[{"name":"0bitmap$562"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$522", + "fields":[{"name":"0bitmap$477"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$615", - "fields":[{"name":"0bitmap$563"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$523", + "fields":[{"name":"0bitmap$478"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$616", - "fields":[{"name":"0bitmap$564"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$524", + "fields":[{"name":"0bitmap$479"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$617", - "fields":[{"name":"0bitmap$565"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$526", + "fields":[{"name":"0bitmap$485"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$618", - "fields":[{"name":"0bitmap$566"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$531", + "fields":[{"name":"0bitmap$489"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$619", - "fields":[{"name":"0bitmap$567"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$532", + "fields":[{"name":"0bitmap$487"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$621", - "fields":[{"name":"0bitmap$706"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$533", + "fields":[{"name":"0bitmap$488"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$622", - "fields":[{"name":"0bitmap$705"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$534", + "fields":[{"name":"0bitmap$493"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$623", - "fields":[{"name":"0bitmap$622"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$535", + "fields":[{"name":"0bitmap$492"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$624", - "fields":[{"name":"0bitmap$607"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$537", + "fields":[{"name":"0bitmap$559"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$663", - "fields":[{"name":"0bitmap$618"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$538", + "fields":[{"name":"0bitmap$529"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$664", - "fields":[{"name":"0bitmap$612"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$577", + "fields":[{"name":"0bitmap$553"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$665", - "fields":[{"name":"0bitmap$608"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$578", + "fields":[{"name":"0bitmap$533"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$666", - "fields":[{"name":"0bitmap$609"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$579", + "fields":[{"name":"0bitmap$530"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$667", - "fields":[{"name":"0bitmap$610"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$580", + "fields":[{"name":"0bitmap$531"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$668", - "fields":[{"name":"0bitmap$611"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$581", + "fields":[{"name":"0bitmap$532"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$670", - "fields":[{"name":"0bitmap$617"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$583", + "fields":[{"name":"0bitmap$547"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$675", - "fields":[{"name":"0bitmap$621"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$584", + "fields":[{"name":"0bitmap$534"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$676", - "fields":[{"name":"0bitmap$619"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$677", - "fields":[{"name":"0bitmap$620"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$585", + "fields":[{"name":"0bitmap$535"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$678", - "fields":[{"name":"0bitmap$688"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$586", + "fields":[{"name":"0bitmap$536"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$679", - "fields":[{"name":"0bitmap$658"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$587", + "fields":[{"name":"0bitmap$537"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$718", - "fields":[{"name":"0bitmap$682"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$588", + "fields":[{"name":"0bitmap$538"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$719", - "fields":[{"name":"0bitmap$662"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$589", + "fields":[{"name":"0bitmap$539"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$720", - "fields":[{"name":"0bitmap$659"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$590", + "fields":[{"name":"0bitmap$540"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$721", - "fields":[{"name":"0bitmap$660"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$591", + "fields":[{"name":"0bitmap$541"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$722", - "fields":[{"name":"0bitmap$661"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$592", + "fields":[{"name":"0bitmap$542"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$724", - "fields":[{"name":"0bitmap$676"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$593", + "fields":[{"name":"0bitmap$543"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$725", - "fields":[{"name":"0bitmap$663"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$594", + "fields":[{"name":"0bitmap$544"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$726", - "fields":[{"name":"0bitmap$664"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$595", + "fields":[{"name":"0bitmap$545"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$727", - "fields":[{"name":"0bitmap$665"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$596", + "fields":[{"name":"0bitmap$546"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$728", - "fields":[{"name":"0bitmap$666"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$598", + "fields":[{"name":"0bitmap$552"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$729", - "fields":[{"name":"0bitmap$667"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$6", + "fields":[{"name":"0bitmap$137"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$730", - "fields":[{"name":"0bitmap$668"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$603", + "fields":[{"name":"0bitmap$558"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$731", - "fields":[{"name":"0bitmap$669"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$604", + "fields":[{"name":"0bitmap$554"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$732", - "fields":[{"name":"0bitmap$670"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$605", + "fields":[{"name":"0bitmap$555"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$733", - "fields":[{"name":"0bitmap$671"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$606", + "fields":[{"name":"0bitmap$556"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$734", - "fields":[{"name":"0bitmap$672"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$607", + "fields":[{"name":"0bitmap$557"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$735", - "fields":[{"name":"0bitmap$673"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$608", + "fields":[{"name":"0bitmap$575"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$736", - "fields":[{"name":"0bitmap$674"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$609", + "fields":[{"name":"0bitmap$569"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$737", - "fields":[{"name":"0bitmap$675"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$620", + "fields":[{"name":"0bitmap$574"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$739", - "fields":[{"name":"0bitmap$681"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$621", + "fields":[{"name":"0bitmap$570"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$744", - "fields":[{"name":"0bitmap$687"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$622", + "fields":[{"name":"0bitmap$571"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$745", - "fields":[{"name":"0bitmap$683"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$623", + "fields":[{"name":"0bitmap$572"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$746", - "fields":[{"name":"0bitmap$684"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$624", + "fields":[{"name":"0bitmap$573"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$747", - "fields":[{"name":"0bitmap$685"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$625", + "fields":[{"name":"0bitmap$577"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$748", - "fields":[{"name":"0bitmap$686"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$626", + "fields":[{"name":"0bitmap$677"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$749", - "fields":[{"name":"0bitmap$704"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$627", + "fields":[{"name":"0bitmap$589"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$766", - "fields":[{"name":"0bitmap$806"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$628", + "fields":[{"name":"0bitmap$587"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$767", - "fields":[{"name":"0bitmap$718"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$629", + "fields":[{"name":"0bitmap$586"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$768", - "fields":[{"name":"0bitmap$716"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$630", + "fields":[{"name":"0bitmap$578"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$769", - "fields":[{"name":"0bitmap$715"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$631", + "fields":[{"name":"0bitmap$579"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$770", - "fields":[{"name":"0bitmap$707"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$632", + "fields":[{"name":"0bitmap$580"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$771", - "fields":[{"name":"0bitmap$708"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$633", + "fields":[{"name":"0bitmap$581"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$772", - "fields":[{"name":"0bitmap$709"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$634", + "fields":[{"name":"0bitmap$582"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$773", - "fields":[{"name":"0bitmap$710"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$635", + "fields":[{"name":"0bitmap$583"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$774", - "fields":[{"name":"0bitmap$711"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$636", + "fields":[{"name":"0bitmap$584"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$775", - "fields":[{"name":"0bitmap$712"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$637", + "fields":[{"name":"0bitmap$585"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$776", - "fields":[{"name":"0bitmap$713"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$639", + "fields":[{"name":"0bitmap$588"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$777", - "fields":[{"name":"0bitmap$714"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$641", + "fields":[{"name":"0bitmap$605"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$779", - "fields":[{"name":"0bitmap$717"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$642", + "fields":[{"name":"0bitmap$599"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$781", - "fields":[{"name":"0bitmap$734"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$653", + "fields":[{"name":"0bitmap$603"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$782", - "fields":[{"name":"0bitmap$728"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$654", + "fields":[{"name":"0bitmap$602"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$793", - "fields":[{"name":"0bitmap$732"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$655", + "fields":[{"name":"0bitmap$600"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$794", - "fields":[{"name":"0bitmap$731"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$656", + "fields":[{"name":"0bitmap$601"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$795", - "fields":[{"name":"0bitmap$729"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$658", + "fields":[{"name":"0bitmap$604"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$796", - "fields":[{"name":"0bitmap$730"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$660", + "fields":[{"name":"0bitmap$615"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$798", - "fields":[{"name":"0bitmap$733"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$671", + "fields":[{"name":"0bitmap$619"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$800", - "fields":[{"name":"0bitmap$744"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$676", + "fields":[{"name":"0bitmap$620"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$811", - "fields":[{"name":"0bitmap$748"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$677", + "fields":[{"name":"0bitmap$621"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$816", - "fields":[{"name":"0bitmap$749"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$678", + "fields":[{"name":"0bitmap$622"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$817", - "fields":[{"name":"0bitmap$750"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$679", + "fields":[{"name":"0bitmap$624"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$818", - "fields":[{"name":"0bitmap$751"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$680", + "fields":[{"name":"0bitmap$623"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$819", - "fields":[{"name":"0bitmap$753"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$681", + "fields":[{"name":"0bitmap$626"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$820", - "fields":[{"name":"0bitmap$752"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$682", + "fields":[{"name":"0bitmap$625"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$821", - "fields":[{"name":"0bitmap$755"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$683", + "fields":[{"name":"0bitmap$643"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$822", - "fields":[{"name":"0bitmap$754"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$684", + "fields":[{"name":"0bitmap$627"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$823", - "fields":[{"name":"0bitmap$772"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$685", + "fields":[{"name":"0bitmap$628"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$824", - "fields":[{"name":"0bitmap$756"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$686", + "fields":[{"name":"0bitmap$642"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$825", - "fields":[{"name":"0bitmap$757"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$687", + "fields":[{"name":"0bitmap$641"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$826", - "fields":[{"name":"0bitmap$771"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$688", + "fields":[{"name":"0bitmap$629"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$827", - "fields":[{"name":"0bitmap$770"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$689", + "fields":[{"name":"0bitmap$635"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$828", - "fields":[{"name":"0bitmap$758"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$690", + "fields":[{"name":"0bitmap$634"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$829", - "fields":[{"name":"0bitmap$764"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$691", + "fields":[{"name":"0bitmap$630"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$830", - "fields":[{"name":"0bitmap$763"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$692", + "fields":[{"name":"0bitmap$631"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$831", - "fields":[{"name":"0bitmap$759"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$693", + "fields":[{"name":"0bitmap$632"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$832", - "fields":[{"name":"0bitmap$760"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$694", + "fields":[{"name":"0bitmap$633"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$833", - "fields":[{"name":"0bitmap$761"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$696", + "fields":[{"name":"0bitmap$640"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$834", - "fields":[{"name":"0bitmap$762"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$697", + "fields":[{"name":"0bitmap$639"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$836", - "fields":[{"name":"0bitmap$769"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$698", + "fields":[{"name":"0bitmap$636"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$837", - "fields":[{"name":"0bitmap$768"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$699", + "fields":[{"name":"0bitmap$637"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$838", - "fields":[{"name":"0bitmap$765"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$700", + "fields":[{"name":"0bitmap$638"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$839", - "fields":[{"name":"0bitmap$766"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$702", + "fields":[{"name":"0bitmap$656"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$840", - "fields":[{"name":"0bitmap$767"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$703", + "fields":[{"name":"0bitmap$645"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$842", - "fields":[{"name":"0bitmap$785"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$705", + "fields":[{"name":"0bitmap$655"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$843", - "fields":[{"name":"0bitmap$774"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$706", + "fields":[{"name":"0bitmap$654"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$845", - "fields":[{"name":"0bitmap$784"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$707", + "fields":[{"name":"0bitmap$646"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$846", - "fields":[{"name":"0bitmap$783"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$708", + "fields":[{"name":"0bitmap$647"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$847", - "fields":[{"name":"0bitmap$775"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$709", + "fields":[{"name":"0bitmap$648"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$848", - "fields":[{"name":"0bitmap$776"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$710", + "fields":[{"name":"0bitmap$649"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$849", - "fields":[{"name":"0bitmap$777"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$711", + "fields":[{"name":"0bitmap$650"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$850", - "fields":[{"name":"0bitmap$778"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$712", + "fields":[{"name":"0bitmap$651"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$851", - "fields":[{"name":"0bitmap$779"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$713", + "fields":[{"name":"0bitmap$652"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$852", - "fields":[{"name":"0bitmap$780"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$714", + "fields":[{"name":"0bitmap$653"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$853", - "fields":[{"name":"0bitmap$781"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$716", + "fields":[{"name":"0bitmap$674"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$854", - "fields":[{"name":"0bitmap$782"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$717", + "fields":[{"name":"0bitmap$658"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$856", - "fields":[{"name":"0bitmap$803"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$719", + "fields":[{"name":"0bitmap$659"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$857", - "fields":[{"name":"0bitmap$787"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$720", + "fields":[{"name":"0bitmap$673"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$859", - "fields":[{"name":"0bitmap$788"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$721", + "fields":[{"name":"0bitmap$672"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$860", - "fields":[{"name":"0bitmap$802"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$722", + "fields":[{"name":"0bitmap$660"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$861", - "fields":[{"name":"0bitmap$801"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$723", + "fields":[{"name":"0bitmap$666"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$862", - "fields":[{"name":"0bitmap$789"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$724", + "fields":[{"name":"0bitmap$665"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$863", - "fields":[{"name":"0bitmap$795"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$725", + "fields":[{"name":"0bitmap$661"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$864", - "fields":[{"name":"0bitmap$794"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$726", + "fields":[{"name":"0bitmap$662"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$865", - "fields":[{"name":"0bitmap$790"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$727", + "fields":[{"name":"0bitmap$663"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$866", - "fields":[{"name":"0bitmap$791"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$728", + "fields":[{"name":"0bitmap$664"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$867", - "fields":[{"name":"0bitmap$792"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$730", + "fields":[{"name":"0bitmap$671"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$868", - "fields":[{"name":"0bitmap$793"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$731", + "fields":[{"name":"0bitmap$670"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$870", - "fields":[{"name":"0bitmap$800"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$732", + "fields":[{"name":"0bitmap$667"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$871", - "fields":[{"name":"0bitmap$799"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$733", + "fields":[{"name":"0bitmap$668"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$872", - "fields":[{"name":"0bitmap$796"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$734", + "fields":[{"name":"0bitmap$669"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$873", - "fields":[{"name":"0bitmap$797"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$736", + "fields":[{"name":"0bitmap$675"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$874", - "fields":[{"name":"0bitmap$798"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$737", + "fields":[{"name":"0bitmap$676"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$876", - "fields":[{"name":"0bitmap$804"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$738", + "fields":[{"name":"0bitmap$699"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$877", - "fields":[{"name":"0bitmap$805"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$739", + "fields":[{"name":"0bitmap$698"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$878", - "fields":[{"name":"0bitmap$828"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$740", + "fields":[{"name":"0bitmap$687"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$879", - "fields":[{"name":"0bitmap$827"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$741", + "fields":[{"name":"0bitmap$686"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$880", - "fields":[{"name":"0bitmap$816"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$742", + "fields":[{"name":"0bitmap$678"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$881", - "fields":[{"name":"0bitmap$815"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$743", + "fields":[{"name":"0bitmap$679"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$882", - "fields":[{"name":"0bitmap$807"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$744", + "fields":[{"name":"0bitmap$680"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$883", - "fields":[{"name":"0bitmap$808"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$745", + "fields":[{"name":"0bitmap$681"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$884", - "fields":[{"name":"0bitmap$809"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$746", + "fields":[{"name":"0bitmap$682"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$885", - "fields":[{"name":"0bitmap$810"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$747", + "fields":[{"name":"0bitmap$683"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$886", - "fields":[{"name":"0bitmap$811"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$748", + "fields":[{"name":"0bitmap$684"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$887", - "fields":[{"name":"0bitmap$812"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$749", + "fields":[{"name":"0bitmap$685"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$888", - "fields":[{"name":"0bitmap$813"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$751", + "fields":[{"name":"0bitmap$688"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$889", - "fields":[{"name":"0bitmap$814"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$752", + "fields":[{"name":"0bitmap$692"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$891", - "fields":[{"name":"0bitmap$817"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$753", + "fields":[{"name":"0bitmap$691"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$892", - "fields":[{"name":"0bitmap$821"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$754", + "fields":[{"name":"0bitmap$689"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$893", - "fields":[{"name":"0bitmap$820"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$755", + "fields":[{"name":"0bitmap$690"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$894", - "fields":[{"name":"0bitmap$818"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$757", + "fields":[{"name":"0bitmap$693"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$895", - "fields":[{"name":"0bitmap$819"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$758", + "fields":[{"name":"0bitmap$694"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$897", - "fields":[{"name":"0bitmap$822"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$759", + "fields":[{"name":"0bitmap$697"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$898", - "fields":[{"name":"0bitmap$823"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$760", + "fields":[{"name":"0bitmap$696"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$899", - "fields":[{"name":"0bitmap$826"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$761", + "fields":[{"name":"0bitmap$695"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$900", - "fields":[{"name":"0bitmap$825"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$762", + "fields":[{"name":"0bitmap$721"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$901", - "fields":[{"name":"0bitmap$824"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$763", + "fields":[{"name":"0bitmap$720"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$902", - "fields":[{"name":"0bitmap$850"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$764", + "fields":[{"name":"0bitmap$709"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$903", - "fields":[{"name":"0bitmap$849"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$765", + "fields":[{"name":"0bitmap$708"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$904", - "fields":[{"name":"0bitmap$838"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$766", + "fields":[{"name":"0bitmap$700"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$905", - "fields":[{"name":"0bitmap$837"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$767", + "fields":[{"name":"0bitmap$701"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$906", - "fields":[{"name":"0bitmap$829"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$768", + "fields":[{"name":"0bitmap$702"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$907", - "fields":[{"name":"0bitmap$830"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$769", + "fields":[{"name":"0bitmap$703"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$908", - "fields":[{"name":"0bitmap$831"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$770", + "fields":[{"name":"0bitmap$704"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$909", - "fields":[{"name":"0bitmap$832"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$771", + "fields":[{"name":"0bitmap$705"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$910", - "fields":[{"name":"0bitmap$833"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$772", + "fields":[{"name":"0bitmap$706"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$911", - "fields":[{"name":"0bitmap$834"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$773", + "fields":[{"name":"0bitmap$707"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$912", - "fields":[{"name":"0bitmap$835"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$775", + "fields":[{"name":"0bitmap$710"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$913", - "fields":[{"name":"0bitmap$836"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$776", + "fields":[{"name":"0bitmap$714"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$915", - "fields":[{"name":"0bitmap$839"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$777", + "fields":[{"name":"0bitmap$713"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$916", - "fields":[{"name":"0bitmap$843"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$778", + "fields":[{"name":"0bitmap$711"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$917", - "fields":[{"name":"0bitmap$842"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$779", + "fields":[{"name":"0bitmap$712"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$918", - "fields":[{"name":"0bitmap$840"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$781", + "fields":[{"name":"0bitmap$715"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$919", - "fields":[{"name":"0bitmap$841"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$782", + "fields":[{"name":"0bitmap$716"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$921", - "fields":[{"name":"0bitmap$844"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$783", + "fields":[{"name":"0bitmap$719"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$922", - "fields":[{"name":"0bitmap$845"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$784", + "fields":[{"name":"0bitmap$718"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$923", - "fields":[{"name":"0bitmap$848"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$785", + "fields":[{"name":"0bitmap$717"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$924", - "fields":[{"name":"0bitmap$847"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$786", + "fields":[{"name":"0bitmap$739"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$925", - "fields":[{"name":"0bitmap$846"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$787", + "fields":[{"name":"0bitmap$738"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$926", - "fields":[{"name":"0bitmap$868"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$788", + "fields":[{"name":"0bitmap$722"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$927", - "fields":[{"name":"0bitmap$867"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$789", + "fields":[{"name":"0bitmap$723"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$928", - "fields":[{"name":"0bitmap$851"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$790", + "fields":[{"name":"0bitmap$737"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$929", - "fields":[{"name":"0bitmap$852"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$806", + "fields":[{"name":"0bitmap$758"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$930", - "fields":[{"name":"0bitmap$866"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$807", + "fields":[{"name":"0bitmap$757"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$946", - "fields":[{"name":"0bitmap$887"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$808", + "fields":[{"name":"0bitmap$741"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$947", - "fields":[{"name":"0bitmap$886"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$810", + "fields":[{"name":"0bitmap$742"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$948", - "fields":[{"name":"0bitmap$870"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$811", + "fields":[{"name":"0bitmap$756"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$950", - "fields":[{"name":"0bitmap$871"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$827", + "fields":[{"name":"0bitmap$788"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$951", - "fields":[{"name":"0bitmap$885"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$828", + "fields":[{"name":"0bitmap$782"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$967", - "fields":[{"name":"0bitmap$917"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$829", + "fields":[{"name":"0bitmap$772"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$968", - "fields":[{"name":"0bitmap$911"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$845", + "fields":[{"name":"0bitmap$781"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$969", - "fields":[{"name":"0bitmap$901"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$846", + "fields":[{"name":"0bitmap$778"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$985", - "fields":[{"name":"0bitmap$910"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$847", + "fields":[{"name":"0bitmap$777"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$986", - "fields":[{"name":"0bitmap$907"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$848", + "fields":[{"name":"0bitmap$773"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$987", - "fields":[{"name":"0bitmap$906"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$849", + "fields":[{"name":"0bitmap$774"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$988", - "fields":[{"name":"0bitmap$902"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$850", + "fields":[{"name":"0bitmap$775"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$989", - "fields":[{"name":"0bitmap$903"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$851", + "fields":[{"name":"0bitmap$776"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$990", - "fields":[{"name":"0bitmap$904"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$852", + "fields":[{"name":"0bitmap$779"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$991", - "fields":[{"name":"0bitmap$905"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$853", + "fields":[{"name":"0bitmap$780"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$992", - "fields":[{"name":"0bitmap$908"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$855", + "fields":[{"name":"0bitmap$787"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$993", - "fields":[{"name":"0bitmap$909"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$856", + "fields":[{"name":"0bitmap$783"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$995", - "fields":[{"name":"0bitmap$916"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$857", + "fields":[{"name":"0bitmap$786"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$996", - "fields":[{"name":"0bitmap$912"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$858", + "fields":[{"name":"0bitmap$784"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$997", - "fields":[{"name":"0bitmap$915"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$859", + "fields":[{"name":"0bitmap$785"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$998", - "fields":[{"name":"0bitmap$913"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$861", + "fields":[{"name":"0bitmap$1072"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$999", - "fields":[{"name":"0bitmap$914"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$862", + "fields":[{"name":"0bitmap$921"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$", @@ -2641,15 +2280,15 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$113", - "fields":[{"name":"0bitmap$116"}] + "fields":[{"name":"0bitmap$115"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$114", - "fields":[{"name":"0bitmap$115"}] + "fields":[{"name":"0bitmap$114"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$115", - "fields":[{"name":"0bitmap$114"}] + "fields":[{"name":"0bitmap$113"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$116", @@ -2684,12 +2323,12 @@ "fields":[{"name":"0bitmap$112"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$123", - "fields":[{"name":"0bitmap$113"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$125", + "fields":[{"name":"0bitmap$119"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$126", - "fields":[{"name":"0bitmap$120"}] + "fields":[{"name":"0bitmap$117"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$127", @@ -2697,11 +2336,11 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$128", - "fields":[{"name":"0bitmap$119"}] + "fields":[{"name":"0bitmap$135"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$129", - "fields":[{"name":"0bitmap$136"}] + "fields":[{"name":"0bitmap$121"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$13", @@ -2709,19 +2348,19 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$130", - "fields":[{"name":"0bitmap$122"}] + "fields":[{"name":"0bitmap$120"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$131", - "fields":[{"name":"0bitmap$121"}] + "fields":[{"name":"0bitmap$125"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$132", - "fields":[{"name":"0bitmap$126"}] + "fields":[{"name":"0bitmap$124"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$133", - "fields":[{"name":"0bitmap$125"}] + "fields":[{"name":"0bitmap$122"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$134", @@ -2729,23 +2368,23 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$135", - "fields":[{"name":"0bitmap$124"}] + "fields":[{"name":"0bitmap$127"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$136", - "fields":[{"name":"0bitmap$128"}] + "fields":[{"name":"0bitmap$126"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$137", - "fields":[{"name":"0bitmap$127"}] + "fields":[{"name":"0bitmap$129"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$138", - "fields":[{"name":"0bitmap$130"}] + "fields":[{"name":"0bitmap$128"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$139", - "fields":[{"name":"0bitmap$129"}] + "fields":[{"name":"0bitmap$131"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$14", @@ -2753,35 +2392,35 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$140", - "fields":[{"name":"0bitmap$132"}] + "fields":[{"name":"0bitmap$130"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$141", - "fields":[{"name":"0bitmap$131"}] + "fields":[{"name":"0bitmap$134"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$142", - "fields":[{"name":"0bitmap$135"}] + "fields":[{"name":"0bitmap$133"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$143", - "fields":[{"name":"0bitmap$134"}] + "fields":[{"name":"0bitmap$132"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$144", - "fields":[{"name":"0bitmap$133"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$145", + "fields":[{"name":"0bitmap$155"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$146", - "fields":[{"name":"0bitmap$156"}] + "fields":[{"name":"0bitmap$139"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$147", - "fields":[{"name":"0bitmap$140"}] + "fields":[{"name":"0bitmap$138"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$148", - "fields":[{"name":"0bitmap$139"}] + "fields":[{"name":"0bitmap$136"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$149", @@ -2793,43 +2432,43 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$150", - "fields":[{"name":"0bitmap$138"}] + "fields":[{"name":"0bitmap$141"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$151", - "fields":[{"name":"0bitmap$142"}] + "fields":[{"name":"0bitmap$140"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$152", - "fields":[{"name":"0bitmap$141"}] + "fields":[{"name":"0bitmap$144"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$153", - "fields":[{"name":"0bitmap$145"}] + "fields":[{"name":"0bitmap$143"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$154", - "fields":[{"name":"0bitmap$144"}] + "fields":[{"name":"0bitmap$142"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$155", - "fields":[{"name":"0bitmap$143"}] + "fields":[{"name":"0bitmap$146"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$156", - "fields":[{"name":"0bitmap$147"}] + "fields":[{"name":"0bitmap$145"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$157", - "fields":[{"name":"0bitmap$146"}] + "fields":[{"name":"0bitmap$148"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$158", - "fields":[{"name":"0bitmap$149"}] + "fields":[{"name":"0bitmap$147"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$159", - "fields":[{"name":"0bitmap$148"}] + "fields":[{"name":"0bitmap$154"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$16", @@ -2837,39 +2476,39 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$160", - "fields":[{"name":"0bitmap$155"}] + "fields":[{"name":"0bitmap$153"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$161", - "fields":[{"name":"0bitmap$154"}] + "fields":[{"name":"0bitmap$152"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$162", - "fields":[{"name":"0bitmap$153"}] + "fields":[{"name":"0bitmap$150"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$163", - "fields":[{"name":"0bitmap$151"}] + "fields":[{"name":"0bitmap$149"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$164", - "fields":[{"name":"0bitmap$150"}] + "fields":[{"name":"0bitmap$151"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$165", - "fields":[{"name":"0bitmap$152"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$166", + "fields":[{"name":"0bitmap$173"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$167", - "fields":[{"name":"0bitmap$174"}] + "fields":[{"name":"0bitmap$159"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$168", - "fields":[{"name":"0bitmap$160"}] + "fields":[{"name":"0bitmap$158"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$169", - "fields":[{"name":"0bitmap$159"}] + "fields":[{"name":"0bitmap$156"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$17", @@ -2880,16 +2519,16 @@ "fields":[{"name":"0bitmap$157"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$171", - "fields":[{"name":"0bitmap$158"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$172", + "fields":[{"name":"0bitmap$169"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$173", - "fields":[{"name":"0bitmap$170"}] + "fields":[{"name":"0bitmap$168"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$174", - "fields":[{"name":"0bitmap$169"}] + "fields":[{"name":"0bitmap$160"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$175", @@ -2924,8 +2563,8 @@ "fields":[{"name":"0bitmap$167"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$182", - "fields":[{"name":"0bitmap$168"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$183", + "fields":[{"name":"0bitmap$170"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$184", @@ -2936,16 +2575,16 @@ "fields":[{"name":"0bitmap$172"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$186", - "fields":[{"name":"0bitmap$173"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$187", + "fields":[{"name":"0bitmap$299"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$188", - "fields":[{"name":"0bitmap$300"}] + "fields":[{"name":"0bitmap$175"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$189", - "fields":[{"name":"0bitmap$176"}] + "fields":[{"name":"0bitmap$174"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$19", @@ -2953,43 +2592,43 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$190", - "fields":[{"name":"0bitmap$175"}] + "fields":[{"name":"0bitmap$177"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$191", - "fields":[{"name":"0bitmap$178"}] + "fields":[{"name":"0bitmap$176"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$192", - "fields":[{"name":"0bitmap$177"}] + "fields":[{"name":"0bitmap$179"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$193", - "fields":[{"name":"0bitmap$180"}] + "fields":[{"name":"0bitmap$178"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$194", - "fields":[{"name":"0bitmap$179"}] + "fields":[{"name":"0bitmap$181"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$195", - "fields":[{"name":"0bitmap$182"}] + "fields":[{"name":"0bitmap$180"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$196", - "fields":[{"name":"0bitmap$181"}] + "fields":[{"name":"0bitmap$184"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$197", - "fields":[{"name":"0bitmap$185"}] + "fields":[{"name":"0bitmap$183"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$198", - "fields":[{"name":"0bitmap$184"}] + "fields":[{"name":"0bitmap$182"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$199", - "fields":[{"name":"0bitmap$183"}] + "fields":[{"name":"0bitmap$186"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$2", @@ -3001,35 +2640,35 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$200", - "fields":[{"name":"0bitmap$187"}] + "fields":[{"name":"0bitmap$185"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$201", - "fields":[{"name":"0bitmap$186"}] + "fields":[{"name":"0bitmap$189"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$202", - "fields":[{"name":"0bitmap$190"}] + "fields":[{"name":"0bitmap$188"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$203", - "fields":[{"name":"0bitmap$189"}] + "fields":[{"name":"0bitmap$187"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$204", - "fields":[{"name":"0bitmap$188"}] + "fields":[{"name":"0bitmap$204"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$205", - "fields":[{"name":"0bitmap$205"}] + "fields":[{"name":"0bitmap$203"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$206", - "fields":[{"name":"0bitmap$204"}] + "fields":[{"name":"0bitmap$193"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$207", - "fields":[{"name":"0bitmap$194"}] + "fields":[{"name":"0bitmap$190"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$208", @@ -3044,28 +2683,28 @@ "fields":[{"name":"0bitmap$20"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$210", - "fields":[{"name":"0bitmap$193"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$211", + "fields":[{"name":"0bitmap$197"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$212", - "fields":[{"name":"0bitmap$198"}] + "fields":[{"name":"0bitmap$196"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$213", - "fields":[{"name":"0bitmap$197"}] + "fields":[{"name":"0bitmap$194"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$214", "fields":[{"name":"0bitmap$195"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$215", - "fields":[{"name":"0bitmap$196"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$216", + "fields":[{"name":"0bitmap$202"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$217", - "fields":[{"name":"0bitmap$203"}] + "fields":[{"name":"0bitmap$198"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$218", @@ -3085,47 +2724,47 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$221", - "fields":[{"name":"0bitmap$202"}] + "fields":[{"name":"0bitmap$206"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$222", - "fields":[{"name":"0bitmap$207"}] + "fields":[{"name":"0bitmap$205"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$223", - "fields":[{"name":"0bitmap$206"}] + "fields":[{"name":"0bitmap$220"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$224", - "fields":[{"name":"0bitmap$221"}] + "fields":[{"name":"0bitmap$219"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$225", - "fields":[{"name":"0bitmap$220"}] + "fields":[{"name":"0bitmap$210"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$226", - "fields":[{"name":"0bitmap$211"}] + "fields":[{"name":"0bitmap$209"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$227", - "fields":[{"name":"0bitmap$210"}] + "fields":[{"name":"0bitmap$207"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$228", "fields":[{"name":"0bitmap$208"}] }, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$229", - "fields":[{"name":"0bitmap$209"}] -}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$23", "fields":[{"name":"0bitmap$23"}] }, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$230", + "fields":[{"name":"0bitmap$218"}] +}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$231", - "fields":[{"name":"0bitmap$219"}] + "fields":[{"name":"0bitmap$211"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$232", @@ -3152,44 +2791,44 @@ "fields":[{"name":"0bitmap$217"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$238", - "fields":[{"name":"0bitmap$218"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$239", + "fields":[{"name":"0bitmap$222"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$24", "fields":[{"name":"0bitmap$22"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$240", - "fields":[{"name":"0bitmap$223"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$241", + "fields":[{"name":"0bitmap$233"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$242", - "fields":[{"name":"0bitmap$234"}] + "fields":[{"name":"0bitmap$232"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$243", - "fields":[{"name":"0bitmap$233"}] + "fields":[{"name":"0bitmap$226"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$244", - "fields":[{"name":"0bitmap$227"}] + "fields":[{"name":"0bitmap$225"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$245", - "fields":[{"name":"0bitmap$226"}] + "fields":[{"name":"0bitmap$223"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$246", "fields":[{"name":"0bitmap$224"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$247", - "fields":[{"name":"0bitmap$225"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$248", + "fields":[{"name":"0bitmap$231"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$249", - "fields":[{"name":"0bitmap$232"}] + "fields":[{"name":"0bitmap$227"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$25", @@ -3209,31 +2848,31 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$253", - "fields":[{"name":"0bitmap$231"}] + "fields":[{"name":"0bitmap$235"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$254", - "fields":[{"name":"0bitmap$236"}] + "fields":[{"name":"0bitmap$234"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$255", - "fields":[{"name":"0bitmap$235"}] + "fields":[{"name":"0bitmap$272"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$256", - "fields":[{"name":"0bitmap$273"}] + "fields":[{"name":"0bitmap$271"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$257", - "fields":[{"name":"0bitmap$272"}] + "fields":[{"name":"0bitmap$246"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$258", - "fields":[{"name":"0bitmap$247"}] + "fields":[{"name":"0bitmap$240"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$259", - "fields":[{"name":"0bitmap$241"}] + "fields":[{"name":"0bitmap$236"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$260", @@ -3248,12 +2887,12 @@ "fields":[{"name":"0bitmap$239"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$263", - "fields":[{"name":"0bitmap$240"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$264", + "fields":[{"name":"0bitmap$245"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$265", - "fields":[{"name":"0bitmap$246"}] + "fields":[{"name":"0bitmap$241"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$266", @@ -3269,19 +2908,19 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$269", - "fields":[{"name":"0bitmap$245"}] + "fields":[{"name":"0bitmap$270"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$27", - "fields":[{"name":"0bitmap$117"}] + "fields":[{"name":"0bitmap$116"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$270", - "fields":[{"name":"0bitmap$271"}] + "fields":[{"name":"0bitmap$250"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$271", - "fields":[{"name":"0bitmap$251"}] + "fields":[{"name":"0bitmap$247"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$272", @@ -3292,12 +2931,12 @@ "fields":[{"name":"0bitmap$249"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$274", - "fields":[{"name":"0bitmap$250"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$275", + "fields":[{"name":"0bitmap$264"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$276", - "fields":[{"name":"0bitmap$265"}] + "fields":[{"name":"0bitmap$251"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$277", @@ -3351,17 +2990,17 @@ "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$288", "fields":[{"name":"0bitmap$263"}] }, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$289", - "fields":[{"name":"0bitmap$264"}] -}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$29", "fields":[{"name":"0bitmap$26"}] }, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$290", + "fields":[{"name":"0bitmap$269"}] +}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$291", - "fields":[{"name":"0bitmap$270"}] + "fields":[{"name":"0bitmap$265"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$292", @@ -3377,23 +3016,23 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$295", - "fields":[{"name":"0bitmap$269"}] + "fields":[{"name":"0bitmap$274"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$296", - "fields":[{"name":"0bitmap$275"}] + "fields":[{"name":"0bitmap$273"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$297", - "fields":[{"name":"0bitmap$274"}] + "fields":[{"name":"0bitmap$276"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$298", - "fields":[{"name":"0bitmap$277"}] + "fields":[{"name":"0bitmap$275"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$299", - "fields":[{"name":"0bitmap$276"}] + "fields":[{"name":"0bitmap$283"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$3", @@ -3405,15 +3044,15 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$300", - "fields":[{"name":"0bitmap$284"}] + "fields":[{"name":"0bitmap$282"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$301", - "fields":[{"name":"0bitmap$283"}] + "fields":[{"name":"0bitmap$281"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$302", - "fields":[{"name":"0bitmap$282"}] + "fields":[{"name":"0bitmap$277"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$303", @@ -3429,19 +3068,19 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$306", - "fields":[{"name":"0bitmap$281"}] + "fields":[{"name":"0bitmap$296"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$307", - "fields":[{"name":"0bitmap$297"}] + "fields":[{"name":"0bitmap$295"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$308", - "fields":[{"name":"0bitmap$296"}] + "fields":[{"name":"0bitmap$286"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$309", - "fields":[{"name":"0bitmap$287"}] + "fields":[{"name":"0bitmap$284"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$31", @@ -3452,12 +3091,12 @@ "fields":[{"name":"0bitmap$285"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$311", - "fields":[{"name":"0bitmap$286"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$312", + "fields":[{"name":"0bitmap$290"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$313", - "fields":[{"name":"0bitmap$291"}] + "fields":[{"name":"0bitmap$287"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$314", @@ -3468,12 +3107,12 @@ "fields":[{"name":"0bitmap$289"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$316", - "fields":[{"name":"0bitmap$290"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$317", + "fields":[{"name":"0bitmap$294"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$318", - "fields":[{"name":"0bitmap$295"}] + "fields":[{"name":"0bitmap$291"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$319", @@ -3488,32 +3127,32 @@ "fields":[{"name":"0bitmap$293"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$321", - "fields":[{"name":"0bitmap$294"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$322", + "fields":[{"name":"0bitmap$298"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$323", - "fields":[{"name":"0bitmap$299"}] + "fields":[{"name":"0bitmap$297"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$324", - "fields":[{"name":"0bitmap$298"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$325", + "fields":[{"name":"0bitmap$336"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$326", - "fields":[{"name":"0bitmap$338"}] + "fields":[{"name":"0bitmap$301"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$327", - "fields":[{"name":"0bitmap$302"}] + "fields":[{"name":"0bitmap$300"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$328", - "fields":[{"name":"0bitmap$301"}] + "fields":[{"name":"0bitmap$316"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$329", - "fields":[{"name":"0bitmap$317"}] + "fields":[{"name":"0bitmap$315"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$33", @@ -3521,15 +3160,15 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$330", - "fields":[{"name":"0bitmap$316"}] + "fields":[{"name":"0bitmap$305"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$331", - "fields":[{"name":"0bitmap$306"}] + "fields":[{"name":"0bitmap$304"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$332", - "fields":[{"name":"0bitmap$305"}] + "fields":[{"name":"0bitmap$302"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$333", @@ -3537,15 +3176,15 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$334", - "fields":[{"name":"0bitmap$304"}] + "fields":[{"name":"0bitmap$314"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$335", - "fields":[{"name":"0bitmap$315"}] + "fields":[{"name":"0bitmap$313"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$336", - "fields":[{"name":"0bitmap$314"}] + "fields":[{"name":"0bitmap$306"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$337", @@ -3576,20 +3215,20 @@ "fields":[{"name":"0bitmap$312"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$343", - "fields":[{"name":"0bitmap$313"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$344", + "fields":[{"name":"0bitmap$318"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$345", - "fields":[{"name":"0bitmap$319"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$346", + "fields":[{"name":"0bitmap$321"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$347", - "fields":[{"name":"0bitmap$321"}] + "fields":[{"name":"0bitmap$320"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$348", - "fields":[{"name":"0bitmap$320"}] + "fields":[{"name":"0bitmap$319"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$349", @@ -3647,17 +3286,9 @@ "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$363", "fields":[{"name":"0bitmap$333"}] }, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$364", - "fields":[{"name":"0bitmap$337"}] -}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$365", - "fields":[{"name":"0bitmap$336"}] -}, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$367", - "fields":[{"name":"0bitmap$339"}] + "fields":[{"name":"0bitmap$337"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$37", From 201dea1cdb2cc6677280e7ae4ef1bbcb91324446 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Tue, 28 Oct 2025 12:56:13 -0700 Subject: [PATCH 20/26] Attempt to make the toList more stable on Map --- .../Semantics/InterfaceInstance.scala | 3 ++ .../fpp-to-json/test/importedTopologies.fpp | 2 +- .../test/importedTopologies.ref.txt | 34 +++++++++---------- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/InterfaceInstance.scala b/compiler/lib/src/main/scala/analysis/Semantics/InterfaceInstance.scala index 7ecece8d3..dcfb78e75 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/InterfaceInstance.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/InterfaceInstance.scala @@ -5,6 +5,9 @@ import fpp.compiler.util._ /** An FPP interface instance */ sealed trait InterfaceInstance { + + override def toString = getQualifiedName.toString + /** Gets the qualified name of the interface instance */ def getQualifiedName: Name.Qualified diff --git a/compiler/tools/fpp-to-json/test/importedTopologies.fpp b/compiler/tools/fpp-to-json/test/importedTopologies.fpp index 14fb7f309..db6e6aab7 100644 --- a/compiler/tools/fpp-to-json/test/importedTopologies.fpp +++ b/compiler/tools/fpp-to-json/test/importedTopologies.fpp @@ -51,6 +51,6 @@ topology Simple2 { } @ A third Simple Topology -topology Simple3{ +topology Simple3 { import Simple2 } diff --git a/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt b/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt index b508b4e50..cdd1f71fc 100644 --- a/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt +++ b/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt @@ -6760,23 +6760,6 @@ "includingLoc" : "None" } ], - [ - { - "InterfaceTopology" : { - "qualifiedName" : { - "qualifier" : [ - ], - "base" : "Simple2" - }, - "unqualifiedName" : "Simple2" - } - }, - { - "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "55.3", - "includingLoc" : "None" - } - ], [ { "InterfaceTopology" : { @@ -6844,6 +6827,23 @@ "pos" : "39.3", "includingLoc" : "None" } + ], + [ + { + "InterfaceTopology" : { + "qualifiedName" : { + "qualifier" : [ + ], + "base" : "Simple2" + }, + "unqualifiedName" : "Simple2" + } + }, + { + "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", + "pos" : "55.3", + "includingLoc" : "None" + } ] ], "ports" : [ From a992f02d36ca881f405de29056a90ae7f04d2f22 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Thu, 30 Oct 2025 07:50:40 -0700 Subject: [PATCH 21/26] Sort list --- .../JsonEncoder/AnalysisJsonEncoder.scala | 8 ++- .../test/importedTopologies.ref.txt | 56 +++++++++---------- .../test/patternedConnections.ref.txt | 36 ++++++------ 3 files changed, 53 insertions(+), 47 deletions(-) diff --git a/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala b/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala index 9c29c5257..845363613 100644 --- a/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala +++ b/compiler/lib/src/main/scala/codegen/JsonEncoder/AnalysisJsonEncoder.scala @@ -334,9 +334,15 @@ object AnalysisJsonEncoder extends JsonEncoder{ // We use this conversion when the keys cannot be converted to strings // ---------------------------------------------------------------------- + implicit val locationComparator: java.util.Comparator[Location] = + new java.util.Comparator[Location] { + override def compare(o1: Location, o2: Location): Int = + o1.compare(o2) + } + private implicit val interfaceInstanceLocationMapEncoder: Encoder[Map[InterfaceInstance, Location]] = - Encoder.instance(_.toList.asJson) + Encoder.instance(_.toList.sortBy(_._2).asJson) private implicit val connectionMapEncoder: Encoder[Map[PortInstanceIdentifier, Set[Connection]]] = diff --git a/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt b/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt index cdd1f71fc..e0cff8cce 100644 --- a/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt +++ b/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt @@ -3522,48 +3522,48 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c3" + "base" : "c1" }, - "unqualifiedName" : "c3" + "unqualifiedName" : "c1" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "37.3", + "pos" : "17.3", "includingLoc" : "None" } ], [ { - "InterfaceTopology" : { + "InterfaceComponentInstance" : { "qualifiedName" : { "qualifier" : [ ], - "base" : "Simple1" + "base" : "c2" }, - "unqualifiedName" : "Simple1" + "unqualifiedName" : "c2" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "35.3", + "pos" : "19.3", "includingLoc" : "None" } ], [ { - "InterfaceComponentInstance" : { + "InterfaceTopology" : { "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "Simple1" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "Simple1" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "19.3", + "pos" : "35.3", "includingLoc" : "None" } ], @@ -3573,14 +3573,14 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c3" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c3" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "17.3", + "pos" : "37.3", "includingLoc" : "None" } ], @@ -6749,48 +6749,48 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c3" + "base" : "c1" }, - "unqualifiedName" : "c3" + "unqualifiedName" : "c1" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "37.3", + "pos" : "17.3", "includingLoc" : "None" } ], [ { - "InterfaceTopology" : { + "InterfaceComponentInstance" : { "qualifiedName" : { "qualifier" : [ ], - "base" : "Simple1" + "base" : "c2" }, - "unqualifiedName" : "Simple1" + "unqualifiedName" : "c2" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "35.3", + "pos" : "19.3", "includingLoc" : "None" } ], [ { - "InterfaceComponentInstance" : { + "InterfaceTopology" : { "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "Simple1" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "Simple1" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "19.3", + "pos" : "35.3", "includingLoc" : "None" } ], @@ -6800,14 +6800,14 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c3" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c3" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "17.3", + "pos" : "37.3", "includingLoc" : "None" } ], diff --git a/compiler/tools/fpp-to-json/test/patternedConnections.ref.txt b/compiler/tools/fpp-to-json/test/patternedConnections.ref.txt index 842a0aa1d..24e41512f 100644 --- a/compiler/tools/fpp-to-json/test/patternedConnections.ref.txt +++ b/compiler/tools/fpp-to-json/test/patternedConnections.ref.txt @@ -4602,14 +4602,14 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c1" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c1" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", - "pos" : "44.5", + "pos" : "43.5", "includingLoc" : "None" } ], @@ -4619,14 +4619,14 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c3" + "base" : "c2" }, - "unqualifiedName" : "c3" + "unqualifiedName" : "c2" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", - "pos" : "45.5", + "pos" : "44.5", "includingLoc" : "None" } ], @@ -4636,14 +4636,14 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c6" + "base" : "c3" }, - "unqualifiedName" : "c6" + "unqualifiedName" : "c3" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", - "pos" : "48.5", + "pos" : "45.5", "includingLoc" : "None" } ], @@ -4653,14 +4653,14 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c4" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c4" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", - "pos" : "43.5", + "pos" : "46.5", "includingLoc" : "None" } ], @@ -4670,14 +4670,14 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c4" + "base" : "c5" }, - "unqualifiedName" : "c4" + "unqualifiedName" : "c5" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", - "pos" : "46.5", + "pos" : "47.5", "includingLoc" : "None" } ], @@ -4687,14 +4687,14 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c5" + "base" : "c6" }, - "unqualifiedName" : "c5" + "unqualifiedName" : "c6" } }, { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/patternedConnections.fpp", - "pos" : "47.5", + "pos" : "48.5", "includingLoc" : "None" } ], From 0463bf4b227b584aa52ef5f65724db1e4a073ca5 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Thu, 30 Oct 2025 10:12:40 -0700 Subject: [PATCH 22/26] Regenerate trace --- .../META-INF/native-image/reflect-config.json | 82 +++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json b/compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json index e999b6cef..3038e22d2 100644 --- a/compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json +++ b/compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json @@ -991,167 +991,167 @@ "fields":[{"name":"0bitmap$1475"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1604", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1605", "fields":[{"name":"0bitmap$1477"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1605", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1606", "fields":[{"name":"0bitmap$1485"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1606", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1607", "fields":[{"name":"0bitmap$1478"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1607", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1608", "fields":[{"name":"0bitmap$1479"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1608", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1609", "fields":[{"name":"0bitmap$1480"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1609", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1610", "fields":[{"name":"0bitmap$1481"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1610", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1611", "fields":[{"name":"0bitmap$1482"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1611", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1612", "fields":[{"name":"0bitmap$1483"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1612", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1613", "fields":[{"name":"0bitmap$1484"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1614", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1615", "fields":[{"name":"0bitmap$1486"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1615", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1616", "fields":[{"name":"0bitmap$1495"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1616", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1617", "fields":[{"name":"0bitmap$1494"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1617", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1618", "fields":[{"name":"0bitmap$1487"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1618", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1619", "fields":[{"name":"0bitmap$1488"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1619", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1620", "fields":[{"name":"0bitmap$1489"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1620", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1621", "fields":[{"name":"0bitmap$1490"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1621", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1622", "fields":[{"name":"0bitmap$1491"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1622", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1623", "fields":[{"name":"0bitmap$1492"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1623", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1624", "fields":[{"name":"0bitmap$1493"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1625", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1626", "fields":[{"name":"0bitmap$1496"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1626", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1627", "fields":[{"name":"0bitmap$1499"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1627", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1628", "fields":[{"name":"0bitmap$1498"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1629", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1630", "fields":[{"name":"0bitmap$1511"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1630", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1631", "fields":[{"name":"0bitmap$1510"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1631", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1632", "fields":[{"name":"0bitmap$1509"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1632", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1633", "fields":[{"name":"0bitmap$1503"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1633", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1634", "fields":[{"name":"0bitmap$1502"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1634", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1635", "fields":[{"name":"0bitmap$1501"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1636", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1637", "fields":[{"name":"0bitmap$1508"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1637", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1638", "fields":[{"name":"0bitmap$1507"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1638", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1639", "fields":[{"name":"0bitmap$1506"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1641", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1642", "fields":[{"name":"0bitmap$1523"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1642", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1643", "fields":[{"name":"0bitmap$1522"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1643", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1644", "fields":[{"name":"0bitmap$1521"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1644", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1645", "fields":[{"name":"0bitmap$1515"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1645", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1646", "fields":[{"name":"0bitmap$1514"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1646", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1647", "fields":[{"name":"0bitmap$1513"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1648", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1649", "fields":[{"name":"0bitmap$1520"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1649", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1650", "fields":[{"name":"0bitmap$1519"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1650", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1651", "fields":[{"name":"0bitmap$1518"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1655", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1656", "fields":[{"name":"0bitmap$1"}] }, { From 49e2b900b14bfc3060e9d98461d0148221951e6d Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Wed, 28 Jan 2026 10:22:11 -0800 Subject: [PATCH 23/26] Update refs --- .../fpp-check/test/connection_direct/undef_instance.ref.txt | 2 +- .../fpp-check/test/connection_pattern/undef_source.ref.txt | 2 +- .../fpp-check/test/connection_pattern/undef_target.ref.txt | 2 +- .../tools/fpp-check/test/instance_spec/undef_instance.ref.txt | 3 ++- .../fpp-check/test/tlm_packets/instance_not_defined.ref.txt | 2 +- .../test/tlm_packets/omit_instance_not_defined.ref.txt | 2 +- .../tools/fpp-check/test/top_import/undef_topology.ref.txt | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/compiler/tools/fpp-check/test/connection_direct/undef_instance.ref.txt b/compiler/tools/fpp-check/test/connection_direct/undef_instance.ref.txt index 79b7d3def..392f2e1e9 100644 --- a/compiler/tools/fpp-check/test/connection_direct/undef_instance.ref.txt +++ b/compiler/tools/fpp-check/test/connection_direct/undef_instance.ref.txt @@ -3,4 +3,4 @@ fpp-check c.out -> c.in ^ error: symbol c is not defined -note: looking for a component instance here +note: looking for a port interface instance here diff --git a/compiler/tools/fpp-check/test/connection_pattern/undef_source.ref.txt b/compiler/tools/fpp-check/test/connection_pattern/undef_source.ref.txt index 60b2331e5..c780cfda9 100644 --- a/compiler/tools/fpp-check/test/connection_pattern/undef_source.ref.txt +++ b/compiler/tools/fpp-check/test/connection_pattern/undef_source.ref.txt @@ -3,4 +3,4 @@ fpp-check health connections instance $health ^ error: symbol health is not defined -note: looking for a component instance here +note: looking for a port interface instance here diff --git a/compiler/tools/fpp-check/test/connection_pattern/undef_target.ref.txt b/compiler/tools/fpp-check/test/connection_pattern/undef_target.ref.txt index 41b8f2100..509b3373c 100644 --- a/compiler/tools/fpp-check/test/connection_pattern/undef_target.ref.txt +++ b/compiler/tools/fpp-check/test/connection_pattern/undef_target.ref.txt @@ -3,4 +3,4 @@ fpp-check c ^ error: symbol c is not defined -note: looking for a component instance here +note: looking for a port interface instance here diff --git a/compiler/tools/fpp-check/test/instance_spec/undef_instance.ref.txt b/compiler/tools/fpp-check/test/instance_spec/undef_instance.ref.txt index f284ad61a..082006190 100644 --- a/compiler/tools/fpp-check/test/instance_spec/undef_instance.ref.txt +++ b/compiler/tools/fpp-check/test/instance_spec/undef_instance.ref.txt @@ -2,4 +2,5 @@ fpp-check [ local path prefix ]/compiler/tools/fpp-check/test/instance_spec/undef_instance.fpp:3.12 instance c ^ -error: undefined symbol c +error: symbol c is not defined +note: looking for a port interface instance here diff --git a/compiler/tools/fpp-check/test/tlm_packets/instance_not_defined.ref.txt b/compiler/tools/fpp-check/test/tlm_packets/instance_not_defined.ref.txt index b7fc40337..394abd137 100644 --- a/compiler/tools/fpp-check/test/tlm_packets/instance_not_defined.ref.txt +++ b/compiler/tools/fpp-check/test/tlm_packets/instance_not_defined.ref.txt @@ -3,4 +3,4 @@ fpp-check u.T ^ error: symbol u is not defined -note: looking for a component instance here +note: looking for a port interface instance here diff --git a/compiler/tools/fpp-check/test/tlm_packets/omit_instance_not_defined.ref.txt b/compiler/tools/fpp-check/test/tlm_packets/omit_instance_not_defined.ref.txt index f2e29f5b2..63a985b65 100644 --- a/compiler/tools/fpp-check/test/tlm_packets/omit_instance_not_defined.ref.txt +++ b/compiler/tools/fpp-check/test/tlm_packets/omit_instance_not_defined.ref.txt @@ -3,4 +3,4 @@ fpp-check u.T ^ error: symbol u is not defined -note: looking for a component instance here +note: looking for a port interface instance here diff --git a/compiler/tools/fpp-check/test/top_import/undef_topology.ref.txt b/compiler/tools/fpp-check/test/top_import/undef_topology.ref.txt index a1a4dfcfd..80b76e006 100644 --- a/compiler/tools/fpp-check/test/top_import/undef_topology.ref.txt +++ b/compiler/tools/fpp-check/test/top_import/undef_topology.ref.txt @@ -3,4 +3,4 @@ fpp-check import A ^ error: symbol A is not defined -note: looking for a topology here +note: looking for a port interface instance here From 7ecbee2d2f90b44e37900d82811bf5b5abe866c9 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Thu, 29 Jan 2026 09:42:55 -0800 Subject: [PATCH 24/26] Update error reporting --- compiler/lib/src/main/scala/analysis/Analysis.scala | 2 +- .../src/main/scala/analysis/Semantics/Component.scala | 2 +- .../src/main/scala/analysis/Semantics/Interface.scala | 2 +- .../main/scala/analysis/Semantics/PortInterface.scala | 3 +++ .../lib/src/main/scala/analysis/Semantics/Symbol.scala | 9 +++++---- .../lib/src/main/scala/analysis/Semantics/Topology.scala | 4 ++-- compiler/lib/src/main/scala/util/Error.scala | 5 +++-- .../test/connection_direct/invalid_port_instance.ref.txt | 2 +- .../test/port_matching/p1_not_port_instance.ref.txt | 2 +- .../test/port_matching/p2_not_port_instance.ref.txt | 2 +- 10 files changed, 19 insertions(+), 14 deletions(-) diff --git a/compiler/lib/src/main/scala/analysis/Analysis.scala b/compiler/lib/src/main/scala/analysis/Analysis.scala index 12f97ad9b..19acbc0dc 100644 --- a/compiler/lib/src/main/scala/analysis/Analysis.scala +++ b/compiler/lib/src/main/scala/analysis/Analysis.scala @@ -253,7 +253,7 @@ case class Analysis( yield this.componentInstanceMap(cis) /** Gets an interface instance symbol from the use-def map */ - def getInterfaceInstanceSymbol(id: AstNode.Id): Result.Result[Symbol.InterfaceInstance] = + def getInterfaceInstanceSymbol(id: AstNode.Id): Result.Result[InterfaceInstanceSymbol] = this.useDefMap(id) match { case cis: Symbol.ComponentInstance => Right(cis) case ts: Symbol.Topology => Right(ts) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Component.scala b/compiler/lib/src/main/scala/analysis/Semantics/Component.scala index b6a5fddae..e53da9ce2 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Component.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Component.scala @@ -10,7 +10,7 @@ case class Component( /** The AST node defining the component */ aNode: Ast.Annotated[AstNode[Ast.DefComponent]], /* The port interface of the component */ - portInterface: PortInterface = PortInterface(), + portInterface: PortInterface = PortInterface("component"), /** The map from command opcodes to commands */ commandMap: Map[Command.Opcode, Command] = Map(), /** The next default opcode */ diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Interface.scala b/compiler/lib/src/main/scala/analysis/Semantics/Interface.scala index f07ca2e06..95f43b27e 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Interface.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Interface.scala @@ -10,7 +10,7 @@ case class Interface( /** The imported interfaces */ importMap: Map[Symbol.Interface, (AstNode.Id, Location)] = Map(), /* The port interface of the component */ - portInterface: PortInterface = PortInterface(), + portInterface: PortInterface = PortInterface("interface"), ) { /** Add a port instance */ def addPortInstance(instance: PortInstance): Result.Result[Interface] = diff --git a/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala b/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala index 20aef397d..26f9490df 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/PortInterface.scala @@ -5,6 +5,8 @@ import fpp.compiler.util._ /** An FPP Port Interface (set of port instances) */ case class PortInterface( + /** The type of interface instance this port interface represents */ + instanceType: String, /** The map from port names to port instances */ portMap: Map[Name.Unqualified, PortInstance] = Map(), /** The map from special port kinds to special port instances */ @@ -68,6 +70,7 @@ case class PortInterface( SemanticError.InvalidPortInstanceId( Locations.get(name.id), name.data, + instanceType, interfaceName ) ) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala b/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala index 4f634f112..839108f98 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala @@ -11,6 +11,9 @@ sealed trait Symbol extends SymbolInterface { /** A type symbol */ sealed trait TypeSymbol extends Symbol +/** A port interface instance symbol */ +sealed trait InterfaceInstanceSymbol extends Symbol + object Symbol { final case class AbsType(node: Ast.Annotated[AstNode[Ast.DefAbsType]]) extends TypeSymbol { @@ -31,7 +34,7 @@ object Symbol { override def getNodeId = node._2.id override def getUnqualifiedName = node._2.data.name } - final case class ComponentInstance(node: Ast.Annotated[AstNode[Ast.DefComponentInstance]]) extends Symbol { + final case class ComponentInstance(node: Ast.Annotated[AstNode[Ast.DefComponentInstance]]) extends InterfaceInstanceSymbol { override def getNodeId = node._2.id override def getUnqualifiedName = node._2.data.name } @@ -70,11 +73,9 @@ object Symbol { override def getNodeId = node._2.id override def getUnqualifiedName = node._2.data.name } - final case class Topology(node: Ast.Annotated[AstNode[Ast.DefTopology]]) extends Symbol { + final case class Topology(node: Ast.Annotated[AstNode[Ast.DefTopology]]) extends InterfaceInstanceSymbol { override def getNodeId = node._2.id override def getUnqualifiedName = node._2.data.name } - type InterfaceInstance = Symbol.ComponentInstance | Symbol.Topology - } diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala b/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala index 92e2c2311..1ecf32b6a 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Topology.scala @@ -22,7 +22,7 @@ case class Topology( /** The ports in the topology resolved to their port instance identifiers */ portMap: Map[Name.Unqualified, (PortInstanceIdentifier, Location)] = Map(), /** Resolved port interface of the topology */ - portInterface: PortInterface = PortInterface(), + portInterface: PortInterface = PortInterface("topology"), /** The connection patterns of this topology */ patternMap: Map[Ast.SpecConnectionGraph.Pattern.Kind, ConnectionPattern] = Map(), /** The connections of this topology, indexed by graph name */ @@ -178,7 +178,7 @@ case class Topology( /** Add an instance that must be unique */ def addInstanceSymbol( - symbol: Symbol.InterfaceInstance, + symbol: InterfaceInstanceSymbol, loc: Location ): Result.Result[Topology] = symbol match { diff --git a/compiler/lib/src/main/scala/util/Error.scala b/compiler/lib/src/main/scala/util/Error.scala index 3a2a344b1..1f87b8e0a 100644 --- a/compiler/lib/src/main/scala/util/Error.scala +++ b/compiler/lib/src/main/scala/util/Error.scala @@ -204,8 +204,8 @@ sealed trait Error { Error.print (Some(loc)) (msg) System.err.println(s"port definition is here:") System.err.println(defLoc) - case SemanticError.InvalidPortInstanceId(loc, portName, interfaceName) => - Error.print (Some(loc)) (s"$portName is not a port instance of interface $interfaceName") + case SemanticError.InvalidPortInstanceId(loc, portName, symbol, interfaceName) => + Error.print (Some(loc)) (s"$portName is not a port instance of $symbol $interfaceName") case SemanticError.InvalidPortKind(loc, msg, specLoc) => Error.print (Some(loc)) (msg) System.err.println(s"port instance is specified here:") @@ -612,6 +612,7 @@ object SemanticError { final case class InvalidPortInstanceId( loc: Location, portName: String, + symbolKind: String, interfaceName: String ) extends Error /** Invalid port kind */ diff --git a/compiler/tools/fpp-check/test/connection_direct/invalid_port_instance.ref.txt b/compiler/tools/fpp-check/test/connection_direct/invalid_port_instance.ref.txt index 3a052f705..eb2ab572e 100644 --- a/compiler/tools/fpp-check/test/connection_direct/invalid_port_instance.ref.txt +++ b/compiler/tools/fpp-check/test/connection_direct/invalid_port_instance.ref.txt @@ -2,4 +2,4 @@ fpp-check [ local path prefix ]/compiler/tools/fpp-check/test/connection_direct/invalid_port_instance.fpp:6.7 c.out -> c.in ^ -error: out is not a port instance of interface c +error: out is not a port instance of component c diff --git a/compiler/tools/fpp-check/test/port_matching/p1_not_port_instance.ref.txt b/compiler/tools/fpp-check/test/port_matching/p1_not_port_instance.ref.txt index b169b46d7..c49e47d2a 100644 --- a/compiler/tools/fpp-check/test/port_matching/p1_not_port_instance.ref.txt +++ b/compiler/tools/fpp-check/test/port_matching/p1_not_port_instance.ref.txt @@ -2,4 +2,4 @@ fpp-check [ local path prefix ]/compiler/tools/fpp-check/test/port_matching/p1_not_port_instance.fpp:6.9 match p1 with p2 ^ -error: p1 is not a port instance of interface C +error: p1 is not a port instance of component C diff --git a/compiler/tools/fpp-check/test/port_matching/p2_not_port_instance.ref.txt b/compiler/tools/fpp-check/test/port_matching/p2_not_port_instance.ref.txt index 6423e37f3..760962ec5 100644 --- a/compiler/tools/fpp-check/test/port_matching/p2_not_port_instance.ref.txt +++ b/compiler/tools/fpp-check/test/port_matching/p2_not_port_instance.ref.txt @@ -2,4 +2,4 @@ fpp-check [ local path prefix ]/compiler/tools/fpp-check/test/port_matching/p2_not_port_instance.fpp:6.17 match p1 with p2 ^ -error: p2 is not a port instance of interface C +error: p2 is not a port instance of component C From 540d0fd5799ee7b2666c78717118438ddf779021 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Thu, 29 Jan 2026 09:52:28 -0800 Subject: [PATCH 25/26] Update error reporting for interface instance namegroup undef --- compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala | 2 +- .../fpp-check/test/connection_direct/undef_instance.ref.txt | 2 +- .../fpp-check/test/connection_pattern/undef_source.ref.txt | 2 +- .../fpp-check/test/connection_pattern/undef_target.ref.txt | 2 +- .../tools/fpp-check/test/instance_spec/undef_instance.ref.txt | 2 +- .../fpp-check/test/tlm_packets/instance_not_defined.ref.txt | 2 +- .../test/tlm_packets/omit_instance_not_defined.ref.txt | 2 +- compiler/tools/fpp-check/test/top_import/undef_topology.ref.txt | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala b/compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala index 94d07faba..b41935a93 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/NameGroup.scala @@ -5,7 +5,7 @@ sealed trait NameGroup object NameGroup { case object PortInterfaceInstance extends NameGroup { - override def toString(): String = "port interface instance" + override def toString(): String = "component instance or topology" } case object Component extends NameGroup { diff --git a/compiler/tools/fpp-check/test/connection_direct/undef_instance.ref.txt b/compiler/tools/fpp-check/test/connection_direct/undef_instance.ref.txt index 392f2e1e9..637d96bc9 100644 --- a/compiler/tools/fpp-check/test/connection_direct/undef_instance.ref.txt +++ b/compiler/tools/fpp-check/test/connection_direct/undef_instance.ref.txt @@ -3,4 +3,4 @@ fpp-check c.out -> c.in ^ error: symbol c is not defined -note: looking for a port interface instance here +note: looking for a component instance or topology here diff --git a/compiler/tools/fpp-check/test/connection_pattern/undef_source.ref.txt b/compiler/tools/fpp-check/test/connection_pattern/undef_source.ref.txt index c780cfda9..94d13a0f5 100644 --- a/compiler/tools/fpp-check/test/connection_pattern/undef_source.ref.txt +++ b/compiler/tools/fpp-check/test/connection_pattern/undef_source.ref.txt @@ -3,4 +3,4 @@ fpp-check health connections instance $health ^ error: symbol health is not defined -note: looking for a port interface instance here +note: looking for a component instance or topology here diff --git a/compiler/tools/fpp-check/test/connection_pattern/undef_target.ref.txt b/compiler/tools/fpp-check/test/connection_pattern/undef_target.ref.txt index 509b3373c..302d5e5de 100644 --- a/compiler/tools/fpp-check/test/connection_pattern/undef_target.ref.txt +++ b/compiler/tools/fpp-check/test/connection_pattern/undef_target.ref.txt @@ -3,4 +3,4 @@ fpp-check c ^ error: symbol c is not defined -note: looking for a port interface instance here +note: looking for a component instance or topology here diff --git a/compiler/tools/fpp-check/test/instance_spec/undef_instance.ref.txt b/compiler/tools/fpp-check/test/instance_spec/undef_instance.ref.txt index 082006190..8efc3baa5 100644 --- a/compiler/tools/fpp-check/test/instance_spec/undef_instance.ref.txt +++ b/compiler/tools/fpp-check/test/instance_spec/undef_instance.ref.txt @@ -3,4 +3,4 @@ fpp-check instance c ^ error: symbol c is not defined -note: looking for a port interface instance here +note: looking for a component instance or topology here diff --git a/compiler/tools/fpp-check/test/tlm_packets/instance_not_defined.ref.txt b/compiler/tools/fpp-check/test/tlm_packets/instance_not_defined.ref.txt index 394abd137..135b08ee9 100644 --- a/compiler/tools/fpp-check/test/tlm_packets/instance_not_defined.ref.txt +++ b/compiler/tools/fpp-check/test/tlm_packets/instance_not_defined.ref.txt @@ -3,4 +3,4 @@ fpp-check u.T ^ error: symbol u is not defined -note: looking for a port interface instance here +note: looking for a component instance or topology here diff --git a/compiler/tools/fpp-check/test/tlm_packets/omit_instance_not_defined.ref.txt b/compiler/tools/fpp-check/test/tlm_packets/omit_instance_not_defined.ref.txt index 63a985b65..fc243d849 100644 --- a/compiler/tools/fpp-check/test/tlm_packets/omit_instance_not_defined.ref.txt +++ b/compiler/tools/fpp-check/test/tlm_packets/omit_instance_not_defined.ref.txt @@ -3,4 +3,4 @@ fpp-check u.T ^ error: symbol u is not defined -note: looking for a port interface instance here +note: looking for a component instance or topology here diff --git a/compiler/tools/fpp-check/test/top_import/undef_topology.ref.txt b/compiler/tools/fpp-check/test/top_import/undef_topology.ref.txt index 80b76e006..20ab1631e 100644 --- a/compiler/tools/fpp-check/test/top_import/undef_topology.ref.txt +++ b/compiler/tools/fpp-check/test/top_import/undef_topology.ref.txt @@ -3,4 +3,4 @@ fpp-check import A ^ error: symbol A is not defined -note: looking for a port interface instance here +note: looking for a component instance or topology here From 06ab1b8e7f897509d203c2b0dac70c64866c5030 Mon Sep 17 00:00:00 2001 From: Andrei Tumbar Date: Thu, 29 Jan 2026 09:53:54 -0800 Subject: [PATCH 26/26] Update analysis ref --- .../fpp-to-json/test/activeComponents.ref.txt | 2 + .../tools/fpp-to-json/test/commands.ref.txt | 1 + .../test/constTypesComponents.ref.txt | 1 + .../fpp-to-json/test/dataProducts.ref.txt | 1 + .../tools/fpp-to-json/test/events.ref.txt | 2 + .../test/importedTopologies.ref.txt | 196 +++++++++--------- .../tools/fpp-to-json/test/interfaces.ref.txt | 3 + .../fpp-to-json/test/internalPorts.ref.txt | 1 + .../fpp-to-json/test/matchedPorts.ref.txt | 1 + .../tools/fpp-to-json/test/parameters.ref.txt | 1 + .../fpp-to-json/test/passiveComponent.ref.txt | 1 + .../test/patternedConnections.ref.txt | 164 ++++++++------- compiler/tools/fpp-to-json/test/ports.ref.txt | 2 + .../fpp-to-json/test/queuedComponents.ref.txt | 1 + .../fpp-to-json/test/simpleComponents.ref.txt | 4 + .../fpp-to-json/test/simpleTopology.ref.txt | 3 + .../fpp-to-json/test/specialPorts.ref.txt | 5 + .../tools/fpp-to-json/test/telemetry.ref.txt | 2 + .../fpp-to-json/test/telemetryPackets.ref.txt | 112 +++++----- 19 files changed, 274 insertions(+), 229 deletions(-) diff --git a/compiler/tools/fpp-to-json/test/activeComponents.ref.txt b/compiler/tools/fpp-to-json/test/activeComponents.ref.txt index 65b01c04b..0f0be0881 100644 --- a/compiler/tools/fpp-to-json/test/activeComponents.ref.txt +++ b/compiler/tools/fpp-to-json/test/activeComponents.ref.txt @@ -1975,6 +1975,7 @@ "astNodeId" : 58 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "bufferSendIn" : { "General" : { @@ -2095,6 +2096,7 @@ "astNodeId" : 137 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "schedIn" : { "General" : { diff --git a/compiler/tools/fpp-to-json/test/commands.ref.txt b/compiler/tools/fpp-to-json/test/commands.ref.txt index d87481e3a..b84215019 100644 --- a/compiler/tools/fpp-to-json/test/commands.ref.txt +++ b/compiler/tools/fpp-to-json/test/commands.ref.txt @@ -718,6 +718,7 @@ "astNodeId" : 45 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "cmdRegOut" : { "Special" : { diff --git a/compiler/tools/fpp-to-json/test/constTypesComponents.ref.txt b/compiler/tools/fpp-to-json/test/constTypesComponents.ref.txt index a76003d5b..b64b27c05 100644 --- a/compiler/tools/fpp-to-json/test/constTypesComponents.ref.txt +++ b/compiler/tools/fpp-to-json/test/constTypesComponents.ref.txt @@ -554,6 +554,7 @@ "astNodeId" : 35 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "cmdRegOut" : { "Special" : { diff --git a/compiler/tools/fpp-to-json/test/dataProducts.ref.txt b/compiler/tools/fpp-to-json/test/dataProducts.ref.txt index d1e733827..ca58bd44a 100644 --- a/compiler/tools/fpp-to-json/test/dataProducts.ref.txt +++ b/compiler/tools/fpp-to-json/test/dataProducts.ref.txt @@ -593,6 +593,7 @@ "astNodeId" : 28 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "productRequestOut" : { "Special" : { diff --git a/compiler/tools/fpp-to-json/test/events.ref.txt b/compiler/tools/fpp-to-json/test/events.ref.txt index 7c63f1a4f..d2917289c 100644 --- a/compiler/tools/fpp-to-json/test/events.ref.txt +++ b/compiler/tools/fpp-to-json/test/events.ref.txt @@ -1971,6 +1971,7 @@ "astNodeId" : 19 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "eventOut" : { "Special" : { @@ -2218,6 +2219,7 @@ "astNodeId" : 196 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "eventOut" : { "Special" : { diff --git a/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt b/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt index e2f848e17..c3bd8b501 100644 --- a/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt +++ b/compiler/tools/fpp-to-json/test/importedTopologies.ref.txt @@ -1601,6 +1601,7 @@ "astNodeId" : 13 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "pIn" : { "General" : { @@ -1855,6 +1856,7 @@ }, "portInterface" : { + "instanceType" : "topology", "portMap" : { }, @@ -3668,6 +3670,7 @@ }, "portInterface" : { + "instanceType" : "topology", "portMap" : { }, @@ -5794,7 +5797,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.5", + "pos" : "28.5", "includingLoc" : "None" }, "port" : { @@ -5803,9 +5806,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c4" + "base" : "c2" }, - "unqualifiedName" : "c4" + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -5852,7 +5855,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.16", + "pos" : "28.16", "includingLoc" : "None" }, "port" : { @@ -5861,9 +5864,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c3" + "base" : "c1" }, - "unqualifiedName" : "c3" + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -5916,7 +5919,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.5", + "pos" : "43.5", "includingLoc" : "None" }, "port" : { @@ -5925,9 +5928,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c3" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -5974,7 +5977,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.16", + "pos" : "43.16", "includingLoc" : "None" }, "port" : { @@ -5983,9 +5986,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c4" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -6038,7 +6041,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.5", + "pos" : "23.5", "includingLoc" : "None" }, "port" : { @@ -6047,9 +6050,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c3" + "base" : "c1" }, - "unqualifiedName" : "c3" + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -6096,7 +6099,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.16", + "pos" : "23.16", "includingLoc" : "None" }, "port" : { @@ -6105,9 +6108,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c4" + "base" : "c2" }, - "unqualifiedName" : "c4" + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -6160,7 +6163,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.5", + "pos" : "48.5", "includingLoc" : "None" }, "port" : { @@ -6169,9 +6172,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c4" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -6218,7 +6221,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.16", + "pos" : "48.16", "includingLoc" : "None" }, "port" : { @@ -6227,9 +6230,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c3" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -6284,7 +6287,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.5", + "pos" : "23.5", "includingLoc" : "None" }, "port" : { @@ -6293,9 +6296,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c3" + "base" : "c1" }, - "unqualifiedName" : "c3" + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -6342,7 +6345,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.16", + "pos" : "23.16", "includingLoc" : "None" }, "port" : { @@ -6351,9 +6354,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c4" + "base" : "c2" }, - "unqualifiedName" : "c4" + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -6406,7 +6409,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.5", + "pos" : "48.5", "includingLoc" : "None" }, "port" : { @@ -6415,9 +6418,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c4" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -6464,7 +6467,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.16", + "pos" : "48.16", "includingLoc" : "None" }, "port" : { @@ -6473,9 +6476,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c3" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -6528,7 +6531,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.5", + "pos" : "28.5", "includingLoc" : "None" }, "port" : { @@ -6537,9 +6540,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c4" + "base" : "c2" }, - "unqualifiedName" : "c4" + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -6586,7 +6589,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.16", + "pos" : "28.16", "includingLoc" : "None" }, "port" : { @@ -6595,9 +6598,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c3" + "base" : "c1" }, - "unqualifiedName" : "c3" + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -6650,7 +6653,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.5", + "pos" : "43.5", "includingLoc" : "None" }, "port" : { @@ -6659,9 +6662,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c3" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -6708,7 +6711,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.16", + "pos" : "43.16", "includingLoc" : "None" }, "port" : { @@ -6717,9 +6720,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c4" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -6912,6 +6915,7 @@ }, "portInterface" : { + "instanceType" : "topology", "portMap" : { }, @@ -8797,7 +8801,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.5", + "pos" : "28.5", "includingLoc" : "None" }, "port" : { @@ -8806,9 +8810,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c4" + "base" : "c2" }, - "unqualifiedName" : "c4" + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -8855,7 +8859,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.16", + "pos" : "28.16", "includingLoc" : "None" }, "port" : { @@ -8864,9 +8868,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c3" + "base" : "c1" }, - "unqualifiedName" : "c3" + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -8919,7 +8923,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.5", + "pos" : "43.5", "includingLoc" : "None" }, "port" : { @@ -8928,9 +8932,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c3" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -8977,7 +8981,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.16", + "pos" : "43.16", "includingLoc" : "None" }, "port" : { @@ -8986,9 +8990,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c4" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -9041,7 +9045,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.5", + "pos" : "23.5", "includingLoc" : "None" }, "port" : { @@ -9050,9 +9054,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c3" + "base" : "c1" }, - "unqualifiedName" : "c3" + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -9099,7 +9103,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.16", + "pos" : "23.16", "includingLoc" : "None" }, "port" : { @@ -9108,9 +9112,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c4" + "base" : "c2" }, - "unqualifiedName" : "c4" + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -9163,7 +9167,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.5", + "pos" : "48.5", "includingLoc" : "None" }, "port" : { @@ -9172,9 +9176,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c4" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -9221,7 +9225,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.16", + "pos" : "48.16", "includingLoc" : "None" }, "port" : { @@ -9230,9 +9234,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c3" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -9287,7 +9291,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.5", + "pos" : "23.5", "includingLoc" : "None" }, "port" : { @@ -9296,9 +9300,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c3" + "base" : "c1" }, - "unqualifiedName" : "c3" + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -9345,7 +9349,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "43.16", + "pos" : "23.16", "includingLoc" : "None" }, "port" : { @@ -9354,9 +9358,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c4" + "base" : "c2" }, - "unqualifiedName" : "c4" + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -9409,7 +9413,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.5", + "pos" : "48.5", "includingLoc" : "None" }, "port" : { @@ -9418,9 +9422,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c4" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c4" } }, "portInstance" : { @@ -9467,7 +9471,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "23.16", + "pos" : "48.16", "includingLoc" : "None" }, "port" : { @@ -9476,9 +9480,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c3" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -9531,7 +9535,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.5", + "pos" : "28.5", "includingLoc" : "None" }, "port" : { @@ -9540,9 +9544,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c4" + "base" : "c2" }, - "unqualifiedName" : "c4" + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -9589,7 +9593,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "48.16", + "pos" : "28.16", "includingLoc" : "None" }, "port" : { @@ -9598,9 +9602,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c3" + "base" : "c1" }, - "unqualifiedName" : "c3" + "unqualifiedName" : "c1" } }, "portInstance" : { @@ -9653,7 +9657,7 @@ "from" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.5", + "pos" : "43.5", "includingLoc" : "None" }, "port" : { @@ -9662,9 +9666,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c3" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c3" } }, "portInstance" : { @@ -9711,7 +9715,7 @@ "to" : { "loc" : { "file" : "[ local path prefix ]/compiler/tools/fpp-to-json/test/importedTopologies.fpp", - "pos" : "28.16", + "pos" : "43.16", "includingLoc" : "None" }, "port" : { @@ -9720,9 +9724,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c4" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c4" } }, "portInstance" : { diff --git a/compiler/tools/fpp-to-json/test/interfaces.ref.txt b/compiler/tools/fpp-to-json/test/interfaces.ref.txt index 0f6c39aa9..b7f0a9a4a 100644 --- a/compiler/tools/fpp-to-json/test/interfaces.ref.txt +++ b/compiler/tools/fpp-to-json/test/interfaces.ref.txt @@ -973,6 +973,7 @@ "astNodeId" : 71 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "cmdRegOut" : { "Special" : { @@ -1522,6 +1523,7 @@ }, "portInterface" : { + "instanceType" : "interface", "portMap" : { "cmdRegOut" : { "Special" : { @@ -1698,6 +1700,7 @@ }, "portInterface" : { + "instanceType" : "interface", "portMap" : { "general" : { "General" : { diff --git a/compiler/tools/fpp-to-json/test/internalPorts.ref.txt b/compiler/tools/fpp-to-json/test/internalPorts.ref.txt index a9fc02b05..f97c93c4b 100644 --- a/compiler/tools/fpp-to-json/test/internalPorts.ref.txt +++ b/compiler/tools/fpp-to-json/test/internalPorts.ref.txt @@ -368,6 +368,7 @@ "astNodeId" : 43 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "pInternal" : { "Internal" : { diff --git a/compiler/tools/fpp-to-json/test/matchedPorts.ref.txt b/compiler/tools/fpp-to-json/test/matchedPorts.ref.txt index 298bbb116..287f70ad2 100644 --- a/compiler/tools/fpp-to-json/test/matchedPorts.ref.txt +++ b/compiler/tools/fpp-to-json/test/matchedPorts.ref.txt @@ -414,6 +414,7 @@ "astNodeId" : 21 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "pingOut" : { "General" : { diff --git a/compiler/tools/fpp-to-json/test/parameters.ref.txt b/compiler/tools/fpp-to-json/test/parameters.ref.txt index 92159459f..6137d6d4d 100644 --- a/compiler/tools/fpp-to-json/test/parameters.ref.txt +++ b/compiler/tools/fpp-to-json/test/parameters.ref.txt @@ -870,6 +870,7 @@ "astNodeId" : 35 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "cmdIn" : { "Special" : { diff --git a/compiler/tools/fpp-to-json/test/passiveComponent.ref.txt b/compiler/tools/fpp-to-json/test/passiveComponent.ref.txt index 3fb85cac2..01e0ece82 100644 --- a/compiler/tools/fpp-to-json/test/passiveComponent.ref.txt +++ b/compiler/tools/fpp-to-json/test/passiveComponent.ref.txt @@ -827,6 +827,7 @@ "astNodeId" : 44 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "schedIn" : { "General" : { diff --git a/compiler/tools/fpp-to-json/test/patternedConnections.ref.txt b/compiler/tools/fpp-to-json/test/patternedConnections.ref.txt index d4cf0a6c5..08e615bb1 100644 --- a/compiler/tools/fpp-to-json/test/patternedConnections.ref.txt +++ b/compiler/tools/fpp-to-json/test/patternedConnections.ref.txt @@ -3594,6 +3594,7 @@ "astNodeId" : 67 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "PingSend" : { "General" : { @@ -3714,6 +3715,7 @@ "astNodeId" : 12 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "timeGetPort" : { "General" : { @@ -3797,6 +3799,7 @@ "astNodeId" : 84 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "paramGet" : { "General" : { @@ -3917,6 +3920,7 @@ "astNodeId" : 110 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "textEventLog" : { "General" : { @@ -4000,6 +4004,7 @@ "astNodeId" : 97 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "tlm" : { "General" : { @@ -4083,6 +4088,7 @@ "astNodeId" : 50 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "eventLog" : { "General" : { @@ -4166,6 +4172,7 @@ "astNodeId" : 37 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "cmdIn" : { "General" : { @@ -4782,6 +4789,7 @@ }, "portInterface" : { + "instanceType" : "topology", "portMap" : { }, @@ -5155,15 +5163,15 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c6" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c6" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 16 + "astNodeId" : 96 }, "specifier" : { "kind" : { @@ -5171,11 +5179,11 @@ } }, - "name" : "cmdIn", + "name" : "tlm", "size" : "None", "port" : { "Some" : { - "astNodeId" : 15 + "astNodeId" : 95 } }, "priority" : "None", @@ -5187,8 +5195,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 286, - "unqualifiedName" : "Cmd" + "nodeId" : 294, + "unqualifiedName" : "Tlm" } } } @@ -5253,15 +5261,15 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c4" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c4" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 20 + "astNodeId" : 66 }, "specifier" : { "kind" : { @@ -5269,11 +5277,11 @@ } }, - "name" : "cmdRegOut", + "name" : "PingReturn", "size" : "None", "port" : { "Some" : { - "astNodeId" : 19 + "astNodeId" : 65 } }, "priority" : "None", @@ -5285,8 +5293,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 287, - "unqualifiedName" : "CmdReg" + "nodeId" : 301, + "unqualifiedName" : "Ping" } } } @@ -5302,40 +5310,40 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c3" + "base" : "c2" }, - "unqualifiedName" : "c3" + "unqualifiedName" : "c2" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 49 + "astNodeId" : 36 }, "specifier" : { "kind" : { - "SyncInput" : { + "Output" : { } }, - "name" : "eventLog", + "name" : "cmdSend", "size" : "None", "port" : { "Some" : { - "astNodeId" : 48 + "astNodeId" : 35 } }, "priority" : "None", "queueFull" : "None" }, - "kind" : "SyncInput", + "kind" : "Output", "size" : 1, "ty" : { "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 289, - "unqualifiedName" : "Log" + "nodeId" : 286, + "unqualifiedName" : "Cmd" } } } @@ -5351,15 +5359,15 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c6" + "base" : "c2" }, - "unqualifiedName" : "c6" + "unqualifiedName" : "c2" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 96 + "astNodeId" : 16 }, "specifier" : { "kind" : { @@ -5367,11 +5375,11 @@ } }, - "name" : "tlm", + "name" : "cmdIn", "size" : "None", "port" : { "Some" : { - "astNodeId" : 95 + "astNodeId" : 15 } }, "priority" : "None", @@ -5383,8 +5391,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 294, - "unqualifiedName" : "Tlm" + "nodeId" : 286, + "unqualifiedName" : "Cmd" } } } @@ -5400,15 +5408,15 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c5" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c5" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 11 + "astNodeId" : 83 }, "specifier" : { "kind" : { @@ -5416,11 +5424,11 @@ } }, - "name" : "timeGetPort", + "name" : "paramSet", "size" : "None", "port" : { "Some" : { - "astNodeId" : 10 + "astNodeId" : 82 } }, "priority" : "None", @@ -5432,8 +5440,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 293, - "unqualifiedName" : "Time" + "nodeId" : 292, + "unqualifiedName" : "PrmSet" } } } @@ -5449,40 +5457,40 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c5" + "base" : "c4" }, - "unqualifiedName" : "c5" + "unqualifiedName" : "c4" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 71 + "astNodeId" : 54 }, "specifier" : { "kind" : { - "SyncInput" : { + "Output" : { } }, - "name" : "paramGet", + "name" : "PingSend", "size" : "None", "port" : { "Some" : { - "astNodeId" : 70 + "astNodeId" : 53 } }, "priority" : "None", "queueFull" : "None" }, - "kind" : "SyncInput", + "kind" : "Output", "size" : 1, "ty" : { "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 291, - "unqualifiedName" : "PrmGet" + "nodeId" : 301, + "unqualifiedName" : "Ping" } } } @@ -5498,40 +5506,40 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c4" + "base" : "c2" }, - "unqualifiedName" : "c4" + "unqualifiedName" : "c2" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 54 + "astNodeId" : 20 }, "specifier" : { "kind" : { - "Output" : { + "SyncInput" : { } }, - "name" : "PingSend", + "name" : "cmdRegOut", "size" : "None", "port" : { "Some" : { - "astNodeId" : 53 + "astNodeId" : 19 } }, "priority" : "None", "queueFull" : "None" }, - "kind" : "Output", + "kind" : "SyncInput", "size" : 1, "ty" : { "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 301, - "unqualifiedName" : "Ping" + "nodeId" : 287, + "unqualifiedName" : "CmdReg" } } } @@ -5596,40 +5604,40 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c1" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c1" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 36 + "astNodeId" : 11 }, "specifier" : { "kind" : { - "Output" : { + "SyncInput" : { } }, - "name" : "cmdSend", + "name" : "timeGetPort", "size" : "None", "port" : { "Some" : { - "astNodeId" : 35 + "astNodeId" : 10 } }, "priority" : "None", "queueFull" : "None" }, - "kind" : "Output", + "kind" : "SyncInput", "size" : 1, "ty" : { "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 286, - "unqualifiedName" : "Cmd" + "nodeId" : 293, + "unqualifiedName" : "Time" } } } @@ -5645,15 +5653,15 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c5" + "base" : "c3" }, - "unqualifiedName" : "c5" + "unqualifiedName" : "c3" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 83 + "astNodeId" : 49 }, "specifier" : { "kind" : { @@ -5661,11 +5669,11 @@ } }, - "name" : "paramSet", + "name" : "eventLog", "size" : "None", "port" : { "Some" : { - "astNodeId" : 82 + "astNodeId" : 48 } }, "priority" : "None", @@ -5677,8 +5685,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 292, - "unqualifiedName" : "PrmSet" + "nodeId" : 289, + "unqualifiedName" : "Log" } } } @@ -5694,15 +5702,15 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c4" + "base" : "c5" }, - "unqualifiedName" : "c4" + "unqualifiedName" : "c5" } }, "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 66 + "astNodeId" : 71 }, "specifier" : { "kind" : { @@ -5710,11 +5718,11 @@ } }, - "name" : "PingReturn", + "name" : "paramGet", "size" : "None", "port" : { "Some" : { - "astNodeId" : 65 + "astNodeId" : 70 } }, "priority" : "None", @@ -5726,8 +5734,8 @@ "DefPort" : { "symbol" : { "Port" : { - "nodeId" : 301, - "unqualifiedName" : "Ping" + "nodeId" : 291, + "unqualifiedName" : "PrmGet" } } } diff --git a/compiler/tools/fpp-to-json/test/ports.ref.txt b/compiler/tools/fpp-to-json/test/ports.ref.txt index 4720b39c9..4f038eb5a 100644 --- a/compiler/tools/fpp-to-json/test/ports.ref.txt +++ b/compiler/tools/fpp-to-json/test/ports.ref.txt @@ -1498,6 +1498,7 @@ "astNodeId" : 81 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "productRecvIn" : { "Special" : { @@ -1899,6 +1900,7 @@ }, "portInterface" : { + "instanceType" : "topology", "portMap" : { }, diff --git a/compiler/tools/fpp-to-json/test/queuedComponents.ref.txt b/compiler/tools/fpp-to-json/test/queuedComponents.ref.txt index 4aed89a79..e21641676 100644 --- a/compiler/tools/fpp-to-json/test/queuedComponents.ref.txt +++ b/compiler/tools/fpp-to-json/test/queuedComponents.ref.txt @@ -1031,6 +1031,7 @@ "astNodeId" : 60 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "schedIn" : { "General" : { diff --git a/compiler/tools/fpp-to-json/test/simpleComponents.ref.txt b/compiler/tools/fpp-to-json/test/simpleComponents.ref.txt index f8704568e..41cc2a624 100644 --- a/compiler/tools/fpp-to-json/test/simpleComponents.ref.txt +++ b/compiler/tools/fpp-to-json/test/simpleComponents.ref.txt @@ -1043,6 +1043,7 @@ "astNodeId" : 22 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "f32ValueIn1" : { "General" : { @@ -1200,6 +1201,7 @@ "astNodeId" : 38 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "f32ValueIn1" : { "General" : { @@ -1357,6 +1359,7 @@ "astNodeId" : 58 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "f32ValueIn1" : { "General" : { @@ -1530,6 +1533,7 @@ "astNodeId" : 68 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "serialIn" : { "General" : { diff --git a/compiler/tools/fpp-to-json/test/simpleTopology.ref.txt b/compiler/tools/fpp-to-json/test/simpleTopology.ref.txt index c34ba51ee..06fdd4a0d 100644 --- a/compiler/tools/fpp-to-json/test/simpleTopology.ref.txt +++ b/compiler/tools/fpp-to-json/test/simpleTopology.ref.txt @@ -864,6 +864,7 @@ "astNodeId" : 14 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "pIn" : { "General" : { @@ -1118,6 +1119,7 @@ }, "portInterface" : { + "instanceType" : "topology", "portMap" : { }, @@ -2908,6 +2910,7 @@ }, "portInterface" : { + "instanceType" : "interface", "portMap" : { }, diff --git a/compiler/tools/fpp-to-json/test/specialPorts.ref.txt b/compiler/tools/fpp-to-json/test/specialPorts.ref.txt index 2bbc75c3c..55ef13d43 100644 --- a/compiler/tools/fpp-to-json/test/specialPorts.ref.txt +++ b/compiler/tools/fpp-to-json/test/specialPorts.ref.txt @@ -804,6 +804,7 @@ "astNodeId" : 5 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "cmdIn" : { "Special" : { @@ -1011,6 +1012,7 @@ "astNodeId" : 10 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "eventOut" : { "Special" : { @@ -1164,6 +1166,7 @@ "astNodeId" : 14 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "tlmOut" : { "Special" : { @@ -1263,6 +1266,7 @@ "astNodeId" : 19 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "prmGetOut" : { "Special" : { @@ -1416,6 +1420,7 @@ "astNodeId" : 23 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "timeGetOut" : { "Special" : { diff --git a/compiler/tools/fpp-to-json/test/telemetry.ref.txt b/compiler/tools/fpp-to-json/test/telemetry.ref.txt index 3eac36331..c1cad8ef8 100644 --- a/compiler/tools/fpp-to-json/test/telemetry.ref.txt +++ b/compiler/tools/fpp-to-json/test/telemetry.ref.txt @@ -1283,6 +1283,7 @@ "astNodeId" : 58 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "tlmOut" : { "Special" : { @@ -2058,6 +2059,7 @@ }, "portInterface" : { + "instanceType" : "topology", "portMap" : { }, diff --git a/compiler/tools/fpp-to-json/test/telemetryPackets.ref.txt b/compiler/tools/fpp-to-json/test/telemetryPackets.ref.txt index efdbb6f30..f9809b53a 100644 --- a/compiler/tools/fpp-to-json/test/telemetryPackets.ref.txt +++ b/compiler/tools/fpp-to-json/test/telemetryPackets.ref.txt @@ -1205,6 +1205,7 @@ "astNodeId" : 20 }, "portInterface" : { + "instanceType" : "component", "portMap" : { "pIn" : { "General" : { @@ -1651,6 +1652,7 @@ }, "portInterface" : { + "instanceType" : "topology", "portMap" : { }, @@ -1682,35 +1684,44 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c2" + "base" : "c1" }, - "unqualifiedName" : "c2" + "unqualifiedName" : "c1" } }, "portInstance" : { - "Special" : { + "General" : { "aNode" : { - "astNodeId" : 13 + "astNodeId" : 11 }, "specifier" : { - "inputKind" : "None", "kind" : { - "TimeGet" : { + "Output" : { } }, - "name" : "timeGetOut", + "name" : "pOut", + "size" : "None", + "port" : { + "Some" : { + "astNodeId" : 10 + } + }, "priority" : "None", "queueFull" : "None" }, - "symbol" : { - "Port" : { - "nodeId" : 3, - "unqualifiedName" : "Time" + "kind" : "Output", + "size" : 1, + "ty" : { + "DefPort" : { + "symbol" : { + "Port" : { + "nodeId" : 5, + "unqualifiedName" : "P" + } + } } }, - "priority" : "None", - "queueFull" : "None", "importNodeIds" : [ ] } @@ -1722,9 +1733,9 @@ "qualifiedName" : { "qualifier" : [ ], - "base" : "c1" + "base" : "c2" }, - "unqualifiedName" : "c1" + "unqualifiedName" : "c2" } }, "portInstance" : { @@ -1819,25 +1830,25 @@ "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 8 + "astNodeId" : 11 }, "specifier" : { "kind" : { - "SyncInput" : { + "Output" : { } }, - "name" : "pIn", + "name" : "pOut", "size" : "None", "port" : { "Some" : { - "astNodeId" : 7 + "astNodeId" : 10 } }, "priority" : "None", "queueFull" : "None" }, - "kind" : "SyncInput", + "kind" : "Output", "size" : 1, "ty" : { "DefPort" : { @@ -1868,23 +1879,23 @@ "portInstance" : { "Special" : { "aNode" : { - "astNodeId" : 12 + "astNodeId" : 13 }, "specifier" : { "inputKind" : "None", "kind" : { - "Telemetry" : { + "TimeGet" : { } }, - "name" : "tlmOut", + "name" : "timeGetOut", "priority" : "None", "queueFull" : "None" }, "symbol" : { "Port" : { - "nodeId" : 0, - "unqualifiedName" : "Tlm" + "nodeId" : 3, + "unqualifiedName" : "Time" } }, "priority" : "None", @@ -1908,25 +1919,25 @@ "portInstance" : { "General" : { "aNode" : { - "astNodeId" : 11 + "astNodeId" : 8 }, "specifier" : { "kind" : { - "Output" : { + "SyncInput" : { } }, - "name" : "pOut", + "name" : "pIn", "size" : "None", "port" : { "Some" : { - "astNodeId" : 10 + "astNodeId" : 7 } }, "priority" : "None", "queueFull" : "None" }, - "kind" : "Output", + "kind" : "SyncInput", "size" : 1, "ty" : { "DefPort" : { @@ -1955,38 +1966,29 @@ } }, "portInstance" : { - "General" : { + "Special" : { "aNode" : { - "astNodeId" : 11 + "astNodeId" : 13 }, "specifier" : { + "inputKind" : "None", "kind" : { - "Output" : { + "TimeGet" : { } }, - "name" : "pOut", - "size" : "None", - "port" : { - "Some" : { - "astNodeId" : 10 - } - }, + "name" : "timeGetOut", "priority" : "None", "queueFull" : "None" }, - "kind" : "Output", - "size" : 1, - "ty" : { - "DefPort" : { - "symbol" : { - "Port" : { - "nodeId" : 5, - "unqualifiedName" : "P" - } - } + "symbol" : { + "Port" : { + "nodeId" : 3, + "unqualifiedName" : "Time" } }, + "priority" : "None", + "queueFull" : "None", "importNodeIds" : [ ] } @@ -2006,23 +2008,23 @@ "portInstance" : { "Special" : { "aNode" : { - "astNodeId" : 13 + "astNodeId" : 12 }, "specifier" : { "inputKind" : "None", "kind" : { - "TimeGet" : { + "Telemetry" : { } }, - "name" : "timeGetOut", + "name" : "tlmOut", "priority" : "None", "queueFull" : "None" }, "symbol" : { "Port" : { - "nodeId" : 3, - "unqualifiedName" : "Time" + "nodeId" : 0, + "unqualifiedName" : "Tlm" } }, "priority" : "None",