Changeset 20


Ignore:
Timestamp:
Nov 9, 2010, 12:21:56 PM (13 years ago)
Author:
george
Message:
  • Modified: Tokenizer was using slow Text property of TStringList. Replaced by fast native string variable.
Location:
trunk
Files:
5 edited

Legend:

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

    r12 r20  
    2929  end;
    3030
    31   TGetSourceEvent = function (Name: string; Source: TStringList): Boolean of object;
     31  TGetSourceEvent = function (Name: string; var SourceCode: string): Boolean of object;
    3232
    3333  { TAnalyzer }
     
    5151    CodeStreamPosition: Integer;
    5252    CodePosition: TPoint;
    53     SourceCodeText: TStringList;
     53    SourceCode: string;
    5454    Tokens: TObjectList; // TObjectList<TToken>
    5555    TokenIndex: Integer;
     
    225225  Tokens.Clear;
    226226  TokenIndex := 0;
    227   while CodeStreamPosition < Length(SourceCodeText.Text) do begin
     227  while CodeStreamPosition < Length(SourceCode) do begin
    228228    NewToken := TToken.Create;
    229229    GetNextToken;
     
    255255  FNextTokenType := ttNone;
    256256  FParserState := psNone;
    257   with SourceCodeText do
     257
    258258    while True do begin
    259       if CodeStreamPosition < Length(Text) then begin
    260         CurrentChar := Text[CodeStreamPosition];
     259      if CodeStreamPosition < Length(SourceCode) then begin
     260        CurrentChar := SourceCode[CodeStreamPosition];
    261261      end else begin
    262262        FNextToken := '';
  • trunk/Compiler/Analyze/UAnalyzerPascal.pas

    r19 r20  
    9191  try
    9292    Parser := TAnalyzerPascal.Create;
    93     Parser.SourceCodeText := TStringList.Create;
    9493    Parser.OnDebugLog := OnDebugLog;
    9594    Parser.ProgramCode := ProgramCode;
    9695    Parser.OnGetSource := OnGetSource;
    9796    if Assigned(OnGetSource) then begin
    98       if OnGetSource(Name, Parser.SourceCodeText) then begin
     97      if OnGetSource(Name, Parser.SourceCode) then begin
    9998        Parser.Process;
    10099        Parser.FileName := Name;
     
    107106    end else Result := False;
    108107  finally
    109     Parser.SourceCodeText.Free;
    110108    Parser.Free;
    111109  end;
     
    560558  NewType: TType;
    561559begin
     560  Log('ParseCommonBlockInterface');
    562561  with SourceCode do begin
    563562    while (NextToken <> 'implementation') and (NextTokenType <> ttEndOfFile) do begin
  • trunk/Compiler/UCompiler.pas

    r16 r20  
    7171    ProducedCode := TStringList.Create;
    7272    Analyzer.FileName := ModuleName;
    73     Analyzer.SourceCodeText := Source;
     73    Analyzer.SourceCode := Source.Text;
    7474    Analyzer.Process;
    7575    //ShowMessage(IntToHex(Integer(Addr(Analyzer.OnGetSource)), 8));
  • trunk/IDE/Forms/UMainForm.pas

    r14 r20  
    7373    Project: TProject;
    7474    Compiler: TCompiler;
    75     function GetSource(Name: string; Source: TStringList): Boolean;
     75    function GetSource(Name: string; var SourceCode: string): Boolean;
    7676  end;
    7777
     
    112112end;
    113113
    114 function TMainForm.GetSource(Name: string; Source: TStringList): Boolean;
     114function TMainForm.GetSource(Name: string; var SourceCode: string): Boolean;
    115115var
    116116  FileName: string;
     117  F: TFileStream;
    117118begin
    118119  FileName := Project.GetDir(True) + Name + '.pas';
    119   if FileExists(FileName) then begin
    120     Source.LoadFromFile(FileName);
     120  if FileExists(FileName) then
     121  try
     122    F := TFileStream.Create(FileName, fmOpenRead);
     123    SetLength(SourceCode, F.Size);
     124    if F.Size > 0 then
     125      F.Read(SourceCode[1], F.Size);
    121126    Result := True;
     127  finally
     128    F.Free;
    122129  end else Result := False;
    123130end;
  • trunk/IDE/Transpascal.lpi

    r19 r20  
    5353      </Item5>
    5454    </RequiredPackages>
    55     <Units Count="63">
     55    <Units Count="65">
    5656      <Unit0>
    5757        <Filename Value="Transpascal.lpr"/>
     
    7171        <ResourceBaseClass Value="Form"/>
    7272        <UnitName Value="UMainForm"/>
     73        <IsVisibleTab Value="True"/>
    7374        <EditorIndex Value="0"/>
    7475        <WindowIndex Value="0"/>
    75         <TopLine Value="93"/>
    76         <CursorPos X="21" Y="107"/>
     76        <TopLine Value="114"/>
     77        <CursorPos X="48" Y="114"/>
    7778        <UsageCount Value="215"/>
    7879        <Loaded Value="True"/>
     
    469470        <EditorIndex Value="2"/>
    470471        <WindowIndex Value="0"/>
    471         <TopLine Value="63"/>
    472         <CursorPos X="19" Y="79"/>
    473         <UsageCount Value="34"/>
     472        <TopLine Value="60"/>
     473        <CursorPos X="1" Y="76"/>
     474        <UsageCount Value="35"/>
    474475        <Loaded Value="True"/>
    475476      </Unit46>
     
    487488        <EditorIndex Value="3"/>
    488489        <WindowIndex Value="0"/>
    489         <TopLine Value="22"/>
    490         <CursorPos X="14" Y="77"/>
    491         <UsageCount Value="33"/>
     490        <TopLine Value="66"/>
     491        <CursorPos X="37" Y="79"/>
     492        <UsageCount Value="34"/>
    492493        <Loaded Value="True"/>
    493494      </Unit48>
     
    495496        <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    496497        <UnitName Value="UAnalyzerPascal"/>
    497         <IsVisibleTab Value="True"/>
    498         <EditorIndex Value="6"/>
    499         <WindowIndex Value="0"/>
    500         <TopLine Value="517"/>
    501         <CursorPos X="1" Y="530"/>
    502         <UsageCount Value="33"/>
     498        <EditorIndex Value="8"/>
     499        <WindowIndex Value="0"/>
     500        <TopLine Value="95"/>
     501        <CursorPos X="1" Y="108"/>
     502        <UsageCount Value="34"/>
    503503        <Loaded Value="True"/>
    504504      </Unit49>
     
    506506        <Filename Value="..\Compiler\Produce\UProducerPascal.pas"/>
    507507        <UnitName Value="UProducerPascal"/>
    508         <EditorIndex Value="4"/>
     508        <EditorIndex Value="6"/>
    509509        <WindowIndex Value="0"/>
    510510        <TopLine Value="267"/>
    511511        <CursorPos X="14" Y="270"/>
    512         <UsageCount Value="33"/>
     512        <UsageCount Value="34"/>
    513513        <Loaded Value="True"/>
    514514      </Unit50>
     
    540540        <Filename Value="..\Compiler\USourceCode.pas"/>
    541541        <UnitName Value="USourceCode"/>
    542         <EditorIndex Value="5"/>
     542        <EditorIndex Value="7"/>
    543543        <WindowIndex Value="0"/>
    544544        <TopLine Value="707"/>
    545545        <CursorPos X="3" Y="711"/>
    546         <UsageCount Value="33"/>
     546        <UsageCount Value="34"/>
    547547        <Loaded Value="True"/>
    548548      </Unit54>
     
    609609        <UsageCount Value="12"/>
    610610      </Unit62>
     611      <Unit63>
     612        <Filename Value="E:\Programy\Lazarus\fpc\2.4.3\source\rtl\objpas\classes\classesh.inc"/>
     613        <EditorIndex Value="4"/>
     614        <WindowIndex Value="0"/>
     615        <TopLine Value="625"/>
     616        <CursorPos X="36" Y="638"/>
     617        <UsageCount Value="11"/>
     618        <Loaded Value="True"/>
     619      </Unit63>
     620      <Unit64>
     621        <Filename Value="E:\Programy\Lazarus\fpc\2.4.3\source\rtl\objpas\classes\stringl.inc"/>
     622        <EditorIndex Value="5"/>
     623        <WindowIndex Value="0"/>
     624        <TopLine Value="428"/>
     625        <CursorPos X="3" Y="441"/>
     626        <UsageCount Value="11"/>
     627        <Loaded Value="True"/>
     628      </Unit64>
    611629    </Units>
    612     <JumpHistory Count="30" HistoryIndex="29">
     630    <JumpHistory Count="29" HistoryIndex="28">
    613631      <Position1>
    614632        <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    615         <Caret Line="1072" Column="1" TopLine="1053"/>
     633        <Caret Line="537" Column="1" TopLine="519"/>
    616634      </Position1>
    617635      <Position2>
    618         <Filename Value="..\Compiler\Produce\UProducerPascal.pas"/>
    619         <Caret Line="438" Column="23" TopLine="416"/>
     636        <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
     637        <Caret Line="546" Column="1" TopLine="536"/>
    620638      </Position2>
    621639      <Position3>
    622640        <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    623         <Caret Line="41" Column="65" TopLine="27"/>
     641        <Caret Line="550" Column="47" TopLine="540"/>
    624642      </Position3>
    625643      <Position4>
    626644        <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    627         <Caret Line="3" Column="61" TopLine="1"/>
     645        <Caret Line="442" Column="27" TopLine="434"/>
    628646      </Position4>
    629647      <Position5>
    630648        <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    631         <Caret Line="40" Column="31" TopLine="27"/>
     649        <Caret Line="488" Column="21" TopLine="481"/>
    632650      </Position5>
    633651      <Position6>
    634652        <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    635         <Caret Line="626" Column="39" TopLine="623"/>
     653        <Caret Line="562" Column="4" TopLine="548"/>
    636654      </Position6>
    637655      <Position7>
    638         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    639         <Caret Line="576" Column="27" TopLine="563"/>
     656        <Filename Value="..\Compiler\Analyze\UAnalyzer.pas"/>
     657        <Caret Line="260" Column="26" TopLine="243"/>
    640658      </Position7>
    641659      <Position8>
    642         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    643         <Caret Line="1191" Column="19" TopLine="1178"/>
     660        <Filename Value="..\Compiler\Analyze\UAnalyzer.pas"/>
     661        <Caret Line="257" Column="19" TopLine="243"/>
    644662      </Position8>
    645663      <Position9>
    646         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    647         <Caret Line="714" Column="34" TopLine="695"/>
     664        <Filename Value="..\Compiler\Analyze\UAnalyzer.pas"/>
     665        <Caret Line="53" Column="27" TopLine="40"/>
    648666      </Position9>
    649667      <Position10>
    650         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    651         <Caret Line="531" Column="42" TopLine="512"/>
     668        <Filename Value="..\Compiler\Analyze\UAnalyzer.pas"/>
     669        <Caret Line="227" Column="51" TopLine="214"/>
    652670      </Position10>
    653671      <Position11>
    654         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    655         <Caret Line="530" Column="44" TopLine="520"/>
     672        <Filename Value="..\Compiler\Analyze\UAnalyzer.pas"/>
     673        <Caret Line="257" Column="3" TopLine="244"/>
    656674      </Position11>
    657675      <Position12>
    658         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    659         <Caret Line="533" Column="11" TopLine="520"/>
     676        <Filename Value="..\Compiler\Analyze\UAnalyzer.pas"/>
     677        <Caret Line="259" Column="48" TopLine="246"/>
    660678      </Position12>
    661679      <Position13>
    662         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    663         <Caret Line="531" Column="26" TopLine="514"/>
     680        <Filename Value="..\Compiler\Analyze\UAnalyzer.pas"/>
     681        <Caret Line="254" Column="3" TopLine="243"/>
    664682      </Position13>
    665683      <Position14>
    666         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    667         <Caret Line="532" Column="17" TopLine="514"/>
     684        <Filename Value="..\Compiler\Analyze\UAnalyzer.pas"/>
     685        <Caret Line="53" Column="5" TopLine="30"/>
    668686      </Position14>
    669687      <Position15>
    670         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    671         <Caret Line="530" Column="1" TopLine="514"/>
     688        <Filename Value="..\Compiler\Analyze\UAnalyzer.pas"/>
     689        <Caret Line="229" Column="47" TopLine="214"/>
    672690      </Position15>
    673691      <Position16>
    674         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    675         <Caret Line="531" Column="1" TopLine="514"/>
     692        <Filename Value="..\Compiler\Analyze\UAnalyzer.pas"/>
     693        <Caret Line="259" Column="48" TopLine="246"/>
    676694      </Position16>
    677695      <Position17>
    678696        <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    679         <Caret Line="534" Column="1" TopLine="514"/>
     697        <Caret Line="562" Column="4" TopLine="548"/>
    680698      </Position17>
    681699      <Position18>
    682700        <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    683         <Caret Line="531" Column="1" TopLine="514"/>
     701        <Caret Line="99" Column="17" TopLine="91"/>
    684702      </Position18>
    685703      <Position19>
    686         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    687         <Caret Line="534" Column="1" TopLine="514"/>
     704        <Filename Value="..\Compiler\Analyze\UAnalyzer.pas"/>
     705        <Caret Line="79" Column="30" TopLine="66"/>
    688706      </Position19>
    689707      <Position20>
    690708        <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    691         <Caret Line="537" Column="1" TopLine="522"/>
     709        <Caret Line="99" Column="45" TopLine="86"/>
    692710      </Position20>
    693711      <Position21>
    694712        <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    695         <Caret Line="546" Column="1" TopLine="525"/>
     713        <Caret Line="108" Column="1" TopLine="86"/>
    696714      </Position21>
    697715      <Position22>
    698         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    699         <Caret Line="517" Column="1" TopLine="510"/>
     716        <Filename Value="..\Compiler\UCompiler.pas"/>
     717        <Caret Line="79" Column="19" TopLine="63"/>
    700718      </Position22>
    701719      <Position23>
    702         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    703         <Caret Line="521" Column="1" TopLine="510"/>
     720        <Filename Value="..\Compiler\UCompiler.pas"/>
     721        <Caret Line="73" Column="1" TopLine="60"/>
    704722      </Position23>
    705723      <Position24>
    706         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    707         <Caret Line="525" Column="1" TopLine="510"/>
     724        <Filename Value="..\Compiler\UCompiler.pas"/>
     725        <Caret Line="74" Column="1" TopLine="60"/>
    708726      </Position24>
    709727      <Position25>
    710         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    711         <Caret Line="530" Column="1" TopLine="510"/>
     728        <Filename Value="..\Compiler\UCompiler.pas"/>
     729        <Caret Line="76" Column="1" TopLine="60"/>
    712730      </Position25>
    713731      <Position26>
    714         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    715         <Caret Line="531" Column="1" TopLine="510"/>
     732        <Filename Value="Forms\UMainForm.pas"/>
     733        <Caret Line="114" Column="54" TopLine="107"/>
    716734      </Position26>
    717735      <Position27>
    718         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    719         <Caret Line="534" Column="1" TopLine="519"/>
     736        <Filename Value="Forms\UMainForm.pas"/>
     737        <Caret Line="125" Column="3" TopLine="114"/>
    720738      </Position27>
    721739      <Position28>
    722         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    723         <Caret Line="537" Column="1" TopLine="519"/>
     740        <Filename Value="Forms\UMainForm.pas"/>
     741        <Caret Line="97" Column="41" TopLine="84"/>
    724742      </Position28>
    725743      <Position29>
    726         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    727         <Caret Line="546" Column="1" TopLine="536"/>
     744        <Filename Value="Forms\UMainForm.pas"/>
     745        <Caret Line="75" Column="42" TopLine="62"/>
    728746      </Position29>
    729       <Position30>
    730         <Filename Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    731         <Caret Line="550" Column="47" TopLine="540"/>
    732       </Position30>
    733747    </JumpHistory>
    734748  </ProjectOptions>
     
    772786  </CompilerOptions>
    773787  <Debugging>
    774     <BreakPoints Count="3">
     788    <BreakPoints Count="4">
    775789      <Item1>
    776790        <Source Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    777         <Line Value="1205"/>
     791        <Line Value="1204"/>
    778792      </Item1>
    779793      <Item2>
    780794        <Source Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    781         <Line Value="1230"/>
     795        <Line Value="1229"/>
    782796      </Item2>
    783797      <Item3>
    784798        <Source Value="..\Compiler\Analyze\UAnalyzerPascal.pas"/>
    785         <Line Value="1040"/>
     799        <Line Value="1039"/>
    786800      </Item3>
     801      <Item4>
     802        <Source Value="..\Compiler\UCompiler.pas"/>
     803        <Line Value="73"/>
     804      </Item4>
    787805    </BreakPoints>
    788806    <Exceptions Count="3">
Note: See TracChangeset for help on using the changeset viewer.