本文整理汇总了C++中TypeChecker::Visit方法的典型用法代码示例。如果您正苦于以下问题:C++ TypeChecker::Visit方法的具体用法?C++ TypeChecker::Visit怎么用?C++ TypeChecker::Visit使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TypeChecker
的用法示例。
在下文中一共展示了TypeChecker::Visit方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Infer
ValuePtr BWhile::Infer(TypeChecker& checker, const vector<ExprPtr>& args)
{
assert(args.size() == 2);
auto& cond = args[0];
auto& body = args[1];
checker.Visit(cond.get());
if(!cond->value)
return {};
TypeSubst condSubst;
checker.subst.swap(condSubst);
bool lastInsideLoop = checker.insideLoop;
checker.insideLoop = true;
checker.Visit(body.get());
checker.insideLoop = lastInsideLoop;
if(!body->value)
return {};
Compose(condSubst, checker.subst);
Compose(Unify(*cond->value->type, *BooleanType), checker.subst);
return VoidValue; // TODO should a while yield a value?
}
示例2: assert
ValuePtr BArithmetic<Operation>::Infer(TypeChecker& checker, const vector<ExprPtr>& args)
{
assert(args.size() == 2);
auto& left = args[0];
auto& right = args[1];
checker.Visit(left.get());
if(!left->value)
return {};
TypeSubst leftSubst;
checker.subst.swap(leftSubst);
checker.Visit(right.get());
if(!right->value)
return {};
Compose(leftSubst, checker.subst);
Compose(Unify(*left->value->type, *right->value->type), checker.subst);
auto type = left->value->type.get();
if(!isa<TInteger>(type) && !isa<TFloat>(type)) {
Error() << "Arithmetic operation requires float or integer operands";
return {};
}
ValuePtr value = new VTemporary;
value->type = ResultType<typename Operation::IsCompare>(type);
return value;
}