build: separate package identity from storage paths
This commit is contained in:
@@ -60,6 +60,25 @@ fn slurp(path: *u8) (*u8, u64) = {
|
||||
return buf.ptr, nz;
|
||||
};
|
||||
|
||||
fn exportownermatches(buf: *u8, n: u64, path: *u8) bool = {
|
||||
let prefix: str = "//ww:module ";
|
||||
let pn: u64 = cstrlen(path);
|
||||
let poff: u64 = prefix.len: u64;
|
||||
let need: u64 = poff + pn + 1u64;
|
||||
if (n < need) { return false; };
|
||||
let i: u64 = 0u64;
|
||||
for (i < poff) {
|
||||
if (buf[i] != prefix.ptr[i]) { return false; };
|
||||
i += 1u64;
|
||||
};
|
||||
i = 0u64;
|
||||
for (i < pn) {
|
||||
if (buf[poff + i] != path[i]) { return false; };
|
||||
i += 1u64;
|
||||
};
|
||||
return buf[need - 1u64] == 10u8;
|
||||
};
|
||||
|
||||
export fn main(argc: i32, argv: **u8) i32 = {
|
||||
let src: *u8 = nil;
|
||||
let out: *u8 = nil;
|
||||
@@ -204,6 +223,17 @@ export fn main(argc: i32, argv: **u8) i32 = {
|
||||
os.write(2, nl.ptr, nl.len: u64);
|
||||
return 1;
|
||||
};
|
||||
if (!exportownermatches(ibuf, ilen, importpaths[importi])) {
|
||||
let pre: str = "w6c: import ";
|
||||
let mid: str = ": export owner mismatch in ";
|
||||
let nl: str = "\n";
|
||||
os.write(2, pre.ptr, pre.len: u64);
|
||||
os.write(2, importpaths[importi], cstrlen(importpaths[importi]));
|
||||
os.write(2, mid.ptr, mid.len: u64);
|
||||
os.write(2, importfiles[importi], cstrlen(importfiles[importi]));
|
||||
os.write(2, nl.ptr, nl.len: u64);
|
||||
return 1;
|
||||
};
|
||||
let il: lex;
|
||||
lexinit(&il, strings.dup(pathstr(importfiles[importi])), ibuf, ilen);
|
||||
let ips: parser;
|
||||
|
||||
Reference in New Issue
Block a user