Type Library Editor AV Correction

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1360 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2010-11-01 12:08:12 +00:00
parent 3aad4e18fa
commit 3bf012d3a2
2 changed files with 46 additions and 42 deletions

View File

@ -2373,26 +2373,28 @@ var
elt : TPasElement;
ultimAnc, trueAncestor : TPasType;
begin
s := '';
if Assigned(ASymbol.AncestorType) then begin
trueAncestor := ASymbol.AncestorType;
if trueAncestor.InheritsFrom(TPasUnresolvedTypeRef) then begin
elt := SymbolTable.FindElement(SymbolTable.GetExternalName(trueAncestor));
if elt.InheritsFrom(TPasType) then begin
if (elt = nil) or (not elt.InheritsFrom(TPasType)) then
trueAncestor := nil
else
trueAncestor := TPasType(elt);
end;
if (trueAncestor <> nil) then begin
ultimAnc := GetUltimeType(trueAncestor);
if ultimAnc.InheritsFrom(TPasNativeSimpleType) then begin
trueAncestor := ultimAnc;
end;
if trueAncestor.InheritsFrom(TPasNativeSimpleType) and
Assigned(TPasNativeSimpleType(trueAncestor).ExtendableType)
then begin
trueAncestor := TPasNativeSimpleType(trueAncestor).ExtendableType;
end;
s := Format('%s',[trueAncestor.Name]);
end;
ultimAnc := GetUltimeType(trueAncestor);
if ultimAnc.InheritsFrom(TPasNativeSimpleType) then begin
trueAncestor := ultimAnc;
end;
if trueAncestor.InheritsFrom(TPasNativeSimpleType) and
Assigned(TPasNativeSimpleType(trueAncestor).ExtendableType)
then begin
trueAncestor := TPasNativeSimpleType(trueAncestor).ExtendableType;
end;
s := Format('%s',[trueAncestor.Name]);
end else begin
s := '';//'TBaseComplexRemotable';
end;
if IsStrEmpty(s) then begin
decBuffer := '';

View File

@ -1003,37 +1003,39 @@ begin
trueParent := typItm.AncestorType;
if trueParent.InheritsFrom(TPasUnresolvedTypeRef) then
trueParent := AContainer.FindElement(AContainer.GetExternalName(trueParent)) as TPasType;
if trueParent.InheritsFrom(TPasNativeClassType) and AnsiSameText('THeaderBlock',trueParent.Name) then begin
DeclareNameSpaceOf_WST(ADocument);
DeclareAttributeOf_WST(cplxNode,s_WST_headerBlock,'true');
end else if trueParent.InheritsFrom(TPasNativeClassType) and AnsiSameText('TSimpleContentHeaderBlock',trueParent.Name) then begin
DeclareNameSpaceOf_WST(ADocument);
DeclareAttributeOf_WST(cplxNode,s_WST_headerBlockSimpleContent,'true');
end;
if trueParent.InheritsFrom(TPasAliasType) then
trueParent := GetUltimeType(trueParent);
if trueParent.InheritsFrom(TPasNativeSimpleContentClassType) or
trueParent.InheritsFrom(TPasNativeSimpleType)
then begin
typeCategory := tcSimpleContent;
end;
if trueParent.InheritsFrom(TPasNativeSimpleContentClassType) or
( not trueParent.InheritsFrom(TPasNativeClassType) )
then begin
if ( typeCategory = tcSimpleContent ) then begin
derivationNode := CreateElement(Format('%s:%s',[s_xs_short,s_simpleContent]),cplxNode,ADocument);
derivationNode := CreateElement(Format('%s:%s',[s_xs_short,s_extension]),derivationNode,ADocument);
end else begin
derivationNode := CreateElement(Format('%s:%s',[s_xs_short,s_extension]),cplxNode,ADocument);
if (trueParent <> nil) then begin
if trueParent.InheritsFrom(TPasNativeClassType) and AnsiSameText('THeaderBlock',trueParent.Name) then begin
DeclareNameSpaceOf_WST(ADocument);
DeclareAttributeOf_WST(cplxNode,s_WST_headerBlock,'true');
end else if trueParent.InheritsFrom(TPasNativeClassType) and AnsiSameText('TSimpleContentHeaderBlock',trueParent.Name) then begin
DeclareNameSpaceOf_WST(ADocument);
DeclareAttributeOf_WST(cplxNode,s_WST_headerBlockSimpleContent,'true');
end;
s := Trim(GetNameSpaceShortName(GetTypeNameSpace(AContainer,trueParent),ADocument,GetOwner().GetPreferedShortNames()));
if ( Length(s) > 0 ) then
s := s + ':';
s := s + AContainer.GetExternalName(trueParent);
derivationNode.SetAttribute(s_base,s);
if trueParent.InheritsFrom(TPasAliasType) then
trueParent := GetUltimeType(trueParent);
if trueParent.InheritsFrom(TPasNativeSimpleContentClassType) or
trueParent.InheritsFrom(TPasNativeSimpleType)
then begin
typeCategory := tcSimpleContent;
end;
if trueParent.InheritsFrom(TPasNativeSimpleContentClassType) or
( not trueParent.InheritsFrom(TPasNativeClassType) )
then begin
if ( typeCategory = tcSimpleContent ) then begin
derivationNode := CreateElement(Format('%s:%s',[s_xs_short,s_simpleContent]),cplxNode,ADocument);
derivationNode := CreateElement(Format('%s:%s',[s_xs_short,s_extension]),derivationNode,ADocument);
end else begin
derivationNode := CreateElement(Format('%s:%s',[s_xs_short,s_extension]),cplxNode,ADocument);
end;
s := Trim(GetNameSpaceShortName(GetTypeNameSpace(AContainer,trueParent),ADocument,GetOwner().GetPreferedShortNames()));
if ( Length(s) > 0 ) then
s := s + ':';
s := s + AContainer.GetExternalName(trueParent);
derivationNode.SetAttribute(s_base,s);
end;
hasSequence := False;
end;
hasSequence := False;
end;
if ( typItm.Members.Count > 0 ) then
hasSequence := TypeHasSequence(typItm,typeCategory);