forked from qt-creator/qt-creator
		
	Cleanup
This commit is contained in:
		@@ -47,13 +47,13 @@ namespace {
 | 
			
		||||
class ApplySubstitution
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    ApplySubstitution(const LookupContext &context, const GenTemplateInstance::Substitution &substitution);
 | 
			
		||||
    ApplySubstitution(const LookupContext &context, Symbol *symbol, const GenTemplateInstance::Substitution &substitution);
 | 
			
		||||
    ~ApplySubstitution();
 | 
			
		||||
 | 
			
		||||
    Control *control() const { return context.control(); }
 | 
			
		||||
 | 
			
		||||
    FullySpecifiedType operator()(Name *name);
 | 
			
		||||
    FullySpecifiedType operator()(const FullySpecifiedType &type);
 | 
			
		||||
    FullySpecifiedType apply(Name *name);
 | 
			
		||||
    FullySpecifiedType apply(const FullySpecifiedType &type);
 | 
			
		||||
 | 
			
		||||
    int findSubstitution(Identifier *id) const;
 | 
			
		||||
    FullySpecifiedType applySubstitution(int index) const;
 | 
			
		||||
@@ -107,22 +107,22 @@ private:
 | 
			
		||||
 | 
			
		||||
        virtual void visit(PointerType *ptrTy)
 | 
			
		||||
        {
 | 
			
		||||
            _type.setType(control()->pointerType(operator()(ptrTy->elementType())));
 | 
			
		||||
            _type.setType(control()->pointerType(q->apply(ptrTy->elementType())));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        virtual void visit(ReferenceType *refTy)
 | 
			
		||||
        {
 | 
			
		||||
            _type.setType(control()->referenceType(operator()(refTy->elementType())));
 | 
			
		||||
            _type.setType(control()->referenceType(q->apply(refTy->elementType())));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        virtual void visit(ArrayType *arrayTy)
 | 
			
		||||
        {
 | 
			
		||||
            _type.setType(control()->arrayType(operator()(arrayTy->elementType()), arrayTy->size()));
 | 
			
		||||
            _type.setType(control()->arrayType(q->apply(arrayTy->elementType()), arrayTy->size()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        virtual void visit(NamedType *ty)
 | 
			
		||||
        {
 | 
			
		||||
            FullySpecifiedType n = q->operator ()(ty->name());
 | 
			
		||||
            FullySpecifiedType n = q->apply(ty->name());
 | 
			
		||||
            _type.setType(n.type());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -136,14 +136,14 @@ private:
 | 
			
		||||
            fun->setAmbiguous(funTy->isAmbiguous());
 | 
			
		||||
            fun->setVariadic(funTy->isVariadic());
 | 
			
		||||
 | 
			
		||||
            fun->setReturnType(q->operator ()(funTy->returnType()));
 | 
			
		||||
            fun->setReturnType(q->apply(funTy->returnType()));
 | 
			
		||||
 | 
			
		||||
            for (unsigned i = 0; i < funTy->argumentCount(); ++i) {
 | 
			
		||||
                Argument *originalArgument = funTy->argumentAt(i)->asArgument();
 | 
			
		||||
                Argument *arg = control()->newArgument(/*sourceLocation*/ 0,
 | 
			
		||||
                                                       originalArgument->name());
 | 
			
		||||
 | 
			
		||||
                arg->setType(q->operator ()(originalArgument->type()));
 | 
			
		||||
                arg->setType(q->apply(originalArgument->type()));
 | 
			
		||||
                arg->setInitializer(originalArgument->hasInitializer());
 | 
			
		||||
                fun->arguments()->enterSymbol(arg);
 | 
			
		||||
            }
 | 
			
		||||
@@ -199,6 +199,7 @@ private:
 | 
			
		||||
    private:
 | 
			
		||||
        ApplySubstitution *q;
 | 
			
		||||
        FullySpecifiedType _type;
 | 
			
		||||
        QHash<Symbol *, FullySpecifiedType> _processed;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    class ApplyToName: protected NameVisitor
 | 
			
		||||
@@ -246,7 +247,7 @@ private:
 | 
			
		||||
            QVarLengthArray<FullySpecifiedType, 8> arguments(name->templateArgumentCount());
 | 
			
		||||
            for (unsigned i = 0; i < name->templateArgumentCount(); ++i) {
 | 
			
		||||
                FullySpecifiedType argTy = name->templateArgumentAt(i);
 | 
			
		||||
                arguments[i] = q->operator ()(argTy);
 | 
			
		||||
                arguments[i] = q->apply(argTy);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            TemplateNameId *templId = control()->templateNameId(name->identifier(), arguments.data(), arguments.size());
 | 
			
		||||
@@ -263,7 +264,7 @@ private:
 | 
			
		||||
                    QVarLengthArray<FullySpecifiedType, 8> arguments(templId->templateArgumentCount());
 | 
			
		||||
                    for (unsigned templateArgIndex = 0; templateArgIndex < templId->templateArgumentCount(); ++templateArgIndex) {
 | 
			
		||||
                        FullySpecifiedType argTy = templId->templateArgumentAt(templateArgIndex);
 | 
			
		||||
                        arguments[templateArgIndex] = q->operator ()(argTy);
 | 
			
		||||
                        arguments[templateArgIndex] = q->apply(argTy);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    n = control()->templateNameId(templId->identifier(), arguments.data(), arguments.size());
 | 
			
		||||
@@ -307,26 +308,34 @@ private:
 | 
			
		||||
 | 
			
		||||
public: // attributes
 | 
			
		||||
    LookupContext context;
 | 
			
		||||
    Symbol *symbol;
 | 
			
		||||
    GenTemplateInstance::Substitution substitution;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    ApplyToType applyToType;
 | 
			
		||||
    ApplyToName applyToName;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
ApplySubstitution::ApplySubstitution(const LookupContext &context, const GenTemplateInstance::Substitution &substitution)
 | 
			
		||||
    : context(context), substitution(substitution), applyToType(this), applyToName(this)
 | 
			
		||||
ApplySubstitution::ApplySubstitution(const LookupContext &context, Symbol *symbol,
 | 
			
		||||
                                     const GenTemplateInstance::Substitution &substitution)
 | 
			
		||||
    : context(context), symbol(symbol),
 | 
			
		||||
      substitution(substitution),
 | 
			
		||||
      applyToType(this), applyToName(this)
 | 
			
		||||
{ }
 | 
			
		||||
 | 
			
		||||
ApplySubstitution::~ApplySubstitution()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
FullySpecifiedType ApplySubstitution::operator()(Name *name)
 | 
			
		||||
{ return applyToName(name); }
 | 
			
		||||
FullySpecifiedType ApplySubstitution::apply(Name *name)
 | 
			
		||||
{
 | 
			
		||||
    FullySpecifiedType ty = applyToName(name);
 | 
			
		||||
    return ty;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
FullySpecifiedType ApplySubstitution::operator()(const FullySpecifiedType &type)
 | 
			
		||||
{ return applyToType(type); }
 | 
			
		||||
FullySpecifiedType ApplySubstitution::apply(const FullySpecifiedType &type)
 | 
			
		||||
{
 | 
			
		||||
    FullySpecifiedType ty = applyToType(type);
 | 
			
		||||
    return ty;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ApplySubstitution::findSubstitution(Identifier *id) const
 | 
			
		||||
{
 | 
			
		||||
@@ -360,8 +369,8 @@ GenTemplateInstance::GenTemplateInstance(const LookupContext &context, const Sub
 | 
			
		||||
 | 
			
		||||
FullySpecifiedType GenTemplateInstance::operator()(Symbol *symbol)
 | 
			
		||||
{
 | 
			
		||||
    ApplySubstitution o(_context, _substitution);
 | 
			
		||||
    return o(symbol->type());
 | 
			
		||||
    ApplySubstitution o(_context, symbol, _substitution);
 | 
			
		||||
    return o.apply(symbol->type());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Control *GenTemplateInstance::control() const
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user