diff --git a/wst/trunk/ws_helper/generator.pas b/wst/trunk/ws_helper/generator.pas index 63e894654..210c575e1 100644 --- a/wst/trunk/ws_helper/generator.pas +++ b/wst/trunk/ws_helper/generator.pas @@ -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; diff --git a/wst/trunk/ws_helper/ws_parser_imp.pas b/wst/trunk/ws_helper/ws_parser_imp.pas index 79d4bcbe8..331033507 100644 --- a/wst/trunk/ws_helper/ws_parser_imp.pas +++ b/wst/trunk/ws_helper/ws_parser_imp.pas @@ -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);