本文整理汇总了C++中AstInterface::IsAssignment方法的典型用法代码示例。如果您正苦于以下问题:C++ AstInterface::IsAssignment方法的具体用法?C++ AstInterface::IsAssignment怎么用?C++ AstInterface::IsAssignment使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AstInterface
的用法示例。
在下文中一共展示了AstInterface::IsAssignment方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Traverse
virtual bool Traverse( AstInterface &fa, const AstNodePtr& s,
AstInterface::TraversalVisitType t)
{
HasValueMapReplace valrepl( fa, valmap, false);
if (ValueAnnotation::get_inst()->is_value_restrict_op( fa, s, &append, &valrepl, &astcodegen))
return true;
AstNodePtr lhs, rhs;
AstInterface::AstNodeList vars, args;
HasValueDescriptor desc;
if (fa.IsAssignment(s, &lhs, &rhs)) {
if (append.has_value( rhs, &desc) ) {
append( lhs, desc);
}
}
else if (fa.IsVariableDecl( s, &vars, &args)) {
AstInterface::AstNodeList::iterator pv = vars.begin();
AstInterface::AstNodeList::iterator pa = args.begin();
while (pv != vars.end()) {
lhs = *pv;
rhs = *pa;
if (append.has_value( rhs, &desc) ) {
append( lhs, desc );
}
++pv;
++pa;
}
}
return true;
}
示例2: if
std::string PtrAnal::
Get_VarName(AstInterface& fa, const AstNodePtr& rhs)
{
NameMap::const_iterator p = namemap.find(rhs.get_ptr());
if (p != namemap.end()) {
VarRef cur = (*p).second;
return cur.name;
}
std::string readname, res;
AstNodePtr readscope;
AstNodePtr lhs1, rhs1;
bool readlhs;
if (fa.IsVarRef(rhs, 0, &readname, &readscope)) {
assert(readname != "");
res = Local_GetVarName(fa, readscope, readname);
}
else if (fa.IsConstant(rhs,&res,&readname)) {
if (res == "string") {
readname = Local_GetVarName(fa, rhs);
Stmt stmt = allocate_x(readname);
stmts_pushback(stmts,stmt);
res= readname;
}
else
res = Local_GetConstName(fa, readname);
}
else if (fa.IsUnaryOp(rhs) || fa.IsBinaryOp(rhs) || fa.IsFunctionCall(rhs)) {
readname = Local_GetVarName(fa, rhs);
ProcessExpression(fa, readname, rhs);
res = readname;
}
else if (fa.IsAssignment(rhs,&lhs1,&rhs1,&readlhs)) {
ProcessAssign(fa, lhs1, rhs1, readlhs);
VarRef cur = namemap[lhs1.get_ptr()];
if (cur.name == "") {
std::cerr << "does not have map for " << AstToString(lhs1) << " in " << AstToString(rhs) << "\n";
assert(0);
}
namemap[rhs.get_ptr()] = cur;
res = cur.name;
}
else {
std::cerr << "No name found for " << AstToString(rhs) << "\n";
assert(false);
}
if (res == "") {
std::cerr << "No name found for " << AstToString(rhs) << "\n";
assert(false);
}
return res;
}