Skip to content

Commit e068ecd

Browse files
authored
Merge pull request #923 from nasa/issue-615-sm-enum
Add State enum for state machines
2 parents f24ac60 + cc54dd6 commit e068ecd

File tree

242 files changed

+11777
-1063
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

242 files changed

+11777
-1063
lines changed

compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,26 @@
258258
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1314",
259259
"fields":[{"name":"0bitmap$1206"}]
260260
},
261+
{
262+
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1315",
263+
"fields":[{"name":"0bitmap$1205"}]
264+
},
265+
{
266+
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1316",
267+
"fields":[{"name":"0bitmap$1201"}]
268+
},
269+
{
270+
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1317",
271+
"fields":[{"name":"0bitmap$1202"}]
272+
},
273+
{
274+
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1318",
275+
"fields":[{"name":"0bitmap$1203"}]
276+
},
277+
{
278+
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1319",
279+
"fields":[{"name":"0bitmap$1204"}]
280+
},
261281
{
262282
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1321",
263283
"fields":[{"name":"0bitmap$1211"}]
@@ -1058,6 +1078,26 @@
10581078
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1879",
10591079
"fields":[{"name":"0bitmap$1729"}]
10601080
},
1081+
{
1082+
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1880",
1083+
"fields":[{"name":"0bitmap$1728"}]
1084+
},
1085+
{
1086+
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1881",
1087+
"fields":[{"name":"0bitmap$1724"}]
1088+
},
1089+
{
1090+
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1882",
1091+
"fields":[{"name":"0bitmap$1725"}]
1092+
},
1093+
{
1094+
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1883",
1095+
"fields":[{"name":"0bitmap$1726"}]
1096+
},
1097+
{
1098+
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1884",
1099+
"fields":[{"name":"0bitmap$1727"}]
1100+
},
10611101
{
10621102
"name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1886",
10631103
"fields":[{"name":"0bitmap$1734"}]
@@ -4480,6 +4520,22 @@
44804520
"name":"fpp.compiler.codegen.AstJsonEncoder$$anon$31",
44814521
"fields":[{"name":"0bitmap$28"}]
44824522
},
4523+
{
4524+
"name":"fpp.compiler.codegen.AstJsonEncoder$$anon$310",
4525+
"fields":[{"name":"0bitmap$283"}]
4526+
},
4527+
{
4528+
"name":"fpp.compiler.codegen.AstJsonEncoder$$anon$311",
4529+
"fields":[{"name":"0bitmap$284"}]
4530+
},
4531+
{
4532+
"name":"fpp.compiler.codegen.AstJsonEncoder$$anon$312",
4533+
"fields":[{"name":"0bitmap$285"}]
4534+
},
4535+
{
4536+
"name":"fpp.compiler.codegen.AstJsonEncoder$$anon$313",
4537+
"fields":[{"name":"0bitmap$286"}]
4538+
},
44834539
{
44844540
"name":"fpp.compiler.codegen.AstJsonEncoder$$anon$314",
44854541
"fields":[{"name":"0bitmap$312"}]

compiler/lib/src/main/scala/analysis/Analyzers/BasicUseAnalyzer.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,14 @@ trait BasicUseAnalyzer extends TypeExpressionAnalyzer {
7373
} yield a
7474
}
7575

