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]; |