Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-dev] C++-Templates

I have reworked some of the code related to c++-templates and I am going
to commit my changes. I'd like to explain what I have done:
Extended API: IBinding.getOwner()
When dealing with specializations it is helpful to be able to obtain the
binding in which another binding is contained. Up to now there were a
couple of workarounds like:
IBinding.getScope().getName().resolveBinding(), or 
((ICPPClassScope) IBinding.getScope()).getClassType() to do that. None
of these works for all cases, I have created a new method for that.

Removed triplicated code:
The algorithms for template instantiation was spread apart into the 3 
implementations of the binding hierarchy. I reorganized the code to have
the algorithms in one place (CPPTemplates). The algorithms now work 
with any of the 3 binding implementations.

Specialization vs. Instance:
In many aspects instances behave like specializations, why one can live
with the iheritance from ICPPTemplateInstance of ICPPSpecialization. An
instance is created off a template and lives in the same scope as the
template. Specializations are created on behalf of a
class-specialization or class-instance and belong to their creator. By
that you can see that the argument map in a specialization is redundant
information that could be obtained from the parent, whereas in an
instance the arguments are significant to distinguish between different
* Explicit specializations are instances in the above sense, therefore I

  changed the code to model them as instances.
* I changed the type-comparison.
* I made sure instances and specializations are created once, only.

JUnit failure:
I have broken the JUnit-tests for anonymous members of c-structs or
I will look into that soon. bug 216791 and 206450.

Although I am going to commit my changes right away, I'll attach a patch
to bug 236197, if there is a need to revert any of my changes.


Back to the top