Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Rentz-Reichert2015-07-07 10:17:03 +0000
committerGerrit Code Review @ Eclipse.org2015-07-07 10:17:03 +0000
commitb43132eebb34507bf5436b5f19d8d0a645a33a21 (patch)
tree82877657611145a18ad5a2e65d1416482a57c040
parent328c7f8004268b2956cc8e9bd0485bc6aa5b5510 (diff)
parentc1b9ca1eda69114640c54b05bf8988ea686e765d (diff)
downloadorg.eclipse.etrice-b43132eebb34507bf5436b5f19d8d0a645a33a21.tar.gz
org.eclipse.etrice-b43132eebb34507bf5436b5f19d8d0a645a33a21.tar.xz
org.eclipse.etrice-b43132eebb34507bf5436b5f19d8d0a645a33a21.zip
Merge changes I61437d9b,I30bb7a34
* changes: [generator.fsm, generator.c, genmodel.fsm] avoid warnings in generated code [modellib.c, examples.c] avoid warnings in generated code
-rw-r--r--examples/org.eclipse.etrice.examples.c/model/TrafficLight/TrafficLight.room4
-rw-r--r--plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/fsmgen/impl/TransitionChainImpl.java8
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/eTrice-rt.launch2
-rw-r--r--plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/Initialization.xtend2
-rw-r--r--plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/Initialization.java24
-rw-r--r--plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.xtend16
-rw-r--r--plugins/org.eclipse.etrice.generator.fsm/xtend-gen/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.java66
-rw-r--r--runtime/org.eclipse.etrice.modellib.c/model/TcpService.room2
8 files changed, 94 insertions, 30 deletions
diff --git a/examples/org.eclipse.etrice.examples.c/model/TrafficLight/TrafficLight.room b/examples/org.eclipse.etrice.examples.c/model/TrafficLight/TrafficLight.room
index 6dc08d398..03196c8a8 100644
--- a/examples/org.eclipse.etrice.examples.c/model/TrafficLight/TrafficLight.room
+++ b/examples/org.eclipse.etrice.examples.c/model/TrafficLight/TrafficLight.room
@@ -208,7 +208,7 @@ RoomModel TrafficLight {
<standby: fct>
}
action {
- "printf(\"ptlc: connecting to port %d\\n\", port);"
+ "printf(\"ptlc: connecting to port %d\\n\", (int)port);"
"tlInterface.connect(port);"
}
}
@@ -464,7 +464,7 @@ RoomModel TrafficLight {
<connect: fct>
}
action {
- "printf(\"tli: connecting to port %d\\n\", port);"
+ "printf(\"tli: connecting to port %d\\n\", (int)port);"
"DTcpControl config = {\"localhost\", port};"
"ctrl.connect(&config);"
}
diff --git a/plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/fsmgen/impl/TransitionChainImpl.java b/plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/fsmgen/impl/TransitionChainImpl.java
index 7d279ea9b..b54eb5b3a 100644
--- a/plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/fsmgen/impl/TransitionChainImpl.java
+++ b/plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/fsmgen/impl/TransitionChainImpl.java
@@ -216,7 +216,15 @@ public class TransitionChainImpl extends MinimalEObjectImpl.Container implements
ExpandedModelComponent emc = getExpandedModelComponent();
StringBuilder result = new StringBuilder();
+
+ /* TODO: the next generated code declares a correctly typed variable for the generic data.
+ * It is hard to determine whether it is actually needed though.
+ * It is needed in non-initial transitions with action code that are not data driven.
+ * It might be needed in condition expressions. But this code would have to be parsed
+ * with uncertain result (because of e.g. comments).
+ */
result.append(tcv.genTypedData(this));
+
genChainCode(getTransition(), emc, tcv, result);
return result.toString();
}
diff --git a/plugins/org.eclipse.etrice.core.room.ui/eTrice-rt.launch b/plugins/org.eclipse.etrice.core.room.ui/eTrice-rt.launch
index 8f731dcd1..a4adb96c5 100644
--- a/plugins/org.eclipse.etrice.core.room.ui/eTrice-rt.launch
+++ b/plugins/org.eclipse.etrice.core.room.ui/eTrice-rt.launch
@@ -17,7 +17,7 @@
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
</listAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -XX:MaxPermSize=256m -ea"/>
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/Initialization.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/Initialization.xtend
index 49c9edc77..31b8403ba 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/Initialization.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/Initialization.xtend
@@ -79,6 +79,8 @@ class Initialization {
var value = getPrimitiveValue(instance, path)
if(a.size > 0 && !aType.characterType && !value.trim.startsWith('{'))
'''{«FOR Integer i:1..a.size SEPARATOR ', '»«value»«ENDFOR»}'''
+ else if (a.size > 0 && aType.characterType && value.startsWith("'"))
+ "{"+value+"}"
else
value
}
diff --git a/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/Initialization.java b/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/Initialization.java
index a0213edf8..f770b2dff 100644
--- a/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/Initialization.java
+++ b/plugins/org.eclipse.etrice.generator.c/xtend-gen/org/eclipse/etrice/generator/c/gen/Initialization.java
@@ -251,7 +251,29 @@ public class Initialization {
_builder.append("}");
_xifexpression_1 = _builder;
} else {
- _xifexpression_1 = value;
+ String _xifexpression_2 = null;
+ boolean _and_2 = false;
+ boolean _and_3 = false;
+ int _size_2 = a.getSize();
+ boolean _greaterThan_1 = (_size_2 > 0);
+ if (!_greaterThan_1) {
+ _and_3 = false;
+ } else {
+ boolean _isCharacterType_1 = this._typeHelpers.isCharacterType(((PrimitiveType)aType));
+ _and_3 = _isCharacterType_1;
+ }
+ if (!_and_3) {
+ _and_2 = false;
+ } else {
+ boolean _startsWith_1 = value.startsWith("\'");
+ _and_2 = _startsWith_1;
+ }
+ if (_and_2) {
+ _xifexpression_2 = (("{" + value) + "}");
+ } else {
+ _xifexpression_2 = value;
+ }
+ _xifexpression_1 = _xifexpression_2;
}
_xblockexpression_1 = _xifexpression_1;
}
diff --git a/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.xtend b/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.xtend
index 0b06cd2c8..068aa3529 100644
--- a/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.xtend
+++ b/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.xtend
@@ -324,14 +324,20 @@ abstract class AbstractStateMachineGenerator {
*/
«IF generateImplementation»
«privAccess»«stateType» «opScopePriv»enterHistory(«selfPtr»«stateType» state__et«IF usesHdlr», «boolType» handler__et«ENDIF») {
- «boolType» skip_entry__et = «langExt.booleanConstant(false)»;
+ «val baseStateList = xpmc.stateMachine.baseStateList»
+ «val needsSkipVar = !baseStateList.filter(s|s.hasEntryCode(true)).empty»
+ «IF needsSkipVar»
+ «boolType» skip_entry__et = «langExt.booleanConstant(false)»;
+ «ENDIF»
if (state__et >= STATE_MAX) {
state__et = «IF !langExt.usesInheritance»(«stateType»)«ENDIF» (state__et - STATE_MAX);
- skip_entry__et = «langExt.booleanConstant(true)»;
+ «IF needsSkipVar»
+ skip_entry__et = «langExt.booleanConstant(true)»;
+ «ENDIF»
}
while («langExt.booleanConstant(true)») {
switch (state__et) {
- «FOR state : xpmc.stateMachine.getBaseStateList()»
+ «FOR state : baseStateList»
case «state.getGenStateId()»:
«IF state.hasEntryCode(true)»if (!(skip_entry__et«IF usesHdlr» || handler__et«ENDIF»)) «state.getEntryCodeOperationName()»(«langExt.selfPointer(false)»);«ENDIF»
«IF state.isLeaf()»
@@ -362,7 +368,9 @@ abstract class AbstractStateMachineGenerator {
/* should not occur */
break;
}
- skip_entry__et = «langExt.booleanConstant(false)»;
+ «IF needsSkipVar»
+ skip_entry__et = «langExt.booleanConstant(false)»;
+ «ENDIF»
}
«unreachableReturn»
}
diff --git a/plugins/org.eclipse.etrice.generator.fsm/xtend-gen/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.java b/plugins/org.eclipse.etrice.generator.fsm/xtend-gen/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.java
index b373d8488..aea0fdf27 100644
--- a/plugins/org.eclipse.etrice.generator.fsm/xtend-gen/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.java
+++ b/plugins/org.eclipse.etrice.generator.fsm/xtend-gen/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.java
@@ -709,13 +709,31 @@ public abstract class AbstractStateMachineGenerator {
_builder.append(") {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
- String _boolType_3 = this.boolType();
- _builder.append(_boolType_3, "\t");
- _builder.append(" skip_entry__et = ");
- String _booleanConstant = this.langExt.booleanConstant(false);
- _builder.append(_booleanConstant, "\t");
- _builder.append(";");
+ StateGraph _stateMachine_1 = xpmc.getStateMachine();
+ final List<State> baseStateList = this._fSMHelpers.getBaseStateList(_stateMachine_1);
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t");
+ final Function1<State, Boolean> _function = new Function1<State, Boolean>() {
+ public Boolean apply(final State s) {
+ return Boolean.valueOf(AbstractStateMachineGenerator.this._fSMHelpers.hasEntryCode(s, true));
+ }
+ };
+ Iterable<State> _filter = IterableExtensions.<State>filter(baseStateList, _function);
+ boolean _isEmpty = IterableExtensions.isEmpty(_filter);
+ final boolean needsSkipVar = (!_isEmpty);
_builder.newLineIfNotEmpty();
+ {
+ if (needsSkipVar) {
+ _builder.append("\t");
+ String _boolType_3 = this.boolType();
+ _builder.append(_boolType_3, "\t");
+ _builder.append(" skip_entry__et = ");
+ String _booleanConstant = this.langExt.booleanConstant(false);
+ _builder.append(_booleanConstant, "\t");
+ _builder.append(";");
+ _builder.newLineIfNotEmpty();
+ }
+ }
_builder.append("\t");
_builder.append("if (state__et >= STATE_MAX) {");
_builder.newLine();
@@ -733,12 +751,16 @@ public abstract class AbstractStateMachineGenerator {
}
_builder.append(" (state__et - STATE_MAX);");
_builder.newLineIfNotEmpty();
- _builder.append("\t\t");
- _builder.append("skip_entry__et = ");
- String _booleanConstant_1 = this.langExt.booleanConstant(true);
- _builder.append(_booleanConstant_1, "\t\t");
- _builder.append(";");
- _builder.newLineIfNotEmpty();
+ {
+ if (needsSkipVar) {
+ _builder.append("\t\t");
+ _builder.append("skip_entry__et = ");
+ String _booleanConstant_1 = this.langExt.booleanConstant(true);
+ _builder.append(_booleanConstant_1, "\t\t");
+ _builder.append(";");
+ _builder.newLineIfNotEmpty();
+ }
+ }
_builder.append("\t");
_builder.append("}");
_builder.newLine();
@@ -752,9 +774,7 @@ public abstract class AbstractStateMachineGenerator {
_builder.append("switch (state__et) {");
_builder.newLine();
{
- StateGraph _stateMachine_1 = xpmc.getStateMachine();
- List<State> _baseStateList_1 = this._fSMHelpers.getBaseStateList(_stateMachine_1);
- for(final State state_1 : _baseStateList_1) {
+ for(final State state_1 : baseStateList) {
_builder.append("\t\t\t");
_builder.append("case ");
String _genStateId_2 = this._codegenHelpers.getGenStateId(state_1);
@@ -912,12 +932,16 @@ public abstract class AbstractStateMachineGenerator {
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
- _builder.append("\t\t");
- _builder.append("skip_entry__et = ");
- String _booleanConstant_3 = this.langExt.booleanConstant(false);
- _builder.append(_booleanConstant_3, "\t\t");
- _builder.append(";");
- _builder.newLineIfNotEmpty();
+ {
+ if (needsSkipVar) {
+ _builder.append("\t\t");
+ _builder.append("skip_entry__et = ");
+ String _booleanConstant_3 = this.langExt.booleanConstant(false);
+ _builder.append(_booleanConstant_3, "\t\t");
+ _builder.append(";");
+ _builder.newLineIfNotEmpty();
+ }
+ }
_builder.append("\t");
_builder.append("}");
_builder.newLine();
diff --git a/runtime/org.eclipse.etrice.modellib.c/model/TcpService.room b/runtime/org.eclipse.etrice.modellib.c/model/TcpService.room
index 909ec7765..b8dd546ac 100644
--- a/runtime/org.eclipse.etrice.modellib.c/model/TcpService.room
+++ b/runtime/org.eclipse.etrice.modellib.c/model/TcpService.room
@@ -142,7 +142,7 @@ RoomModel room.basic.service.tcp {
""
"static int socketReceiver(void* slf, int channel, int size, const int8* data) {"
" ATcpClient* self = (ATcpClient*) slf;"
- " DTcpPayload_setData(&payloadRecvBuffer, data, size);"
+ " DTcpPayload_setData(&payloadRecvBuffer, /* cast away constness to avoid warning*/(int8*)data, size);"
" payloadPort_dataPackage(&payloadRecvBuffer);"
" return ETSOCKET_OK;"
"}"

Back to the top