Ignore:
Timestamp:
Oct 15, 2010, 2:13:42 PM (14 years ago)
Author:
george
Message:
  • Fixed: Focus message position in code.
File:
1 edited

Legend:

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

    r60 r64  
    402402  Expressions := TExpressionList.Create;
    403403  Expressions.Add(TExpression.Create);
    404   with SourceCode do
    405   begin
     404  with SourceCode do begin
    406405    while ((FNextToken <> ';') and (FNextToken <> ',') and
    407406        (not IsKeyWord(FNextToken))) and not
    408       (((FNextToken = ')') or (FNextToken = ']'))) do
    409     begin
     407      (((FNextToken = ')') or (FNextToken = ']'))) do begin
    410408      Identifier := ReadCode;
    411       if Identifier = '(' then
    412       begin
     409      if Identifier = '(' then begin
    413410        // Subexpression
    414         with TExpression(Expressions.Last) do
    415         begin
     411        with TExpression(Expressions.Last) do begin
    416412          SubItems[1] := TExpression.Create;
    417413          ParseExpression(TExpression(SubItems[1]));
     
    423419        end;
    424420        Expect(')');
    425       end
    426       else
    427       if IsOperator(Identifier) then
    428       begin
     421      end else
     422      if IsOperator(Identifier) then begin
    429423        // Operator
    430424        TExpression(Expressions.Last).OperatorName := Identifier;
    431425        TExpression(Expressions.Last).NodeType := ntOperator;
    432       end
    433       else
    434       if IsIdentificator(Identifier) then
    435       begin
     426      end else
     427      if IsIdentificator(Identifier) then begin
    436428        // Reference to identificator
    437429        NewVariable := CommonBlock.Variables.Search(Identifier);
    438         if Assigned(NewVariable) then
    439         begin
     430        if Assigned(NewVariable) then begin
    440431          // Referenced variable
    441           with TExpression(Expressions.Last) do
    442           begin
     432          with TExpression(Expressions.Last) do begin
    443433            SubItems[1] := TExpression.Create;
    444434            TExpression(SubItems[1]).NodeType := ntVariable;
     
    450440            SubItems[0] := TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    451441          end;
    452         end
    453         else
    454         begin
     442        end else begin
    455443          Method := CommonBlock.Functions.Search(Identifier);
    456444          if Assigned(Method) then
    457445          begin
    458446            // Referenced method
    459             with TExpression(Expressions.Last) do
    460             begin
     447            with TExpression(Expressions.Last) do begin
    461448              SubItems[1] := TExpression.Create;
    462449              if FNextToken = '(' then               // Method with parameters
    463                 with TExpression(SubItems[1]) do
    464                 begin
     450                with TExpression(SubItems[1]) do begin
    465451                  Expect('(');
    466452                  NewExpression := TExpression.Create;
     
    468454                  ParseExpression(NewExpression);
    469455                  SubItems.Add(NewExpression);
    470                   while FNextToken = ',' do
    471                   begin
     456                  while FNextToken = ',' do begin
    472457                    Expect(',');
    473458                    NewExpression := TExpression.Create;
     
    487472                TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    488473            end;
    489           end
    490           else
    491           begin
     474          end else begin
    492475            Constant := CommonBlock.Constants.Search(Identifier);
    493             if Assigned(Constant) then
    494             begin
     476            if Assigned(Constant) then begin
    495477              // Referenced constant
    496               with TExpression(Expressions.Last) do
    497               begin
     478              with TExpression(Expressions.Last) do begin
    498479                SubItems[1] := TExpression.Create;
    499480                TExpression(SubItems[1]).NodeType := ntConstant;
     
    501482              end;
    502483              with TExpression(Expressions.Items[Expressions.Add(
    503                   TExpression.Create)]) do
    504               begin
     484                  TExpression.Create)]) do begin
    505485                CommonBlock := SourceCode.CommonBlock;
    506486                SubItems[0] :=
    507487                  TExpression(Expressions[Expressions.Count - 2]).SubItems[1];
    508488              end;
    509             end
    510             else
    511             begin
     489            end else begin
    512490              ErrorMessage(SUnknownIdentifier, [Identifier]);
    513491            end;
    514492          end;
    515493        end;
    516       end
    517       else
    518       begin
     494      end else begin
    519495        // Constant value
    520496        with TExpression(Expressions.Last) do
     
    524500          TExpression(SubItems[1]).NodeType := ntConstant;
    525501
    526           if Identifier[1] = '''' then
    527           begin
     502          if Identifier[1] = '''' then begin
    528503            TExpression(SubItems[1]).Value := Identifier;
    529504            //SetLength(TExpression(SubItems[1]).Value, Length(Identifier));
    530505            //for I := 1 to Length(Identifier) do
    531506            //  TExpression(SubItems[1]).Value[I - 1] := Byte(Identifier[I]);
    532           end
    533           else
    534           begin
     507          end else begin
    535508            TExpression(SubItems[1]).Value := Identifier;
    536509          end;
     
    546519
    547520    // Build expression tree
    548     for II := 0 to High(Operators) do
    549     begin
     521    for II := 0 to High(Operators) do begin
    550522      I := 1;
    551       while (I < Expressions.Count - 1) do
    552       begin
     523      while (I < Expressions.Count - 1) do begin
    553524        if not TExpression(Expressions[I]).Associated and
    554525          (TExpression(Expressions[I]).OperatorName = Operators[II]) then
     
    558529          TExpression(Expressions[I + 1]).SubItems[0] := Expressions[I];
    559530          //Expressions.Delete(I);
    560         end
    561         else
    562           Inc(I);
     531        end else Inc(I);
    563532      end;
    564533    end;
     
    569538    if Expressions.Count > 1 then
    570539      TExpression(Expressions[1]).SubItems[0] := nil;
    571     Expressions.Destroy;
     540    Expressions.Free;
    572541  end;
    573542end;
     
    11681137  begin
    11691138    Name := ReadCode;
     1139    if FNextToken = 'in' then begin
     1140      Expect('in');
     1141      Location := ReadCode;
     1142    end else Location := Name + '.pas';
    11701143    Module := SourceCode.ParentModule.ParentProgram.Modules.Search(Name);
    11711144    if not Assigned(Module) then begin
     
    11811154    begin
    11821155      Name := ReadCode;
     1156      if FNextToken = 'in' then begin
     1157        Expect('in');
     1158        Location := ReadCode;
     1159      end else Location := Name + '.pas';
    11831160      Module := SourceCode.ParentModule.ParentProgram.Modules.Search(Name);
    11841161      if not Assigned(Module) then begin
Note: See TracChangeset for help on using the changeset viewer.