Skip to content

Commit 330e9d2

Browse files
authored
Fix the preamble generator (#146)
* Fix the preamble generator * Also test imported preambles * Fix scoping
1 parent a7d9dc4 commit 330e9d2

File tree

5 files changed

+28
-12
lines changed

5 files changed

+28
-12
lines changed

lfc/core/src/main/kotlin/org/lflang/generator/uc/UcPreambleGenerator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ class UcPreambleGenerator(
1010
private val reactor: Reactor,
1111
) {
1212
fun generateReactorPrivatePreamble() = reactor.preambles.joinToString(prefix= "// Private preambles\n", separator = "\n", postfix = "\n") { it.code.toText()}
13-
fun generateReactorPublicPreamble() = resource.model.preambles.joinToString(prefix = "// Public preambles ", separator = "\n", postfix = "\n") {it.code.toText()}
13+
fun generateReactorPublicPreamble() = resource.model.preambles.joinToString(prefix = "// Public preambles\n", separator = "\n", postfix = "\n") {it.code.toText()}
1414
}

lfc/core/src/main/kotlin/org/lflang/generator/uc/UcReactionGenerator.kt

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,15 @@ class UcReactionGenerator(private val reactor: Reactor) {
4848
return res
4949
}
5050

51-
5251
private val Reaction.allContainedEffectsTriggersAndSources
5352
get() = run {
5453
val res = mutableMapOf<Instantiation, List<VarRef>>()
55-
for (effect in allContainedEffects) {
56-
res.getOrPut(effect.container!!) { mutableListOf(effect) }.plus(effect)
57-
}
58-
for (trigger in allContainedTriggers) {
59-
res.getOrPut((trigger as VarRef).container!!) { mutableListOf(trigger) }.plus(trigger)
60-
}
61-
for (source in allContainedSources) {
62-
res.getOrPut((source as VarRef).container!!) { mutableListOf(source) }.plus(source)
54+
for (varRef in allContainedEffects.plus(allContainedSources).plus(allContainedTriggers)) {
55+
val varRef = varRef as VarRef
56+
if (varRef.container!! !in res.keys) {
57+
res[varRef.container] = mutableListOf()
58+
}
59+
res[varRef.container] = res[varRef.container]!!.plus(varRef)
6360
}
6461
res
6562
}
@@ -238,7 +235,7 @@ class UcReactionGenerator(private val reactor: Reactor) {
238235
"""|
239236
|// Generated struct providing access to ports of child reactor `${inst.name}`
240237
|struct _${inst.reactor.codeType}_${inst.name} {
241-
${"| "..triggers.joinToString { generateContainedTriggerInScope(it) }}
238+
${"| "..triggers.joinToString(separator = "\n") { generateContainedTriggerInScope(it) }}
242239
|};
243240
|struct _${inst.reactor.codeType}_${inst.name} ${inst.name};
244241
${"|"..triggers.joinToString(separator = "\n") {generateContainedTriggerFieldInit("${inst.name}", it)}}

lfc/core/src/main/kotlin/org/lflang/generator/uc/UcReactorGenerator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class UcReactorGenerator(private val reactor: Reactor, fileConfig: UcFileConfig,
3737
private val timers = UcTimerGenerator(reactor)
3838
private val actions = UcActionGenerator(reactor)
3939
private val reactions = UcReactionGenerator(reactor)
40-
private val preambles = UcPreambleGenerator(fileConfig.resource, reactor)
40+
private val preambles = UcPreambleGenerator(reactor.eResource(), reactor)
4141
private val instances =
4242
UcInstanceGenerator(reactor, parameters, ports, connections, reactions, fileConfig, messageReporter)
4343

test/lf/src/Preamble.lf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
target uC
22

3+
import ImportedPreamble from "./lib/ImportedPreamble.lf"
4+
preamble {=
5+
static int test2 = 32;
6+
=}
37

48
main reactor {
9+
imported = new ImportedPreamble()
10+
511
preamble {=
612
static int test = 42;
713
=}
814
reaction(startup) {=
915
validate(test == 42);
16+
validate(test2 == 32);
17+
validate(test3 == 22);
1018
=}
1119
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
target uC
2+
3+
preamble {=
4+
static int test3 = 22;
5+
=}
6+
7+
reactor ImportedPreamble {
8+
reaction(startup) {=
9+
validate(test3 == 22);
10+
=}
11+
}

0 commit comments

Comments
 (0)