76+
override def defStateMachineAnnotatedNode(a: Analysis, node: Ast.Annotated[AstNode[Ast.DefStateMachine]]) = {
77+
val id = node._2.id
78+
for {
79+
a <- visitImpliedUses(a, id)
80+
a <- super.defStateMachineAnnotatedNode(a, node)
81+
} yield a
82+
}
83+
7684
override def defTopologyAnnotatedNode(a: Analysis, node: Ast.Annotated[AstNode[Ast.DefTopology]]) = {
7785
val id = node._2.id
7886
for {

compiler/lib/src/main/scala/analysis/Analyzers/StateMachineAnalyzer.scala

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,15 @@ import fpp.compiler.util._
66
/** Analyze state machine members */
77
trait StateMachineAnalyzer extends Analyzer {
88

9-
override def defStateMachineAnnotatedNode(
9+
override def defStateMachineAnnotatedNodeInternal(
1010
a: Analysis,
11-
aNode: Ast.Annotated[AstNode[Ast.DefStateMachine]]
11+
aNode: Ast.Annotated[AstNode[Ast.DefStateMachine]],
12+
members: List[Ast.StateMachineMember]
1213
) = {
13-
val (_, node, _) = aNode
14-
node.data match {
15-
case Ast.DefStateMachine(name, Some(members)) =>
16-
val a1 = a.copy(scopeNameList = name :: a.scopeNameList)
17-
for { a2 <- visitList(a1, members, matchStateMachineMember) }
18-
yield a2.copy(scopeNameList = a.scopeNameList)
19-
case _ => Right(a)
20-
}
14+
val name = aNode._2.data.name
15+
val a1 = a.copy(scopeNameList = name :: a.scopeNameList)
16+
for { a2 <- visitList(a1, members, matchStateMachineMember) }
17+
yield a2.copy(scopeNameList = a.scopeNameList)
2118
}
2219

2320
}

compiler/lib/src/main/scala/analysis/CheckSemantics/CheckSemantics.scala

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,6 @@ object CheckSemantics {
99

1010
def tuList(a: Analysis, tul: List[Ast.TransUnit]): Result.Result[Analysis] = {
1111
for {
12-
a_tul <- ResolveSpecInclude.transformList(
13-
a,
14-
tul,
15-
ResolveSpecInclude.transUnit
16-
)
17-
a <- Right(a_tul._1)
18-
tul <- Right(a_tul._2)
1912
a <- EnterSymbols.visitList(a, tul, EnterSymbols.transUnit)
2013
a <- ConstructImpliedUseMap.visitList(a, tul, ConstructImpliedUseMap.transUnit)
2114
a <- CheckUses.visitList(a, tul, CheckUses.transUnit)

compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTypeUses.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,22 +118,22 @@ object CheckTypeUses extends UseAnalyzer {
118118

119119
override def typeNameFloatNode(a: Analysis, node: AstNode[Ast.TypeName], tn: Ast.TypeNameFloat) = {
120120
val t = tn.name match {
121-
case Ast.F32() => Type.F32
122-
case Ast.F64() => Type.F64
121+
case Ast.F32 => Type.F32
122+
case Ast.F64 => Type.F64
123123
}
124124
Right(a.assignType(node -> t))
125125
}
126126

127127
override def typeNameIntNode(a: Analysis, node: AstNode[Ast.TypeName], tn: Ast.TypeNameInt) = {
128128
val t = tn.name match {
129-
case Ast.I8() => Type.I8
130-
case Ast.I16() => Type.I16
131-
case Ast.I32() => Type.I32
132-
case Ast.I64() => Type.I64
133-
case Ast.U8() => Type.U8
134-
case Ast.U16() => Type.U16
135-
case Ast.U32() => Type.U32
136-
case Ast.U64() => Type.U64
129+
case Ast.I8 => Type.I8
130+
case Ast.I16 => Type.I16
131+
case Ast.I32 => Type.I32
132+
case Ast.I64 => Type.I64
133+
case Ast.U8 => Type.U8
134+
case Ast.U16 => Type.U16
135+
case Ast.U32 => Type.U32
136+
case Ast.U64 => Type.U64
137137
}
138138
Right(a.assignType(node -> t))
139139
}

compiler/lib/src/main/scala/analysis/CheckSemantics/ConstructImpliedUseMap.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,21 @@ object ConstructImpliedUseMap extends TypeExpressionAnalyzer {
4040
super.specPortInstanceAnnotatedNode(a1, aNode)
4141
}
4242

43+
override def defStateMachineAnnotatedNodeInternal(
44+
a: Analysis,
45+
aNode: Ast.Annotated[AstNode[Ast.DefStateMachine]],
46+
members: List[Ast.StateMachineMember]
47+
) = {
48+
val id = aNode._2.id
49+
val sym = Symbol.StateMachine(aNode)
50+
val qualifier = a.getQualifiedName(sym)
51+
val name = Name.Qualified(qualifier.toIdentList, "State")
52+
val impliedUse = ImpliedUse.fromNameAndId(name, id)
53+
val map = Map(ImpliedUse.Kind.Type -> Set(impliedUse))
54+
val a1 = a.copy(impliedUseMap = a.impliedUseMap + (id -> map))
55+
super.defStateMachineAnnotatedNodeInternal(a1, aNode, members)
56+
}
57+
4358
override def defTopologyAnnotatedNode(
4459
a: Analysis,
4560
aNode: Ast.Annotated[AstNode[Ast.DefTopology]]

compiler/lib/src/main/scala/analysis/Semantics/ImpliedUse.scala

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,16 @@ object ImpliedUse {
8585
id1
8686
}
8787

88+
def fromNameAndId(
89+
name: Name.Qualified,
90+
id: AstNode.Id,
91+
annotations: List[String] = Nil
92+
) = ImpliedUse(name, id, annotations)
93+
8894
def fromIdentListAndId(
8995
identList: List[Name.Unqualified],
9096
id: AstNode.Id,
9197
annotations: List[String] = Nil
92-
) = ImpliedUse(Name.Qualified.fromIdentList(identList), id, annotations)
98+
) = fromNameAndId(Name.Qualified.fromIdentList(identList), id, annotations)
9399

94100
}

compiler/lib/src/main/scala/analysis/Semantics/StateMachine/StateMachine.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ object StateMachine {
8383
}
8484

8585
def getLeafStates(sym: Symbol.StateMachine): Set[Ast.Annotated[AstNode[Ast.DefState]]] =
86-
LeafStateVisitor.defStateMachineAnnotatedNode(Set(), sym.node)
86+
GetLeafStates.defStateMachineAnnotatedNode(Set(), sym.node)
8787

88-
private object LeafStateVisitor extends AstVisitor {
88+
private object GetLeafStates extends AstVisitor {
8989

9090
type States = Set[Ast.Annotated[AstNode[Ast.DefState]]]
9191
type In = States

compiler/lib/src/main/scala/ast/Ast.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -854,37 +854,37 @@ object Ast {
854854

855855
/** Float type */
856856
sealed trait TypeFloat
857-
final case class F32() extends TypeFloat {
857+
case object F32 extends TypeFloat {
858858
override def toString = "F32"
859859
}
860-
final case class F64() extends TypeFloat {
860+
case object F64 extends TypeFloat {
861861
override def toString = "F64"
862862
}
863863

864864
/** Int type */
865865
sealed trait TypeInt
866-
final case class I8() extends TypeInt {
866+
case object I8 extends TypeInt {
867867
override def toString = "I8"
868868
}
869-
final case class I16() extends TypeInt {
869+
case object I16 extends TypeInt {
870870
override def toString = "I16"
871871
}
872-
final case class I32() extends TypeInt {
872+
case object I32 extends TypeInt {
873873
override def toString = "I32"
874874
}
875-
final case class I64() extends TypeInt {
875+
case object I64 extends TypeInt {
876876
override def toString = "I64"
877877
}
878-
final case class U8() extends TypeInt {
878+
case object U8 extends TypeInt {
879879
override def toString = "U8"
880880
}
881-
final case class U16() extends TypeInt {
881+
case object U16 extends TypeInt {
882882
override def toString = "U16"
883883
}
884-
final case class U32() extends TypeInt {
884+
case object U32 extends TypeInt {
885885
override def toString = "U32"
886886
}
887-
final case class U64() extends TypeInt {
887+
case object U64 extends TypeInt {
888888
override def toString = "U64"
889889
}
890890

compiler/lib/src/main/scala/ast/AstStateTransformer.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ trait AstStateTransformer extends AstTransformer {
1111

1212
type Out = State
1313

14+
override def transUnit(s: State, tu: Ast.TransUnit) = {
15+
for { result <- transformList(s, tu.members, tuMember) }
16+
yield (result._1, Ast.TransUnit(result._2.flatten))
17+
}
18+
1419
/** Transform a list in sequence, threading state */
1520
def transformList[A,B](
1621
s: State,
@@ -30,4 +35,7 @@ trait AstStateTransformer extends AstTransformer {
3035
yield (pair._1, pair._2.reverse)
3136
}
3237

38+
def tuMember(s: State, member: Ast.TUMember): Result[List[Ast.TUMember]] =
39+
matchModuleMember(s, member)
40+
3341
}

0 commit comments

Comments
 (0)