Compilation of SCL expressions from SCL
[simantics/platform.git] / bundles / org.simantics.scl.compiler / scl / SCL / Expressions.scl
1 include "./Environment"
2
3 importJava "org.simantics.scl.compiler.top.ExpressionEvaluator" where
4     data ExpressionEvaluator
5     
6     @JavaName "<init>" 
7     createExpressionEvaluator :: RuntimeEnvironment -> String -> <Proc> ExpressionEvaluator
8     
9     eval :: ExpressionEvaluator -> <Proc> a
10     
11     expectedType :: ExpressionEvaluator -> Type -> <Proc> ExpressionEvaluator 
12
13 importJava "org.simantics.scl.compiler.top.SCLExpressionCompilationException" where
14     data SCLExpressionCompilationException
15
16 data EvaluationModifier
17
18 applyModifier evaluator _  = ()
19
20 evaluateExpression :: Typeable a => RuntimeEnvironment -> [EvaluationModifier] -> String -> <Proc> a
21 evaluateExpression runtimeEnvironment modifiers expression = do
22     evaluator = createExpressionEvaluator runtimeEnvironment expression
23     expectedType evaluator (typeOfProxy (TypeProxy :: TypeProxy a))
24     iter (applyModifier evaluator) modifiers
25     eval evaluator
26
27 untypedEvaluateExpression ::  RuntimeEnvironment -> [EvaluationModifier] -> String -> <Proc> a
28 untypedEvaluateExpression runtimeEnvironment modifiers expression = do
29     evaluator = createExpressionEvaluator runtimeEnvironment expression
30     iter (applyModifier evaluator) modifiers
31     eval evaluator