X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fscl%2FSCL%2FExpressions.scl;fp=bundles%2Forg.simantics.scl.compiler%2Fscl%2FSCL%2FExpressions.scl;h=6bb857102d8e51dfd79ebc6b4d73b5b8120edd50;hb=7444d4b3a2f3c25fac462d8a168898656dafd52e;hp=0000000000000000000000000000000000000000;hpb=da4210cb095e4acd25ddba55a86aa6fe0b18301d;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/scl/SCL/Expressions.scl b/bundles/org.simantics.scl.compiler/scl/SCL/Expressions.scl new file mode 100644 index 000000000..6bb857102 --- /dev/null +++ b/bundles/org.simantics.scl.compiler/scl/SCL/Expressions.scl @@ -0,0 +1,31 @@ +include "./Environment" + +importJava "org.simantics.scl.compiler.top.ExpressionEvaluator" where + data ExpressionEvaluator + + @JavaName "" + createExpressionEvaluator :: RuntimeEnvironment -> String -> ExpressionEvaluator + + eval :: ExpressionEvaluator -> a + + expectedType :: ExpressionEvaluator -> Type -> ExpressionEvaluator + +importJava "org.simantics.scl.compiler.top.SCLExpressionCompilationException" where + data SCLExpressionCompilationException + +data EvaluationModifier + +applyModifier evaluator _ = () + +evaluateExpression :: Typeable a => RuntimeEnvironment -> [EvaluationModifier] -> String -> a +evaluateExpression runtimeEnvironment modifiers expression = do + evaluator = createExpressionEvaluator runtimeEnvironment expression + expectedType evaluator (typeOfProxy (TypeProxy :: TypeProxy a)) + iter (applyModifier evaluator) modifiers + eval evaluator + +untypedEvaluateExpression :: RuntimeEnvironment -> [EvaluationModifier] -> String -> a +untypedEvaluateExpression runtimeEnvironment modifiers expression = do + evaluator = createExpressionEvaluator runtimeEnvironment expression + iter (applyModifier evaluator) modifiers + eval evaluator \ No newline at end of file