authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-05-11 14:50:39-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-05-11 14:51:08-07:00
logfb3952615948748baab6cac02371a7cbfff4e9ac
treefbe96459ea6e1314172d177f4f080a7801d72569
parentbcf15e39e2d4e2243f475852aca7749e40a70fbd

AstGen: support emitting multiple compile errors


3 files changed, 256 insertions(+), 64 deletions(-)

BRANCH_TODO+2-3
......@@ -44,9 +44,6 @@
4444
4545 * sort compile errors before presenting them to eliminate nondeterministic error reporting
4646
47 * when handling decls, catch the error and continue, so that
48 AstGen can report more than one compile error.
49
5047 * AstGen: add result location pointers to function calls
5148 * nested function decl: how to refer to params?
5249
......@@ -66,3 +63,5 @@
6663
6764 * better anonymous Decl naming convention
6865 - avoid the global atomic integer for the number because of contention
66
67 * AstGen memory leak with `block_gz.labeled_store_to_block_ptr_list.append`
src/AstGen.zig+240-60
......@@ -3317,20 +3317,32 @@ fn structDeclInner(
33173317 switch (node_tags[fn_proto]) {
33183318 .fn_proto_simple => {
33193319 var params: [1]ast.Node.Index = undefined;
3320 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoSimple(&params, fn_proto));
3320 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoSimple(&params, fn_proto)) catch |err| switch (err) {
3321 error.OutOfMemory => return error.OutOfMemory,
3322 error.AnalysisFail => {},
3323 };
33213324 continue;
33223325 },
33233326 .fn_proto_multi => {
3324 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoMulti(fn_proto));
3327 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoMulti(fn_proto)) catch |err| switch (err) {
3328 error.OutOfMemory => return error.OutOfMemory,
3329 error.AnalysisFail => {},
3330 };
33253331 continue;
33263332 },
33273333 .fn_proto_one => {
33283334 var params: [1]ast.Node.Index = undefined;
3329 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoOne(&params, fn_proto));
3335 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoOne(&params, fn_proto)) catch |err| switch (err) {
3336 error.OutOfMemory => return error.OutOfMemory,
3337 error.AnalysisFail => {},
3338 };
33303339 continue;
33313340 },
33323341 .fn_proto => {
3333 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProto(fn_proto));
3342 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProto(fn_proto)) catch |err| switch (err) {
3343 error.OutOfMemory => return error.OutOfMemory,
3344 error.AnalysisFail => {},
3345 };
33343346 continue;
33353347 },
33363348 else => unreachable,
......@@ -3338,50 +3350,83 @@ fn structDeclInner(
33383350 },
33393351 .fn_proto_simple => {
33403352 var params: [1]ast.Node.Index = undefined;
3341 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoSimple(&params, member_node));
3353 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoSimple(&params, member_node)) catch |err| switch (err) {
3354 error.OutOfMemory => return error.OutOfMemory,
3355 error.AnalysisFail => {},
3356 };
33423357 continue;
33433358 },
33443359 .fn_proto_multi => {
3345 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoMulti(member_node));
3360 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoMulti(member_node)) catch |err| switch (err) {
3361 error.OutOfMemory => return error.OutOfMemory,
3362 error.AnalysisFail => {},
3363 };
33463364 continue;
33473365 },
33483366 .fn_proto_one => {
33493367 var params: [1]ast.Node.Index = undefined;
3350 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoOne(&params, member_node));
3368 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoOne(&params, member_node)) catch |err| switch (err) {
3369 error.OutOfMemory => return error.OutOfMemory,
3370 error.AnalysisFail => {},
3371 };
33513372 continue;
33523373 },
33533374 .fn_proto => {
3354 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProto(member_node));
3375 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProto(member_node)) catch |err| switch (err) {
3376 error.OutOfMemory => return error.OutOfMemory,
3377 error.AnalysisFail => {},
3378 };
33553379 continue;
33563380 },
33573381
33583382 .global_var_decl => {
3359 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.globalVarDecl(member_node));
3383 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.globalVarDecl(member_node)) catch |err| switch (err) {
3384 error.OutOfMemory => return error.OutOfMemory,
3385 error.AnalysisFail => {},
3386 };
33603387 continue;
33613388 },
33623389 .local_var_decl => {
3363 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.localVarDecl(member_node));
3390 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.localVarDecl(member_node)) catch |err| switch (err) {
3391 error.OutOfMemory => return error.OutOfMemory,
3392 error.AnalysisFail => {},
3393 };
33643394 continue;
33653395 },
33663396 .simple_var_decl => {
3367 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.simpleVarDecl(member_node));
3397 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.simpleVarDecl(member_node)) catch |err| switch (err) {
3398 error.OutOfMemory => return error.OutOfMemory,
3399 error.AnalysisFail => {},
3400 };
33683401 continue;
33693402 },
33703403 .aligned_var_decl => {
3371 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.alignedVarDecl(member_node));
3404 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.alignedVarDecl(member_node)) catch |err| switch (err) {
3405 error.OutOfMemory => return error.OutOfMemory,
3406 error.AnalysisFail => {},
3407 };
33723408 continue;
33733409 },
33743410
33753411 .@"comptime" => {
3376 try astgen.comptimeDecl(gz, scope, &wip_decls, member_node);
3412 astgen.comptimeDecl(gz, scope, &wip_decls, member_node) catch |err| switch (err) {
3413 error.OutOfMemory => return error.OutOfMemory,
3414 error.AnalysisFail => {},
3415 };
33773416 continue;
33783417 },
33793418 .@"usingnamespace" => {
3380 try astgen.usingnamespaceDecl(gz, scope, &wip_decls, member_node);
3419 astgen.usingnamespaceDecl(gz, scope, &wip_decls, member_node) catch |err| switch (err) {
3420 error.OutOfMemory => return error.OutOfMemory,
3421 error.AnalysisFail => {},
3422 };
33813423 continue;
33823424 },
33833425 .test_decl => {
3384 try astgen.testDecl(gz, scope, &wip_decls, member_node);
3426 astgen.testDecl(gz, scope, &wip_decls, member_node) catch |err| switch (err) {
3427 error.OutOfMemory => return error.OutOfMemory,
3428 error.AnalysisFail => {},
3429 };
33853430 continue;
33863431 },
33873432 else => unreachable,
......@@ -3530,20 +3575,32 @@ fn unionDeclInner(
35303575 switch (node_tags[fn_proto]) {
35313576 .fn_proto_simple => {
35323577 var params: [1]ast.Node.Index = undefined;
3533 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoSimple(&params, fn_proto));
3578 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoSimple(&params, fn_proto)) catch |err| switch (err) {
3579 error.OutOfMemory => return error.OutOfMemory,
3580 error.AnalysisFail => {},
3581 };
35343582 continue;
35353583 },
35363584 .fn_proto_multi => {
3537 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoMulti(fn_proto));
3585 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoMulti(fn_proto)) catch |err| switch (err) {
3586 error.OutOfMemory => return error.OutOfMemory,
3587 error.AnalysisFail => {},
3588 };
35383589 continue;
35393590 },
35403591 .fn_proto_one => {
35413592 var params: [1]ast.Node.Index = undefined;
3542 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoOne(&params, fn_proto));
3593 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoOne(&params, fn_proto)) catch |err| switch (err) {
3594 error.OutOfMemory => return error.OutOfMemory,
3595 error.AnalysisFail => {},
3596 };
35433597 continue;
35443598 },
35453599 .fn_proto => {
3546 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProto(fn_proto));
3600 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProto(fn_proto)) catch |err| switch (err) {
3601 error.OutOfMemory => return error.OutOfMemory,
3602 error.AnalysisFail => {},
3603 };
35473604 continue;
35483605 },
35493606 else => unreachable,
......@@ -3551,50 +3608,83 @@ fn unionDeclInner(
35513608 },
35523609 .fn_proto_simple => {
35533610 var params: [1]ast.Node.Index = undefined;
3554 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoSimple(&params, member_node));
3611 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoSimple(&params, member_node)) catch |err| switch (err) {
3612 error.OutOfMemory => return error.OutOfMemory,
3613 error.AnalysisFail => {},
3614 };
35553615 continue;
35563616 },
35573617 .fn_proto_multi => {
3558 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoMulti(member_node));
3618 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoMulti(member_node)) catch |err| switch (err) {
3619 error.OutOfMemory => return error.OutOfMemory,
3620 error.AnalysisFail => {},
3621 };
35593622 continue;
35603623 },
35613624 .fn_proto_one => {
35623625 var params: [1]ast.Node.Index = undefined;
3563 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoOne(&params, member_node));
3626 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoOne(&params, member_node)) catch |err| switch (err) {
3627 error.OutOfMemory => return error.OutOfMemory,
3628 error.AnalysisFail => {},
3629 };
35643630 continue;
35653631 },
35663632 .fn_proto => {
3567 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProto(member_node));
3633 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProto(member_node)) catch |err| switch (err) {
3634 error.OutOfMemory => return error.OutOfMemory,
3635 error.AnalysisFail => {},
3636 };
35683637 continue;
35693638 },
35703639
35713640 .global_var_decl => {
3572 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.globalVarDecl(member_node));
3641 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.globalVarDecl(member_node)) catch |err| switch (err) {
3642 error.OutOfMemory => return error.OutOfMemory,
3643 error.AnalysisFail => {},
3644 };
35733645 continue;
35743646 },
35753647 .local_var_decl => {
3576 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.localVarDecl(member_node));
3648 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.localVarDecl(member_node)) catch |err| switch (err) {
3649 error.OutOfMemory => return error.OutOfMemory,
3650 error.AnalysisFail => {},
3651 };
35773652 continue;
35783653 },
35793654 .simple_var_decl => {
3580 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.simpleVarDecl(member_node));
3655 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.simpleVarDecl(member_node)) catch |err| switch (err) {
3656 error.OutOfMemory => return error.OutOfMemory,
3657 error.AnalysisFail => {},
3658 };
35813659 continue;
35823660 },
35833661 .aligned_var_decl => {
3584 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.alignedVarDecl(member_node));
3662 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.alignedVarDecl(member_node)) catch |err| switch (err) {
3663 error.OutOfMemory => return error.OutOfMemory,
3664 error.AnalysisFail => {},
3665 };
35853666 continue;
35863667 },
35873668
35883669 .@"comptime" => {
3589 try astgen.comptimeDecl(gz, scope, &wip_decls, member_node);
3670 astgen.comptimeDecl(gz, scope, &wip_decls, member_node) catch |err| switch (err) {
3671 error.OutOfMemory => return error.OutOfMemory,
3672 error.AnalysisFail => {},
3673 };
35903674 continue;
35913675 },
35923676 .@"usingnamespace" => {
3593 try astgen.usingnamespaceDecl(gz, scope, &wip_decls, member_node);
3677 astgen.usingnamespaceDecl(gz, scope, &wip_decls, member_node) catch |err| switch (err) {
3678 error.OutOfMemory => return error.OutOfMemory,
3679 error.AnalysisFail => {},
3680 };
35943681 continue;
35953682 },
35963683 .test_decl => {
3597 try astgen.testDecl(gz, scope, &wip_decls, member_node);
3684 astgen.testDecl(gz, scope, &wip_decls, member_node) catch |err| switch (err) {
3685 error.OutOfMemory => return error.OutOfMemory,
3686 error.AnalysisFail => {},
3687 };
35983688 continue;
35993689 },
36003690 else => unreachable,
......@@ -3878,20 +3968,32 @@ fn containerDecl(
38783968 switch (node_tags[fn_proto]) {
38793969 .fn_proto_simple => {
38803970 var params: [1]ast.Node.Index = undefined;
3881 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoSimple(&params, fn_proto));
3971 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoSimple(&params, fn_proto)) catch |err| switch (err) {
3972 error.OutOfMemory => return error.OutOfMemory,
3973 error.AnalysisFail => {},
3974 };
38823975 continue;
38833976 },
38843977 .fn_proto_multi => {
3885 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoMulti(fn_proto));
3978 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoMulti(fn_proto)) catch |err| switch (err) {
3979 error.OutOfMemory => return error.OutOfMemory,
3980 error.AnalysisFail => {},
3981 };
38863982 continue;
38873983 },
38883984 .fn_proto_one => {
38893985 var params: [1]ast.Node.Index = undefined;
3890 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoOne(&params, fn_proto));
3986 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoOne(&params, fn_proto)) catch |err| switch (err) {
3987 error.OutOfMemory => return error.OutOfMemory,
3988 error.AnalysisFail => {},
3989 };
38913990 continue;
38923991 },
38933992 .fn_proto => {
3894 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProto(fn_proto));
3993 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProto(fn_proto)) catch |err| switch (err) {
3994 error.OutOfMemory => return error.OutOfMemory,
3995 error.AnalysisFail => {},
3996 };
38953997 continue;
38963998 },
38973999 else => unreachable,
......@@ -3899,50 +4001,83 @@ fn containerDecl(
38994001 },
39004002 .fn_proto_simple => {
39014003 var params: [1]ast.Node.Index = undefined;
3902 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoSimple(&params, member_node));
4004 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoSimple(&params, member_node)) catch |err| switch (err) {
4005 error.OutOfMemory => return error.OutOfMemory,
4006 error.AnalysisFail => {},
4007 };
39034008 continue;
39044009 },
39054010 .fn_proto_multi => {
3906 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoMulti(member_node));
4011 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoMulti(member_node)) catch |err| switch (err) {
4012 error.OutOfMemory => return error.OutOfMemory,
4013 error.AnalysisFail => {},
4014 };
39074015 continue;
39084016 },
39094017 .fn_proto_one => {
39104018 var params: [1]ast.Node.Index = undefined;
3911 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoOne(&params, member_node));
4019 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoOne(&params, member_node)) catch |err| switch (err) {
4020 error.OutOfMemory => return error.OutOfMemory,
4021 error.AnalysisFail => {},
4022 };
39124023 continue;
39134024 },
39144025 .fn_proto => {
3915 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProto(member_node));
4026 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProto(member_node)) catch |err| switch (err) {
4027 error.OutOfMemory => return error.OutOfMemory,
4028 error.AnalysisFail => {},
4029 };
39164030 continue;
39174031 },
39184032
39194033 .global_var_decl => {
3920 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.globalVarDecl(member_node));
4034 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.globalVarDecl(member_node)) catch |err| switch (err) {
4035 error.OutOfMemory => return error.OutOfMemory,
4036 error.AnalysisFail => {},
4037 };
39214038 continue;
39224039 },
39234040 .local_var_decl => {
3924 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.localVarDecl(member_node));
4041 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.localVarDecl(member_node)) catch |err| switch (err) {
4042 error.OutOfMemory => return error.OutOfMemory,
4043 error.AnalysisFail => {},
4044 };
39254045 continue;
39264046 },
39274047 .simple_var_decl => {
3928 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.simpleVarDecl(member_node));
4048 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.simpleVarDecl(member_node)) catch |err| switch (err) {
4049 error.OutOfMemory => return error.OutOfMemory,
4050 error.AnalysisFail => {},
4051 };
39294052 continue;
39304053 },
39314054 .aligned_var_decl => {
3932 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.alignedVarDecl(member_node));
4055 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.alignedVarDecl(member_node)) catch |err| switch (err) {
4056 error.OutOfMemory => return error.OutOfMemory,
4057 error.AnalysisFail => {},
4058 };
39334059 continue;
39344060 },
39354061
39364062 .@"comptime" => {
3937 try astgen.comptimeDecl(gz, scope, &wip_decls, member_node);
4063 astgen.comptimeDecl(gz, scope, &wip_decls, member_node) catch |err| switch (err) {
4064 error.OutOfMemory => return error.OutOfMemory,
4065 error.AnalysisFail => {},
4066 };
39384067 continue;
39394068 },
39404069 .@"usingnamespace" => {
3941 try astgen.usingnamespaceDecl(gz, scope, &wip_decls, member_node);
4070 astgen.usingnamespaceDecl(gz, scope, &wip_decls, member_node) catch |err| switch (err) {
4071 error.OutOfMemory => return error.OutOfMemory,
4072 error.AnalysisFail => {},
4073 };
39424074 continue;
39434075 },
39444076 .test_decl => {
3945 try astgen.testDecl(gz, scope, &wip_decls, member_node);
4077 astgen.testDecl(gz, scope, &wip_decls, member_node) catch |err| switch (err) {
4078 error.OutOfMemory => return error.OutOfMemory,
4079 error.AnalysisFail => {},
4080 };
39464081 continue;
39474082 },
39484083 else => unreachable,
......@@ -4044,20 +4179,32 @@ fn containerDecl(
40444179 switch (node_tags[fn_proto]) {
40454180 .fn_proto_simple => {
40464181 var params: [1]ast.Node.Index = undefined;
4047 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoSimple(&params, fn_proto));
4182 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoSimple(&params, fn_proto)) catch |err| switch (err) {
4183 error.OutOfMemory => return error.OutOfMemory,
4184 error.AnalysisFail => {},
4185 };
40484186 continue;
40494187 },
40504188 .fn_proto_multi => {
4051 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoMulti(fn_proto));
4189 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoMulti(fn_proto)) catch |err| switch (err) {
4190 error.OutOfMemory => return error.OutOfMemory,
4191 error.AnalysisFail => {},
4192 };
40524193 continue;
40534194 },
40544195 .fn_proto_one => {
40554196 var params: [1]ast.Node.Index = undefined;
4056 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoOne(&params, fn_proto));
4197 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProtoOne(&params, fn_proto)) catch |err| switch (err) {
4198 error.OutOfMemory => return error.OutOfMemory,
4199 error.AnalysisFail => {},
4200 };
40574201 continue;
40584202 },
40594203 .fn_proto => {
4060 try astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProto(fn_proto));
4204 astgen.fnDecl(gz, &wip_decls, member_node, body, tree.fnProto(fn_proto)) catch |err| switch (err) {
4205 error.OutOfMemory => return error.OutOfMemory,
4206 error.AnalysisFail => {},
4207 };
40614208 continue;
40624209 },
40634210 else => unreachable,
......@@ -4065,50 +4212,83 @@ fn containerDecl(
40654212 },
40664213 .fn_proto_simple => {
40674214 var params: [1]ast.Node.Index = undefined;
4068 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoSimple(&params, member_node));
4215 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoSimple(&params, member_node)) catch |err| switch (err) {
4216 error.OutOfMemory => return error.OutOfMemory,
4217 error.AnalysisFail => {},
4218 };
40694219 continue;
40704220 },
40714221 .fn_proto_multi => {
4072 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoMulti(member_node));
4222 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoMulti(member_node)) catch |err| switch (err) {
4223 error.OutOfMemory => return error.OutOfMemory,
4224 error.AnalysisFail => {},
4225 };
40734226 continue;
40744227 },
40754228 .fn_proto_one => {
40764229 var params: [1]ast.Node.Index = undefined;
4077 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoOne(&params, member_node));
4230 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProtoOne(&params, member_node)) catch |err| switch (err) {
4231 error.OutOfMemory => return error.OutOfMemory,
4232 error.AnalysisFail => {},
4233 };
40784234 continue;
40794235 },
40804236 .fn_proto => {
4081 try astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProto(member_node));
4237 astgen.fnDecl(gz, &wip_decls, member_node, 0, tree.fnProto(member_node)) catch |err| switch (err) {
4238 error.OutOfMemory => return error.OutOfMemory,
4239 error.AnalysisFail => {},
4240 };
40824241 continue;
40834242 },
40844243
40854244 .global_var_decl => {
4086 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.globalVarDecl(member_node));
4245 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.globalVarDecl(member_node)) catch |err| switch (err) {
4246 error.OutOfMemory => return error.OutOfMemory,
4247 error.AnalysisFail => {},
4248 };
40874249 continue;
40884250 },
40894251 .local_var_decl => {
4090 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.localVarDecl(member_node));
4252 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.localVarDecl(member_node)) catch |err| switch (err) {
4253 error.OutOfMemory => return error.OutOfMemory,
4254 error.AnalysisFail => {},
4255 };
40914256 continue;
40924257 },
40934258 .simple_var_decl => {
4094 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.simpleVarDecl(member_node));
4259 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.simpleVarDecl(member_node)) catch |err| switch (err) {
4260 error.OutOfMemory => return error.OutOfMemory,
4261 error.AnalysisFail => {},
4262 };
40954263 continue;
40964264 },
40974265 .aligned_var_decl => {
4098 try astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.alignedVarDecl(member_node));
4266 astgen.globalVarDecl(gz, scope, &wip_decls, member_node, tree.alignedVarDecl(member_node)) catch |err| switch (err) {
4267 error.OutOfMemory => return error.OutOfMemory,
4268 error.AnalysisFail => {},
4269 };
40994270 continue;
41004271 },
41014272
41024273 .@"comptime" => {
4103 try astgen.comptimeDecl(gz, scope, &wip_decls, member_node);
4274 astgen.comptimeDecl(gz, scope, &wip_decls, member_node) catch |err| switch (err) {
4275 error.OutOfMemory => return error.OutOfMemory,
4276 error.AnalysisFail => {},
4277 };
41044278 continue;
41054279 },
41064280 .@"usingnamespace" => {
4107 try astgen.usingnamespaceDecl(gz, scope, &wip_decls, member_node);
4281 astgen.usingnamespaceDecl(gz, scope, &wip_decls, member_node) catch |err| switch (err) {
4282 error.OutOfMemory => return error.OutOfMemory,
4283 error.AnalysisFail => {},
4284 };
41084285 continue;
41094286 },
41104287 .test_decl => {
4111 try astgen.testDecl(gz, scope, &wip_decls, member_node);
4288 astgen.testDecl(gz, scope, &wip_decls, member_node) catch |err| switch (err) {
4289 error.OutOfMemory => return error.OutOfMemory,
4290 error.AnalysisFail => {},
4291 };
41124292 continue;
41134293 },
41144294 else => unreachable,
src/Compilation.zig+14-1
......@@ -1676,8 +1676,21 @@ pub fn totalErrorCount(self: *Compilation) usize {
16761676
16771677 if (self.bin_file.options.module) |module| {
16781678 total += module.failed_exports.items().len +
1679 module.failed_files.items().len +
16801679 @boolToInt(module.failed_root_src_file != null);
1680
1681 for (module.failed_files.items()) |entry| {
1682 if (entry.value) |_| {
1683 total += 1;
1684 } else {
1685 const file = entry.key;
1686 assert(file.zir_loaded);
1687 const payload_index = file.zir.extra[@enumToInt(Zir.ExtraIndex.compile_errors)];
1688 assert(payload_index != 0);
1689 const header = file.zir.extraData(Zir.Inst.CompileErrors, payload_index);
1690 total += header.data.items_len;
1691 }
1692 }
1693
16811694 // Skip errors for Decls within files that failed parsing.
16821695 // When a parse error is introduced, we keep all the semantic analysis for
16831696 // the previous parse success, including compile errors, but we cannot