def launch (msg)
tree = msg['tree']
variables = msg['variables']
exp_class = @context.expmap.expression_class(tree.first)
exp_hash = {
'fei' => msg['fei'] || {
'engine_id' => @context.engine_id,
'wfid' => msg['wfid'],
'sub_wfid' => msg['sub_wfid'],
'expid' => '0' },
'parent_id' => msg['parent_id'],
'original_tree' => tree,
'variables' => variables,
'applied_workitem' => msg['workitem'],
'forgotten' => msg['forgotten']
}
if not exp_class
exp_class = Ruote::Exp::RefExpression
elsif msg['action'] == 'launch' && exp_class == Ruote::Exp::DefineExpression
def_name, tree = Ruote::Exp::DefineExpression.reorganize(tree)
variables[def_name] = [ '0', tree ] if def_name
exp_class = Ruote::Exp::SequenceExpression
end
exp = exp_class.new(@context, exp_hash.merge!('original_tree' => tree))
exp.initial_persist
exp.do_apply
end