Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuergen Haug2019-01-17 15:48:03 +0000
committerJuergen Haug2019-01-17 15:48:03 +0000
commit08f2edfebbeb032aed2e3a972edeaa616d9cdf03 (patch)
tree37266af668fea9de9082d7440e244ee15356d749 /plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c
parentda48ed6bbfdee34b1a42c76b5b2325aaeb296208 (diff)
downloadorg.eclipse.etrice-08f2edfebbeb032aed2e3a972edeaa616d9cdf03.tar.gz
org.eclipse.etrice-08f2edfebbeb032aed2e3a972edeaa616d9cdf03.tar.xz
org.eclipse.etrice-08f2edfebbeb032aed2e3a972edeaa616d9cdf03.zip
[Bug 540562] Support var args for operations
Diffstat (limited to 'plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c')
-rw-r--r--plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend28
-rw-r--r--plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/DataClassGen.xtend23
-rw-r--r--plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend23
3 files changed, 60 insertions, 14 deletions
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend
index dee7b704e..9b702edd6 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ActorClassGen.xtend
@@ -283,8 +283,9 @@ class ActorClassGen extends GenericActorClassGenerator {
/* operations */
«FOR op : ac.latestOperations»
- «val args = op.argList»
- #define «op.name»(«args») «ac.name»_«op.name»(self«IF !op.arguments.empty», «args»«ENDIF»)
+ «val params = op.operationParams»
+ «val args = op.operationArgs»
+ #define «op.name»(«params») «ac.name»_«op.name»(self«IF !op.arguments.empty», «args»«ENDIF»)
«ENDFOR»
/* attributes */
@@ -295,8 +296,9 @@ class ActorClassGen extends GenericActorClassGenerator {
/* port operations */
«FOR p : portsWithOperations»
«FOR op : p.portClass.operations»
- «val args = op.argList»
- #define «p.name»_«op.name»(«args») «p.portClassName»_«op.name»((«p.portClassName»*)&self->constData->«p.name»«IF !op.arguments.empty», «args»«ENDIF»)
+ «val params = op.operationParams»
+ «val args = op.operationArgs»
+ #define «p.name»_«op.name»(«params») «p.portClassName»_«op.name»((«p.portClassName»*)&self->constData->«p.name»«IF !op.arguments.empty», «args»«ENDIF»)
«ENDFOR»
«ENDFOR»
@@ -305,8 +307,22 @@ class ActorClassGen extends GenericActorClassGenerator {
'''
}
- private def argList(Operation op) {
- '''«FOR a : op.arguments SEPARATOR ", "»«a.name»«ENDFOR»'''
+ private def operationParams(Operation op) {
+ op.arguments.map[
+ switch it {
+ case isVarargs: '...'
+ default: name
+ }
+ ].join(', ')
+ }
+
+ private def operationArgs(Operation op) {
+ op.arguments.map[
+ switch it {
+ case isVarargs: '__VA_ARGS__'
+ default: name
+ }
+ ].join(', ')
}
def protected generateSourceFile(Root root, ExpandedActorClass xpac) {
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/DataClassGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/DataClassGen.xtend
index 46ceea2f9..774ace9e6 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/DataClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/DataClassGen.xtend
@@ -120,8 +120,9 @@ class DataClassGen {
/* operations */
«FOR op : dc.allOperations»
- «val args = op.argList»
- #define «op.name»(«args») «dc.name»_«op.name»(self«IF !op.arguments.empty», «args»«ENDIF»)
+ «val params = op.operationParams»
+ «val args = op.operationArgs»
+ #define «op.name»(«params») «dc.name»_«op.name»(self«IF !op.arguments.empty», «args»«ENDIF»)
«ENDFOR»
/* attributes */
@@ -134,8 +135,22 @@ class DataClassGen {
'''
}
- private def argList(Operation op) {
- '''«FOR a : op.arguments SEPARATOR ", "»«a.name»«ENDFOR»'''
+ private def operationParams(Operation op) {
+ op.arguments.map[
+ switch it {
+ case isVarargs: '...'
+ default: name
+ }
+ ].join(', ')
+ }
+
+ private def operationArgs(Operation op) {
+ op.arguments.map[
+ switch it {
+ case isVarargs: '__VA_ARGS__'
+ default: name
+ }
+ ].join(', ')
}
def generateSourceFile(Root root, DataClass dc) {'''
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend
index 22b3c60c1..f6fd647c4 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/ProtocolClassGen.xtend
@@ -152,8 +152,9 @@ class ProtocolClassGen extends GenericProtocolClassGenerator {
/* operations */
«FOR op : portClass.operations»
- «val args = op.argList»
- #define «op.name»(«args») «portClassName»_«op.name»(self«IF !op.arguments.empty», «args»«ENDIF»)
+ «val params = op.operationParams»
+ «val args = op.operationArgs»
+ #define «op.name»(«params») «portClassName»_«op.name»(self«IF !op.arguments.empty», «args»«ENDIF»)
«ENDFOR»
/* attributes */
@@ -164,8 +165,22 @@ class ProtocolClassGen extends GenericProtocolClassGenerator {
'''
}
- private def argList(Operation op) {
- '''«FOR a : op.arguments SEPARATOR ", "»«a.name»«ENDFOR»'''
+ private def operationParams(Operation op) {
+ op.arguments.map[
+ switch it {
+ case isVarargs: '...'
+ default: name
+ }
+ ].join(', ')
+ }
+
+ private def operationArgs(Operation op) {
+ op.arguments.map[
+ switch it {
+ case isVarargs: '__VA_ARGS__'
+ default: name
+ }
+ ].join(', ')
}
def private generateSourceFile(Root root, ProtocolClass pc) {'''

Back to the top