Browse Source

Added TypeCastExpression to C, C++ and Java generator.

malknet42 11 years ago
parent
commit
ca57b61266

+ 7 - 2
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/ExpressionCode.xtend

@@ -16,6 +16,7 @@ import org.yakindu.base.expressions.expressions.BitwiseAndExpression
 import org.yakindu.base.expressions.expressions.BitwiseOrExpression
 import org.yakindu.base.expressions.expressions.BitwiseXorExpression
 import org.yakindu.base.expressions.expressions.BoolLiteral
+import org.yakindu.base.expressions.expressions.ConditionalExpression
 import org.yakindu.base.expressions.expressions.ElementReferenceExpression
 import org.yakindu.base.expressions.expressions.Expression
 import org.yakindu.base.expressions.expressions.FeatureCall
@@ -26,6 +27,7 @@ import org.yakindu.base.expressions.expressions.LogicalAndExpression
 import org.yakindu.base.expressions.expressions.LogicalNotExpression
 import org.yakindu.base.expressions.expressions.LogicalOrExpression
 import org.yakindu.base.expressions.expressions.LogicalRelationExpression
+import org.yakindu.base.expressions.expressions.NullLiteral
 import org.yakindu.base.expressions.expressions.NumericalAddSubtractExpression
 import org.yakindu.base.expressions.expressions.NumericalMultiplyDivideExpression
 import org.yakindu.base.expressions.expressions.NumericalUnaryExpression
@@ -34,7 +36,9 @@ import org.yakindu.base.expressions.expressions.PrimitiveValueExpression
 import org.yakindu.base.expressions.expressions.RealLiteral
 import org.yakindu.base.expressions.expressions.ShiftExpression
 import org.yakindu.base.expressions.expressions.StringLiteral
+import org.yakindu.base.expressions.expressions.TypeCastExpression
 import org.yakindu.base.types.ITypeSystem
+import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
 import org.yakindu.sct.model.sexec.naming.INamingService
 import org.yakindu.sct.model.sgraph.Event
 import org.yakindu.sct.model.stext.stext.ActiveStateReferenceExpression
@@ -43,8 +47,6 @@ import org.yakindu.sct.model.stext.stext.EventValueReferenceExpression
 import org.yakindu.sct.model.stext.stext.OperationDefinition
 import org.yakindu.sct.model.stext.stext.VariableDefinition
 import org.yakindu.sct.model.stext.types.ISTextTypeInferrer
