Ignore:
Timestamp:
Oct 20, 2010, 11:02:10 AM (14 years ago)
Author:
george
Message:
  • Fixed: Better error message cursor position focusing.
  • Modified: All source code is tokenized to token list at once.
File:
1 edited

Legend:

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

    r71 r72  
    4747
    4848
     49resourcestring
     50  SUnknownIdentifier = 'Unknown identificator "%s".';
     51  SIllegalExpression = 'Illegal expression "%s".';
     52  SRedefineIdentifier = 'Identificator "%s" redefinition.';
     53  STypeNotDefined = 'Type "%s" not defined.';
     54  SEndOfDataReached = 'Parser reached to end of input data.';
     55  SUndefinedVariable = 'Undefined variable "%s".';
     56  SUndefinedType = 'Undefined type "%s".';
     57  SUndefinedConstant = 'Undefined constant "%s".';
     58  SUnitNotFound = 'Unit "%s" not found.';
     59
     60
    4961implementation
    5062
     
    6375    if Assigned(OnGetSource) then begin
    6476      if FOnGetSource(Name, Parser.SourceCodeText) then begin
    65         Parser.Init;
     77        Parser.Process;
    6678        Parser.FileName := Name;
    6779        Parser.OnErrorMessage := OnErrorMessage;
     
    192204              end;
    193205            end else begin
    194               ErrorMessage(SUnknownIdentifier, [Identifier]);
     206              ErrorMessage(SUnknownIdentifier, [Identifier], -1);
    195207            end;
    196208          end;
     
    326338      begin
    327339        Result := nil;
    328         ErrorMessage(SUnknownIdentifier, [ReadCode]);
     340        ErrorMessage(SUnknownIdentifier, [ReadCode], -1);
    329341      end;
    330342    end
     
    334346    begin
    335347      Result := nil;
    336       ErrorMessage(SIllegalExpression, [ReadCode]);
     348      ErrorMessage(SIllegalExpression, [ReadCode], -1);
    337349    end;
    338350  end;
     
    454466        ParseFunctionList(Functions, True)
    455467      else begin
    456         ErrorMessage(SUnknownIdentifier, [NextToken]);
     468        ErrorMessage(SUnknownIdentifier, [NextToken], -1);
    457469        ReadCode;
    458470      end;
     
    529541                end;
    530542              end else
    531                 ErrorMessage(SRedefineIdentifier, [VariableName]);
     543                ErrorMessage(SRedefineIdentifier, [VariableName], 0);
    532544              Expect(':');
    533545              TypeName := ReadCode;
    534546              NewValueType := Parent.Types.Search(TypeName);
    535547              if not Assigned(NewValueType) then
    536                 ErrorMessage(STypeNotDefined, [TypeName])
     548                ErrorMessage(STypeNotDefined, [TypeName], -1)
    537549              else
    538550                for I := 0 to Identifiers.Count - 1 do
     
    554566          NewValueType := Parent.Types.Search(TypeName);
    555567          if not Assigned(NewValueType) then
    556             ErrorMessage(STypeNotDefined, [TypeName])
     568            ErrorMessage(STypeNotDefined, [TypeName], -1)
    557569          else
    558570          begin
     
    611623    ControlVariable := SourceCode.CommonBlock.Variables.Search(VariableName);
    612624    if not Assigned(ControlVariable) then
    613       ErrorMessage(SUndefinedVariable, [VariableName]);
     625      ErrorMessage(SUndefinedVariable, [VariableName], 0);
    614626    Expect(':=');
    615627    Start.CommonBlock := CommonBlock;
     
    653665      end
    654666      else
    655         ErrorMessage(SRedefineIdentifier, [VariableName]);
     667        ErrorMessage(SRedefineIdentifier, [VariableName], 0);
    656668      Expect(':');
    657669      TypeName := ReadCode;
    658670      NewValueType := Parent.Types.Search(TypeName);
    659671      if NewValueType = nil then
    660         ErrorMessage(STypeNotDefined, [TypeName])
     672        ErrorMessage(STypeNotDefined, [TypeName], -1)
    661673      else
    662674        for I := 0 to Identifiers.Count - 1 do
     
    714726      end
    715727      else
    716         ErrorMessage(SRedefineIdentifier, [ConstantName]);
     728        ErrorMessage(SRedefineIdentifier, [ConstantName], 0);
    717729      Expect(':');
    718730      TypeName := ReadCode;
     
    723735
    724736      if NewValueType = nil then
    725         ErrorMessage(STypeNotDefined, [TypeName])
     737        ErrorMessage(STypeNotDefined, [TypeName], -1)
    726738      else
    727739        for I := 0 to Identifiers.Count - 1 do
     
    800812        TTypeArray(Result).IndexType := ParseType(TypeList, False);
    801813        if not Assigned(TTypeArray(Result).IndexType) then
    802           ErrorMessage(SUndefinedType, [TypeName]);
     814          ErrorMessage(SUndefinedType, [TypeName], 0);
    803815        Expect(']');
    804816      end;
     
    807819      TTypeArray(Result).ItemType := ParseType(TypeList, False);
    808820      if not Assigned(TTypeArray(Result).ItemType) then
    809         ErrorMessage(SUndefinedType, [TypeName]);
     821        ErrorMessage(SUndefinedType, [TypeName], 0);
    810822    end else
    811823    if NextToken = '^' then begin
     
    834846        TType(Result).UsedType := TypeList.Search(TypeName);
    835847        if not Assigned(TType(Result).UsedType) then
    836           ErrorMessage(SUndefinedType, [TypeName]);
     848          ErrorMessage(SUndefinedType, [TypeName], 0);
    837849      end else begin
    838850        TType(Result) := TypeList.Search(TypeName);
    839851        if not Assigned(TType(Result)) then
    840           ErrorMessage(SUndefinedType, [TypeName]);
     852          ErrorMessage(SUndefinedType, [TypeName], 0);
    841853      end;
    842854    end;
     
    922934constructor TPascalParser.Create;
    923935begin
     936  inherited;
    924937end;
    925938
     
    949962        Exported := AExported;
    950963      end else begin
    951         ErrorMessage(SUnitNotFound, [Name]);
     964        ErrorMessage(SUnitNotFound, [Name], -2);
    952965        SourceCode.Delete(SourceCode.Count - 1);
    953966      end;
     
    966979      if not Assigned(Module) then begin
    967980        if not ParseFile(Name) then begin
    968           ErrorMessage(SUnitNotFound, [Name]);
     981          ErrorMessage(SUnitNotFound, [Name], -2);
    969982          SourceCode.Delete(SourceCode.Count - 1);
    970983        end;
Note: See TracChangeset for help on using the changeset viewer.