Parcourir la source

Simulation objects for transfer function, ramp, and sine wave implemented.

au@andreasunger.net il y a 14 ans
Parent
commit
de61112288

+ 21 - 0
plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/il/transform/ExpressionTransformer.java

@@ -22,6 +22,8 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipselabs.mscript.language.ast.AdditiveExpression;
 import org.eclipselabs.mscript.language.ast.AdditiveExpressionPart;
+import org.eclipselabs.mscript.language.ast.ArrayConstructionIterationClause;
+import org.eclipselabs.mscript.language.ast.ArrayConstructionOperator;
 import org.eclipselabs.mscript.language.ast.ArrayElementAccess;
 import org.eclipselabs.mscript.language.ast.AstFactory;
 import org.eclipselabs.mscript.language.ast.BooleanLiteral;
@@ -455,6 +457,25 @@ public class ExpressionTransformer extends AstSwitch<Expression> {
 		return transformedExpression;
 	}
 	
+	/* (non-Javadoc)
+	 * @see org.eclipselabs.mscript.language.ast.util.AstSwitch#caseArrayConstructionOperator(org.eclipselabs.mscript.language.ast.ArrayConstructionOperator)
+	 */
+	@Override
+	public Expression caseArrayConstructionOperator(ArrayConstructionOperator arrayConstructionOperator) {
+		ArrayConstructionOperator transformedExpression = AstFactory.eINSTANCE.createArrayConstructionOperator();
+		for (Expression expression : arrayConstructionOperator.getExpressions()) {
+			transformedExpression.getExpressions().add(doSwitch(expression));
+		}
+		for (ArrayConstructionIterationClause iterationClause : arrayConstructionOperator.getIterationClauses()) {
+			Expression transformedCollectionExpression = doSwitch(iterationClause.getCollectionExpression());
+			ArrayConstructionIterationClause transformedIterationClause = AstFactory.eINSTANCE.createArrayConstructionIterationClause();
+			transformedIterationClause.setVariableName(iterationClause.getVariableName());
+			transformedIterationClause.setCollectionExpression(transformedCollectionExpression);
+			transformedExpression.getIterationClauses().add(transformedIterationClause);
+		}
+		return transformedExpression;
+	}
+	
 	/* (non-Javadoc)
 	 * @see org.eclipselabs.mscript.language.ast.util.AstSwitch#caseParenthesizedExpression(org.eclipselabs.mscript.language.ast.ParenthesizedExpression)
 	 */

+ 2 - 0
plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/interpreter/ExpressionValueEvaluator.java

@@ -297,6 +297,8 @@ public class ExpressionValueEvaluator extends AbstractExpressionEvaluator<IValue
 				} else {
 					elements = new IValue[size];
 				}
+			} else if (elements instanceof INumericValue[] && !(value instanceof INumericValue)) {
+				return InvalidValue.SINGLETON;
 			}
 			elements[i] = value;
 			++i;

+ 10 - 1
plugins/org.eclipselabs.mscript.typesystem/src/org/eclipselabs/mscript/typesystem/util/TypeSystemUtil.java

@@ -19,6 +19,7 @@ import org.eclipselabs.mscript.typesystem.ArrayDimension;
 import org.eclipselabs.mscript.typesystem.ArrayType;
 import org.eclipselabs.mscript.typesystem.DataType;
 import org.eclipselabs.mscript.typesystem.NumericType;
+import org.eclipselabs.mscript.typesystem.TensorType;
 import org.eclipselabs.mscript.typesystem.TypeSystemFactory;
 import org.eclipselabs.mscript.typesystem.Unit;
 import org.eclipselabs.mscript.typesystem.UnitFactor;
@@ -104,5 +105,13 @@ public class TypeSystemUtil {
 		}
 		return null;
 	}
-				
+	
+	public static boolean isVector(DataType dataType) {
+		if (dataType instanceof TensorType) {
+			TensorType tensorType = (TensorType) dataType;
+			return tensorType.isVector();
+		}
+		return false;
+	}
+	
 }