Changeset 7


Ignore:
Timestamp:
Nov 5, 2010, 1:50:02 PM (13 years ago)
Author:
george
Message:
  • Added: Support for unit initialization and finalization sections.
Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Compiler/Analyze/UPascalParser.pas

    r6 r7  
    3333    function ParseUnitInterface(SourceCode: TModuleUnit): Boolean;
    3434    function ParseUnitImplementation(SourceCode: TModuleUnit): Boolean;
    35     procedure ParseProgram(SourceCode: TModuleProgram);
     35    function ParseProgram(var SourceCode: TModuleProgram; ProgramCode: TProgram): Boolean;
    3636    procedure ParseCommonBlock(SourceCode: TCommonBlock; EndSymbol: char = ';';
    3737      WithBody: Boolean = True);
     
    396396begin
    397397  Self.ProgramCode := ProgramCode;
    398   if not ParseUnit(TModuleUnit(Result), ProgramCode) then begin
    399     Result := TModuleProgram.Create;
    400     Result.ParentProgram := ProgramCode;
    401     ParseProgram(TModuleProgram(Result));
    402   end else
     398  if not ParseUnit(TModuleUnit(Result), ProgramCode) then
     399  if not ParseProgram(TModuleProgram(Result), ProgramCode) then
    403400    ErrorMessage(SUnknownModuleType, [NextToken]);
    404401end;
    405402
    406 procedure TPascalParser.ParseProgram(SourceCode: TModuleProgram);
     403function TPascalParser.ParseProgram(var SourceCode: TModuleProgram; ProgramCode: TProgram): Boolean;
    407404var
    408405  Identifier: string;
    409406begin
    410407  with SourceCode do begin
     408    SourceCode := TModuleProgram.Create;
     409    SourceCode.ParentProgram := ProgramCode;
    411410    if NextToken = 'program' then begin
    412411      Expect('program');
     
    421420    ParseCommonBlock(Body, '.');
    422421    SourceCode.ParentProgram.Modules.Add(SourceCode);
     422    Result := True;
    423423  end;
    424424end;
     
    427427var
    428428  NewModule: TModule;
     429  NewCommand: TCommand;
    429430begin
    430431  if NextToken = 'unit' then begin
     
    447448    if NextToken = 'initialization' then begin
    448449      Expect('initialization');
     450      while (NextToken <> 'end') and (NextToken <> 'finalization')
     451      and (NextTokenType <> ttEndOfFile) do
     452      begin
     453        NewCommand := ParseCommand(SourceCode.InititializeSection);
     454        if Assigned(NewCommand) then
     455          SourceCode.InititializeSection.Code.Commands.Add(NewCommand);
     456       //ShowMessage(NextCode);
     457        if NextToken = ';' then
     458          ReadToken;
     459      end;
    449460    end;
    450461    if NextToken = 'finalization' then begin
    451462      Expect('finalization');
    452     end;
     463      while (NextToken <> 'end') and (NextTokenType <> ttEndOfFile) do
     464      begin
     465        NewCommand := ParseCommand(SourceCode.FinalalizeSection);
     466        if Assigned(NewCommand) then
     467          SourceCode.FinalalizeSection.Code.Commands.Add(NewCommand);
     468       //ShowMessage(NextCode);
     469        if NextToken = ';' then
     470          ReadToken;
     471      end;
     472    end;
     473    Expect('end');
     474    Expect('.');
    453475    Result := True;
    454476  end else Result := False;
     
    487509begin
    488510  with SourceCode do begin
    489     while (NextToken <> EndSymbol) do begin
     511    while (NextToken <> EndSymbol) and (NextTokenType <> ttEndOfFile) do begin
    490512      if not ParseVariableList(Variables) then
    491513      if not ParseConstantList(Constants) then
     
    12701292end;
    12711293
    1272 
    12731294end.
    12741295
  • trunk/Compiler/USourceCode.pas

    r6 r7  
    418418
    419419  TModuleUnit = class(TModule)
     420    InititializeSection: TCommonBlock;
     421    FinalalizeSection: TCommonBlock;
    420422    constructor Create;
    421423    destructor Destroy; override;
     
    10301032begin
    10311033  inherited;
     1034  InititializeSection := TCommonBlock.Create;
     1035  InititializeSection.ParentModule := Self;
     1036  FinalalizeSection := TCommonBlock.Create;
     1037  FinalalizeSection.ParentModule := Self;
    10321038end;
    10331039
    10341040destructor TModuleUnit.Destroy;
    10351041begin
     1042  InititializeSection.Free;
     1043  FinalalizeSection.Free;
    10361044  inherited Destroy;
    10371045end;
  • trunk/Transpascal.lpi

    r6 r7  
    212212        <EditorIndex Value="0"/>
    213213        <WindowIndex Value="0"/>
    214         <TopLine Value="58"/>
    215         <CursorPos X="26" Y="73"/>
     214        <TopLine Value="162"/>
     215        <CursorPos X="17" Y="175"/>
    216216        <UsageCount Value="103"/>
    217217        <Loaded Value="True"/>
     
    348348        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    349349        <UnitName Value="UProducerDynamicC"/>
    350         <IsVisibleTab Value="True"/>
    351350        <EditorIndex Value="11"/>
    352351        <WindowIndex Value="0"/>
    353         <TopLine Value="295"/>
    354         <CursorPos X="49" Y="308"/>
     352        <TopLine Value="268"/>
     353        <CursorPos X="39" Y="283"/>
    355354        <UsageCount Value="113"/>
    356355        <Loaded Value="True"/>
     
    379378        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    380379        <UnitName Value="UPascalParser"/>
     380        <IsVisibleTab Value="True"/>
    381381        <EditorIndex Value="8"/>
    382382        <WindowIndex Value="0"/>
    383         <TopLine Value="269"/>
    384         <CursorPos X="26" Y="289"/>
     383        <TopLine Value="450"/>
     384        <CursorPos X="17" Y="474"/>
    385385        <UsageCount Value="110"/>
    386386        <Loaded Value="True"/>
     
    425425        <TopLine Value="1"/>
    426426        <CursorPos X="28" Y="22"/>
    427         <UsageCount Value="196"/>
     427        <UsageCount Value="198"/>
    428428        <DefaultSyntaxHighlighter Value="Delphi"/>
    429429      </Unit38>
     
    762762      </Unit78>
    763763    </Units>
    764     <JumpHistory Count="29" HistoryIndex="28">
     764    <JumpHistory Count="30" HistoryIndex="27">
    765765      <Position1>
    766         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    767         <Caret Line="149" Column="1" TopLine="136"/>
     766        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     767        <Caret Line="308" Column="33" TopLine="295"/>
    768768      </Position1>
    769769      <Position2>
    770         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    771         <Caret Line="150" Column="1" TopLine="136"/>
     770        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     771        <Caret Line="38" Column="70" TopLine="25"/>
    772772      </Position2>
    773773      <Position3>
    774         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    775         <Caret Line="151" Column="1" TopLine="136"/>
     774        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     775        <Caret Line="286" Column="25" TopLine="277"/>
    776776      </Position3>
    777777      <Position4>
    778         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    779         <Caret Line="152" Column="1" TopLine="136"/>
     778        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     779        <Caret Line="281" Column="1" TopLine="276"/>
    780780      </Position4>
    781781      <Position5>
    782         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    783         <Caret Line="231" Column="1" TopLine="218"/>
     782        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     783        <Caret Line="283" Column="1" TopLine="276"/>
    784784      </Position5>
    785785      <Position6>
    786         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    787         <Caret Line="232" Column="1" TopLine="218"/>
     786        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     787        <Caret Line="284" Column="1" TopLine="276"/>
    788788      </Position6>
    789789      <Position7>
    790         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    791         <Caret Line="236" Column="1" TopLine="218"/>
     790        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     791        <Caret Line="290" Column="1" TopLine="276"/>
    792792      </Position7>
    793793      <Position8>
    794         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    795         <Caret Line="237" Column="1" TopLine="218"/>
     794        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     795        <Caret Line="292" Column="1" TopLine="276"/>
    796796      </Position8>
    797797      <Position9>
    798         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    799         <Caret Line="276" Column="1" TopLine="263"/>
     798        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     799        <Caret Line="293" Column="1" TopLine="276"/>
    800800      </Position9>
    801801      <Position10>
    802         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    803         <Caret Line="278" Column="1" TopLine="263"/>
     802        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     803        <Caret Line="316" Column="1" TopLine="303"/>
    804804      </Position10>
    805805      <Position11>
    806         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    807         <Caret Line="279" Column="1" TopLine="263"/>
     806        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     807        <Caret Line="281" Column="1" TopLine="268"/>
    808808      </Position11>
    809809      <Position12>
    810         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    811         <Caret Line="287" Column="1" TopLine="269"/>
     810        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     811        <Caret Line="8" Column="69" TopLine="6"/>
    812812      </Position12>
    813813      <Position13>
    814         <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    815         <Caret Line="289" Column="26" TopLine="269"/>
     814        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
     815        <Caret Line="38" Column="34" TopLine="25"/>
    816816      </Position13>
    817817      <Position14>
    818818        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    819         <Caret Line="305" Column="37" TopLine="287"/>
     819        <Caret Line="241" Column="68" TopLine="228"/>
    820820      </Position14>
    821821      <Position15>
    822822        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    823         <Caret Line="308" Column="33" TopLine="295"/>
     823        <Caret Line="277" Column="48" TopLine="264"/>
    824824      </Position15>
    825825      <Position16>
    826826        <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    827         <Caret Line="38" Column="70" TopLine="25"/>
     827        <Caret Line="308" Column="49" TopLine="295"/>
    828828      </Position16>
    829829      <Position17>
    830         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    831         <Caret Line="286" Column="25" TopLine="277"/>
     830        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     831        <Caret Line="398" Column="17" TopLine="395"/>
    832832      </Position17>
    833833      <Position18>
    834         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    835         <Caret Line="281" Column="1" TopLine="276"/>
     834        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     835        <Caret Line="401" Column="14" TopLine="395"/>
    836836      </Position18>
    837837      <Position19>
    838         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    839         <Caret Line="283" Column="1" TopLine="276"/>
     838        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     839        <Caret Line="398" Column="17" TopLine="395"/>
    840840      </Position19>
    841841      <Position20>
    842         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    843         <Caret Line="284" Column="1" TopLine="276"/>
     842        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     843        <Caret Line="431" Column="24" TopLine="426"/>
    844844      </Position20>
    845845      <Position21>
    846         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    847         <Caret Line="290" Column="1" TopLine="276"/>
     846        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     847        <Caret Line="426" Column="57" TopLine="426"/>
    848848      </Position21>
    849849      <Position22>
    850         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    851         <Caret Line="292" Column="1" TopLine="276"/>
     850        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     851        <Caret Line="449" Column="17" TopLine="429"/>
    852852      </Position22>
    853853      <Position23>
    854         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    855         <Caret Line="293" Column="1" TopLine="276"/>
     854        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     855        <Caret Line="1274" Column="15" TopLine="1251"/>
    856856      </Position23>
    857857      <Position24>
    858         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    859         <Caret Line="316" Column="1" TopLine="303"/>
     858        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     859        <Caret Line="1277" Column="14" TopLine="1253"/>
    860860      </Position24>
    861861      <Position25>
    862         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    863         <Caret Line="281" Column="1" TopLine="268"/>
     862        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     863        <Caret Line="449" Column="11" TopLine="435"/>
    864864      </Position25>
    865865      <Position26>
    866         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    867         <Caret Line="8" Column="69" TopLine="6"/>
     866        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     867        <Caret Line="442" Column="27" TopLine="435"/>
    868868      </Position26>
    869869      <Position27>
    870         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    871         <Caret Line="38" Column="34" TopLine="25"/>
     870        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     871        <Caret Line="453" Column="55" TopLine="444"/>
    872872      </Position27>
    873873      <Position28>
    874         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    875         <Caret Line="241" Column="68" TopLine="228"/>
     874        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     875        <Caret Line="455" Column="43" TopLine="438"/>
    876876      </Position28>
    877877      <Position29>
    878         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    879         <Caret Line="277" Column="48" TopLine="264"/>
     878        <Filename Value="Compiler\USourceCode.pas"/>
     879        <Caret Line="175" Column="17" TopLine="162"/>
    880880      </Position29>
     881      <Position30>
     882        <Filename Value="Compiler\USourceCode.pas"/>
     883        <Caret Line="78" Column="3" TopLine="65"/>
     884      </Position30>
    881885    </JumpHistory>
    882886  </ProjectOptions>
     
    920924  </CompilerOptions>
    921925  <Debugging>
    922     <BreakPoints Count="1">
    923       <Item1>
    924         <Source Value="Compiler\Produce\UProducerDynamicC.pas"/>
    925         <Line Value="281"/>
    926       </Item1>
    927     </BreakPoints>
    928926    <Exceptions Count="3">
    929927      <Item1>
Note: See TracChangeset for help on using the changeset viewer.