@@ -36,14 +36,33 @@ import org.lflang.lf.*
3636class UcPortGenerator (private val reactor : Reactor , private val connections : UcConnectionGenerator ) {
3737 val Port .external_args
3838 get(): String = " _${name} _external"
39+
3940 companion object {
4041 val Port .width
4142 get(): Int = widthSpec?.getWidth()? : 1
43+ val Type .isArray
44+ get(): Boolean = cStyleArraySpec != null
45+ val Type .arrayLength
46+ get(): Int = cStyleArraySpec.length
47+
4248 }
4349
44- private fun generateSelfStruct (input : Input ) = " LF_DEFINE_INPUT_STRUCT(${reactor.codeType} , ${input.name} , ${reactor.getEffects(input).size} , ${reactor.getObservers(input).size} , ${input.type.toText()} , ${connections.getNumConnectionsFromPort(null , input as Port )} );"
50+ private fun generateSelfStruct (input : Input ): String {
51+ if (input.type.isArray) {
52+ return " LF_DEFINE_INPUT_ARRAY_STRUCT(${reactor.codeType} , ${input.name} , ${reactor.getEffects(input).size} , ${reactor.getObservers(input).size} , ${input.type.id} , ${input.type.arrayLength} , ${connections.getNumConnectionsFromPort(null , input as Port )} );"
53+ } else {
54+ return " LF_DEFINE_INPUT_STRUCT(${reactor.codeType} , ${input.name} , ${reactor.getEffects(input).size} , ${reactor.getObservers(input).size} , ${input.type.toText()} , ${connections.getNumConnectionsFromPort(null , input as Port )} );"
55+ }
56+ }
4557 private fun generateInputCtor (input : Input ) = " LF_DEFINE_INPUT_CTOR(${reactor.codeType} , ${input.name} , ${reactor.getEffects(input).size} , ${reactor.getObservers(input).size} , ${input.type.toText()} , ${connections.getNumConnectionsFromPort(null , input as Port )} );"
46- private fun generateSelfStruct (output : Output ) = " LF_DEFINE_OUTPUT_STRUCT(${reactor.codeType} , ${output.name} , ${reactor.getSources(output).size} , ${output.type.toText()} );"
58+ private fun generateSelfStruct (output : Output ): String {
59+ if (output.type.isArray) {
60+ return " LF_DEFINE_OUTPUT_ARRAY_STRUCT(${reactor.codeType} , ${output.name} , ${reactor.getSources(output).size} , ${output.type.id} , ${output.type.arrayLength} );"
61+ } else {
62+ return " LF_DEFINE_OUTPUT_STRUCT(${reactor.codeType} , ${output.name} , ${reactor.getSources(output).size} , ${output.type.toText()} );"
63+ }
64+ }
65+
4766 private fun generateOutputCtor (output : Output ) = " LF_DEFINE_OUTPUT_CTOR(${reactor.codeType} , ${output.name} , ${reactor.getSources(output).size} );"
4867
4968 fun generateSelfStructs () = reactor.allInputs.plus(reactor.allOutputs).joinToString(prefix = " // Port structs\n " , separator = " \n " , postfix = " \n " ) {
0 commit comments