feat(ffi-linkage): reject extern+export on one decl (Phase 4) — 1175 green
This commit is contained in:
@@ -2002,6 +2002,14 @@ pub const Parser = struct {
|
|||||||
// Optional postfix linkage modifier: `extern` (import) / `export` (define).
|
// Optional postfix linkage modifier: `extern` (import) / `export` (define).
|
||||||
const extern_export = self.parseOptionalExternExport();
|
const extern_export = self.parseOptionalExternExport();
|
||||||
|
|
||||||
|
// `extern` and `export` are mutually exclusive — one declaration is either
|
||||||
|
// an import or a definition, never both. Reject the redundant second keyword
|
||||||
|
// with a clear message rather than the bare "expected ';'" the body parser
|
||||||
|
// would otherwise emit.
|
||||||
|
if (extern_export != .none and (self.current.tag == .kw_extern or self.current.tag == .kw_export)) {
|
||||||
|
return self.fail("conflicting linkage: 'extern' and 'export' cannot be combined — a declaration is either an import ('extern') or a definition ('export')");
|
||||||
|
}
|
||||||
|
|
||||||
// Optional `[LIB] ["csym"]` tail after extern/export — a library-alias
|
// Optional `[LIB] ["csym"]` tail after extern/export — a library-alias
|
||||||
// ident then a C symbol-name string, both optional (mirrors
|
// ident then a C symbol-name string, both optional (mirrors
|
||||||
// `#foreign LIB "csym"`). Stored on extern_lib/extern_name; the rename
|
// `#foreign LIB "csym"`). Stored on extern_lib/extern_name; the rename
|
||||||
|
|||||||
Reference in New Issue
Block a user