Subversion Repositories Kolibri OS

Rev

Rev 7107 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7107 Rev 7209
Line 1... Line 1...
1
(*
1
(*
2
    Copyright 2016, 2017 Anton Krotov
2
    Copyright 2016, 2017, 2018 Anton Krotov
Line 3... Line 3...
3
 
3
 
Line 4... Line 4...
4
    This file is part of Compiler.
4
    This file is part of Compiler.
5
 
5
 
Line 287... Line 287...
287
        NextCoord(coord);
287
        NextCoord(coord);
288
        pExpr(e1);
288
        pExpr(e1);
289
        IntType(e1.T, coord);
289
        IntType(e1.T, coord);
290
        Load(e1);
290
        Load(e1);
291
        IF e.T.Len = 0 THEN
291
        IF e.T.Len = 0 THEN
-
 
292
          IF e1.eType = eCONST THEN
-
 
293
            idx := FLOOR(e1.Value);
-
 
294
            Assert(idx >= 0, coord, 159)
-
 
295
          END;
292
          BaseT := DECL.OpenBase(e.T);
296
          BaseT := DECL.OpenBase(e.T);
293
          X86.PushConst(BaseT.Size);
297
          X86.PushConst(BaseT.Size);
294
          X86.OpenIdx(DECL.Dim(e.T))
298
          X86.OpenIdx(DECL.Dim(e.T))
295
        ELSE
299
        ELSE
296
          IF e1.eType = eCONST THEN
300
          IF e1.eType = eCONST THEN
Line 864... Line 868...
864
    END;
868
    END;
865
    IF ~param.ByRef & (param.T.tType IN TFLOAT) THEN
869
    IF ~param.ByRef & (param.T.tType IN TFLOAT) THEN
866
      X86.DropFpu(param.T.tType = TLONGREAL)
870
      X86.DropFpu(param.T.tType = TLONGREAL)
867
    END;
871
    END;
868
    IF (e1.T.tType = TSTRING) & (param.T.tType = TARRAY) THEN
872
    IF (e1.T.tType = TSTRING) & (param.T.tType = TARRAY) THEN
-
 
873
      IF param.T.Len > X86.maxstrlen THEN
-
 
874
          X86.set_maxstrlen(param.T.Len)
-
 
875
      END;
869
      s := DECL.GetString(e1.Value);
876
      s := DECL.GetString(e1.Value);
870
      IF s.Len = 1 THEN
877
      IF s.Len = 1 THEN
871
        X86.Mono(s.Number)
878
        X86.Mono(s.Number)
872
      END;
879
      END;
873
      IF param.T.Len = 0 THEN
880
      IF param.T.Len = 0 THEN
Line 1883... Line 1890...
1883
    UTILS.ErrMsg(121);
1890
    UTILS.ErrMsg(121);
1884
    UTILS.HALT(1)
1891
    UTILS.HALT(1)
1885
  END;
1892
  END;
1886
  UTILS.Split(SelfName, SelfPath, CName, CExt);
1893
  UTILS.Split(SelfName, SelfPath, CName, CExt);
1887
  temp := Name;
1894
  temp := Name;
-
 
1895
  IF UTILS.streq(system, "kem") THEN
-
 
1896
    X86.setkem;
-
 
1897
    platform := 4;
-
 
1898
    UTILS.concat(temp, ".kex")
1888
  IF UTILS.streq(system, "obj") THEN
1899
  ELSIF UTILS.streq(system, "obj") THEN
1889
    platform := 6;
1900
    platform := 6;
1890
    UTILS.concat(temp, ".obj")
1901
    UTILS.concat(temp, ".obj")
1891
  ELSIF UTILS.streq(system, "elf") THEN
1902
  ELSIF UTILS.streq(system, "elf") THEN
1892
    platform := 5
1903
    platform := 5
1893
  ELSIF UTILS.streq(system, "kos") THEN
1904
  ELSIF UTILS.streq(system, "kos") THEN
Line 1922... Line 1933...
1922
    UTILS.concat(SelfPath, "KolibriOS")
1933
    UTILS.concat(SelfPath, "KolibriOS")
1923
  ELSIF platform IN {1, 2, 3} THEN
1934
  ELSIF platform IN {1, 2, 3} THEN
1924
    UTILS.concat(SelfPath, "Windows32")
1935
    UTILS.concat(SelfPath, "Windows32")
1925
  END;
1936
  END;
1926
  UTILS.concat(SelfPath, UTILS.Slash);
1937
  UTILS.concat(SelfPath, UTILS.Slash);
-
 
1938
  X86.set_maxstrlen(0);
1927
  X86.Init(platform);
1939
  X86.Init(platform);
1928
  X86.Prolog(temp);
1940
  X86.Prolog(temp);
1929
  DECL.Program(SelfPath, Path, Name, Ext, platform IN {1, 2, 3}, OpSeq, Expr, AssComp, sttypes);
1941
  DECL.Program(SelfPath, Path, Name, Ext, platform IN {1, 2, 3}, OpSeq, Expr, AssComp, sttypes);
1930
  voidtype := sttypes[TVOID];
1942
  voidtype := sttypes[TVOID];
1931
  inttype := sttypes[TINTEGER];
1943
  inttype := sttypes[TINTEGER];