Rev 7696 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7696 | Rev 7983 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | (* |
1 | (* |
2 | BSD 2-Clause License |
2 | BSD 2-Clause License |
Line 3... | Line 3... | ||
3 | 3 | ||
4 | Copyright (c) 2018-2019, Anton Krotov |
4 | Copyright (c) 2018-2020, Anton Krotov |
5 | All rights reserved. |
5 | All rights reserved. |
Line 6... | Line 6... | ||
6 | *) |
6 | *) |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | MODULE STATEMENTS; |
8 | MODULE STATEMENTS; |
9 | 9 | ||
Line 10... | Line 10... | ||
10 | IMPORT |
10 | IMPORT |
Line 11... | Line 11... | ||
11 | 11 | ||
Line 27... | Line 27... | ||
27 | 27 | ||
Line 28... | Line 28... | ||
28 | chkIDX* = 0; chkGUARD* = 1; chkPTR* = 2; chkCHR* = 3; chkWCHR* = 4; chkBYTE* = 5; |
28 | chkIDX* = 0; chkGUARD* = 1; chkPTR* = 2; chkCHR* = 3; chkWCHR* = 4; chkBYTE* = 5; |
Line 29... | Line -... | ||
29 | - | ||
30 | chkALL* = {chkIDX, chkGUARD, chkPTR, chkCHR, chkWCHR, chkBYTE}; |
- | |
Line 31... | Line 29... | ||
31 | 29 | ||
Line 32... | Line 30... | ||
32 | cpuX86 = 1; cpuAMD64 = 2; cpuMSP430 = 3; |
30 | chkALL* = {chkIDX, chkGUARD, chkPTR, chkCHR, chkWCHR, chkBYTE}; |
Line 416... | Line 414... | ||
416 | END |
414 | END |
417 | ELSIF isReal(e) & (VarType = tREAL) THEN |
415 | ELSIF isReal(e) & (VarType = tREAL) THEN |
418 | IF e.obj = eCONST THEN |
416 | IF e.obj = eCONST THEN |
419 | IL.Float(ARITH.Float(e.value)) |
417 | IL.Float(ARITH.Float(e.value)) |
420 | END; |
418 | END; |
421 | IL.savef |
419 | IL.savef(e.obj = eCONST) |
422 | ELSIF isChar(e) & (VarType = tCHAR) THEN |
420 | ELSIF isChar(e) & (VarType = tCHAR) THEN |
423 | IF e.obj = eCONST THEN |
421 | IF e.obj = eCONST THEN |
424 | IL.AddCmd(IL.opSAVE8C, ARITH.Int(e.value)) |
422 | IL.AddCmd(IL.opSAVE8C, ARITH.Int(e.value)) |
425 | ELSE |
423 | ELSE |
426 | IL.AddCmd0(IL.opSAVE8) |
424 | IL.AddCmd0(IL.opSAVE8) |
Line 498... | Line 496... | ||
498 | 496 | ||
499 | 497 | ||
500 | PROCEDURE ArrLen (t: PROG.TYPE_; n: INTEGER): INTEGER; |
498 | PROCEDURE ArrLen (t: PROG.TYPE_; n: INTEGER): INTEGER; |
- | 499 | VAR |
|
501 | VAR |
500 | res: INTEGER; |
502 | res: INTEGER; |
501 | |
503 | BEGIN |
502 | BEGIN |
504 | REPEAT |
503 | REPEAT |
505 | res := t.length; |
504 | res := t.length; |
Line 511... | Line 510... | ||
511 | END ArrLen; |
510 | END ArrLen; |
Line 512... | Line 511... | ||
512 | 511 | ||
513 | 512 | ||
514 | PROCEDURE OpenArray (t, t2: PROG.TYPE_); |
- | |
515 | VAR |
513 | PROCEDURE OpenArray (t, t2: PROG.TYPE_); |
- | 514 | VAR |
|
516 | n: INTEGER; |
515 | n, d1, d2: INTEGER; |
517 | d1, d2: INTEGER; |
516 | |
518 | BEGIN |
517 | BEGIN |
519 | IF t.length # 0 THEN |
518 | IF t.length # 0 THEN |
520 | IL.Param1; |
519 | IL.Param1; |
Line 604... | Line 603... | ||
604 | ELSIF (e.type.typ = PROG.tSTRING) OR |
603 | ELSIF (e.type.typ = PROG.tSTRING) OR |
605 | (e.type.typ IN {PROG.tCHAR, PROG.tWCHAR}) & (p.type.typ = PROG.tARRAY) & (p.type.base.typ IN {PROG.tCHAR, PROG.tWCHAR}) THEN |
604 | (e.type.typ IN {PROG.tCHAR, PROG.tWCHAR}) & (p.type.typ = PROG.tARRAY) & (p.type.base.typ IN {PROG.tCHAR, PROG.tWCHAR}) THEN |
606 | IF p.type.base = tCHAR THEN |
605 | IF p.type.base = tCHAR THEN |
607 | stroffs := String(e); |
606 | stroffs := String(e); |
608 | IL.StrAdr(stroffs); |
607 | IL.StrAdr(stroffs); |
609 | IF (CPU = cpuMSP430) & (p.type.size - strlen(e) - 1 > MSP430.IntVectorSize) THEN |
608 | IF (CPU = TARGETS.cpuMSP430) & (p.type.size - strlen(e) - 1 > MSP430.IntVectorSize) THEN |
610 | ERRORS.WarningMsg(pos.line, pos.col, 0) |
609 | ERRORS.WarningMsg(pos.line, pos.col, 0) |
611 | END |
610 | END |
612 | ELSE (* WCHAR *) |
611 | ELSE (* WCHAR *) |
613 | stroffs := StringW(e); |
612 | stroffs := StringW(e); |
614 | IL.StrAdr(stroffs) |
613 | IL.StrAdr(stroffs) |
Line 646... | Line 645... | ||
646 | END PExpression; |
645 | END PExpression; |
Line 647... | Line 646... | ||
647 | 646 | ||
648 | 647 | ||
649 | PROCEDURE stProc (parser: PARS.PARSER; VAR e: PARS.EXPR); |
648 | PROCEDURE stProc (parser: PARS.PARSER; VAR e: PARS.EXPR); |
650 | VAR |
649 | VAR |
651 | e2: PARS.EXPR; |
650 | e1, e2: PARS.EXPR; |
652 | pos: PARS.POSITION; |
651 | pos: PARS.POSITION; |
653 | proc: INTEGER; |
652 | proc, |
654 | label: INTEGER; |
653 | label, |
655 | n, i: INTEGER; |
654 | n, i: INTEGER; |
656 | code: ARITH.VALUE; |
655 | code: ARITH.VALUE; |
657 | e1: PARS.EXPR; |
656 | wchar, |
658 | wchar: BOOLEAN; |
657 | comma: BOOLEAN; |
659 | cmd1, |
- | |
Line 660... | Line 658... | ||
660 | cmd2: IL.COMMAND; |
658 | cmd1, |
661 | comma: BOOLEAN; |
659 | cmd2: IL.COMMAND; |
662 | 660 | ||
Line 673... | Line 671... | ||
673 | 671 | ||
674 | 672 | ||
675 | PROCEDURE shift_minmax (proc: INTEGER): CHAR; |
673 | PROCEDURE shift_minmax (proc: INTEGER): CHAR; |
- | 674 | VAR |
|
676 | VAR |
675 | res: CHAR; |
677 | res: CHAR; |
676 | |
678 | BEGIN |
677 | BEGIN |
679 | CASE proc OF |
678 | CASE proc OF |
680 | |PROG.stASR: res := "A" |
679 | |PROG.stASR: res := "A" |
Line 775... | Line 774... | ||
775 | END; |
774 | END; |
776 | IL.popBegEnd(begcall, endcall) |
775 | IL.popBegEnd(begcall, endcall) |
Line 777... | Line 776... | ||
777 | 776 | ||
778 | |PROG.stNEW: |
777 | |PROG.stNEW: |
779 | varparam(parser, pos, isPtr, TRUE, e); |
778 | varparam(parser, pos, isPtr, TRUE, e); |
780 | IF CPU = cpuMSP430 THEN |
779 | IF CPU = TARGETS.cpuMSP430 THEN |
781 | PARS.check(e.type.base.size + 16 < Options.ram, pos, 63) |
780 | PARS.check(e.type.base.size + 16 < Options.ram, pos, 63) |
782 | END; |
781 | END; |
Line 783... | Line 782... | ||
783 | IL.New(e.type.base.size, e.type.base.num) |
782 | IL.New(e.type.base.size, e.type.base.num) |
Line 883... | Line 882... | ||
883 | 882 | ||
884 | IF proc = PROG.sysPUT THEN |
883 | IF proc = PROG.sysPUT THEN |
885 | PARS.check(e2.type.typ IN PROG.BASICTYPES + {PROG.tPOINTER, PROG.tPROCEDURE}, pos, 66); |
884 | PARS.check(e2.type.typ IN PROG.BASICTYPES + {PROG.tPOINTER, PROG.tPROCEDURE}, pos, 66); |
886 | IF e2.obj = eCONST THEN |
885 | IF e2.obj = eCONST THEN |
887 | IF e2.type = tREAL THEN |
- | |
888 | IL.setlast(endcall.prev(IL.COMMAND)); |
886 | IF e2.type = tREAL THEN |
- | 887 | IL.Float(ARITH.Float(e2.value)); |
|
889 | IL.Float(ARITH.Float(e2.value)); |
888 | IL.setlast(endcall.prev(IL.COMMAND)); |
890 | IL.savef |
889 | IL.savef(FALSE) |
891 | ELSE |
890 | ELSE |
892 | LoadConst(e2); |
891 | LoadConst(e2); |
893 | IL.setlast(endcall.prev(IL.COMMAND)); |
892 | IL.setlast(endcall.prev(IL.COMMAND)); |
894 | IL.SysPut(e2.type.size) |
893 | IL.SysPut(e2.type.size) |
895 | END |
894 | END |
896 | ELSE |
895 | ELSE |
897 | IL.setlast(endcall.prev(IL.COMMAND)); |
896 | IL.setlast(endcall.prev(IL.COMMAND)); |
898 | IF e2.type = tREAL THEN |
897 | IF e2.type = tREAL THEN |
899 | IL.savef |
898 | IL.savef(FALSE) |
900 | ELSIF e2.type = tBYTE THEN |
899 | ELSIF e2.type = tBYTE THEN |
901 | IL.SysPut(tINTEGER.size) |
900 | IL.SysPut(tINTEGER.size) |
902 | ELSE |
901 | ELSE |
903 | IL.SysPut(e2.type.size) |
902 | IL.SysPut(e2.type.size) |
Line 960... | Line 959... | ||
960 | |PROG.sysCODE: |
959 | |PROG.sysCODE: |
961 | REPEAT |
960 | REPEAT |
962 | getpos(parser, pos); |
961 | getpos(parser, pos); |
963 | PARS.ConstExpression(parser, code); |
962 | PARS.ConstExpression(parser, code); |
964 | PARS.check(code.typ = ARITH.tINTEGER, pos, 43); |
963 | PARS.check(code.typ = ARITH.tINTEGER, pos, 43); |
965 | IF CPU # cpuMSP430 THEN |
964 | IF CPU IN {TARGETS.cpuX86, TARGETS.cpuAMD64} THEN |
966 | PARS.check(ARITH.range(code, 0, 255), pos, 42) |
965 | PARS.check(ARITH.range(code, 0, 255), pos, 42) |
- | 966 | ELSIF CPU = TARGETS.cpuTHUMB THEN |
|
- | 967 | PARS.check(ARITH.range(code, 0, 65535), pos, 110) |
|
967 | END; |
968 | END; |
968 | IL.AddCmd(IL.opCODE, ARITH.getInt(code)); |
969 | IL.AddCmd(IL.opCODE, ARITH.getInt(code)); |
969 | comma := parser.sym = SCAN.lxCOMMA; |
970 | comma := parser.sym = SCAN.lxCOMMA; |
970 | IF comma THEN |
971 | IF comma THEN |
971 | PARS.Next(parser) |
972 | PARS.Next(parser) |
Line 1111... | Line 1112... | ||
1111 | PARS.check(isInt(e), pos, 66); |
1112 | PARS.check(isInt(e), pos, 66); |
1112 | e.type := tBOOLEAN; |
1113 | e.type := tBOOLEAN; |
1113 | IF e.obj = eCONST THEN |
1114 | IF e.obj = eCONST THEN |
1114 | ARITH.odd(e.value) |
1115 | ARITH.odd(e.value) |
1115 | ELSE |
1116 | ELSE |
1116 | IL.AddCmd0(IL.opODD) |
1117 | IL.AddCmd(IL.opMODR, 2) |
1117 | END |
1118 | END |
Line 1118... | Line 1119... | ||
1118 | 1119 | ||
1119 | |PROG.stORD: |
1120 | |PROG.stORD: |
1120 | PExpression(parser, e); |
1121 | PExpression(parser, e); |
Line 1407... | Line 1408... | ||
1407 | END LoadAdr; |
1408 | END LoadAdr; |
Line 1408... | Line 1409... | ||
1408 | 1409 | ||
1409 | 1410 | ||
1410 | PROCEDURE OpenIdx (parser: PARS.PARSER; pos: PARS.POSITION; e: PARS.EXPR); |
1411 | PROCEDURE OpenIdx (parser: PARS.PARSER; pos: PARS.POSITION; e: PARS.EXPR); |
1411 | VAR |
1412 | VAR |
1412 | label: INTEGER; |
- | |
Line 1413... | Line 1413... | ||
1413 | type: PROG.TYPE_; |
1413 | label, offset, n, k: INTEGER; |
Line 1414... | Line 1414... | ||
1414 | n, offset, k: INTEGER; |
1414 | type: PROG.TYPE_; |
1415 | 1415 | ||
Line 1569... | Line 1569... | ||
1569 | END designator; |
1569 | END designator; |
Line 1570... | Line 1570... | ||
1570 | 1570 | ||
1571 | 1571 | ||
1572 | PROCEDURE ProcCall (e: PARS.EXPR; procType: PROG.TYPE_; isfloat: BOOLEAN; VAR fregs: INTEGER; parser: PARS.PARSER; pos: PARS.POSITION; CallStat: BOOLEAN); |
1572 | PROCEDURE ProcCall (e: PARS.EXPR; procType: PROG.TYPE_; isfloat: BOOLEAN; VAR fregs: INTEGER; parser: PARS.PARSER; pos: PARS.POSITION; CallStat: BOOLEAN); |
1573 | VAR |
1573 | VAR |
1574 | cconv: INTEGER; |
1574 | cconv, |
1575 | parSize: INTEGER; |
1575 | parSize, |
1576 | callconv: INTEGER; |
1576 | callconv, |
1577 | fparSize: INTEGER; |
1577 | fparSize, |
Line 1578... | Line 1578... | ||
1578 | int, flt: INTEGER; |
1578 | int, flt, |
1579 | stk_par: INTEGER; |
1579 | stk_par: INTEGER; |
1580 | 1580 | ||
Line 1860... | Line 1860... | ||
1860 | 1860 | ||
1861 | 1861 | ||
1862 | PROCEDURE term (parser: PARS.PARSER; VAR e: PARS.EXPR); |
1862 | PROCEDURE term (parser: PARS.PARSER; VAR e: PARS.EXPR); |
1863 | VAR |
- | |
1864 | pos: PARS.POSITION; |
1863 | VAR |
1865 | op: INTEGER; |
- | |
1866 | e1: PARS.EXPR; |
- | |
1867 | 1864 | pos: PARS.POSITION; |
|
Line 1868... | Line 1865... | ||
1868 | label: INTEGER; |
1865 | e1: PARS.EXPR; |
1869 | label1: INTEGER; |
1866 | op, label, label1: INTEGER; |
1870 | 1867 | ||
Line 1970... | Line 1967... | ||
1970 | END |
1967 | END |
Line 1971... | Line 1968... | ||
1971 | 1968 | ||
1972 | |SCAN.lxDIV, SCAN.lxMOD: |
1969 | |SCAN.lxDIV, SCAN.lxMOD: |
1973 | PARS.check(isInt(e) & isInt(e1), pos, 37); |
1970 | PARS.check(isInt(e) & isInt(e1), pos, 37); |
1974 | IF e1.obj = eCONST THEN |
- | |
1975 | PARS.check(~ARITH.isZero(e1.value), pos, 46); |
- | |
1976 | IF CPU = cpuMSP430 THEN |
1971 | IF e1.obj = eCONST THEN |
1977 | PARS.check(ARITH.Int(e1.value) > 0, pos, 122) |
- | |
1978 | END |
1972 | PARS.check(ARITH.Int(e1.value) > 0, pos, 122) |
1979 | END; |
1973 | END; |
Line 1980... | Line 1974... | ||
1980 | IF (e.obj = eCONST) & (e1.obj = eCONST) THEN |
1974 | IF (e.obj = eCONST) & (e1.obj = eCONST) THEN |
1981 | 1975 | ||
Line 1986... | Line 1980... | ||
1986 | END |
1980 | END |
Line 1987... | Line 1981... | ||
1987 | 1981 | ||
1988 | ELSE |
1982 | ELSE |
1989 | IF e1.obj # eCONST THEN |
1983 | IF e1.obj # eCONST THEN |
1990 | label1 := IL.NewLabel(); |
- | |
1991 | IF CPU = cpuMSP430 THEN |
1984 | label1 := IL.NewLabel(); |
1992 | IL.AddJmpCmd(IL.opJG, label1) |
- | |
1993 | ELSE |
- | |
1994 | IL.AddJmpCmd(IL.opJNZ, label1) |
- | |
1995 | END |
1985 | IL.AddJmpCmd(IL.opJG, label1) |
1996 | END; |
1986 | END; |
1997 | IF e.obj = eCONST THEN |
1987 | IF e.obj = eCONST THEN |
1998 | IL.OnError(pos.line, errDIV); |
1988 | IL.OnError(pos.line, errDIV); |
1999 | IL.SetLabel(label1); |
1989 | IL.SetLabel(label1); |
Line 2221... | Line 2211... | ||
2221 | PROCEDURE strcmp (VAR e, e1: PARS.EXPR; op: INTEGER): BOOLEAN; |
2211 | PROCEDURE strcmp (VAR e, e1: PARS.EXPR; op: INTEGER): BOOLEAN; |
2222 | VAR |
2212 | VAR |
2223 | res: BOOLEAN; |
2213 | res: BOOLEAN; |
Line 2224... | Line 2214... | ||
2224 | 2214 | ||
2225 | BEGIN |
- | |
2226 | 2215 | BEGIN |
|
Line 2227... | Line 2216... | ||
2227 | res := TRUE; |
2216 | res := TRUE; |
2228 | 2217 | ||
2229 | IF isString(e) & isCharArray(e1) THEN |
2218 | IF isString(e) & isCharArray(e1) THEN |
Line 3024... | Line 3013... | ||
3024 | IF e.obj = eCONST THEN |
3013 | IF e.obj = eCONST THEN |
3025 | LoadConst(e) |
3014 | LoadConst(e) |
3026 | ELSIF isRec(e) THEN |
3015 | ELSIF isRec(e) THEN |
3027 | IL.drop; |
3016 | IL.drop; |
3028 | IL.AddCmd(IL.opLADR, e.ident.offset - 1); |
3017 | IL.AddCmd(IL.opLADR, e.ident.offset - 1); |
3029 | IL.load(PARS.program.target.word) |
3018 | IL.load(TARGETS.WordSize) |
3030 | ELSIF isPtr(e) THEN |
3019 | ELSIF isPtr(e) THEN |
3031 | deref(pos, e, FALSE, errPTR); |
3020 | deref(pos, e, FALSE, errPTR); |
3032 | IL.AddCmd(IL.opSUBR, PARS.program.target.word); |
3021 | IL.AddCmd(IL.opSUBR, TARGETS.WordSize); |
3033 | IL.load(PARS.program.target.word) |
3022 | IL.load(TARGETS.WordSize) |
3034 | END; |
3023 | END; |
Line 3035... | Line 3024... | ||
3035 | 3024 | ||
3036 | PARS.checklex(parser, SCAN.lxOF); |
3025 | PARS.checklex(parser, SCAN.lxOF); |
3037 | PARS.Next(parser); |
3026 | PARS.Next(parser); |
Line 3241... | Line 3230... | ||
3241 | 3230 | ||
3242 | BEGIN |
3231 | BEGIN |
3243 | rtl := PARS.program.rtl; |
3232 | rtl := PARS.program.rtl; |
Line 3244... | Line -... | ||
3244 | ASSERT(rtl # NIL); |
- | |
3245 | 3233 | ASSERT(rtl # NIL); |
|
3246 | IF CPU IN {cpuX86, cpuAMD64} THEN |
3234 | |
3247 | getproc(rtl, "_strcmp", IL._strcmp); |
3235 | getproc(rtl, "_strcmp", IL._strcmp); |
3248 | getproc(rtl, "_length", IL._length); |
3236 | getproc(rtl, "_length", IL._length); |
3249 | getproc(rtl, "_arrcpy", IL._arrcpy); |
3237 | getproc(rtl, "_arrcpy", IL._arrcpy); |
3250 | getproc(rtl, "_is", IL._is); |
3238 | getproc(rtl, "_is", IL._is); |
3251 | getproc(rtl, "_guard", IL._guard); |
- | |
3252 | getproc(rtl, "_guardrec", IL._guardrec); |
3239 | getproc(rtl, "_guard", IL._guard); |
3253 | getproc(rtl, "_error", IL._error); |
3240 | getproc(rtl, "_guardrec", IL._guardrec); |
3254 | getproc(rtl, "_new", IL._new); |
3241 | getproc(rtl, "_new", IL._new); |
3255 | getproc(rtl, "_rot", IL._rot); |
3242 | getproc(rtl, "_rot", IL._rot); |
3256 | getproc(rtl, "_strcpy", IL._strcpy); |
- | |
3257 | getproc(rtl, "_move", IL._move); |
3243 | getproc(rtl, "_strcpy", IL._strcpy); |
3258 | getproc(rtl, "_divmod", IL._divmod); |
3244 | getproc(rtl, "_move", IL._move); |
3259 | getproc(rtl, "_set", IL._set); |
- | |
3260 | getproc(rtl, "_set1", IL._set1); |
3245 | getproc(rtl, "_set", IL._set); |
3261 | getproc(rtl, "_isrec", IL._isrec); |
3246 | getproc(rtl, "_set1", IL._set1); |
3262 | getproc(rtl, "_lengthw", IL._lengthw); |
- | |
3263 | getproc(rtl, "_strcmpw", IL._strcmpw); |
- | |
3264 | getproc(rtl, "_dllentry", IL._dllentry); |
- | |
3265 | getproc(rtl, "_dispose", IL._dispose); |
3247 | getproc(rtl, "_lengthw", IL._lengthw); |
- | 3248 | getproc(rtl, "_strcmpw", IL._strcmpw); |
|
- | 3249 | getproc(rtl, "_init", IL._init); |
|
- | 3250 | ||
- | 3251 | IF CPU IN {TARGETS.cpuX86, TARGETS.cpuAMD64} THEN |
|
- | 3252 | getproc(rtl, "_error", IL._error); |
|
- | 3253 | getproc(rtl, "_divmod", IL._divmod); |
|
- | 3254 | getproc(rtl, "_exit", IL._exit); |
|
- | 3255 | getproc(rtl, "_dispose", IL._dispose); |
|
3266 | getproc(rtl, "_exit", IL._exit); |
3256 | getproc(rtl, "_isrec", IL._isrec); |
- | 3257 | getproc(rtl, "_dllentry", IL._dllentry); |
|
- | 3258 | getproc(rtl, "_sofinit", IL._sofinit) |
|
- | 3259 | ELSIF CPU = TARGETS.cpuTHUMB THEN |
|
- | 3260 | getproc(rtl, "_fmul", IL._fmul); |
|
- | 3261 | getproc(rtl, "_fdiv", IL._fdiv); |
|
- | 3262 | getproc(rtl, "_fdivi", IL._fdivi); |
|
- | 3263 | getproc(rtl, "_fadd", IL._fadd); |
|
- | 3264 | getproc(rtl, "_fsub", IL._fsub); |
|
- | 3265 | getproc(rtl, "_fsubi", IL._fsubi); |
|
- | 3266 | getproc(rtl, "_fcmp", IL._fcmp); |
|
- | 3267 | getproc(rtl, "_floor", IL._floor); |
|
- | 3268 | getproc(rtl, "_flt", IL._flt); |
|
3267 | getproc(rtl, "_init", IL._init); |
3269 | getproc(rtl, "_pack", IL._pack); |
Line 3268... | Line 3270... | ||
3268 | getproc(rtl, "_sofinit", IL._sofinit) |
3270 | getproc(rtl, "_unpk", IL._unpk) |
Line 3284... | Line 3286... | ||
3284 | tBOOLEAN := PARS.program.stTypes.tBOOLEAN; |
3286 | tBOOLEAN := PARS.program.stTypes.tBOOLEAN; |
3285 | tWCHAR := PARS.program.stTypes.tWCHAR; |
3287 | tWCHAR := PARS.program.stTypes.tWCHAR; |
3286 | tREAL := PARS.program.stTypes.tREAL; |
3288 | tREAL := PARS.program.stTypes.tREAL; |
Line 3287... | Line 3289... | ||
3287 | 3289 | ||
- | 3290 | Options := options; |
|
Line 3288... | Line -... | ||
3288 | Options := options; |
- | |
3289 | - | ||
3290 | CASE target OF |
- | |
3291 | |mConst.Target_iConsole64, mConst.Target_iGUI64, mConst.Target_iDLL64, mConst.Target_iELF64, mConst.Target_iELFSO64: |
- | |
3292 | CPU := cpuAMD64 |
- | |
3293 | |mConst.Target_iConsole, mConst.Target_iGUI, mConst.Target_iDLL, |
- | |
3294 | mConst.Target_iKolibri, mConst.Target_iObject, mConst.Target_iELF32, |
- | |
3295 | mConst.Target_iELFSO32: |
- | |
3296 | CPU := cpuX86 |
- | |
3297 | |mConst.Target_iMSP430: |
- | |
3298 | CPU := cpuMSP430 |
- | |
3299 | END; |
3291 | CPU := TARGETS.CPU; |
3300 | 3292 | ||
3301 | ext := mConst.FILE_EXT; |
3293 | ext := UTILS.FILE_EXT; |
Line 3302... | Line 3294... | ||
3302 | CaseLabels := C.create(); |
3294 | CaseLabels := C.create(); |
3303 | CaseVar := C.create(); |
3295 | CaseVar := C.create(); |
Line 3304... | Line 3296... | ||
3304 | 3296 | ||
3305 | CaseVariants := LISTS.create(NIL); |
- | |
3306 | LISTS.push(CaseVariants, NewVariant(0, NIL)); |
- | |
3307 | - | ||
3308 | CASE CPU OF |
- | |
Line 3309... | Line 3297... | ||
3309 | |cpuAMD64: IL.init(6, IL.little_endian) |
3297 | CaseVariants := LISTS.create(NIL); |
3310 | |cpuX86: IL.init(8, IL.little_endian) |
3298 | LISTS.push(CaseVariants, NewVariant(0, NIL)); |
3311 | |cpuMSP430: IL.init(0, IL.little_endian) |
3299 | |
3312 | END; |
3300 | IL.init(CPU); |
3313 | 3301 | ||
3314 | IF CPU # cpuMSP430 THEN |
3302 | IF CPU # TARGETS.cpuMSP430 THEN |
3315 | parser := PARS.create(path, lib_path, StatSeq, expression, designator, chkreturn); |
3303 | parser := PARS.create(path, lib_path, StatSeq, expression, designator, chkreturn); |
3316 | IF parser.open(parser, mConst.RTL_NAME) THEN |
3304 | IF parser.open(parser, UTILS.RTL_NAME) THEN |
3317 | parser.parse(parser); |
3305 | parser.parse(parser); |
3318 | PARS.destroy(parser) |
3306 | PARS.destroy(parser) |
3319 | ELSE |
3307 | ELSE |
3320 | PARS.destroy(parser); |
3308 | PARS.destroy(parser); |
3321 | parser := PARS.create(lib_path, lib_path, StatSeq, expression, designator, chkreturn); |
3309 | parser := PARS.create(lib_path, lib_path, StatSeq, expression, designator, chkreturn); |
3322 | IF parser.open(parser, mConst.RTL_NAME) THEN |
3310 | IF parser.open(parser, UTILS.RTL_NAME) THEN |
3323 | parser.parse(parser); |
3311 | parser.parse(parser); |
3324 | PARS.destroy(parser) |
3312 | PARS.destroy(parser) |
Line 3325... | Line 3313... | ||
3325 | ELSE |
3313 | ELSE |
3326 | ERRORS.FileNotFound(lib_path, mConst.RTL_NAME, mConst.FILE_EXT) |
3314 | ERRORS.FileNotFound(lib_path, UTILS.RTL_NAME, UTILS.FILE_EXT) |
Line 3327... | Line 3315... | ||
3327 | END |
3315 | END |
3328 | END |
3316 | END |
3329 | END; |
3317 | END; |
3330 | 3318 | ||
3331 | parser := PARS.create(path, lib_path, StatSeq, expression, designator, chkreturn); |
3319 | parser := PARS.create(path, lib_path, StatSeq, expression, designator, chkreturn); |
Line 3332... | Line 3320... | ||
3332 | parser.main := TRUE; |
3320 | parser.main := TRUE; |
Line 3333... | Line 3321... | ||
3333 | 3321 | ||
3334 | IF parser.open(parser, modname) THEN |
3322 | IF parser.open(parser, modname) THEN |
3335 | parser.parse(parser) |
3323 | parser.parse(parser) |
Line 3336... | Line 3324... | ||
3336 | ELSE |
3324 | ELSE |
3337 | ERRORS.FileNotFound(path, modname, mConst.FILE_EXT) |
3325 | ERRORS.FileNotFound(path, modname, UTILS.FILE_EXT) |
3338 | END; |
3326 | END; |
Line 3339... | Line 3327... | ||
3339 | 3327 | ||
Line 3340... | Line 3328... | ||
3340 | PARS.destroy(parser); |
3328 | PARS.destroy(parser); |
Line 3341... | Line 3329... | ||
3341 | 3329 | ||
3342 | IF PARS.program.bss > mConst.MAX_GLOBAL_SIZE THEN |
3330 | IF PARS.program.bss > UTILS.MAX_GLOBAL_SIZE THEN |
3343 | ERRORS.Error(204) |
3331 | ERRORS.Error(204) |
3344 | END; |
3332 | END; |
- | 3333 | ||
3345 | 3334 | IF CPU # TARGETS.cpuMSP430 THEN |
|
Line 3346... | Line 3335... | ||
3346 | IF CPU # cpuMSP430 THEN |
3335 | setrtl |