]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/scl/SCL/Expressions.scl
Compilation of SCL expressions from SCL
[simantics/platform.git] / bundles / org.simantics.scl.compiler / scl / SCL / Expressions.scl
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 (file)
index 0000000..6bb8571
--- /dev/null
@@ -0,0 +1,31 @@
+include "./Environment"
+
+importJava "org.simantics.scl.compiler.top.ExpressionEvaluator" where
+    data ExpressionEvaluator
+    
+    @JavaName "<init>" 
+    createExpressionEvaluator :: RuntimeEnvironment -> String -> <Proc> ExpressionEvaluator
+    
+    eval :: ExpressionEvaluator -> <Proc> a
+    
+    expectedType :: ExpressionEvaluator -> Type -> <Proc> ExpressionEvaluator 
+
+importJava "org.simantics.scl.compiler.top.SCLExpressionCompilationException" where
+    data SCLExpressionCompilationException
+
+data EvaluationModifier
+
+applyModifier evaluator _  = ()
+
+evaluateExpression :: Typeable a => RuntimeEnvironment -> [EvaluationModifier] -> String -> <Proc> 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 -> <Proc> a
+untypedEvaluateExpression runtimeEnvironment modifiers expression = do
+    evaluator = createExpressionEvaluator runtimeEnvironment expression
+    iter (applyModifier evaluator) modifiers
+    eval evaluator
\ No newline at end of file