Subversion Repositories Kolibri OS

Rev

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

Rev 6613 Rev 7107
Line 1... Line 1...
1
(*
1
(*
2
    Copyright 2016 Anton Krotov
2
    Copyright 2016, 2017 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 41... Line 41...
41
  IDMOD = 1; IDCONST = 2; IDTYPE = 3; IDVAR = 4; IDPROC = 5; IDSTPROC = 6; IDGUARD = 7; IDPARAM = 8; IDSYSPROC = 9;
41
  IDMOD = 1; IDCONST = 2; IDTYPE = 3; IDVAR = 4; IDPROC = 5; IDSTPROC = 6; IDGUARD = 7; IDPARAM = 8; IDSYSPROC = 9;
Line 42... Line 42...
42
 
42
 
43
  stABS = 1; stODD = 2; stLEN = 3; stLSL = 4; stASR = 5; stROR = 6; stFLOOR = 7; stFLT = 8;
43
  stABS = 1; stODD = 2; stLEN = 3; stLSL = 4; stASR = 5; stROR = 6; stFLOOR = 7; stFLT = 8;
44
  stORD = 9; stCHR = 10; stLONG = 11; stSHORT = 12; stINC = 13; stDEC = 14; stINCL = 15;
44
  stORD = 9; stCHR = 10; stLONG = 11; stSHORT = 12; stINC = 13; stDEC = 14; stINCL = 15;
45
  stEXCL = 16; stCOPY = 17; stNEW = 18; stASSERT = 19; stPACK = 20; stUNPK = 21; stDISPOSE = 22;
45
  stEXCL = 16; stCOPY = 17; stNEW = 18; stASSERT = 19; stPACK = 20; stUNPK = 21; stDISPOSE = 22;
Line 46... Line 46...
46
  stBITS = 23; stLSR = 24; stLENGTH = 25;
46
  stBITS = 23; stLSR = 24; stLENGTH = 25; stMIN = 26; stMAX = 27;
47
 
47
 
Line 48... Line 48...
48
  sysADR = 101; sysSIZE = 102; sysINF = 103; sysGET = 104; sysPUT = 105;
48
  sysADR = 101; sysSIZE = 102; sysINF = 103; sysGET = 104; sysPUT = 105;
49
  sysCODE = 106; sysTYPEID = 107; sysMOVE = 108;
49
  sysCODE = 106; sysTYPEID = 107; sysMOVE = 108; sysCOPY = 109;
Line 50... Line 50...
50
 
50
 
Line 415... Line 415...
415
  PushStProc("SHORT",	 stSHORT);
415
  PushStProc("SHORT",    stSHORT);
416
  PushStProc("UNPK",	 stUNPK);
416
  PushStProc("UNPK",     stUNPK);
417
  PushStProc("BITS",	 stBITS);
417
  PushStProc("BITS",     stBITS);
418
  PushStProc("LSR",	 stLSR);
418
  PushStProc("LSR",      stLSR);
419
  PushStProc("LENGTH",	 stLENGTH);
419
  PushStProc("LENGTH",   stLENGTH);
-
 
420
  PushStProc("MIN",      stMIN);
-
 
421
  PushStProc("MAX",      stMAX);
420
  Guard
422
  Guard
421
END StIdent;
423
END StIdent;
Line 422... Line 424...
422
 
424
 
423
PROCEDURE GetQIdent*(Unit: UNIT; Name: SCAN.NODE): IDENT;
425
PROCEDURE GetQIdent*(Unit: UNIT; Name: SCAN.NODE): IDENT;
Line 1052... Line 1054...
1052
    IF SCAN.tLex = lxLRound THEN
1054
    IF SCAN.tLex = lxLRound THEN
1053
      NextCoord(coord2);
1055
      NextCoord(coord2);
1054
      Check(lxIDENT);
1056
      Check(lxIDENT);
1055
      nov.Base := IdType(coord);
1057
      nov.Base := IdType(coord);
1056
      Assert(nov.Base # NIL, coord, 42);
1058
      Assert(nov.Base # NIL, coord, 42);
-
 
1059
      IF (nov.Base.tType = TPOINTER) & (nov.Base.Base.tType = TRECORD) THEN
-
 
1060
          nov.Base := nov.Base.Base
-
 
1061
      END;
1057
      Assert(nov.Base.tType = TRECORD, coord, 80);
1062
      Assert(nov.Base.tType = TRECORD, coord, 80);
1058
      Assert(notrecurs(TRUE, nov.Base), coord, 96);
1063
      Assert(notrecurs(TRUE, nov.Base), coord, 96);
1059
      nov.Size := nov.Base.Size;
1064
      nov.Size := nov.Base.Size;
1060
      nov.Align := nov.Base.Align;
1065
      nov.Align := nov.Base.Align;
1061
      Check(lxRRound);
1066
      Check(lxRRound);
Line 1192... Line 1197...
1192
      IdentDef;
1197
      IdentDef;
1193
      PushIdent(Name, coord, IDTYPE, NIL, NIL, Export, 0);
1198
      PushIdent(Name, coord, IDTYPE, NIL, NIL, Export, 0);
1194
      last := unit.Idents.Last(IDENT);
1199
      last := unit.Idents.Last(IDENT);
1195
      Check(lxEQ);
1200
      Check(lxEQ);
1196
      Next;
1201
      Next;
-
 
1202
 
-
 
1203
      IF SCAN.tLex = lxIDENT THEN
-
 
1204
        last.T := ParseType(coord)
-
 
1205
      ELSE
1197
      NEW(NewType);
1206
        NEW(NewType);
1198
      MemErr(NewType = NIL);
1207
        MemErr(NewType = NIL);
1199
      last.T := NewType;
1208
        last.T := NewType;
1200
      T := StructType(FALSE, NewType);
1209
        T := StructType(FALSE, NewType)
-
 
1210
      END;
-
 
1211
 
1201
      Check(lxSemi);
1212
      Check(lxSemi);
1202
      Next
1213
      Next
1203
    END
1214
    END
1204
  END;
1215
  END;
1205
  LinkPtr;
1216
  LinkPtr;
Line 1414... Line 1425...
1414
  PushSysProc("TYPEID",  sysTYPEID);
1425
  PushSysProc("TYPEID",  sysTYPEID);
1415
  PushSysProc("GET",	 sysGET);
1426
  PushSysProc("GET",     sysGET);
1416
  PushSysProc("PUT",	 sysPUT);
1427
  PushSysProc("PUT",     sysPUT);
1417
  PushSysProc("CODE",	 sysCODE);
1428
  PushSysProc("CODE",    sysCODE);
1418
  PushSysProc("MOVE",	 sysMOVE);
1429
  PushSysProc("MOVE",    sysMOVE);
-
 
1430
  PushSysProc("COPY",    sysCOPY);
1419
  PushSysProc("INF",	 sysINF);
1431
  PushSysProc("INF",     sysINF);
1420
  PushSysType("CARD16",  TCARD16);
1432
  PushSysType("CARD16",  TCARD16);
1421
  sys := unit;
1433
  sys := unit;
1422
  unit := temp
1434
  unit := temp
1423
END Pseudo;
1435
END Pseudo;