当前位置: 首页>>代码示例>>C++>>正文


C++ TypeChecker::Visit方法代码示例

本文整理汇总了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?
}
开发者ID:boardwalk,项目名称:xra,代码行数:26,代码来源:builtins.cpp

示例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;
}
开发者ID:boardwalk,项目名称:xra,代码行数:31,代码来源:builtins.cpp


注:本文中的TypeChecker::Visit方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。