Changeset 78


Ignore:
Timestamp:
Oct 22, 2010, 11:34:06 AM (14 years ago)
Author:
george
Message:
  • Modified: Parsing type restructured.
  • Added: Partial subrange typ parsing.
Location:
branches/Transpascal
Files:
1 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • branches/Transpascal/Compiler/Analyze/UParser.pas

    r77 r78  
    5858    function IsIdentificator(Text: string): boolean;
    5959    function IsKeyword(Text: string): boolean;
     60    function IsString(Text: string): Boolean;
    6061    function IsOperator(Text: string): boolean;
    61     function ReadCode: string;
     62    function ReadToken: string;
    6263    function NextToken: string;
    6364    function NextTokenType: TTokenType;
     
    9798    // Recovery: try to find nearest same code
    9899    while (NextToken <> Code) and (NextTokenType <> ttEndOfFile) do
    99       ReadCode;
    100   end;
    101   ReadCode;
     100      ReadToken;
     101  end;
     102  ReadToken;
    102103end;
    103104
     
    141142    if Keywords[I] = Text then
    142143      Result := True;
     144end;
     145
     146function TBaseParser.IsString(Text: string): Boolean;
     147begin
     148
    143149end;
    144150
     
    364370end;
    365371
    366 function TBaseParser.ReadCode: string;
     372function TBaseParser.ReadToken: string;
    367373begin
    368374  if TokenIndex < Tokens.Count then begin
  • branches/Transpascal/Compiler/Analyze/UPascalParser.pas

    r77 r78  
    4141      AssignSymbol: string = '=');
    4242    function ParseType(TypeList: TTypeList; ExpectName: Boolean = True; AssignSymbol: string = '='): TType;
     43    function ParseTypeSubType(TypeList: TTypeList; Name: string; ExpectName: Boolean): TType;
     44    function ParseTypeBase(TypeList: TTypeList; Name: string): TType;
     45    function ParseTypePointer(TypeList: TTypeList; Name: string): TType;
    4346    function ParseTypeEnumeration(TypeList: TTypeList; Name: string): TType;
    4447    function ParseTypeRecord(TypeList: TTypeList; Name: string): TType;
     48    function ParseTypeClass(TypeList: TTypeList; Name: string): TType;
     49    function ParseTypeArray(TypeList: TTypeList; Name: string): TType;
     50    function ParseTypeSubRange(TypeList: TTypeList; Name: string): TType;
    4551    property OnGetSource: TGetSourceEvent read FOnGetSource
    4652      write FOnGetSource;
     
    6167  SFunctionNotDeclared = 'Function "%s" not declared.';
    6268  SUnknownProcName = 'Unknown proc name "%s".';
    63 
     69  SUnknownModuleType = 'Unknown module name "%s".';
     70  SInvalidConstruction = 'Invalid construction.';
    6471
    6572implementation
     
    8390        Parser.FileName := Name;
    8491        Parser.OnErrorMessage := OnErrorMessage;
    85         NewModule := Parser.ParseModule(ProgramCode);
    86         ProgramCode.Modules.Add(NewModule);
     92        //NewModule :=
     93        Parser.ParseModule(ProgramCode);
     94        //ProgramCode.Modules.Add(NewModule);
    8795        Result := True;
    8896      end else Result := False;
     
    127135      (((NextToken = ')') or (NextToken = ']'))) and not (NextTokenType = ttEndOfFile) do begin
    128136      IdentifierType := NextTokenType;
    129       Identifier := ReadCode;
     137      Identifier := ReadToken;
    130138      if Identifier = '(' then begin
    131139        // Subexpression
     
    305313        Result := TAssignment.Create;
    306314        TAssignment(Result).CommonBlock := SourceCode;
    307         IdentName := ReadCode;
     315        IdentName := ReadToken;
    308316        TAssignment(Result).Target := SourceCode.Variables.Search(IdentName);
    309317        Expect(':=');
     
    314322      if Assigned(SourceCode.Functions.Search(NextToken)) then begin
    315323        // Function call
    316         FunctionName := ReadCode;
     324        FunctionName := ReadToken;
    317325        Result := TFunctionCall.Create;
    318326        TFunctionCall(Result).CommonBlock := SourceCode;
     
    331339      end else begin
    332340        Result := nil;
    333         ErrorMessage(SUnknownIdentifier, [ReadCode], -1);
     341        ErrorMessage(SUnknownIdentifier, [ReadToken], -1);
    334342      end;
    335343    end else
     
    338346    else begin
    339347      Result := nil;
    340       ErrorMessage(SIllegalExpression, [ReadCode], -1);
     348      ErrorMessage(SIllegalExpression, [ReadToken], -1);
    341349    end;
    342350  end;
     
    352360    Result.ParentProgram := ProgramCode;
    353361    ParseUnit(TModuleUnit(Result));
    354   end else begin //if FNextToken = 'program' then begin
     362  end else
     363  if NextToken = 'program' then begin
    355364    Result := TModuleProgram.Create;
    356365    Result.ParentProgram := ProgramCode;
    357366    ParseProgram(TModuleProgram(Result));
    358   end;
     367  end else
     368    ErrorMessage(SUnknownModuleType, [NextToken]);
    359369end;
    360370
     
    366376    if NextToken = 'program' then begin
    367377      Expect('program');
    368       Name := ReadCode;
     378      Name := ReadToken;
    369379      Expect(';');
    370380    end else Name := '';
     
    385395  Expect('unit');
    386396  with Sourcecode do begin
    387     Name := ReadCode;
     397    Name := ReadToken;
    388398  end;
    389399  Expect(';');
     
    479489      else begin
    480490        ErrorMessage(SUnknownIdentifier, [NextToken], -1);
    481         ReadCode;
     491        ReadToken;
    482492      end;
    483493    end;
     
    502512      //ShowMessage(NextCode);
    503513      if NextToken = ';' then
    504         ReadCode;
     514        ReadToken;
    505515    end;
    506516    Expect('end');
     
    540550
    541551    // Read function name
    542     UseName := ReadCode;
     552    UseName := ReadToken;
    543553    UseType := SourceCode.Parent.Types.Search(UseName);
    544554    if Assigned(UseType) and ((UseType is TTypeRecord) or
    545555    (UseType is TTypeClass)) then begin
    546556      Expect('.');
    547       UseName := ReadCode;
     557      UseName := ReadToken;
    548558      if UseType is TTypeRecord then begin
    549559        UseFunction := TTypeRecord(UseType).CommonBlock.Functions.Search(UseName);
     
    569579      if FunctionType = ftFunction then begin
    570580        Expect(':');
    571         TypeName := ReadCode;
     581        TypeName := ReadToken;
    572582        NewValueType := Parent.Types.Search(TypeName);
    573583        if not Assigned(NewValueType) then
     
    615625          // while IsIdentificator(NextCode) do begin
    616626          with TParameterList(Parameters) do begin
    617             VariableName := ReadCode;
     627            VariableName := ReadToken;
    618628            if VariableName = 'var' then begin
    619629            end else
     
    625635                while NextToken = ',' do begin
    626636                  Expect(',');
    627                   Identifiers.Add(ReadCode);
     637                  Identifiers.Add(ReadToken);
    628638                end;
    629639              end else
    630640                ErrorMessage(SRedefineIdentifier, [VariableName], -1);
    631641              Expect(':');
    632               TypeName := ReadCode;
     642              TypeName := ReadToken;
    633643              UseType := Parent.Types.Search(TypeName);
    634644              if not Assigned(UseType) then
     
    677687  begin
    678688    Expect('for');
    679     VariableName := ReadCode;
     689    VariableName := ReadToken;
    680690    ControlVariable := SourceCode.CommonBlock.Variables.Search(VariableName);
    681691    if not Assigned(ControlVariable) then
     
    708718    while IsIdentificator(NextToken) and (NextTokenType <> ttEndOfFile) do begin
    709719      Identifiers.Clear;
    710       VariableName := ReadCode;
     720      VariableName := ReadToken;
    711721      Variable := Search(VariableName);
    712722      if not Assigned(Variable) then begin
     
    714724        while NextToken = ',' do begin
    715725          Expect(',');
    716           Identifiers.Add(ReadCode);
     726          Identifiers.Add(ReadToken);
    717727        end;
    718728      end else
    719729        ErrorMessage(SRedefineIdentifier, [VariableName], -1);
    720730      Expect(':');
    721       TypeName := ReadCode;
     731      TypeName := ReadToken;
    722732      NewValueType := Parent.Types.Search(TypeName);
    723733      if NewValueType = nil then
     
    763773  with SourceCode do begin
    764774    while IsIdentificator(NextToken) do begin
    765       ConstantName := ReadCode;
     775      ConstantName := ReadToken;
    766776      Constant := Search(ConstantName);
    767777      if not Assigned(Constant) then begin
     
    769779        while NextToken = ',' do begin
    770780          Expect(',');
    771           Identifiers.Add(ReadCode);
     781          Identifiers.Add(ReadToken);
    772782        end;
    773783      end else
     
    775785      if NextToken = ':' then begin
    776786        Expect(':');
    777         TypeName := ReadCode;
     787        TypeName := ReadToken;
    778788        NewValueType := Parent.Types.Search(TypeName);
    779789      end;
    780790      Expect('=');
    781       ConstantValue := ReadCode;
     791      ConstantValue := ReadToken;
    782792      Expect(';');
    783793
     
    828838  begin
    829839    if ExpectName then begin
    830       Name := ReadCode;
     840      Name := ReadToken;
    831841      Expect(AssignSymbol);
    832842    end;
    833     if NextToken = '(' then begin
    834       // Enumeration
    835       Result := ParseTypeEnumeration(TypeList, Name);
    836     end else
    837     if NextToken = 'record' then begin
    838       Result := ParseTypeRecord(TypeList, Name);
    839     end else
    840     if NextToken = 'class' then begin
    841       Expect('class');
    842       Result := TTypeClass.Create;
    843       TTypeClass(Result).Parent := TypeList;
    844       TTypeClass(Result).Name := Name;
    845       if NextToken <> ';' then begin
    846         while (NextToken <> 'end') and (NextTokenType <> ttEndOfFile) do
    847         begin
    848           TTypeClass(Result).Items.Add(ParseType(TypeList, True, ':'));
    849           Expect(';');
    850         end;
    851         Expect('end');
    852       end;
    853     end else
    854     if NextToken = 'array' then begin
    855       Expect('array');
    856       Result := TTypeArray.Create;
    857       TTypeArray(Result).Parent := TypeList;
    858       TType(Result).Name := Name;
    859       if NextToken = '[' then begin
    860         Expect('[');
    861         TypeName := NextToken;
    862         TTypeArray(Result).IndexType := ParseType(TypeList, False);
    863         if not Assigned(TTypeArray(Result).IndexType) then
    864           ErrorMessage(SUndefinedType, [TypeName], -1);
    865         Expect(']');
    866       end;
    867       Expect('of');
    868       TypeName := NextToken;
    869       TTypeArray(Result).ItemType := ParseType(TypeList, False);
    870       if not Assigned(TTypeArray(Result).ItemType) then
    871         ErrorMessage(SUndefinedType, [TypeName], -1);
    872     end else
    873     if NextToken = '^' then begin
    874       // Pointer
    875       Expect('^');
    876       Result := TTypePointer.Create;
    877       TTypePointer(Result).Parent := TypeList;
    878       TTypePointer(Result).Name := Name;
    879       TTypePointer(Result).UsedType := ParseType(TypeList, False);
    880     end else
    881     if NextToken = 'type' then begin
     843    Result := ParseTypeEnumeration(TypeList, Name);
     844    if not Assigned(Result) then Result := ParseTypeRecord(TypeList, Name);
     845    if not Assigned(Result) then Result := ParseTypeClass(TypeList, Name);
     846    if not Assigned(Result) then Result := ParseTypeArray(TypeList, Name);
     847    if not Assigned(Result) then Result := ParseTypePointer(TypeList, Name);
     848    if not Assigned(Result) then Result := ParseTypeBase(TypeList, Name);
     849    if not Assigned(Result) then Result := ParseTypeSubType(TypeList, Name, ExpectName);
     850    if not Assigned(Result) then Result := ParseTypeSubRange(TypeList, Name);
     851    if not Assigned(Result) then
     852      ErrorMessage(SInvalidConstruction, []);
     853  end;
     854end;
     855
     856function TPascalParser.ParseTypeSubType(TypeList: TTypeList; Name: string;
     857  ExpectName: Boolean): TType;
     858var
     859  TypeName: string;
     860begin
     861      // Use existed type
     862      if NextTokenType = ttIdentifier then begin
     863        TypeName := ReadToken;
     864        if ExpectName then begin
     865          Result := TType.Create;
     866          TType(Result).Parent := TypeList;
     867          TType(Result).Name := Name;
     868          TType(Result).UsedType := TypeList.Search(TypeName);
     869          if not Assigned(TType(Result).UsedType) then
     870            ErrorMessage(SUndefinedType, [TypeName], -1);
     871        end else begin
     872          TType(Result) := TypeList.Search(TypeName);
     873          if not Assigned(TType(Result)) then
     874            ErrorMessage(SUndefinedType, [TypeName], -1);
     875        end;
     876      end else Result := nil;
     877end;
     878
     879function TPascalParser.ParseTypeBase(TypeList: TTypeList; Name: string): TType;
     880begin
    882881      // Buildin base type construction
    883       Expect('type');
    884       Result := TTypeInherited.Create;
    885       TTypeInherited(Result).Parent := TypeList;
    886       TTypeInherited(Result).Name := Name;
    887       if NextToken = '(' then begin
    888         Expect('(');
    889         TTypeInherited(Result).UsedType := ParseType(TypeList, False);
    890         Expect(')');
    891       end else TTypeInherited(Result).UsedType := nil;
    892     end else begin
    893       // Use existed type
    894       TypeName := ReadCode;
    895       if ExpectName then begin
    896         Result := TType.Create;
    897         TType(Result).Parent := TypeList;
    898         TType(Result).Name := Name;
    899         TType(Result).UsedType := TypeList.Search(TypeName);
    900         if not Assigned(TType(Result).UsedType) then
    901           ErrorMessage(SUndefinedType, [TypeName], -1);
    902       end else begin
    903         TType(Result) := TypeList.Search(TypeName);
    904         if not Assigned(TType(Result)) then
    905           ErrorMessage(SUndefinedType, [TypeName], -1);
    906       end;
    907     end;
    908   end;
     882      if NextToken = 'type' then begin
     883        Expect('type');
     884        Result := TTypeInherited.Create;
     885        TTypeInherited(Result).Parent := TypeList;
     886        TTypeInherited(Result).Name := Name;
     887        if NextToken = '(' then begin
     888          Expect('(');
     889          TTypeInherited(Result).UsedType := ParseType(TypeList, False);
     890          Expect(')');
     891        end else TTypeInherited(Result).UsedType := nil;
     892      end else Result := nil;
     893end;
     894
     895function TPascalParser.ParseTypePointer(TypeList: TTypeList; Name: string
     896  ): TType;
     897begin
     898      if NextToken = '^' then begin
     899        Expect('^');
     900        Result := TTypePointer.Create;
     901        TTypePointer(Result).Parent := TypeList;
     902        TTypePointer(Result).Name := Name;
     903        TTypePointer(Result).UsedType := ParseType(TypeList, False);
     904      end else Result := nil;
    909905end;
    910906
    911907function TPascalParser.ParseTypeEnumeration(TypeList: TTypeList; Name: string): TType;
    912908begin
     909  if NextToken = '(' then begin
    913910      Expect('(');
    914911      Result := TTypeEnumeration.Create;
     
    917914      with TTypeEnumeration(Result) do
    918915      with TEnumItem(Items[Items.Add(TEnumItem.Create)]) do begin
    919         Name := ReadCode;
     916        Name := ReadToken;
    920917        if (NextToken = '=') and (NextTokenType = ttConstantNumber) then begin
    921918          Expect('=');
    922           Index := StrToInt(ReadCode);
     919          Index := StrToInt(ReadToken);
    923920        end;
    924921      end;
     
    928925        with TTypeEnumeration(Result) do
    929926        with TEnumItem(Items[Items.Add(TEnumItem.Create)]) do begin
    930           Name := ReadCode;
     927          Name := ReadToken;
    931928          if (NextToken = '=') and (NextTokenType = ttConstantNumber) then begin
    932929            Expect('=');
    933             Index := StrToInt(ReadCode);
     930            Index := StrToInt(ReadToken);
    934931          end;
    935932        end;
    936933      end;
    937934      Expect(')');
     935  end else Result := nil;
    938936end;
    939937
     
    946944  SectionType: TSectionType;
    947945begin
     946  if NextToken = 'record' then begin
    948947  SectionType := stVar;
    949948  Visibility := tvPublic;
     
    990989          if IsIdentificator(NextToken) then
    991990            ParseVariableList(TTypeRecord(Result).CommonBlock.Variables, True)
    992             else ReadCode;
     991            else ReadToken;
    993992          //TTypeRecord(Result).CommonBlock.Types.Add(ParseType(TypeList, True, ':'));
    994993          //TType(TTypeRecord(Result).CommonBlock.Types.Last).Visibility := Visibility;
     
    10011000  end;
    10021001  Expect('end');
     1002  end else Result := nil;
     1003end;
     1004
     1005function TPascalParser.ParseTypeClass(TypeList: TTypeList; Name: string
     1006  ): TType;
     1007begin
     1008  if NextToken = 'class' then begin
     1009      Expect('class');
     1010      Result := TTypeClass.Create;
     1011      TTypeClass(Result).Parent := TypeList;
     1012      TTypeClass(Result).Name := Name;
     1013      if NextToken <> ';' then begin
     1014        while (NextToken <> 'end') and (NextTokenType <> ttEndOfFile) do
     1015        begin
     1016          TTypeClass(Result).Items.Add(ParseType(TypeList, True, ':'));
     1017          Expect(';');
     1018        end;
     1019        Expect('end');
     1020      end;
     1021  end else Result := nil;
     1022end;
     1023
     1024function TPascalParser.ParseTypeArray(TypeList: TTypeList; Name: string
     1025  ): TType;
     1026var
     1027  UseName: string;
     1028  UseType: TType;
     1029begin
     1030  if NextToken = 'array' then begin
     1031  Expect('array');
     1032  Result := TTypeArray.Create;
     1033  TTypeArray(Result).Parent := TypeList;
     1034  TType(Result).Name := Name;
     1035  if NextToken = '[' then begin
     1036    Expect('[');
     1037    UseName := NextToken;
     1038    if NextTokenType = ttIdentifier then begin
     1039      UseType := TypeList.Parent.Types.Search(UseName);
     1040      if not Assigned(TTypeArray(Result).IndexType) then
     1041        ErrorMessage(SUndefinedType, [UseName], -1) else
     1042        TTypeArray(Result).IndexType := UseType;
     1043    end else
     1044    if NextTokenType = ttConstantNumber then begin
     1045
     1046
     1047    end;
     1048    Expect(']');
     1049  end;
     1050  Expect('of');
     1051  UseName := NextToken;
     1052  TTypeArray(Result).ItemType := ParseType(TypeList, False);
     1053  if not Assigned(TTypeArray(Result).ItemType) then
     1054    ErrorMessage(SUndefinedType, [UseName], -1);
     1055  end else Result := nil;
     1056end;
     1057
     1058function TPascalParser.ParseTypeSubRange(TypeList: TTypeList; Name: string
     1059  ): TType;
     1060var
     1061  UseName: string;
     1062begin
     1063  if NextTokenType = ttConstantString then begin
     1064    Result := TTypeSubRange.Create;
     1065    TTypeSubRange(Result).Bottom := ReadToken;
     1066    Expect('..');
     1067    TTypeSubRange(Result).Top := ReadToken;
     1068  end else
     1069  if NextTokenType = ttConstantNumber then begin
     1070    Result := TTypeSubRange.Create;
     1071    TTypeSubRange(Result).Bottom := ReadToken;
     1072    Expect('..');
     1073    TTypeSubRange(Result).Top := ReadToken;
     1074  end else Result := nil;
    10031075end;
    10041076
     
    10221094  with TUsedModule(SourceCode.Items[SourceCode.Add(TUsedModule.Create)]) do
    10231095  begin
    1024     Name := ReadCode;
     1096    Name := ReadToken;
    10251097    if NextToken = 'in' then begin
    10261098      Expect('in');
    1027       Location := ReadCode;
     1099      Location := ReadToken;
    10281100    end else Location := Name + '.pas';
    10291101    Module := SourceCode.ParentModule.ParentProgram.Modules.Search(Name);
     
    10421114    with TUsedModule(SourceCode.Items[SourceCode.Add(TUsedModule.Create)]) do
    10431115    begin
    1044       Name := ReadCode;
     1116      Name := ReadToken;
    10451117      if NextToken = 'in' then begin
    10461118        Expect('in');
    1047         Location := ReadCode;
     1119        Location := ReadToken;
    10481120      end else Location := Name + '.pas';
    10491121      Module := SourceCode.ParentModule.ParentProgram.Modules.Search(Name);
  • branches/Transpascal/Compiler/USourceCode.pas

    r77 r78  
    170170  end;
    171171
     172  TTypeSubRange = class(TType)
     173    Bottom: Variant;
     174    Top: Variant;
     175  end;
     176
    172177  TTypeArray = class(TType)
    173178    IndexType: TType;
  • branches/Transpascal/Forms/UMainForm.lfm

    r66 r78  
    4545      Height = 21
    4646      Top = 2
    47       Width = 100
     47      Width = 135
    4848      ItemHeight = 13
    4949      ItemIndex = 1
     
    6060    end
    6161    object Button1: TButton
    62       Left = 101
     62      Left = 136
    6363      Height = 22
    6464      Top = 2
     
    6666      Action = ABuild
    6767      TabOrder = 1
     68    end
     69    object CheckBoxLogParsing: TCheckBox
     70      Left = 195
     71      Height = 17
     72      Top = 2
     73      Width = 105
     74      Caption = 'Log parsing to file'
     75      TabOrder = 2
    6876    end
    6977  end
     
    127135      Category = 'Project'
    128136      Caption = 'Close'
     137      OnExecute = AProjectCloseExecute
    129138    end
    130139    object ABuild: TAction
    131140      Category = 'Build'
    132141      Caption = 'Build'
    133       OnExecute = ButtonCompileClick
     142      OnExecute = ABuildExecute
    134143    end
    135144  end
  • branches/Transpascal/Forms/UMainForm.pas

    r77 r78  
    2929    ActionList1: TActionList;
    3030    Button1: TButton;
     31    CheckBoxLogParsing: TCheckBox;
    3132    ComboBoxTargetSelection: TComboBox;
    3233    CoolDockClient1: TCoolDockClient;
     
    4748    Splitter3: TSplitter;
    4849    ToolBar1: TToolBar;
     50    procedure AProjectCloseExecute(Sender: TObject);
    4951    procedure AProjectOpenExecute(Sender: TObject);
    5052    procedure AProjectSaveAsExecute(Sender: TObject);
     
    5355    procedure FormShow(Sender: TObject);
    5456    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    55     procedure ButtonCompileClick(Sender: TObject);
     57    procedure ABuildExecute(Sender: TObject);
    5658    procedure FormCreate(Sender: TObject);
    5759    procedure FormDestroy(Sender: TObject);
     
    8385{ TMainForm }
    8486
    85 procedure TMainForm.ButtonCompileClick(Sender: TObject);
     87procedure TMainForm.ABuildExecute(Sender: TObject);
    8688begin
    8789  // Compile project file
     90  if CheckBoxLogParsing.Checked then
     91     Compiler.Parser.OnDebugLog := CompilerDebugLog
     92     else Compiler.Parser.OnDebugLog := nil;
    8893  Compiler.ProducerType := TProducerType(ComboBoxTargetSelection.ItemIndex);
    8994  Compiler.Init;
     
    157162      ComboBoxTargetSelection.ItemIndex :=
    158163        ReadIntegerWithDefault('ProducerType', 0);
     164      CheckBoxLogParsing.Checked := ReadBoolWithDefault('LogParsing', False);
    159165    finally
    160166      Free;
     
    171177      WriteBool('ReopenLastOpenedFile', ReopenLastOpenedFile);
    172178      WriteInteger('ProducerType', ComboBoxTargetSelection.ItemIndex);
     179      WriteBool('LogParsing', CheckBoxLogParsing.Checked);
    173180    finally
    174181      Free;
     
    200207  DeleteFile(DebugLog.FileName);
    201208  Compiler := TCompiler.Create;
    202   Compiler.Parser.OnDebugLog := CompilerDebugLog;
    203209  Project := TProject.Create;
    204210  LastOpenedFiles := TLastOpenedList.Create;
     
    245251procedure TMainForm.ComboBox1Change(Sender: TObject);
    246252begin
    247   ButtonCompileClick(Self);
     253  ABuildExecute(Self);
    248254end;
    249255
     
    255261end;
    256262
     263procedure TMainForm.AProjectCloseExecute(Sender: TObject);
     264begin
     265  Close;
     266end;
     267
    257268procedure TMainForm.AProjectSaveAsExecute(Sender: TObject);
    258269begin
     
    264275procedure TMainForm.ComboBoxTargetSelectionChange(Sender: TObject);
    265276begin
    266   ButtonCompileClick(Self);
     277  ABuildExecute(Self);
    267278end;
    268279
  • branches/Transpascal/Transpascal.lpi

    r77 r78  
    2020      <StringTable ProductVersion=""/>
    2121    </VersionInfo>
     22    <BuildModes Count="1">
     23      <Item1 Name="default" Default="True"/>
     24    </BuildModes>
    2225    <PublishOptions>
    2326      <Version Value="2"/>
     
    5154        <IsPartOfProject Value="True"/>
    5255        <UnitName Value="Transpascal"/>
    53         <EditorIndex Value="6"/>
     56        <EditorIndex Value="7"/>
    5457        <WindowIndex Value="0"/>
    5558        <TopLine Value="1"/>
     
    6669        <ResourceBaseClass Value="Form"/>
    6770        <UnitName Value="UMainForm"/>
    68         <EditorIndex Value="5"/>
    69         <WindowIndex Value="0"/>
    70         <TopLine Value="195"/>
    71         <CursorPos X="34" Y="213"/>
     71        <EditorIndex Value="6"/>
     72        <WindowIndex Value="0"/>
     73        <TopLine Value="255"/>
     74        <CursorPos X="29" Y="267"/>
    7275        <UsageCount Value="215"/>
    7376        <Loaded Value="True"/>
     
    168171        <Filename Value="E:\Programy\Lazarus\fpc\2.4.0\source\rtl\objpas\classes\classesh.inc"/>
    169172        <WindowIndex Value="0"/>
    170         <TopLine Value="225"/>
    171         <CursorPos X="14" Y="259"/>
     173        <TopLine Value="591"/>
     174        <CursorPos X="3" Y="604"/>
    172175        <UsageCount Value="10"/>
    173176      </Unit13>
     
    208211        <Filename Value="Compiler\UCompiler.pas"/>
    209212        <UnitName Value="UCompiler"/>
    210         <IsVisibleTab Value="True"/>
    211213        <EditorIndex Value="3"/>
    212214        <WindowIndex Value="0"/>
    213         <TopLine Value="103"/>
    214         <CursorPos X="27" Y="117"/>
     215        <TopLine Value="1"/>
     216        <CursorPos X="62" Y="8"/>
    215217        <UsageCount Value="103"/>
    216218        <Loaded Value="True"/>
     
    219221        <Filename Value="Compiler\USourceCode.pas"/>
    220222        <UnitName Value="USourceCode"/>
    221         <EditorIndex Value="7"/>
    222         <WindowIndex Value="0"/>
    223         <TopLine Value="533"/>
    224         <CursorPos X="23" Y="553"/>
     223        <EditorIndex Value="8"/>
     224        <WindowIndex Value="0"/>
     225        <TopLine Value="162"/>
     226        <CursorPos X="1" Y="174"/>
    225227        <UsageCount Value="100"/>
    226228        <Loaded Value="True"/>
     
    229231        <Filename Value="Compiler\Analyze\UParser.pas"/>
    230232        <UnitName Value="UParser"/>
    231         <WindowIndex Value="0"/>
    232         <TopLine Value="81"/>
    233         <CursorPos X="49" Y="98"/>
     233        <EditorIndex Value="4"/>
     234        <WindowIndex Value="0"/>
     235        <TopLine Value="146"/>
     236        <CursorPos X="33" Y="147"/>
    234237        <UsageCount Value="103"/>
     238        <Loaded Value="True"/>
    235239      </Unit20>
    236240      <Unit21>
     
    317321        <TopLine Value="1756"/>
    318322        <CursorPos X="1" Y="1769"/>
    319         <UsageCount Value="21"/>
     323        <UsageCount Value="22"/>
    320324        <Loaded Value="True"/>
    321325      </Unit28>
     
    340344        <WindowIndex Value="0"/>
    341345        <TopLine Value="44"/>
    342         <CursorPos X="40" Y="49"/>
     346        <CursorPos X="19" Y="58"/>
    343347        <UsageCount Value="200"/>
    344348        <DefaultSyntaxHighlighter Value="Delphi"/>
     
    351355        <TopLine Value="285"/>
    352356        <CursorPos X="27" Y="298"/>
    353         <UsageCount Value="99"/>
     357        <UsageCount Value="100"/>
    354358        <Loaded Value="True"/>
    355359      </Unit32>
     
    373377        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    374378        <UnitName Value="UPascalParser"/>
     379        <IsVisibleTab Value="True"/>
    375380        <EditorIndex Value="0"/>
    376381        <WindowIndex Value="0"/>
    377         <TopLine Value="761"/>
    378         <CursorPos X="27" Y="771"/>
     382        <TopLine Value="1037"/>
     383        <CursorPos X="25" Y="1055"/>
    379384        <UsageCount Value="80"/>
    380385        <Loaded Value="True"/>
     
    442447        <TopLine Value="42"/>
    443448        <CursorPos X="42" Y="55"/>
    444         <UsageCount Value="65"/>
     449        <UsageCount Value="67"/>
    445450        <DefaultSyntaxHighlighter Value="Delphi"/>
    446451      </Unit43>
     
    463468        <Filename Value="Compiler\Produce\UProducerGCCC.pas"/>
    464469        <UnitName Value="UProducerGCCC"/>
    465         <EditorIndex Value="4"/>
     470        <EditorIndex Value="5"/>
    466471        <WindowIndex Value="0"/>
    467472        <TopLine Value="108"/>
    468473        <CursorPos X="3" Y="121"/>
    469         <UsageCount Value="10"/>
     474        <UsageCount Value="11"/>
    470475        <Loaded Value="True"/>
    471476      </Unit46>
     
    474479      <Position1>
    475480        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    476         <Caret Line="549" Column="1" TopLine="536"/>
     481        <Caret Line="840" Column="26" TopLine="828"/>
    477482      </Position1>
    478483      <Position2>
    479484        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    480         <Caret Line="564" Column="1" TopLine="551"/>
     485        <Caret Line="842" Column="23" TopLine="828"/>
    481486      </Position2>
    482487      <Position3>
    483488        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    484         <Caret Line="568" Column="1" TopLine="551"/>
     489        <Caret Line="844" Column="30" TopLine="828"/>
    485490      </Position3>
    486491      <Position4>
    487492        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    488         <Caret Line="585" Column="1" TopLine="572"/>
     493        <Caret Line="846" Column="21" TopLine="828"/>
    489494      </Position4>
    490495      <Position5>
    491496        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    492         <Caret Line="588" Column="1" TopLine="572"/>
     497        <Caret Line="890" Column="31" TopLine="873"/>
    493498      </Position5>
    494499      <Position6>
    495500        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
    496         <Caret Line="530" Column="32" TopLine="515"/>
     501        <Caret Line="43" Column="30" TopLine="29"/>
    497502      </Position6>
    498503      <Position7>
    499         <Filename Value="Transpascal.lpr"/>
    500         <Caret Line="18" Column="45" TopLine="7"/>
     504        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     505        <Caret Line="44" Column="30" TopLine="29"/>
    501506      </Position7>
    502507      <Position8>
    503         <Filename Value="Compiler\UCompiler.pas"/>
    504         <Caret Line="54" Column="29" TopLine="29"/>
     508        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     509        <Caret Line="846" Column="56" TopLine="839"/>
    505510      </Position8>
    506511      <Position9>
    507         <Filename Value="Compiler\UCompiler.pas"/>
    508         <Caret Line="11" Column="28" TopLine="1"/>
     512        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     513        <Caret Line="44" Column="27" TopLine="31"/>
    509514      </Position9>
    510515      <Position10>
    511         <Filename Value="Compiler\UCompiler.pas"/>
    512         <Caret Line="10" Column="17" TopLine="1"/>
     516        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     517        <Caret Line="849" Column="77" TopLine="831"/>
    513518      </Position10>
    514519      <Position11>
    515         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    516         <Caret Line="361" Column="27" TopLine="354"/>
     520        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     521        <Caret Line="859" Column="20" TopLine="848"/>
    517522      </Position11>
    518523      <Position12>
    519         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    520         <Caret Line="59" Column="1" TopLine="46"/>
     524        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     525        <Caret Line="865" Column="12" TopLine="851"/>
    521526      </Position12>
    522527      <Position13>
    523         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    524         <Caret Line="116" Column="1" TopLine="102"/>
     528        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     529        <Caret Line="857" Column="3" TopLine="852"/>
    525530      </Position13>
    526531      <Position14>
    527         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    528         <Caret Line="115" Column="67" TopLine="103"/>
     532        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     533        <Caret Line="43" Column="85" TopLine="42"/>
    529534      </Position14>
    530535      <Position15>
    531         <Filename Value="Compiler\Produce\UProducerDynamicC.pas"/>
    532         <Caret Line="121" Column="33" TopLine="108"/>
     536        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     537        <Caret Line="843" Column="33" TopLine="836"/>
    533538      </Position15>
    534539      <Position16>
    535         <Filename Value="Compiler\UCompiler.pas"/>
    536         <Caret Line="10" Column="17" TopLine="1"/>
     540        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     541        <Caret Line="838" Column="1" TopLine="833"/>
    537542      </Position16>
    538543      <Position17>
    539         <Filename Value="Compiler\UCompiler.pas"/>
    540         <Caret Line="140" Column="17" TopLine="127"/>
     544        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     545        <Caret Line="839" Column="1" TopLine="833"/>
    541546      </Position17>
    542547      <Position18>
    543         <Filename Value="Compiler\UCompiler.pas"/>
    544         <Caret Line="141" Column="7" TopLine="132"/>
     548        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     549        <Caret Line="840" Column="1" TopLine="833"/>
    545550      </Position18>
    546551      <Position19>
    547         <Filename Value="Compiler\UCompiler.pas"/>
    548         <Caret Line="14" Column="21" TopLine="1"/>
     552        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     553        <Caret Line="841" Column="1" TopLine="833"/>
    549554      </Position19>
    550555      <Position20>
    551         <Filename Value="Compiler\Produce\UProducerGCCC.pas"/>
    552         <Caret Line="15" Column="16" TopLine="2"/>
     556        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     557        <Caret Line="843" Column="25" TopLine="833"/>
    553558      </Position20>
    554559      <Position21>
    555         <Filename Value="Compiler\Produce\UProducerGCCC.pas"/>
    556         <Caret Line="41" Column="1" TopLine="28"/>
     560        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     561        <Caret Line="908" Column="7" TopLine="907"/>
    557562      </Position21>
    558563      <Position22>
    559         <Filename Value="Compiler\Produce\UProducerGCCC.pas"/>
    560         <Caret Line="59" Column="1" TopLine="46"/>
     564        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     565        <Caret Line="838" Column="1" TopLine="825"/>
    561566      </Position22>
    562567      <Position23>
    563         <Filename Value="Compiler\Produce\UProducerGCCC.pas"/>
    564         <Caret Line="115" Column="5" TopLine="102"/>
     568        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     569        <Caret Line="839" Column="1" TopLine="825"/>
    565570      </Position23>
    566571      <Position24>
    567         <Filename Value="Forms\UMainForm.pas"/>
    568         <Caret Line="213" Column="31" TopLine="210"/>
     572        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     573        <Caret Line="840" Column="1" TopLine="825"/>
    569574      </Position24>
    570575      <Position25>
    571         <Filename Value="Forms\UMainForm.pas"/>
    572         <Caret Line="10" Column="3" TopLine="1"/>
     576        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     577        <Caret Line="841" Column="1" TopLine="825"/>
    573578      </Position25>
    574579      <Position26>
    575         <Filename Value="Forms\UMainForm.pas"/>
    576         <Caret Line="95" Column="39" TopLine="82"/>
     580        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     581        <Caret Line="843" Column="1" TopLine="825"/>
    577582      </Position26>
    578583      <Position27>
    579         <Filename Value="Forms\UMainForm.pas"/>
    580         <Caret Line="88" Column="1" TopLine="83"/>
     584        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     585        <Caret Line="908" Column="1" TopLine="895"/>
    581586      </Position27>
    582587      <Position28>
    583         <Filename Value="Forms\UMainForm.pas"/>
    584         <Caret Line="238" Column="66" TopLine="222"/>
     588        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     589        <Caret Line="909" Column="1" TopLine="895"/>
    585590      </Position28>
    586591      <Position29>
    587         <Filename Value="Forms\UMainForm.pas"/>
    588         <Caret Line="172" Column="1" TopLine="150"/>
     592        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     593        <Caret Line="936" Column="1" TopLine="923"/>
    589594      </Position29>
    590595      <Position30>
    591         <Filename Value="Forms\UMainForm.pas"/>
    592         <Caret Line="213" Column="34" TopLine="195"/>
     596        <Filename Value="Compiler\Analyze\UPascalParser.pas"/>
     597        <Caret Line="843" Column="22" TopLine="831"/>
    593598      </Position30>
    594599    </JumpHistory>
     
    637642  </CompilerOptions>
    638643  <Debugging>
     644    <BreakPoints Count="1">
     645      <Item1>
     646        <Source Value="Compiler\Analyze\UPascalParser.pas"/>
     647        <Line Value="838"/>
     648      </Item1>
     649    </BreakPoints>
    639650    <Exceptions Count="3">
    640651      <Item1>
Note: See TracChangeset for help on using the changeset viewer.