feat(ffi-linkage): reject #foreign + postfix extern/export combo (Phase 4) — 1174 green
This commit is contained in:
@@ -1415,11 +1415,16 @@ pub const Parser = struct {
|
|||||||
// unchanged. The legacy prefix `#foreign` form still works via the
|
// unchanged. The legacy prefix `#foreign` form still works via the
|
||||||
// `is_foreign` argument; interplay/diagnostics for combining them is Phase 4.
|
// `is_foreign` argument; interplay/diagnostics for combining them is Phase 4.
|
||||||
var is_foreign_eff = is_foreign;
|
var is_foreign_eff = is_foreign;
|
||||||
if (self.current.tag == .kw_extern) {
|
if (self.current.tag == .kw_extern or self.current.tag == .kw_export) {
|
||||||
is_foreign_eff = true;
|
// Prefix `#foreign` and the postfix `extern`/`export` keyword are two
|
||||||
self.advance();
|
// spellings of the same linkage axis — combining them is contradictory
|
||||||
} else if (self.current.tag == .kw_export) {
|
// (`#foreign`=import vs `export`=define) or redundant (`#foreign … extern`).
|
||||||
is_foreign_eff = false;
|
// Reject at the postfix keyword rather than let it silently override.
|
||||||
|
if (is_foreign) {
|
||||||
|
const kw = if (self.current.tag == .kw_export) "export" else "extern";
|
||||||
|
return self.failFmt("conflicting linkage: prefix '#foreign' cannot be combined with postfix '{s}'; use either '#foreign' or postfix 'extern'/'export', not both", .{kw});
|
||||||
|
}
|
||||||
|
is_foreign_eff = self.current.tag == .kw_extern;
|
||||||
self.advance();
|
self.advance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user