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