Ignore:
Timestamp:
Oct 20, 2010, 1:57:17 PM (14 years ago)
Author:
george
Message:
  • Minor fixes.
File:
1 edited

Legend:

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

    r73 r74  
    5151  SIllegalExpression = 'Illegal expression "%s".';
    5252  SRedefineIdentifier = 'Identificator "%s" redefinition.';
    53   STypeNotDefined = 'Type "%s" not defined.';
    5453  SEndOfDataReached = 'Parser reached to end of input data.';
    5554  SUndefinedVariable = 'Undefined variable "%s".';
     
    109108  NewVariable: TVariable;
    110109  NewExpression: TExpression;
    111   Method: TFunction;
     110  NewMethod: TFunction;
    112111  Constant: TConstant;
    113112  //  Brackets: Integer;
     
    127126        with TExpression(Expressions.Last) do begin
    128127          SubItems[1] := TExpression.Create;
     128          TExpression(SubItems[1]).CommonBlock := SourceCode.CommonBlock;
    129129          ParseExpression(TExpression(SubItems[1]));
    130130        end;
     
    148148          with TExpression(Expressions.Last) do begin
    149149            SubItems[1] := TExpression.Create;
     150            TExpression(SubItems[1]).CommonBlock := SourceCode.CommonBlock;
    150151            TExpression(SubItems[1]).NodeType := ntVariable;
    151152            TExpression(SubItems[1]).Variable := NewVariable;
     
    157158          end;
    158159        end else begin
    159           Method := CommonBlock.Functions.Search(Identifier);
    160           if Assigned(Method) then
    161           begin
     160          NewMethod := CommonBlock.Functions.Search(Identifier);
     161          if Assigned(NewMethod) then begin
    162162            // Referenced method
    163163            with TExpression(Expressions.Last) do begin
    164164              SubItems[1] := TExpression.Create;
     165              TExpression(SubItems[1]).CommonBlock := SourceCode.CommonBlock;
    165166              if NextToken = '(' then               // Method with parameters
    166167                with TExpression(SubItems[1]) do begin
     
    180181                end;
    181182              TExpression(SubItems[1]).NodeType := ntFunction;
    182               TExpression(SubItems[1]).Method := Method;
     183              TExpression(SubItems[1]).Method := NewMethod;
    183184            end;
    184185            with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do
     
    194195              with TExpression(Expressions.Last) do begin
    195196                SubItems[1] := TExpression.Create;
     197                TExpression(SubItems[1]).CommonBlock := SourceCode.CommonBlock;
    196198                TExpression(SubItems[1]).NodeType := ntConstant;
    197199                TExpression(SubItems[1]).Value := Constant.Value;
     
    210212      end else begin
    211213        // Constant value
    212         with TExpression(Expressions.Last) do
    213         begin
     214        with TExpression(Expressions.Last) do begin
    214215          SubItems[1] := TExpression.Create;
    215216          TExpression(SubItems[1]).CommonBlock := SourceCode.CommonBlock;
     
    383384  if NextToken = 'implementation' then
    384385    ParseUnitImplementation(SourceCode);
     386
     387  if NextToken = 'initialization' then begin
     388    Expect('initialization');
     389  end;
     390  if NextToken = 'finalization' then begin
     391    Expect('finalization');
     392  end;
    385393end;
    386394
     
    411419  EndSymbol: char = ';');
    412420begin
    413   with SourceCode do
    414   begin
    415     while NextToken <> EndSymbol do
    416     begin
     421  with SourceCode do begin
     422    while (NextToken <> EndSymbol) do begin
    417423      if NextToken = 'var' then
    418424        ParseVariableList(Variables)
     
    425431      else if NextToken = 'function' then
    426432        ParseFunctionList(Functions)
    427       else
    428       begin
     433      else begin
    429434        ParseBeginEnd(Code);
    430435        Break;
     
    525530                end;
    526531              end else
    527                 ErrorMessage(SRedefineIdentifier, [VariableName], 0);
     532                ErrorMessage(SRedefineIdentifier, [VariableName], -1);
    528533              Expect(':');
    529534              TypeName := ReadCode;
    530535              NewValueType := Parent.Types.Search(TypeName);
    531536              if not Assigned(NewValueType) then
    532                 ErrorMessage(STypeNotDefined, [TypeName], -1)
     537                ErrorMessage(SUndefinedType, [TypeName], -1)
    533538              else
    534539                for I := 0 to Identifiers.Count - 1 do
     
    550555          NewValueType := Parent.Types.Search(TypeName);
    551556          if not Assigned(NewValueType) then
    552             ErrorMessage(STypeNotDefined, [TypeName], -1)
     557            ErrorMessage(SUndefinedType, [TypeName], -1)
    553558          else
    554559          begin
     
    607612    ControlVariable := SourceCode.CommonBlock.Variables.Search(VariableName);
    608613    if not Assigned(ControlVariable) then
    609       ErrorMessage(SUndefinedVariable, [VariableName], 0);
     614      ErrorMessage(SUndefinedVariable, [VariableName], -1);
    610615    Expect(':=');
    611616    Start.CommonBlock := CommonBlock;
     
    645650        end;
    646651      end else
    647         ErrorMessage(SRedefineIdentifier, [VariableName], 0);
     652        ErrorMessage(SRedefineIdentifier, [VariableName], -1);
    648653      Expect(':');
    649654      TypeName := ReadCode;
    650655      NewValueType := Parent.Types.Search(TypeName);
    651656      if NewValueType = nil then
    652         ErrorMessage(STypeNotDefined, [TypeName], -1)
     657        ErrorMessage(SUndefinedType, [TypeName], -1)
    653658      else
    654659        for I := 0 to Identifiers.Count - 1 do
     
    706711      end
    707712      else
    708         ErrorMessage(SRedefineIdentifier, [ConstantName], 0);
     713        ErrorMessage(SRedefineIdentifier, [ConstantName], -1);
    709714      Expect(':');
    710715      TypeName := ReadCode;
     
    715720
    716721      if NewValueType = nil then
    717         ErrorMessage(STypeNotDefined, [TypeName], -1)
     722        ErrorMessage(SUndefinedType, [TypeName], -1)
    718723      else
    719724        for I := 0 to Identifiers.Count - 1 do
     
    792797        TTypeArray(Result).IndexType := ParseType(TypeList, False);
    793798        if not Assigned(TTypeArray(Result).IndexType) then
    794           ErrorMessage(SUndefinedType, [TypeName], 0);
     799          ErrorMessage(SUndefinedType, [TypeName], -1);
    795800        Expect(']');
    796801      end;
     
    799804      TTypeArray(Result).ItemType := ParseType(TypeList, False);
    800805      if not Assigned(TTypeArray(Result).ItemType) then
    801         ErrorMessage(SUndefinedType, [TypeName], 0);
     806        ErrorMessage(SUndefinedType, [TypeName], -1);
    802807    end else
    803808    if NextToken = '^' then begin
     
    826831        TType(Result).UsedType := TypeList.Search(TypeName);
    827832        if not Assigned(TType(Result).UsedType) then
    828           ErrorMessage(SUndefinedType, [TypeName], 0);
     833          ErrorMessage(SUndefinedType, [TypeName], -1);
    829834      end else begin
    830835        TType(Result) := TypeList.Search(TypeName);
    831836        if not Assigned(TType(Result)) then
    832           ErrorMessage(SUndefinedType, [TypeName], 0);
     837          ErrorMessage(SUndefinedType, [TypeName], -1);
    833838      end;
    834839    end;
Note: See TracChangeset for help on using the changeset viewer.