diff --git a/source/Compiler.ob07 b/source/Compiler.ob07 index 56814cc..9ae154c 100644 --- a/source/Compiler.ob07 +++ b/source/Compiler.ob07 @@ -162,7 +162,6 @@ VAR checking: SET; bits64: BOOLEAN; - //bit32only: ARRAY 15 OF CHAR; BEGIN StackSize := 2; @@ -231,9 +230,9 @@ BEGIN IF UTILS.bit_depth = 32 THEN ERRORS.error1("bad parameter ") END; - PARS.init(64) + PARS.init(64, target) ELSE - PARS.init(32) + PARS.init(32, target) END; PARS.program.dll := target IN {mConst.Target_iDLL, mConst.Target_iObject, mConst.Target_iDLL64}; diff --git a/source/ERRORS.ob07 b/source/ERRORS.ob07 index 894c2ec..331d5e3 100644 --- a/source/ERRORS.ob07 +++ b/source/ERRORS.ob07 @@ -86,7 +86,7 @@ BEGIN | 67: str := "'OF' expected" | 68: str := "type expected" | 69: str := "result type of procedure is not a basic type" - + | 70: str := "import not supported" | 71: str := "']' expected" | 72: str := "expression is not BOOLEAN" | 73: str := "not a record" diff --git a/source/PARS.ob07 b/source/PARS.ob07 index 6aa5723..6879c2a 100644 --- a/source/PARS.ob07 +++ b/source/PARS.ob07 @@ -493,13 +493,15 @@ END sysflag; PROCEDURE procflag (parser: PARSER; VAR import: CODE.IMPORT_PROC; isProc: BOOLEAN): INTEGER; VAR call: INTEGER; - dll, proc: SCAN.LEXSTR; + dll, proc: SCAN.LEXSTR; + pos: SCAN.POSITION; BEGIN import := NIL; - IF parser.sym = SCAN.lxLSQUARE THEN + IF parser.sym = SCAN.lxLSQUARE THEN + getpos(parser, pos); check1(parser.unit.sysimport, parser, 54); Next(parser); call := sysflag(parser); @@ -525,6 +527,10 @@ BEGIN Next(parser) ELSE call := PROG.default + END; + + IF import # NIL THEN + check(program.target.sys # mConst.Target_iELF32, parser, pos, 70) END RETURN call @@ -601,14 +607,14 @@ BEGIN t.closed := TRUE - ELSIF parser.sym = SCAN.lxRECORD THEN + ELSIF parser.sym = SCAN.lxRECORD THEN getpos(parser, pos2); Next(parser); t := program.enterType(program, PROG.tRECORD, 0, 0, unit); t.align := 1; - IF parser.sym = SCAN.lxLSQUARE THEN + IF parser.sym = SCAN.lxLSQUARE THEN check1(parser.unit.sysimport, parser, 54); Next(parser); RecFlag := sysflag(parser); @@ -1120,9 +1126,9 @@ BEGIN END create; -PROCEDURE init* (bit_depth: INTEGER); +PROCEDURE init* (bit_depth, sys: INTEGER); BEGIN - program := PROG.create(bit_depth); + program := PROG.create(bit_depth, sys); parsers := C.create() END init; diff --git a/source/PROG.ob07 b/source/PROG.ob07 index 1b937b9..e5625dd 100644 --- a/source/PROG.ob07 +++ b/source/PROG.ob07 @@ -81,7 +81,7 @@ TYPE END; PROC* = POINTER TO RECORD (LISTS.ITEM) - + label*: INTEGER; used*: BOOLEAN; processed*: BOOLEAN; @@ -241,7 +241,8 @@ TYPE bit_depth*: INTEGER; word*: INTEGER; - adr*: INTEGER + adr*: INTEGER; + sys*: INTEGER END; @@ -1223,7 +1224,7 @@ BEGIN END DelUnused; -PROCEDURE create* (bit_depth: INTEGER): PROGRAM; +PROCEDURE create* (bit_depth, sys: INTEGER): PROGRAM; VAR program: PROGRAM; units: UNITS; @@ -1239,6 +1240,7 @@ BEGIN program.target.bit_depth := bit_depth; program.target.word := bit_depth DIV 8; program.target.adr := bit_depth DIV 8; + program.target.sys := sys; program.recCount := -1; program.bss := 0;