virtual void visit(Function *type) { Function *funTy = control()->newFunction(0, 0); funTy->copy(type); funTy->setConst(type->isConst()); funTy->setVolatile(type->isVolatile()); funTy->setName(rewrite->rewriteName(type->name())); funTy->setReturnType(rewrite->rewriteType(type->returnType())); for (unsigned i = 0, argc = type->argumentCount(); i < argc; ++i) { Symbol *arg = type->argumentAt(i); Argument *newArg = control()->newArgument(0, 0); newArg->copy(arg); newArg->setName(rewrite->rewriteName(arg->name())); newArg->setType(rewrite->rewriteType(arg->type())); // the copy() call above set the scope to 'type' // reset it to 0 before adding addMember to avoid assert newArg->resetEnclosingScope(); funTy->addMember(newArg); } temps.append(funTy); }