@@ -285,6 +285,7 @@ const Code = struct {
285
285
link_objects : []const []const u8 ,
286
286
target_str : ? []const u8 ,
287
287
link_libc : bool ,
288
+ backend_stage1 : bool ,
288
289
link_mode : ? std.builtin.LinkMode ,
289
290
disable_cache : bool ,
290
291
verbose_cimport : bool ,
@@ -554,6 +555,7 @@ fn genToc(allocator: Allocator, tokenizer: *Tokenizer) !Toc {
554
555
var link_mode : ? std.builtin.LinkMode = null ;
555
556
var disable_cache = false ;
556
557
var verbose_cimport = false ;
558
+ var backend_stage1 = false ;
557
559
558
560
const source_token = while (true ) {
559
561
const content_tok = try eatToken (tokenizer , Token .Id .Content );
@@ -586,6 +588,8 @@ fn genToc(allocator: Allocator, tokenizer: *Tokenizer) !Toc {
586
588
link_libc = true ;
587
589
} else if (mem .eql (u8 , end_tag_name , "link_mode_dynamic" )) {
588
590
link_mode = .Dynamic ;
591
+ } else if (mem .eql (u8 , end_tag_name , "backend_stage1" )) {
592
+ backend_stage1 = true ;
589
593
} else if (mem .eql (u8 , end_tag_name , "code_end" )) {
590
594
_ = try eatToken (tokenizer , Token .Id .BracketClose );
591
595
break content_tok ;
@@ -609,6 +613,7 @@ fn genToc(allocator: Allocator, tokenizer: *Tokenizer) !Toc {
609
613
.link_objects = link_objects .toOwnedSlice (),
610
614
.target_str = target_str ,
611
615
.link_libc = link_libc ,
616
+ .backend_stage1 = backend_stage1 ,
612
617
.link_mode = link_mode ,
613
618
.disable_cache = disable_cache ,
614
619
.verbose_cimport = verbose_cimport ,
@@ -1187,6 +1192,9 @@ fn printShell(out: anytype, shell_content: []const u8) !void {
1187
1192
try out .writeAll ("</samp></pre></figure>" );
1188
1193
}
1189
1194
1195
+ // Override this to skip to later tests
1196
+ const debug_start_line = 0 ;
1197
+
1190
1198
fn genHtml (
1191
1199
allocator : Allocator ,
1192
1200
tokenizer : * Tokenizer ,
@@ -1266,6 +1274,13 @@ fn genHtml(
1266
1274
continue ;
1267
1275
}
1268
1276
1277
+ if (debug_start_line > 0 ) {
1278
+ const loc = tokenizer .getTokenLocation (code .source_token );
1279
+ if (debug_start_line > loc .line ) {
1280
+ continue ;
1281
+ }
1282
+ }
1283
+
1269
1284
const raw_source = tokenizer .buffer [code .source_token .start .. code .source_token .end ];
1270
1285
const trimmed_raw_source = mem .trim (u8 , raw_source , " \n " );
1271
1286
const tmp_source_file_name = try fs .path .join (
@@ -1311,6 +1326,10 @@ fn genHtml(
1311
1326
try build_args .append ("-lc" );
1312
1327
try shell_out .print ("-lc " , .{});
1313
1328
}
1329
+ if (code .backend_stage1 ) {
1330
+ try build_args .append ("-fstage1" );
1331
+ try shell_out .print ("-fstage1" , .{});
1332
+ }
1314
1333
const target = try std .zig .CrossTarget .parse (.{
1315
1334
.arch_os_abi = code .target_str orelse "native" ,
1316
1335
});
@@ -1443,6 +1462,10 @@ fn genHtml(
1443
1462
try test_args .append ("-lc" );
1444
1463
try shell_out .print ("-lc " , .{});
1445
1464
}
1465
+ if (code .backend_stage1 ) {
1466
+ try test_args .append ("-fstage1" );
1467
+ try shell_out .print ("-fstage1" , .{});
1468
+ }
1446
1469
if (code .target_str ) | triple | {
1447
1470
try test_args .appendSlice (&[_ ][]const u8 { "-target" , triple });
1448
1471
try shell_out .print ("-target {s} " , .{triple });
@@ -1490,6 +1513,14 @@ fn genHtml(
1490
1513
try shell_out .print ("-O {s} " , .{@tagName (code .mode )});
1491
1514
},
1492
1515
}
1516
+ if (code .link_libc ) {
1517
+ try test_args .append ("-lc" );
1518
+ try shell_out .print ("-lc " , .{});
1519
+ }
1520
+ if (code .backend_stage1 ) {
1521
+ try test_args .append ("-fstage1" );
1522
+ try shell_out .print ("-fstage1" , .{});
1523
+ }
1493
1524
const result = try ChildProcess .exec (.{
1494
1525
.allocator = allocator ,
1495
1526
.argv = test_args .items ,
0 commit comments