Build tag to make all declarations within a file private to the package //+private

This commit is contained in:
gingerBill
2021-02-23 20:40:48 +00:00
parent 731e6ca3a6
commit 8f9111e552
4 changed files with 10 additions and 3 deletions

View File

@@ -3503,9 +3503,10 @@ Entity *check_selector(CheckerContext *c, Operand *operand, Ast *node, Type *typ
gbString sel_str = expr_to_string(selector);
error(op_expr, "'%s' is not exported by '%.*s'", sel_str, LIT(import_name));
gb_string_free(sel_str);
operand->mode = Addressing_Invalid;
operand->expr = node;
return nullptr;
// NOTE(bill): make the state valid still, even if it's "invalid"
// operand->mode = Addressing_Invalid;
// operand->expr = node;
// return nullptr;
}
if (entity->kind == Entity_ProcGroup) {

View File

@@ -199,6 +199,9 @@ bool is_entity_exported(Entity *e, bool allow_builtin = false) {
if (e->flags & EntityFlag_NotExported) {
return false;
}
if (e->file != nullptr && e->file->is_private) {
return false;
}
String name = e->token.string;
switch (name.len) {

View File

@@ -5176,6 +5176,8 @@ bool parse_file(Parser *p, AstFile *f) {
if (!parse_build_tag(tok, lc)) {
return false;
}
} else if (lc == "+private") {
f->is_private = true;
}
}
}

View File

@@ -109,6 +109,7 @@ struct AstFile {
f64 time_to_tokenize; // seconds
f64 time_to_parse; // seconds
bool is_private;
bool is_test;
CommentGroup *lead_comment; // Comment (block) before the decl