Rev 9847 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 9847 | Rev 9893 | ||
---|---|---|---|
Line 400... | Line 400... | ||
400 | res := ARITH.range(e.value, 0, 255); |
400 | res := ARITH.range(e.value, 0, 255); |
401 | IF res THEN |
401 | IF res THEN |
402 | IL.AddCmd(IL.opSAVE8C, ARITH.Int(e.value)) |
402 | IL.AddCmd(IL.opSAVE8C, ARITH.Int(e.value)) |
403 | END |
403 | END |
404 | ELSE |
404 | ELSE |
405 | IF chkBYTE IN Options.checking THEN |
- | |
406 | label := IL.NewLabel(); |
- | |
407 | IL.AddCmd2(IL.opCHKBYTE, label, 0); |
- | |
408 | IL.OnError(line, errBYTE); |
- | |
409 | IL.SetLabel(label) |
- | |
410 | END; |
- | |
411 | IL.AddCmd0(IL.opSAVE8) |
405 | IL.AddCmd0(IL.opSAVE8) |
412 | END |
406 | END |
413 | END |
407 | END |
414 | ELSIF isSet(e) & (VarType = tSET) THEN |
408 | ELSIF isSet(e) & (VarType = tSET) THEN |
415 | IF e.obj = eCONST THEN |
409 | IF e.obj = eCONST THEN |
Line 1060... | Line 1054... | ||
1060 | PARS.check(ARITH.check(e.value), pos, 107) |
1054 | PARS.check(ARITH.check(e.value), pos, 107) |
1061 | ELSE |
1055 | ELSE |
1062 | IF chkCHR IN Options.checking THEN |
1056 | IF chkCHR IN Options.checking THEN |
1063 | CheckRange(256, pos.line, errCHR) |
1057 | CheckRange(256, pos.line, errCHR) |
1064 | ELSE |
1058 | ELSE |
1065 | IL.AddCmd0(IL.opCHR) |
1059 | IL.AddCmd(IL.opMODR, 256) |
1066 | END |
1060 | END |
1067 | END |
1061 | END |
Line 1068... | Line 1062... | ||
1068 | 1062 | ||
1069 | |PROG.stWCHR: |
1063 | |PROG.stWCHR: |
Line 1075... | Line 1069... | ||
1075 | PARS.check(ARITH.check(e.value), pos, 101) |
1069 | PARS.check(ARITH.check(e.value), pos, 101) |
1076 | ELSE |
1070 | ELSE |
1077 | IF chkWCHR IN Options.checking THEN |
1071 | IF chkWCHR IN Options.checking THEN |
1078 | CheckRange(65536, pos.line, errWCHR) |
1072 | CheckRange(65536, pos.line, errWCHR) |
1079 | ELSE |
1073 | ELSE |
1080 | IL.AddCmd0(IL.opWCHR) |
1074 | IL.AddCmd(IL.opMODR, 65536) |
1081 | END |
1075 | END |
1082 | END |
1076 | END |
Line 1083... | Line 1077... | ||
1083 | 1077 | ||
1084 | |PROG.stFLOOR: |
1078 | |PROG.stFLOOR: |
Line 1390... | Line 1384... | ||
1390 | PROCEDURE designator (parser: PARS.PARSER; VAR e: PARS.EXPR); |
1384 | PROCEDURE designator (parser: PARS.PARSER; VAR e: PARS.EXPR); |
1391 | VAR |
1385 | VAR |
1392 | field: PROG.FIELD; |
1386 | field: PROG.FIELD; |
1393 | pos: PARS.POSITION; |
1387 | pos: PARS.POSITION; |
1394 | t, idx: PARS.EXPR; |
1388 | t, idx: PARS.EXPR; |
- | 1389 | sysVal: BOOLEAN; |
|
- | 1390 | n: INTEGER; |
|
Line 1395... | Line 1391... | ||
1395 | 1391 | ||
1396 | 1392 | ||
1397 | PROCEDURE LoadAdr (e: PARS.EXPR); |
1393 | PROCEDURE LoadAdr (e: PARS.EXPR); |
Line 1442... | Line 1438... | ||
1442 | VAR |
1438 | VAR |
1443 | label, offset, n, k: INTEGER; |
1439 | label, offset, n, k: INTEGER; |
1444 | _type: PROG._TYPE; |
1440 | _type: PROG._TYPE; |
Line 1445... | Line 1441... | ||
1445 | 1441 | ||
1446 | BEGIN |
- | |
1447 | 1442 | BEGIN |
|
1448 | IF chkIDX IN Options.checking THEN |
1443 | IF chkIDX IN Options.checking THEN |
1449 | label := IL.NewLabel(); |
1444 | label := IL.NewLabel(); |
1450 | IL.AddCmd2(IL.opCHKIDX2, label, 0); |
1445 | IL.AddCmd2(IL.opCHKIDX2, label, 0); |
1451 | IL.OnError(pos.line, errIDX); |
1446 | IL.OnError(pos.line, errIDX); |
Line 1475... | Line 1470... | ||
1475 | END OpenIdx; |
1470 | END OpenIdx; |
Line 1476... | Line 1471... | ||
1476 | 1471 | ||
1477 | 1472 | ||
- | 1473 | BEGIN |
|
- | 1474 | qualident(parser, e); |
|
- | 1475 | sysVal := (e.obj = eSYSPROC) & (e.stproc = PROG.sysVAL); |
|
- | 1476 | IF sysVal THEN |
|
- | 1477 | PARS.checklex(parser, SCAN.lxLROUND); |
|
- | 1478 | PARS.Next(parser); |
|
- | 1479 | getpos(parser, pos); |
|
- | 1480 | designator(parser, e); |
|
- | 1481 | PARS.check(isVar(e), pos, 93); |
|
- | 1482 | IF PROG.isOpenArray(e._type) THEN |
|
- | 1483 | n := PROG.Dim(e._type); |
|
- | 1484 | WHILE n > 0 DO |
|
- | 1485 | IL.drop; |
|
- | 1486 | DEC(n) |
|
- | 1487 | END |
|
- | 1488 | END; |
|
- | 1489 | PARS.checklex(parser, SCAN.lxCOMMA); |
|
- | 1490 | PARS.Next(parser); |
|
- | 1491 | getpos(parser, pos); |
|
- | 1492 | qualident(parser, t); |
|
- | 1493 | PARS.check(t.obj = eTYPE, pos, 79); |
|
- | 1494 | e._type := t._type; |
|
- | 1495 | PARS.checklex(parser, SCAN.lxRROUND); |
|
Line 1478... | Line 1496... | ||
1478 | BEGIN |
1496 | PARS.Next(parser) |
1479 | qualident(parser, e); |
1497 | END; |
1480 | 1498 | ||
Line 1481... | Line 1499... | ||
1481 | IF e.obj IN {ePROC, eIMP} THEN |
1499 | IF e.obj IN {ePROC, eIMP} THEN |
1482 | PROG.UseProc(parser.unit, e.ident.proc) |
1500 | PROG.UseProc(parser.unit, e.ident.proc) |
1483 | END; |
1501 | END; |
Line 1484... | Line 1502... | ||
1484 | 1502 | ||
1485 | IF isVar(e) THEN |
1503 | IF isVar(e) & ~sysVal THEN |
Line 2597... | Line 2615... | ||
2597 | 2615 | ||
Line 2598... | Line 2616... | ||
2598 | IL.setlast(begcall); |
2616 | IL.setlast(begcall); |
2599 | 2617 | ||
- | 2618 | NextPos(parser, pos); |
|
- | 2619 | expression(parser, e1); |
|
- | 2620 | IF (e._type.typ = PROG.tBYTE) & (e1.obj # eCONST) & (e1._type.typ = PROG.tINTEGER) & (chkBYTE IN Options.checking) THEN |
|
Line 2600... | Line 2621... | ||
2600 | NextPos(parser, pos); |
2621 | CheckRange(256, pos.line, errBYTE) |
Line 2601... | Line 2622... | ||
2601 | expression(parser, e1); |
2622 | END; |
2602 | 2623 |