Browse Source

* Save bitpacked also, not just register

git-svn-id: trunk@10025 -
michael 17 years ago
parent
commit
4b72eae793
2 changed files with 11 additions and 1 deletions
  1. 1 0
      packages/fcl-passrc/src/pastree.pp
  2. 10 1
      packages/fcl-passrc/src/pparser.pp

+ 1 - 0
packages/fcl-passrc/src/pastree.pp

@@ -250,6 +250,7 @@ type
     function GetDeclaration(full : boolean) : string; override;
   public
     IsPacked: Boolean;
+    IsBitPacked : Boolean;
     Members: TList;     // array of TPasVariable elements
     VariantName: string;
     VariantType: TPasType;

+ 10 - 1
packages/fcl-passrc/src/pparser.pp

@@ -353,12 +353,15 @@ var
   EnumValue: TPasEnumValue;
   Ref: TPasElement;
   HadPackedModifier : Boolean;           // 12/04/04 - Dave - Added
+  IsBitPacked : Boolean;
+  
 begin
   Result := nil;         // !!!: Remove in the future
   HadPackedModifier := False;     { Assume not present }
   NextToken;
   if CurToken in [tkPacked,tkbitpacked] then     { If PACKED modifier }
      begin                        { Handle PACKED modifier for all situations }
+     IsBitPacked:=(CurToken=tkBitPacked);
      NextToken;                   { Move to next token for rest of parse }
      if CurToken in [tkArray, tkRecord, tkObject, tkClass] then  { If allowed }
        HadPackedModifier := True  { rememeber for later }
@@ -470,7 +473,9 @@ begin
     tkRecord:
       begin
         Result := TPasRecordType(CreateElement(TPasRecordType, '', Parent));
-        TPasRecordType(Result).IsPacked := HadPackedModifier;
+        TPasRecordType(Result).IsPacked:=HadPackedModifier;
+        If HadPackedModifier then
+            TPasRecordType(Result).IsBitPacked:=IsBitPacked;
 	try
           ParseRecordDecl(TPasRecordType(Result), False);
 	except
@@ -937,6 +942,7 @@ var
   EnumValue: TPasEnumValue;
   Prefix : String;
   HadPackedModifier : Boolean;           // 12/04/04 - Dave - Added
+  IsBitPacked : Boolean;
 
 begin
   TypeName := CurTokenString;
@@ -945,6 +951,7 @@ begin
   HadPackedModifier := False;     { Assume not present }
   if CurToken in [tkPacked,tkbitpacked] then     { If PACKED modifier }
      begin                        { Handle PACKED modifier for all situations }
+     IsBitPacked:=CurToken=tkbitpacked;
      NextToken;                   { Move to next token for rest of parse }
      if CurToken in [tkArray, tkRecord, tkObject, tkClass] then  { If allowed }
        HadPackedModifier := True  { rememeber for later }
@@ -960,6 +967,8 @@ begin
           ParseRecordDecl(TPasRecordType(Result), False);
 	  CheckHint(Result,True);
           TPasRecordType(Result).IsPacked := HadPackedModifier;
+          If HadPackedModifier then
+            TPasRecordType(Result).IsBitPacked:=IsBitPacked;
         except
           Result.Free;
           raise;