-import org.yakindu.base.expressions.expressions.NullLiteral
-import org.yakindu.base.expressions.expressions.ConditionalExpression
 
 class ExpressionCode {
 
@@ -53,6 +55,7 @@ class ExpressionCode {
 	@Inject extension ITypeSystem
 	@Inject extension ISTextTypeInferrer
 	@Inject extension INamingService
+	@Inject extension ICodegenTypeSystemAccess
 
 	/* Refering to declared elements */
 	def dispatch CharSequence code(ElementReferenceExpression it) {
@@ -141,5 +144,7 @@ class ExpressionCode {
 	def dispatch CharSequence code(ActiveStateReferenceExpression it) '''«flow.activeFctID»(«scHandle», «value.shortName»)'''
 
 	def dispatch CharSequence code(ParenthesizedExpression it) '''(«expression.code»)'''
+	
+	def dispatch CharSequence code(TypeCastExpression it) '''((«type.getTargetLanguageName») «operand.code»)'''
 
 }

+ 6 - 0
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/ExpressionCode.xtend

@@ -35,6 +35,8 @@ import org.yakindu.sct.model.stext.stext.VariableDefinition
 import org.yakindu.sct.model.stext.types.ISTextTypeInferrer
 import org.yakindu.base.expressions.expressions.NullLiteral
 import org.yakindu.base.expressions.expressions.ConditionalExpression
+import org.yakindu.base.expressions.expressions.TypeCastExpression
+import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
 
 class ExpressionCode {
 
@@ -43,6 +45,7 @@ class ExpressionCode {
 	@Inject extension ITypeSystem
 	@Inject extension ISTextTypeInferrer
 	@Inject extension INamingService
+	@Inject extension ICodegenTypeSystemAccess
 
 	/* Refering to declared elements */
 	def dispatch CharSequence code(ElementReferenceExpression it) {
@@ -133,4 +136,7 @@ class ExpressionCode {
 	def dispatch CharSequence code(ActiveStateReferenceExpression it) '''«flow.activeFctID»(«value.shortName»)'''
 
 	def dispatch CharSequence code(ParenthesizedExpression it) '''(«expression.code»)'''
+	
+	def dispatch CharSequence code(TypeCastExpression it) '''((«type.getTargetLanguageName») «operand.code»)'''
+	
 }

+ 9 - 0
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/ExpressionCode.xtend

@@ -43,6 +43,8 @@ import org.yakindu.sct.model.stext.stext.OperationDefinition
 import org.yakindu.sct.model.stext.types.ISTextTypeInferrer
 import org.yakindu.base.expressions.expressions.NullLiteral
 import org.yakindu.base.expressions.expressions.ConditionalExpression
+import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
+import org.yakindu.base.expressions.expressions.TypeCastExpression
 
 class ExpressionCode {
 
@@ -50,6 +52,7 @@ class ExpressionCode {
 	@Inject extension Navigation
 	@Inject extension ITypeSystem
 	@Inject extension ISTextTypeInferrer
+	@Inject extension ICodegenTypeSystemAccess
 
 	private var List<TimeEvent> timeEvents;
 
@@ -236,6 +239,10 @@ class ExpressionCode {
 	def dispatch String code(TimeEvent it) {
 		"timeEvents[" + getTimeEvents.indexOf(it) + "]"
 	}
+	
+	def dispatch String code(TypeCastExpression it){
+		 '''((«type.getTargetLanguageName») «operand.code»)'''
+	}	
 
 	def dispatch String getContext(Variable it) {
 		if (scope != null) {
@@ -261,4 +268,6 @@ class ExpressionCode {
 	def dispatch String getContext(EObject it) {
 		return "//ERROR: No context for " + it
 	}
+	
+	
 }

+ 10 - 17
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/castexpressions/CastExpressionsStatemachine.java

@@ -47,20 +47,15 @@ public class CastExpressionsStatemachine
 		for (int i = 0; i < 1; i++) {
 			stateVector[i] = State.$NullState$;
 		}
-		
+
 		clearEvents();
 		clearOutEvents();
-		
-		sCInterface.realValue
-		=(//ERROR: Template in ExpressionCode.xtend for class 'org.yakindu.base.expressions.expressions.impl.TypeCastExpressionImpl' not define.
-		//Container: org.yakindu.base.expressions.expressions.impl.ParenthesizedExpressionImpl
-		);
-		
-		sCInterface.intValue
-		=(//ERROR: Template in ExpressionCode.xtend for class 'org.yakindu.base.expressions.expressions.impl.TypeCastExpressionImpl' not define.
-		//Container: org.yakindu.base.expressions.expressions.impl.ParenthesizedExpressionImpl
-		);
+
+		sCInterface.realValue = (((double) 5));
+
+		sCInterface.intValue = (((long) 5.5));
 	}
+
 	public void enter() {
 		entryAction();
 
@@ -145,15 +140,13 @@ public class CastExpressionsStatemachine
 	private void reactMain_region_A() {
 		nextStateIndex = 0;
 		stateVector[0] = State.$NullState$;
-		
-		sCInterface.realValue
-		=3*//ERROR: Template in ExpressionCode.xtend for class 'org.yakindu.base.expressions.expressions.impl.TypeCastExpressionImpl' not define.
-		//Container: org.yakindu.base.expressions.expressions.impl.NumericalMultiplyDivideExpressionImpl
-		;
-		
+
+		sCInterface.realValue = 3 * ((long) 5.5);
+
 		nextStateIndex = 0;
 		stateVector[0] = State.main_region_B;
 	}
+
 	/* The reactions of state B. */
 	private void reactMain_region_B() {
 	}