Changeset 39 for branches/DelphiToC


Ignore:
Timestamp:
Aug 5, 2010, 9:51:16 AM (14 years ago)
Author:
george
Message:

Fixed expression parsing.

Location:
branches/DelphiToC
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/DelphiToC/Analyze/UPascalParser.pas

    r38 r39  
    77uses
    88  SysUtils, Variants, Classes, Graphics, Controls, Forms,
    9   Dialogs, StdCtrls, UPascalSource, FileUtil;
     9  Dialogs, UPascalSource, FileUtil;
    1010
    1111type
     
    254254  with Parser do begin
    255255    Expect('while');
     256    Condition.CommonBlock := CommonBlock;
    256257    TParserExpression(Condition).Parse(Parser);
    257258    Expect('do');
     
    282283        if Identifier = '(' then begin
    283284          // Subexpression
    284           with TExpression(Expressions[Expressions.Count - 1]) do begin
     285          with TExpression(Expressions.Last) do begin
    285286            SubItems[1] := TExpression.Create;
    286287            TParserExpression(SubItems[1]).Parse(Parser);
    287288          end;
    288289          with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do begin
     290            CommonBlock := Self.CommonBlock;
    289291            SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    290292          end;
     
    293295        if IsOperator(Identifier) then begin
    294296          // Operator
    295           TExpression(Expressions[Expressions.Count - 1]).OperatorName := Identifier;
    296           TExpression(Expressions[Expressions.Count - 1]).NodeType := ntOperator;
     297          TExpression(Expressions.Last).OperatorName := Identifier;
     298          TExpression(Expressions.Last).NodeType := ntOperator;
    297299        end else
    298300        if IsIdentificator(Identifier) then begin
     
    301303          if Assigned(NewVariable) then begin
    302304            // Referenced variable
    303             with TExpression(Expressions[Expressions.Count - 1]) do begin
     305            with TExpression(Expressions.Last) do begin
    304306              SubItems[1] := TExpression.Create;
    305307              TExpression(SubItems[1]).NodeType := ntVariable;
     
    307309            end;
    308310            with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do begin
     311              CommonBlock := Self.CommonBlock;
    309312              SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    310313            end;
     
    313316            if Assigned(Method) then begin
    314317              // Referenced method
    315               with TExpression(Expressions[Expressions.Count - 1]) do begin
     318              with TExpression(Expressions.Last) do begin
    316319                SubItems[1] := TExpression.Create;
    317320                if NextCode  = '(' then               // Method with parameters
     
    331334                  Expect(')');
    332335                end;
    333                 TExpression(SubItems[1]).NodeType := nTFunction;
     336                TExpression(SubItems[1]).NodeType := ntFunction;
    334337                TExpression(SubItems[1]).Method := Method;
    335338              end;
    336339              with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do begin
     340                CommonBlock := Self.CommonBlock;
    337341                SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    338342              end;
     
    341345              if Assigned(Constant) then begin
    342346                // Referenced constant
    343                 with TExpression(Expressions[Expressions.Count - 1]) do begin
     347                with TExpression(Expressions.Last) do begin
    344348                  SubItems[1] := TExpression.Create;
    345349                  TExpression(SubItems[1]).NodeType := ntConstant;
     
    347351                end;
    348352                with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do begin
     353                  CommonBlock := Self.CommonBlock;
    349354                  SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    350355                end;
     
    357362        begin
    358363          // Constant value
    359           with TExpression(Expressions[Expressions.Count - 1]) do begin
     364          with TExpression(Expressions.Last) do begin
    360365            SubItems[1] := TExpression.Create;
     366            TExpression(SubItems[1]).CommonBlock := Self.CommonBlock;
    361367            TExpression(SubItems[1]).NodeType := ntConstant;
    362368
     
    367373              //  TExpression(SubItems[1]).Value[I - 1] := Byte(Identifier[I]);
    368374            end else begin
    369               //SetLength(TExpression(SubItems[1]).Value, 1);
    370               //TExpression(SubItems[1]).Value[0] := StrToInt(Identifier);
     375              TExpression(SubItems[1]).Value := Identifier;
    371376            end;
    372377          end;
     378          //ShowMessage(IntToStr(Expressions.Count));
    373379          with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do begin
     380            CommonBlock := Self.CommonBlock;
    374381            SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    375382          end;
     
    386393            TExpression(Expressions[I - 1]).SubItems[1] := Expressions[I];
    387394            TExpression(Expressions[I + 1]).SubItems[0] := Expressions[I];
    388             Expressions.Delete(I);
     395            //Expressions.Delete(I);
    389396          end else Inc(I);
    390397      end;
    391398    end;
    392399  end;
    393   Result := TExpression(TExpression(Expressions[0]).SubItems[1]);
    394   TExpression(Expressions[0]).SubItems[1] := nil;
     400  Assign(TExpression(TExpression(Expressions.First).SubItems[1]));
     401  TExpression(Expressions.First).SubItems[1] := nil;
     402  //ShowMessage(IntToStr(Expressions.Count));
    395403  TExpression(Expressions[1]).SubItems[0] := nil;
    396404  Expressions.Destroy;
  • branches/DelphiToC/DelphiToC.lpi

    r38 r39  
    4444        <TopLine Value="3"/>
    4545        <CursorPos X="39" Y="12"/>
    46         <UsageCount Value="54"/>
     46        <UsageCount Value="56"/>
    4747        <Loaded Value="True"/>
    4848      </Unit0>
     
    5656        <EditorIndex Value="6"/>
    5757        <WindowIndex Value="0"/>
    58         <TopLine Value="42"/>
    59         <CursorPos X="17" Y="49"/>
    60         <UsageCount Value="54"/>
     58        <TopLine Value="10"/>
     59        <CursorPos X="46" Y="23"/>
     60        <UsageCount Value="56"/>
    6161        <Loaded Value="True"/>
    6262        <LoadedDesigner Value="True"/>
     
    6969        <TopLine Value="1"/>
    7070        <CursorPos X="1" Y="1"/>
    71         <UsageCount Value="54"/>
     71        <UsageCount Value="56"/>
    7272      </Unit2>
    7373      <Unit3>
     
    7777        <EditorIndex Value="4"/>
    7878        <WindowIndex Value="0"/>
    79         <TopLine Value="189"/>
    80         <CursorPos X="14" Y="205"/>
    81         <UsageCount Value="54"/>
     79        <TopLine Value="470"/>
     80        <CursorPos X="3" Y="483"/>
     81        <UsageCount Value="56"/>
    8282        <Loaded Value="True"/>
    8383      </Unit3>
     
    8888        <EditorIndex Value="8"/>
    8989        <WindowIndex Value="0"/>
    90         <TopLine Value="1"/>
    91         <CursorPos X="14" Y="9"/>
    92         <UsageCount Value="54"/>
     90        <TopLine Value="10"/>
     91        <CursorPos X="73" Y="9"/>
     92        <UsageCount Value="56"/>
    9393        <Loaded Value="True"/>
    9494      </Unit4>
     
    100100        <TopLine Value="1"/>
    101101        <CursorPos X="1" Y="1"/>
    102         <UsageCount Value="54"/>
     102        <UsageCount Value="56"/>
    103103      </Unit5>
    104104      <Unit6>
     
    109109        <TopLine Value="1"/>
    110110        <CursorPos X="1" Y="1"/>
    111         <UsageCount Value="54"/>
     111        <UsageCount Value="56"/>
    112112      </Unit6>
    113113      <Unit7>
     
    119119        <TopLine Value="3"/>
    120120        <CursorPos X="3" Y="8"/>
    121         <UsageCount Value="54"/>
     121        <UsageCount Value="56"/>
    122122        <Loaded Value="True"/>
    123123      </Unit7>
     
    129129        <EditorIndex Value="0"/>
    130130        <WindowIndex Value="0"/>
    131         <TopLine Value="75"/>
    132         <CursorPos X="47" Y="96"/>
    133         <UsageCount Value="54"/>
     131        <TopLine Value="382"/>
     132        <CursorPos X="37" Y="396"/>
     133        <UsageCount Value="56"/>
    134134        <Loaded Value="True"/>
    135135      </Unit8>
     
    139139        <TopLine Value="1"/>
    140140        <CursorPos X="1" Y="1"/>
    141         <UsageCount Value="7"/>
     141        <UsageCount Value="6"/>
    142142        <DefaultSyntaxHighlighter Value="LFM"/>
    143143      </Unit9>
     
    147147        <EditorIndex Value="5"/>
    148148        <WindowIndex Value="0"/>
    149         <TopLine Value="67"/>
    150         <CursorPos X="17" Y="80"/>
    151         <UsageCount Value="27"/>
     149        <TopLine Value="68"/>
     150        <CursorPos X="14" Y="90"/>
     151        <UsageCount Value="28"/>
    152152        <Loaded Value="True"/>
    153153      </Unit10>
     
    166166        <TopLine Value="55"/>
    167167        <CursorPos X="7" Y="68"/>
    168         <UsageCount Value="10"/>
     168        <UsageCount Value="11"/>
    169169        <Loaded Value="True"/>
    170170      </Unit12>
     
    175175        <TopLine Value="139"/>
    176176        <CursorPos X="16" Y="146"/>
    177         <UsageCount Value="10"/>
     177        <UsageCount Value="11"/>
    178178        <Loaded Value="True"/>
    179179      </Unit13>
     
    184184        <TopLine Value="934"/>
    185185        <CursorPos X="10" Y="947"/>
    186         <UsageCount Value="10"/>
     186        <UsageCount Value="11"/>
    187187        <Loaded Value="True"/>
    188188      </Unit14>
     
    191191      <Position1>
    192192        <Filename Value="Analyze\UPascalParser.pas"/>
    193         <Caret Line="274" Column="1" TopLine="255"/>
     193        <Caret Line="395" Column="1" TopLine="388"/>
    194194      </Position1>
    195195      <Position2>
    196196        <Filename Value="Analyze\UPascalParser.pas"/>
    197         <Caret Line="275" Column="1" TopLine="258"/>
     197        <Caret Line="389" Column="1" TopLine="384"/>
    198198      </Position2>
    199199      <Position3>
    200200        <Filename Value="Analyze\UPascalParser.pas"/>
    201         <Caret Line="284" Column="1" TopLine="271"/>
     201        <Caret Line="387" Column="1" TopLine="382"/>
    202202      </Position3>
    203203      <Position4>
    204         <Filename Value="Analyze\UPascalParser.pas"/>
    205         <Caret Line="288" Column="1" TopLine="271"/>
     204        <Filename Value="UPascalSource.pas"/>
     205        <Caret Line="478" Column="23" TopLine="470"/>
    206206      </Position4>
    207207      <Position5>
    208208        <Filename Value="Analyze\UPascalParser.pas"/>
    209         <Caret Line="344" Column="1" TopLine="331"/>
     209        <Caret Line="392" Column="39" TopLine="382"/>
    210210      </Position5>
    211211      <Position6>
    212212        <Filename Value="Analyze\UPascalParser.pas"/>
    213         <Caret Line="345" Column="1" TopLine="331"/>
     213        <Caret Line="393" Column="1" TopLine="382"/>
    214214      </Position6>
    215215      <Position7>
    216216        <Filename Value="Analyze\UPascalParser.pas"/>
    217         <Caret Line="270" Column="25" TopLine="251"/>
     217        <Caret Line="394" Column="1" TopLine="382"/>
    218218      </Position7>
    219219      <Position8>
    220220        <Filename Value="Analyze\UPascalParser.pas"/>
    221         <Caret Line="384" Column="10" TopLine="365"/>
     221        <Caret Line="395" Column="1" TopLine="382"/>
    222222      </Position8>
    223223      <Position9>
    224224        <Filename Value="Analyze\UPascalParser.pas"/>
    225         <Caret Line="269" Column="9" TopLine="255"/>
     225        <Caret Line="389" Column="1" TopLine="382"/>
    226226      </Position9>
    227227      <Position10>
    228228        <Filename Value="Analyze\UPascalParser.pas"/>
    229         <Caret Line="287" Column="29" TopLine="273"/>
     229        <Caret Line="387" Column="1" TopLine="382"/>
    230230      </Position10>
    231231      <Position11>
    232232        <Filename Value="Analyze\UPascalParser.pas"/>
    233         <Caret Line="95" Column="24" TopLine="86"/>
     233        <Caret Line="388" Column="1" TopLine="382"/>
    234234      </Position11>
    235235      <Position12>
    236236        <Filename Value="Analyze\UPascalParser.pas"/>
    237         <Caret Line="348" Column="24" TopLine="335"/>
     237        <Caret Line="389" Column="1" TopLine="382"/>
    238238      </Position12>
    239239      <Position13>
    240240        <Filename Value="Analyze\UPascalParser.pas"/>
    241         <Caret Line="102" Column="24" TopLine="99"/>
     241        <Caret Line="400" Column="1" TopLine="382"/>
    242242      </Position13>
    243243      <Position14>
    244         <Filename Value="Analyze\UPascalParser.pas"/>
    245         <Caret Line="99" Column="38" TopLine="99"/>
     244        <Filename Value="UPascalSource.pas"/>
     245        <Caret Line="485" Column="1" TopLine="470"/>
    246246      </Position14>
    247247      <Position15>
    248248        <Filename Value="Analyze\UPascalParser.pas"/>
    249         <Caret Line="75" Column="79" TopLine="74"/>
     249        <Caret Line="392" Column="1" TopLine="382"/>
    250250      </Position15>
    251251      <Position16>
    252252        <Filename Value="Analyze\UPascalParser.pas"/>
    253         <Caret Line="102" Column="24" TopLine="88"/>
     253        <Caret Line="393" Column="1" TopLine="382"/>
    254254      </Position16>
    255255      <Position17>
    256         <Filename Value="E:\Programy\Lazarus\fpc\2.4.0\source\rtl\objpas\sysutils\sysutils.inc"/>
    257         <Caret Line="146" Column="16" TopLine="139"/>
     256        <Filename Value="Analyze\UPascalParser.pas"/>
     257        <Caret Line="394" Column="1" TopLine="382"/>
    258258      </Position17>
    259259      <Position18>
    260260        <Filename Value="Analyze\UPascalParser.pas"/>
    261         <Caret Line="99" Column="47" TopLine="89"/>
     261        <Caret Line="395" Column="1" TopLine="382"/>
    262262      </Position18>
    263263      <Position19>
    264264        <Filename Value="Analyze\UPascalParser.pas"/>
    265         <Caret Line="75" Column="37" TopLine="74"/>
     265        <Caret Line="389" Column="1" TopLine="382"/>
    266266      </Position19>
    267267      <Position20>
    268268        <Filename Value="Analyze\UPascalParser.pas"/>
    269         <Caret Line="96" Column="54" TopLine="75"/>
     269        <Caret Line="387" Column="1" TopLine="382"/>
    270270      </Position20>
    271271      <Position21>
    272272        <Filename Value="Analyze\UPascalParser.pas"/>
    273         <Caret Line="97" Column="52" TopLine="92"/>
     273        <Caret Line="388" Column="1" TopLine="382"/>
    274274      </Position21>
    275275      <Position22>
    276276        <Filename Value="Analyze\UPascalParser.pas"/>
    277         <Caret Line="720" Column="47" TopLine="707"/>
     277        <Caret Line="389" Column="1" TopLine="382"/>
    278278      </Position22>
    279279      <Position23>
    280280        <Filename Value="Analyze\UPascalParser.pas"/>
    281         <Caret Line="97" Column="3" TopLine="84"/>
     281        <Caret Line="387" Column="1" TopLine="382"/>
    282282      </Position23>
    283283      <Position24>
    284284        <Filename Value="Analyze\UPascalParser.pas"/>
    285         <Caret Line="720" Column="58" TopLine="707"/>
     285        <Caret Line="388" Column="1" TopLine="382"/>
    286286      </Position24>
    287287      <Position25>
    288288        <Filename Value="Analyze\UPascalParser.pas"/>
    289         <Caret Line="95" Column="52" TopLine="91"/>
     289        <Caret Line="400" Column="1" TopLine="382"/>
    290290      </Position25>
    291291      <Position26>
    292         <Filename Value="Analyze\UPascalParser.pas"/>
    293         <Caret Line="778" Column="33" TopLine="765"/>
     292        <Filename Value="UPascalSource.pas"/>
     293        <Caret Line="479" Column="18" TopLine="470"/>
    294294      </Position26>
    295295      <Position27>
    296         <Filename Value="Analyze\UPascalParser.pas"/>
    297         <Caret Line="97" Column="3" TopLine="84"/>
     296        <Filename Value="UPascalSource.pas"/>
     297        <Caret Line="481" Column="1" TopLine="470"/>
    298298      </Position27>
    299299      <Position28>
    300         <Filename Value="Analyze\UPascalParser.pas"/>
    301         <Caret Line="721" Column="69" TopLine="708"/>
     300        <Filename Value="UPascalSource.pas"/>
     301        <Caret Line="482" Column="1" TopLine="470"/>
    302302      </Position28>
    303303      <Position29>
    304         <Filename Value="Analyze\UPascalParser.pas"/>
    305         <Caret Line="782" Column="62" TopLine="770"/>
     304        <Filename Value="UPascalSource.pas"/>
     305        <Caret Line="484" Column="1" TopLine="470"/>
    306306      </Position29>
    307307      <Position30>
    308         <Filename Value="Analyze\UPascalParser.pas"/>
    309         <Caret Line="829" Column="64" TopLine="816"/>
     308        <Filename Value="UPascalSource.pas"/>
     309        <Caret Line="483" Column="3" TopLine="470"/>
    310310      </Position30>
    311311    </JumpHistory>
     
    347347  </CompilerOptions>
    348348  <Debugging>
    349     <BreakPoints Count="2">
     349    <BreakPoints Count="1">
    350350      <Item1>
    351351        <Source Value="Analyze\UPascalParser.pas"/>
    352         <Line Value="409"/>
     352        <Line Value="392"/>
    353353      </Item1>
    354       <Item2>
    355         <Source Value="Analyze\UPascalParser.pas"/>
    356         <Line Value="275"/>
    357       </Item2>
    358354    </BreakPoints>
    359355    <Exceptions Count="3">
  • branches/DelphiToC/UPascalCompiler.pas

    r36 r39  
    77uses
    88  SysUtils, Variants, Classes, Graphics, Controls, Forms,
    9   Dialogs, StdCtrls, UPascalSource, UCodeProducer, UPascalParser, UAssemblerSource,
     9  Dialogs, UPascalSource, UCodeProducer, UPascalParser, UAssemblerSource,
    1010  UCSource;
    1111
  • branches/DelphiToC/UPascalSource.pas

    r38 r39  
    77uses
    88  SysUtils, Variants, Classes, Graphics, Controls, Forms,
    9   Dialogs, StdCtrls, Contnrs;
     9  Dialogs, Contnrs;
    1010
    1111type
     
    200200  end;
    201201
     202  { TExpression }
     203
    202204  TExpression = class
    203205    CommonBlock: TCommonBlock;
     
    211213    constructor Create;
    212214    destructor Destroy; override;
     215    procedure Assign(Source: TExpression);
    213216  end;
    214217
     
    310313
    311314destructor TConstantList.Destroy;
    312 var
    313   I: Integer;
    314 begin
    315   for I := 0 to Count - 1 do
    316     TConstant(Items[I]).Free;
     315begin
    317316  inherited;
    318317end;
     
    394393
    395394destructor TTypeList.Destroy;
    396 var
    397   I: Integer;
    398 begin
    399   for I := 0 to Count - 1 do
    400     TType(Items[I]).Free;
     395begin
    401396  inherited;
    402397end;
     
    430425  while (I < Count) and (TVariable(Items[I]).Name <> Name) do Inc(I);
    431426  if I < Count then Result := TVariable(Items[I]) else begin
    432     if Assigned(Parent.Parent) then Result := Parent.Parent.Variables.Search(Name)
    433       else begin
    434         Result := nil;
    435       end;
     427    if Assigned(Parent.Parent) then
     428      Result := Parent.Parent.Variables.Search(Name)
     429      else Result := nil;
    436430  end;
    437431end;
     
    473467  SubItems := TExpressionList.Create;
    474468  SubItems.Count := 2;
     469  SubItems.OwnsObjects := False;
    475470end;
    476471
     
    479474  SubItems.Free;
    480475  inherited;
     476end;
     477
     478procedure TExpression.Assign(Source: TExpression);
     479begin
     480  CommonBlock := Source.CommonBlock;
     481  NodeType := Source.NodeType;
     482  Method := Source.Method;
     483  Value := Source.Value;
     484  Associated := Source.Associated;
     485  OperatorName := Source.OperatorName;
     486  Variable := Source.Variable;
     487  SubItems.Assign(Source.SubItems);
    481488end;
    482489
     
    503510
    504511destructor TExpressionList.Destroy;
    505 var
    506   I: Integer;
    507 begin
    508   for I := 0 to Count - 1 do
    509     TExpression(Items[I]).Free;
     512begin
    510513  inherited;
    511514end;
     
    514517
    515518destructor TParameterList.Destroy;
    516 var
    517   I: Integer;
    518 begin
    519   for I := 0 to Count - 1 do
    520     TParameter(Items[I]).Free;
     519begin
    521520  inherited;
    522521end;
Note: See TracChangeset for help on using the changeset viewer.