version 1.2, 2001/01/22 00:45:47
|
version 1.3, 2001/01/23 01:25:35
|
|
|
// Author: | // Author: |
// | // |
// $Log$ | // $Log$ |
|
// Revision 1.3 2001/01/23 01:25:35 mike |
|
// Reworked resolve scheme. |
|
// |
// Revision 1.2 2001/01/22 00:45:47 mike | // Revision 1.2 2001/01/22 00:45:47 mike |
// more work on resolve scheme | // more work on resolve scheme |
// | // |
|
|
const String& nameSpace, | const String& nameSpace, |
const ConstMethod& inheritedMethod) | const ConstMethod& inheritedMethod) |
{ | { |
if (inheritedMethod) |
// ATTN: Check to see if this method has same signature as |
{ |
// inherited one. |
assert(Name::equal(getName(), inheritedMethod.getName())); |
|
| |
if (getType() != inheritedMethod.getType()) |
// Check for type mismatch between return types. |
{ |
|
String tmp = inheritedMethod.getName(); |
|
tmp.append("; attempt to change type"); |
|
throw InvalidMethodOverride(tmp); |
|
} |
|
| |
_classOrigin = inheritedMethod.getClassOrigin(); |
assert (inheritedMethod); |
} |
|
| |
// Validate the qualifiers of the method (according to | // Validate the qualifiers of the method (according to |
// superClass's method with the same name). This method | // superClass's method with the same name). This method |
// will throw an exception if the validation fails. | // will throw an exception if the validation fails. |
| |
if (inheritedMethod) |
|
{ |
|
_qualifiers.resolve( | _qualifiers.resolve( |
declContext, | declContext, |
nameSpace, | nameSpace, |
Scope::METHOD, | Scope::METHOD, |
false, | false, |
inheritedMethod._rep->_qualifiers); | inheritedMethod._rep->_qualifiers); |
} |
|
else |
|
{ |
|
QualifierList dummyQualifiers; |
|
_qualifiers.resolve( |
|
declContext, |
|
nameSpace, |
|
Scope::METHOD, |
|
false, |
|
dummyQualifiers); |
|
} |
|
| |
// Validate each of the parameters: | // Validate each of the parameters: |
| |
for (size_t i = 0; i < _parameters.getSize(); i++) | for (size_t i = 0; i < _parameters.getSize(); i++) |
_parameters[i].resolve(declContext, nameSpace); | _parameters[i].resolve(declContext, nameSpace); |
|
|
|
_classOrigin = inheritedMethod.getClassOrigin(); |
} | } |
| |
void MethodRep::resolve( | void MethodRep::resolve( |