Code generation : Array item external name setting in the interface file.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@812 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2009-05-28 19:43:15 +00:00
parent 894dbe3c90
commit 527c0c98b8
2 changed files with 19 additions and 13 deletions

View File

@ -203,6 +203,7 @@ const sLOCAL_TYPE_REGISTER_REFERENCE = 'typeRegistryIntance';
sUNIT_NAME = 'sUNIT_NAME';
sRECORD_RTTI_DEFINE = 'WST_RECORD_RTTI';
sEASY_ACCESS_INTERFACE_PREFIX = 'Easy';
sARRAY_ITEM_DEFAULT_EXTERNAL_NAME = 'item';
sPRM_NAME = 'locStrPrmName';
sLOC_SERIALIZER = 'locSerializer';
@ -739,8 +740,6 @@ Var
origineIsFunc : Boolean;
origineArgIN : TPasArgument;
prmCnt,k : Integer;
prm : TPasArgument;
resPrm : TPasResultElement;
elt : TPasElement;
objArgs : Boolean;
localIsFunc : boolean;
@ -2564,19 +2563,20 @@ begin
'%s.Register(%s,TypeInfo(%s),%s);',
[sLOCAL_TYPE_REGISTER_REFERENCE,sNAME_SPACE,ASymbol.Name,QuotedStr(SymbolTable.GetExternalName(ASymbol))]
);
if ( SymbolTable.GetArrayItemName(ASymbol) <> SymbolTable.GetArrayItemExternalName(ASymbol) ) then begin
FImpTempStream.Indent();
FImpTempStream.WriteLn(
'%s.ItemByTypeInfo[TypeInfo(%s)].RegisterExternalPropertyName(sARRAY_ITEM,%s);',
[sLOCAL_TYPE_REGISTER_REFERENCE,ASymbol.Name,QuotedStr(SymbolTable.GetArrayItemExternalName(ASymbol))]
);
end;
if ( SymbolTable.GetArrayStyle(ASymbol) = asEmbeded ) then begin
FImpTempStream.Indent();
FImpTempStream.WriteLn(
'%s.ItemByTypeInfo[TypeInfo(%s)].RegisterExternalPropertyName(sARRAY_STYLE,sEmbedded);',
[sLOCAL_TYPE_REGISTER_REFERENCE,ASymbol.Name,QuotedStr(SymbolTable.GetArrayItemExternalName(ASymbol))]
);
end else begin
if ( SymbolTable.GetArrayItemExternalName(ASymbol) <> sARRAY_ITEM_DEFAULT_EXTERNAL_NAME ) then begin
FImpTempStream.Indent();
FImpTempStream.WriteLn(
'%s.ItemByTypeInfo[TypeInfo(%s)].RegisterExternalPropertyName(sARRAY_ITEM,%s);',
[sLOCAL_TYPE_REGISTER_REFERENCE,ASymbol.Name,QuotedStr(SymbolTable.GetArrayItemExternalName(ASymbol))]
);
end;
end;
end;

View File

@ -1042,6 +1042,7 @@ var
tmpRecVar : TPasVariable;
locStrBuffer : string;
locAnyNode, locAnyAttNode : TDOMNode;
locDefaultAncestorUsed : Boolean;
begin
ExtractBaseType();
eltCrs := ExtractElementCursor(eltAttCrs,locAnyNode,locAnyAttNode);
@ -1071,20 +1072,25 @@ begin
if ( FDerivationMode in [dmExtension, dmRestriction] ) then begin
classDef.AncestorType := FBaseType;
end;
locDefaultAncestorUsed := False;
if ( classDef.AncestorType = nil ) then begin
if IsHeaderBlock() then
if IsHeaderBlock() then begin
classDef.AncestorType := FSymbols.FindElementInModule('THeaderBlock',FSymbols.FindModule('base_service_intf') as TPasModule) as TPasType
else if IsSimpleContentHeaderBlock() then
end else if IsSimpleContentHeaderBlock() then begin
classDef.AncestorType := FSymbols.FindElementInModule('TSimpleContentHeaderBlock',FSymbols.FindModule('base_service_intf') as TPasModule) as TPasType
else
end else begin
locDefaultAncestorUsed := True;
classDef.AncestorType := FSymbols.FindElementInModule('TBaseComplexRemotable',FSymbols.FindModule('base_service_intf') as TPasModule) as TPasType;
end;
end;
classDef.AncestorType.AddRef();
if Assigned(eltCrs) or Assigned(eltAttCrs) then begin
isArrayDef := False;
ParseElementsAndAttributes(eltCrs,eltAttCrs);
if ( arrayItems.GetCount() > 0 ) then begin
if ( arrayItems.GetCount() = 1 ) and ( GetElementCount(classDef.Members,TPasProperty) = 1 ) then begin
if ( arrayItems.GetCount() = 1 ) and locDefaultAncestorUsed and
( GetElementCount(classDef.Members,TPasProperty) = 1 )
then begin
Result := nil;
propTyp := arrayItems.GetItem(0).Prop;
arrayDef := FSymbols.CreateArray(internalName,propTyp.VarType,propTyp.Name,FSymbols.GetExternalName(propTyp),asScoped);