Ignore:
Timestamp:
Apr 9, 2009, 11:04:41 AM (16 years ago)
Author:
george
Message:
  • Opraveno: Chyby v uvolňování paměti.
  • Opraveno: Program po rozdělení do více souborů opět funguje jako dříve.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DelphiToC/UPascalParser.pas

    r13 r14  
    1212  TPascalParser = class
    1313  private
    14     CodePosition: Integer;
    1514    ProgramCode: TProgram;
    1615    FOnErrorMessage: TOnErrorMessage;
    1716    procedure ErrorMessage(Text: string);
    1817  public
     18    CodePosition: Integer;
    1919    SourceCode: TStringList;
    2020    function IsAlphanumeric(Character: Char): Boolean;
     
    3232    procedure ParseModuleUnit(Module: TModule);
    3333    procedure ParseModuleProgram(Module: TModule);
    34 
    3534    procedure ParseFunction(AFunction: TFunction);
    3635    procedure ParseVariableList(VariableList: TVariableList);
     
    207206begin
    208207  with AProgram do begin
    209   for I := 0 to Modules.Count - 1 do
    210     TModule(Modules[I]).Clear;
    211   Modules.Clear;
    212   with TModule(Modules[Modules.Add(TModule.Create)]) do begin
    213     Name := 'main';
    214     with TType(Types[Types.Add(TType.Create)]) do begin
    215       Name := 'byte';
    216       Size := 1;
    217       UsedType := nil;
    218     end;
    219   end;
     208    for I := 0 to Modules.Count - 1 do
     209      TModule(Modules[I]).Clear;
     210    Modules.Clear;
     211    with TModule(Modules[Modules.Add(TModule.Create)]) do begin
     212      Name := 'main';
     213      with TType(Types[Types.Add(TType.Create)]) do begin
     214        Name := 'byte';
     215        Size := 1;
     216        UsedType := nil;
     217      end;
     218    end;
    220219    ParseModule(TModule(Modules[0]));
    221220  end;
     
    294293  Constant: TConstant;
    295294//  Brackets: Integer;
    296   Expressions: TList; // TList<TExpression>;
     295  Expressions: TExpressionList;
    297296  I: Integer;
    298297  II: Integer;
    299298begin
    300   Expressions := TList.Create;
     299  Expressions := TExpressionList.Create;
    301300  Expressions.Add(TExpression.Create);
    302301  with CommonBlock do begin
     
    367366        end else
    368367        begin
    369                 with TExpression(Expressions[Expressions.Count - 1]) do begin
    370                   SubItems[1] := TExpression.Create;
    371                   TExpression(SubItems[1]).NodeType := ntConstant;
    372 
    373                   if Identifier[1] = '''' then begin
    374                     SetLength(TExpression(SubItems[1]).Value, Length(Identifier));
    375                     for I := 1 to Length(Identifier) do TExpression(SubItems[1]).Value[I - 1] := Byte(Identifier[I]);
    376                   end else begin
    377                     SetLength(TExpression(SubItems[1]).Value, 1);
    378                     TExpression(SubItems[1]).Value[0] := StrToInt(Identifier);
    379                   end;
    380                 end;
    381                 with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do begin
    382                   SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    383                 end;
     368          with TExpression(Expressions[Expressions.Count - 1]) do begin
     369            SubItems[1] := TExpression.Create;
     370            TExpression(SubItems[1]).NodeType := ntConstant;
     371
     372            if Identifier[1] = '''' then begin
     373              SetLength(TExpression(SubItems[1]).Value, Length(Identifier));
     374              for I := 1 to Length(Identifier) do TExpression(SubItems[1]).Value[I - 1] := Byte(Identifier[I]);
     375            end else begin
     376              SetLength(TExpression(SubItems[1]).Value, 1);
     377              TExpression(SubItems[1]).Value[0] := StrToInt(Identifier);
     378            end;
     379          end;
     380          with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do begin
     381            SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
     382          end;
    384383        end;
    385384    end;
     
    400399  end;
    401400  Result := TExpression(Expressions[0]).SubItems[1];
    402   TExpression(Expressions[0]).Destroy;
    403   TExpression(Expressions[1]).Destroy;
     401  TExpression(Expressions[0]).SubItems[1] := nil;
     402  TExpression(Expressions[1]).SubItems[0] := nil;
    404403  Expressions.Destroy;
    405404end;
     
    623622end;
    624623
    625 
    626 
    627 
    628 
    629 
    630 
    631624end.
Note: See TracChangeset for help on using the changeset viewer.