Browse Source

Use `try_to_add_package_dependency`

gingerBill 3 years ago
parent
commit
5f8137025d
2 changed files with 21 additions and 8 deletions
  1. 7 7
      src/check_builtin.cpp
  2. 14 1
      src/checker.cpp

+ 7 - 7
src/check_builtin.cpp

@@ -223,10 +223,10 @@ void add_objc_proc_type(CheckerContext *c, Ast *call, Type *return_type, Slice<T
 	map_set(&c->info->objc_msgSend_types, call, data);
 	map_set(&c->info->objc_msgSend_types, call, data);
 	mutex_unlock(&c->info->objc_types_mutex);
 	mutex_unlock(&c->info->objc_types_mutex);
 
 
-	add_package_dependency(c, "runtime", "objc_msgSend");
-	add_package_dependency(c, "runtime", "objc_msgSend_fpret");
-	add_package_dependency(c, "runtime", "objc_msgSend_fp2ret");
-	add_package_dependency(c, "runtime", "objc_msgSend_stret");
+	try_to_add_package_dependency(c, "runtime", "objc_msgSend");
+	try_to_add_package_dependency(c, "runtime", "objc_msgSend_fpret");
+	try_to_add_package_dependency(c, "runtime", "objc_msgSend_fp2ret");
+	try_to_add_package_dependency(c, "runtime", "objc_msgSend_stret");
 }
 }
 
 
 bool is_constant_string(CheckerContext *c, String const &builtin_name, Ast *expr, String *name_) {
 bool is_constant_string(CheckerContext *c, String const &builtin_name, Ast *expr, String *name_) {
@@ -371,9 +371,9 @@ bool check_builtin_objc_procedure(CheckerContext *c, Operand *operand, Ast *call
 		}
 		}
 		operand->mode = Addressing_Value;
 		operand->mode = Addressing_Value;
 
 
-		add_package_dependency(c, "runtime", "objc_lookUpClass");
-		add_package_dependency(c, "runtime", "sel_registerName");
-		add_package_dependency(c, "runtime", "objc_allocateClassPair");
+		try_to_add_package_dependency(c, "runtime", "objc_lookUpClass");
+		try_to_add_package_dependency(c, "runtime", "sel_registerName");
+		try_to_add_package_dependency(c, "runtime", "objc_allocateClassPair");
 		return true;
 		return true;
 	} break;
 	} break;
 	}
 	}

+ 14 - 1
src/checker.cpp

@@ -733,12 +733,25 @@ void add_package_dependency(CheckerContext *c, char const *package_name, char co
 	String n = make_string_c(name);
 	String n = make_string_c(name);
 	AstPackage *p = get_core_package(&c->checker->info, make_string_c(package_name));
 	AstPackage *p = get_core_package(&c->checker->info, make_string_c(package_name));
 	Entity *e = scope_lookup(p->scope, n);
 	Entity *e = scope_lookup(p->scope, n);
-	e->flags |= EntityFlag_Used;
 	GB_ASSERT_MSG(e != nullptr, "%s", name);
 	GB_ASSERT_MSG(e != nullptr, "%s", name);
 	GB_ASSERT(c->decl != nullptr);
 	GB_ASSERT(c->decl != nullptr);
+	e->flags |= EntityFlag_Used;
+	add_dependency(c->info, c->decl, e);
+}
+
+void try_to_add_package_dependency(CheckerContext *c, char const *package_name, char const *name) {
+	String n = make_string_c(name);
+	AstPackage *p = get_core_package(&c->checker->info, make_string_c(package_name));
+	Entity *e = scope_lookup(p->scope, n);
+	if (e == nullptr) {
+		return;
+	}
+	GB_ASSERT(c->decl != nullptr);
+	e->flags |= EntityFlag_Used;
 	add_dependency(c->info, c->decl, e);
 	add_dependency(c->info, c->decl, e);
 }
 }
 
 
+
 void add_declaration_dependency(CheckerContext *c, Entity *e) {
 void add_declaration_dependency(CheckerContext *c, Entity *e) {
 	if (e == nullptr) {
 	if (e == nullptr) {
 		return;
 		return;