Пример #1
0
  ExprPtr with(const Assign* v) const {
    // hack to assign [char] into <std.string>
    if (hasConstraint(this->constraint, v->type())) {
      if (*v->left()->type()->monoType() == *stdstrty && *v->right()->type()->monoType() == *chararrty) {
        static MonoTypePtr assignty = functy(list(stdstrty, chararrty), unitty);

        return fncall(var("stdstringAssign", assignty, v->left()->la()), list(switchOf(v->left(), *this), switchOf(v->right(), *this)), v->la());
      }
    }

    return wrapWithTy(v->type(), new Assign(switchOf(v->left(), *this), switchOf(v->right(), *this), v->la()));
  }
Пример #2
0
	std::vector<T> switchOf(const Types& ts, const switchType<T>& f) {
		std::vector<T> result;
		for (Types::const_iterator t = ts.begin(); t != ts.end(); ++t) {
			result.push_back(switchOf(*t, f));
		}
		return result;
	}
Пример #3
0
ExprPtr HFRecordEliminator::unqualify(const TEnvPtr&, const ConstraintPtr& cst, const ExprPtr& e, Definitions*) const {
  return switchOf(e, HFRecordUnqualify(cst));
}
Пример #4
0
template <typename T> T switchOf(const TypePtr& t, const switchType<T>& f) { return switchOf(*t, f); }