Prechádzať zdrojové kódy

Merge pull request #4165 from avanspector/master

Add missing lexer checking delay for foreign blocks
gingerBill 1 rok pred
rodič
commit
291048cb3b
1 zmenil súbory, kde vykonal 4 pridanie a 5 odobranie
  1. 4 5
      src/checker.cpp

+ 4 - 5
src/checker.cpp

@@ -5228,9 +5228,9 @@ gb_internal bool collect_file_decl(CheckerContext *ctx, Ast *decl) {
 	case_end;
 	case_end;
 
 
 	case_ast_node(fb, ForeignBlockDecl, decl);
 	case_ast_node(fb, ForeignBlockDecl, decl);
-		if (check_add_foreign_block_decl(ctx, decl)) {
-			return true;
-		}
+		GB_ASSERT(ctx->collect_delayed_decls);
+		decl->state_flags |= StateFlag_BeenHandled;
+		array_add(&curr_file->delayed_decls_queues[AstDelayQueue_ForeignBlock], decl);
 	case_end;
 	case_end;
 
 
 	case_ast_node(ws, WhenStmt, decl);
 	case_ast_node(ws, WhenStmt, decl);
@@ -5513,8 +5513,6 @@ gb_internal void check_import_entities(Checker *c) {
 		for_array(i, pkg->files) {
 		for_array(i, pkg->files) {
 			AstFile *f = pkg->files[i];
 			AstFile *f = pkg->files[i];
 			reset_checker_context(&ctx, f, &untyped);
 			reset_checker_context(&ctx, f, &untyped);
-			ctx.collect_delayed_decls = false;
-
 			correct_type_aliases_in_scope(&ctx, pkg->scope);
 			correct_type_aliases_in_scope(&ctx, pkg->scope);
 		}
 		}
 
 
@@ -5522,6 +5520,7 @@ gb_internal void check_import_entities(Checker *c) {
 			AstFile *f = pkg->files[i];
 			AstFile *f = pkg->files[i];
 			reset_checker_context(&ctx, f, &untyped);
 			reset_checker_context(&ctx, f, &untyped);
 
 
+			ctx.collect_delayed_decls = true;
 			for (Ast *decl : f->delayed_decls_queues[AstDelayQueue_ForeignBlock]) {
 			for (Ast *decl : f->delayed_decls_queues[AstDelayQueue_ForeignBlock]) {
 				check_add_foreign_block_decl(&ctx, decl);
 				check_add_foreign_block_decl(&ctx, decl);
 			}
 			}