static bool AliasAnnotAnal(AstInterface& fa, OperatorAnnotCollection <OperatorAliasDescriptor>& aliasInfo, const AstNodePtr& fc, const AstNodePtr& result, CollectObject< pair<AstNodePtr, int> >& collectalias) { AstInterface::AstNodeList args; OperatorAliasDescriptor desc; if (!aliasInfo.known_operator( fa, fc, &args, &desc, false) ) return false; ReplaceParams paramMap( desc.get_param_decl().get_params(), args); paramMap.add("result", result); int index = 0; for (OperatorAliasDescriptor::const_iterator p1 = desc.begin(); p1 != desc.end(); ++p1, ++index) { const NameGroup& cur = *p1; for (NameGroup::const_iterator p2 = cur.begin(); p2 != cur.end(); ++p2) { string varname = *p2; AstNodePtr arg = paramMap.find(varname).get_ast(); if (arg != AST_NULL) { collectalias( pair<AstNodePtr, int>(arg, index)); } else { AstNodePtr var = fa.CreateVarRef(varname); collectalias( pair<AstNodePtr, int>(var, index)); } } } return true; }
void OperatorSideEffectDescriptor:: get_side_effect( AstInterface& fa, AstInterface::AstNodeList& args, CollectObject< AstNodePtr >& collect) { ReplaceParams paramMap( get_param_decl().get_params(), args); for (OperatorSideEffectDescriptor::const_iterator p = begin(); p != end(); ++p) { string varname = *p; AstNodePtr arg = paramMap.find(varname).get_ast(); if (arg != AST_NULL) { collect( arg); } else { AstNodePtr var = fa.CreateVarRef(varname); collect( var); } } }
AstNodePtr SymbolicVar :: CodeGen( AstInterface &fa) const { return fa.CreateVarRef(varname, scope); }