импорт модулей с указанием пути:
IMPORT mod IN "./lib/mod.ob07";
This commit is contained in:
AntKrotov committed 2020-12-02 17:49:54 +03:00
1 parent af99c55423
commit fb12e18a2f
10 files changed
+110 -21

No files matched your search

BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+7 -1
View File
@@ -1,7 +1,7 @@
(*
BSD 2-Clause License
Copyright (c) 2018-2019, Anton Krotov
Copyright (c) 2018-2020, Anton Krotov
All rights reserved.
*)
@@ -79,4 +79,10 @@ BEGIN
END Int2Ln;
PROCEDURE Dashes*;
BEGIN
StringLn("------------------------------------------------")
END Dashes;
END CONSOLE.
+3 -3
View File
@@ -190,7 +190,7 @@ BEGIN
C.Ln;
C.String("Akron Oberon Compiler v"); C.Int(UTILS.vMajor); C.String("."); C.Int2(UTILS.vMinor);
C.String(" ("); C.Int(UTILS.bit_depth); C.StringLn("-bit)");
C.String(" ("); C.Int(UTILS.bit_depth); C.String("-bit) "); C.StringLn("2020-12-02");
C.StringLn("Copyright (c) 2018-2020, Anton Krotov");
IF inname = "" THEN
@@ -227,7 +227,7 @@ BEGIN
UTILS.Exit(0)
END;
C.StringLn("--------------------------------------------");
C.Dashes;
PATHS.split(inname, path, modname, ext);
IF ext # UTILS.FILE_EXT THEN
@@ -288,7 +288,7 @@ BEGIN
ST.compile(path, lib_path, modname, outname, target, options);
time := UTILS.GetTickCount() - UTILS.time;
C.StringLn("--------------------------------------------");
C.Dashes;
C.Int(PARS.lines); C.String(" lines, ");
C.Int(time DIV 100); C.String("."); C.Int2(time MOD 100); C.String(" sec, ");
C.Int(WRITER.counter); C.StringLn(" bytes");
+1 -1
View File
@@ -1729,7 +1729,7 @@ BEGIN
INC(TextSize, IntVectorSize + TypesSize);
INC(Bss.size, minStackSize + RTL.VarSize);
C.StringLn("--------------------------------------------");
C.Dashes;
C.String( " rom: "); C.Int(TextSize); C.String(" of "); C.Int(rom); C.String(" ("); C.Int(TextSize * 100 DIV rom); C.StringLn("%)");
IF Free.size > 0 THEN
C.String( " "); C.Int(Free.size); C.String(" bytes free (0");
+51 -7
View File
@@ -198,10 +198,11 @@ END ExpectSym;
PROCEDURE ImportList (parser: PARSER);
VAR
fname, path, ext, _name: PATH;
name: SCAN.IDENT;
parser2: PARSER;
pos: POSITION;
alias: BOOLEAN;
alias, _in: BOOLEAN;
unit: PROG.UNIT;
ident: PROG.IDENT;
@@ -222,22 +223,64 @@ BEGIN
Next(parser);
path := parser.path;
fname := "";
COPY(name.s, _name);
_in := FALSE;
IF parser.sym = SCAN.lxIN THEN
_in := TRUE;
Next(parser);
IF parser.sym = SCAN.lxSTRING THEN
STRINGS.trim(parser.lex.s, fname);
STRINGS.replace(fname, "/", UTILS.slash);
STRINGS.replace(fname, "\", UTILS.slash);
PATHS.split(fname, path, _name, ext);
IF PATHS.isRelative(path) THEN
PATHS.RelPath(parser.path, path, fname);
STRINGS.append(fname, _name);
STRINGS.append(fname, ext);
PATHS.split(fname, path, _name, ext)
END;
Next(parser)
ELSE
check1(FALSE, parser, 117)
END
END;
IF (parser.sym = SCAN.lxCOMMA) OR (parser.sym = SCAN.lxSEMI) THEN
alias := FALSE;
unit := PROG.getUnit(name);
IF (fname = "") & ((_name = "SYSTEM") OR PROG.LowerCase & (_name = "system")) THEN
unit := PROG.program.sysunit
ELSE
IF fname # "" THEN
unit := PROG.getUnit(fname)
ELSE
fname := path;
STRINGS.append(fname, _name);
STRINGS.append(fname, UTILS.FILE_EXT);
unit := PROG.getUnit(fname);
IF unit = NIL THEN
fname := parser.lib_path;
STRINGS.append(fname, _name);
STRINGS.append(fname, UTILS.FILE_EXT);
unit := PROG.getUnit(fname)
END
END
END;
IF unit # NIL THEN
check(unit.closed, pos, 31)
ELSE
parser2 := parser.create(parser.path, parser.lib_path,
parser2 := parser.create(path, parser.lib_path,
parser.StatSeq, parser.expression, parser.designator, parser.chkreturn);
IF ~parser2.open(parser2, name.s) THEN
IF parser.path # parser.lib_path THEN
IF ~parser2.open(parser2, _name) THEN
IF (path # parser.lib_path) & ~_in THEN
destroy(parser2);
parser2 := parser.create(parser.lib_path, parser.lib_path,
parser.StatSeq, parser.expression, parser.designator, parser.chkreturn);
check(parser2.open(parser2, name.s), pos, 29)
check(parser2.open(parser2, _name), pos, 29)
ELSE
error(pos, 29)
END
@@ -245,6 +288,7 @@ BEGIN
parser2.parse(parser2);
unit := parser2.unit;
unit.fname := parser2.fname;
destroy(parser2)
END;
IF unit = PROG.program.sysunit THEN
@@ -1189,7 +1233,7 @@ BEGIN
END;
unit := PROG.newUnit(parser.lex.ident);
unit.fname := parser.fname;
parser.unit := unit;
ExpectSym(parser, SCAN.lxSEMI);
+7 -7
View File
@@ -7,7 +7,7 @@
MODULE PROG;
IMPORT SCAN, LISTS, ARITH, ERRORS, C := COLLECTIONS, IL, UTILS, TARGETS, STRINGS;
IMPORT SCAN, LISTS, ARITH, ERRORS, C := COLLECTIONS, IL, UTILS, TARGETS, STRINGS, PATHS;
CONST
@@ -115,6 +115,7 @@ TYPE
rUNIT = RECORD (LISTS.ITEM)
fname*: PATHS.PATH;
name*: SCAN.IDENT;
idents*: LISTS.LIST;
frwPointers: LISTS.LIST;
@@ -214,7 +215,7 @@ TYPE
VAR
LowerCase: BOOLEAN;
LowerCase*: BOOLEAN;
idents: C.COLLECTION;
program*: PROGRAM;
@@ -626,20 +627,18 @@ PROCEDURE arrcomp* (src, dst: _TYPE): BOOLEAN;
END arrcomp;
PROCEDURE getUnit* (name: SCAN.IDENT): UNIT;
PROCEDURE getUnit* (name: PATHS.PATH): UNIT;
VAR
item: UNIT;
BEGIN
ASSERT(name # NIL);
item := program.units.first(UNIT);
WHILE (item # NIL) & (item.name # name) DO
WHILE (item # NIL) & (item.fname # name) DO
item := item.next(UNIT)
END;
IF (item = NIL) & ((name.s = "SYSTEM") OR LowerCase & (name.s = "system")) THEN
IF (item = NIL) & ((name = "SYSTEM") OR LowerCase & (name = "system")) THEN
item := program.sysunit
END
@@ -1126,6 +1125,7 @@ VAR
BEGIN
unit := newUnit(SCAN.enterid("$SYSTEM"));
unit.fname := "SYSTEM";
EnterProc(unit, "adr", idSYSFUNC, sysADR);
EnterProc(unit, "size", idSYSFUNC, sysSIZE);
+39
View File
@@ -110,6 +110,45 @@ BEGIN
END search;
PROCEDURE replace* (VAR s: ARRAY OF CHAR; find, repl: CHAR);
VAR
i: INTEGER;
BEGIN
i := 0;
WHILE s[i] # 0X DO
IF s[i] = find THEN
s[i] := repl
END;
INC(i)
END
END replace;
PROCEDURE trim* (source: ARRAY OF CHAR; VAR result: ARRAY OF CHAR);
VAR
LenS, start, _end, i, j: INTEGER;
BEGIN
LenS := LENGTH(source);
IF LenS > 0 THEN
WHILE source[start] <= 20X DO
INC(start)
END;
_end := LenS - 1;
WHILE source[_end] <= 20X DO
DEC(_end)
END;
FOR i := start TO _end DO
result[j] := source[i];
INC(j)
END;
result[j] := 0X
END
END trim;
PROCEDURE letter* (c: CHAR): BOOLEAN;
RETURN ("a" <= c) & (c <= "z") OR ("A" <= c) & (c <= "Z") OR (c = "_")
END letter;
+1 -1
View File
@@ -2381,7 +2381,7 @@ BEGIN
WR.Close;
C.StringLn("--------------------------------------------");
C.Dashes;
C.String( " rom: "); C.Int(CodeSize); C.String(" of "); C.Int(rom); C.String(" ("); C.Int(CodeSize * 100 DIV rom); C.StringLn("%)");
C.Ln;
C.String( " ram: "); C.Int(DataSize); C.String(" of "); C.Int(ram); C.String(" ("); C.Int(DataSize * 100 DIV ram); C.StringLn("%)")
+1 -1
View File
@@ -23,7 +23,7 @@ CONST
max32* = 2147483647;
vMajor* = 1;
vMinor* = 43;
vMinor* = 44;
FILE_EXT* = ".ob07";
RTL_NAME* = "RTL";