Ignore:
Timestamp:
Nov 10, 2009, 8:19:41 AM (15 years ago)
Author:
george
Message:
  • Upraveno: Lepší zpracování parametrů procedůr.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/Void/UModel.pas

    r13 r14  
    99
    1010type
     11  TValueType = (vtVariable, vtNumber, vtString, vtFloat, vtChar);
     12
    1113  TType = class
    1214    Name: string;
     
    1921  end;
    2022
     23  TVariableValue = class
     24    ValueType: TValueType;
     25    VariableDef: TVariable;
     26    StringConstant: string;
     27    NumberConstant: Integer;
     28    FloatConstant: Double;
     29    CharConstant: Char;
     30  end;
     31
    2132  TCommand = class
    2233    Name: string;
    23     Parameters: TStringList;
     34    Parameters: TList;
    2435    constructor Create;
    2536    destructor Destroy; override;
     
    3546  TProcedure = class
    3647    Name: string;
    37     Parameters: TStringList;
     48    Parameters: TList;
    3849    BeginEnd: TBeginEnd;
    3950    constructor Create;
    4051    destructor Destroy; override;
    4152  end;
    42 
    43   { TModule }
    4453
    4554  TModule = class
     
    119128constructor TCommand.Create;
    120129begin
    121   Parameters := TStringList.Create;
     130  Parameters := TList.Create;
    122131end;
    123132
    124133destructor TCommand.Destroy;
    125 begin
     134var
     135  I: Integer;
     136begin
     137  for I := 0 to Parameters.Count - 1 do
     138    TVariableValue(Parameters[I]).Destroy;
    126139  Parameters.Destroy;
    127140  inherited Destroy;
     
    131144begin
    132145  BeginEnd := TBeginEnd.Create;
    133   Parameters := TStringList.Create;
     146  Parameters := TList.Create;
    134147end;
    135148
    136149destructor TProcedure.Destroy;
    137 begin
     150var
     151  I: Integer;
     152begin
     153  for I := 0 to Parameters.Count - 1 do
     154    TVariableValue(Parameters[I]).Destroy;
    138155  Parameters.Destroy;
    139156  BeginEnd.Destroy;
     
    173190begin
    174191  I := 0;
    175   while (I < Variables.Count) and (TVariable(Variables[I]).Name <> AName) do
     192  while (I < Variables.Count) and (LowerCase(TVariable(Variables[I]).Name) <> LowerCase(AName)) do
    176193    Inc(I);
    177194  if I < Variables.Count then Result := Variables[I] else Result := nil;
     
    183200begin
    184201  I := 0;
    185   while (I < Procedures.Count) and (TProcedure(Procedures[I]).Name <> AName) do
     202  while (I < Procedures.Count) and (LowerCase(TProcedure(Procedures[I]).Name) <> LowerCase(AName)) do
    186203    Inc(I);
    187204  if I < Procedures.Count then Result := Procedures[I] else Result := nil;
     
    211228  with TProcedure(Procedures[Procedures.Add(TProcedure.Create)]) do begin
    212229    Name := 'WriteLn';
     230    with TVariable(Parameters[Parameters.Add(TVariable.Create)]) do begin
     231      Name := 'Text';
     232      VarType := FindTypeByName('String');
     233    end;
    213234  end;
    214235  with TProcedure(Procedures[Procedures.Add(TProcedure.Create)]) do begin
     
    236257begin
    237258  I := 0;
    238   while (I < Types.Count) and (TType(Types[I]).Name <> AName) do
     259  while (I < Types.Count) and (LowerCase(TType(Types[I]).Name) <> LowerCase(AName)) do
    239260    Inc(I);
    240261  if I < Types.Count then Result := Types[I] else Result := nil;
Note: See TracChangeset for help on using the changeset viewer.