Subversion Repositories Kolibri OS

Rev

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