| ... | ... | @@ -1256,8 +1256,8 @@ fn astGenAndAnalyzeDecl(self: *Module, decl: *Decl) !bool { |
| 1256 | 1256 | }; |
| 1257 | 1257 | defer fn_type_scope.instructions.deinit(self.gpa); |
| 1258 | 1258 | |
| 1259 | | decl.is_pub = fn_proto.getTrailer("visib_token") != null; |
| 1260 | | const body_node = fn_proto.getTrailer("body_node") orelse |
| 1259 | decl.is_pub = fn_proto.getTrailer(.visib_token) != null; |
| 1260 | const body_node = fn_proto.getTrailer(.body_node) orelse |
| 1261 | 1261 | return self.failTok(&fn_type_scope.base, fn_proto.fn_token, "TODO implement extern functions", .{}); |
| 1262 | 1262 | |
| 1263 | 1263 | const param_decls = fn_proto.params(); |
| ... | ... | @@ -1276,19 +1276,19 @@ fn astGenAndAnalyzeDecl(self: *Module, decl: *Decl) !bool { |
| 1276 | 1276 | }; |
| 1277 | 1277 | param_types[i] = try astgen.expr(self, &fn_type_scope.base, type_type_rl, param_type_node); |
| 1278 | 1278 | } |
| 1279 | | if (fn_proto.getTrailer("var_args_token")) |var_args_token| { |
| 1279 | if (fn_proto.getTrailer(.var_args_token)) |var_args_token| { |
| 1280 | 1280 | return self.failTok(&fn_type_scope.base, var_args_token, "TODO implement var args", .{}); |
| 1281 | 1281 | } |
| 1282 | | if (fn_proto.getTrailer("lib_name")) |lib_name| { |
| 1282 | if (fn_proto.getTrailer(.lib_name)) |lib_name| { |
| 1283 | 1283 | return self.failNode(&fn_type_scope.base, lib_name, "TODO implement function library name", .{}); |
| 1284 | 1284 | } |
| 1285 | | if (fn_proto.getTrailer("align_expr")) |align_expr| { |
| 1285 | if (fn_proto.getTrailer(.align_expr)) |align_expr| { |
| 1286 | 1286 | return self.failNode(&fn_type_scope.base, align_expr, "TODO implement function align expression", .{}); |
| 1287 | 1287 | } |
| 1288 | | if (fn_proto.getTrailer("section_expr")) |sect_expr| { |
| 1288 | if (fn_proto.getTrailer(.section_expr)) |sect_expr| { |
| 1289 | 1289 | return self.failNode(&fn_type_scope.base, sect_expr, "TODO implement function section expression", .{}); |
| 1290 | 1290 | } |
| 1291 | | if (fn_proto.getTrailer("callconv_expr")) |callconv_expr| { |
| 1291 | if (fn_proto.getTrailer(.callconv_expr)) |callconv_expr| { |
| 1292 | 1292 | return self.failNode( |
| 1293 | 1293 | &fn_type_scope.base, |
| 1294 | 1294 | callconv_expr, |
| ... | ... | @@ -1430,10 +1430,10 @@ fn astGenAndAnalyzeDecl(self: *Module, decl: *Decl) !bool { |
| 1430 | 1430 | self.bin_file.freeDecl(decl); |
| 1431 | 1431 | } |
| 1432 | 1432 | |
| 1433 | | if (fn_proto.getTrailer("extern_export_inline_token")) |maybe_export_token| { |
| 1433 | if (fn_proto.getTrailer(.extern_export_inline_token)) |maybe_export_token| { |
| 1434 | 1434 | if (tree.token_ids[maybe_export_token] == .Keyword_export) { |
| 1435 | 1435 | const export_src = tree.token_locs[maybe_export_token].start; |
| 1436 | | const name_loc = tree.token_locs[fn_proto.getTrailer("name_token").?]; |
| 1436 | const name_loc = tree.token_locs[fn_proto.getTrailer(.name_token).?]; |
| 1437 | 1437 | const name = tree.tokenSliceLoc(name_loc); |
| 1438 | 1438 | // The scope needs to have the decl in it. |
| 1439 | 1439 | try self.analyzeExport(&block_scope.base, export_src, name, decl); |
| ... | ... | @@ -1460,37 +1460,37 @@ fn astGenAndAnalyzeDecl(self: *Module, decl: *Decl) !bool { |
| 1460 | 1460 | }; |
| 1461 | 1461 | defer block_scope.instructions.deinit(self.gpa); |
| 1462 | 1462 | |
| 1463 | | decl.is_pub = var_decl.getTrailer("visib_token") != null; |
| 1463 | decl.is_pub = var_decl.getTrailer(.visib_token) != null; |
| 1464 | 1464 | const is_extern = blk: { |
| 1465 | | const maybe_extern_token = var_decl.getTrailer("extern_export_token") orelse |
| 1465 | const maybe_extern_token = var_decl.getTrailer(.extern_export_token) orelse |
| 1466 | 1466 | break :blk false; |
| 1467 | 1467 | if (tree.token_ids[maybe_extern_token] != .Keyword_extern) break :blk false; |
| 1468 | | if (var_decl.getTrailer("init_node")) |some| { |
| 1468 | if (var_decl.getTrailer(.init_node)) |some| { |
| 1469 | 1469 | return self.failNode(&block_scope.base, some, "extern variables have no initializers", .{}); |
| 1470 | 1470 | } |
| 1471 | 1471 | break :blk true; |
| 1472 | 1472 | }; |
| 1473 | | if (var_decl.getTrailer("lib_name")) |lib_name| { |
| 1473 | if (var_decl.getTrailer(.lib_name)) |lib_name| { |
| 1474 | 1474 | assert(is_extern); |
| 1475 | 1475 | return self.failNode(&block_scope.base, lib_name, "TODO implement function library name", .{}); |
| 1476 | 1476 | } |
| 1477 | 1477 | const is_mutable = tree.token_ids[var_decl.mut_token] == .Keyword_var; |
| 1478 | | const is_threadlocal = if (var_decl.getTrailer("thread_local_token")) |some| blk: { |
| 1478 | const is_threadlocal = if (var_decl.getTrailer(.thread_local_token)) |some| blk: { |
| 1479 | 1479 | if (!is_mutable) { |
| 1480 | 1480 | return self.failTok(&block_scope.base, some, "threadlocal variable cannot be constant", .{}); |
| 1481 | 1481 | } |
| 1482 | 1482 | break :blk true; |
| 1483 | 1483 | } else false; |
| 1484 | | assert(var_decl.getTrailer("comptime_token") == null); |
| 1485 | | if (var_decl.getTrailer("align_node")) |align_expr| { |
| 1484 | assert(var_decl.getTrailer(.comptime_token) == null); |
| 1485 | if (var_decl.getTrailer(.align_node)) |align_expr| { |
| 1486 | 1486 | return self.failNode(&block_scope.base, align_expr, "TODO implement function align expression", .{}); |
| 1487 | 1487 | } |
| 1488 | | if (var_decl.getTrailer("section_node")) |sect_expr| { |
| 1488 | if (var_decl.getTrailer(.section_node)) |sect_expr| { |
| 1489 | 1489 | return self.failNode(&block_scope.base, sect_expr, "TODO implement function section expression", .{}); |
| 1490 | 1490 | } |
| 1491 | 1491 | |
| 1492 | 1492 | const explicit_type = blk: { |
| 1493 | | const type_node = var_decl.getTrailer("type_node") orelse |
| 1493 | const type_node = var_decl.getTrailer(.type_node) orelse |
| 1494 | 1494 | break :blk null; |
| 1495 | 1495 | |
| 1496 | 1496 | // Temporary arena for the zir instructions. |
| ... | ... | @@ -1517,7 +1517,7 @@ fn astGenAndAnalyzeDecl(self: *Module, decl: *Decl) !bool { |
| 1517 | 1517 | }; |
| 1518 | 1518 | |
| 1519 | 1519 | var var_type: Type = undefined; |
| 1520 | | const value: ?Value = if (var_decl.getTrailer("init_node")) |init_node| blk: { |
| 1520 | const value: ?Value = if (var_decl.getTrailer(.init_node)) |init_node| blk: { |
| 1521 | 1521 | var gen_scope_arena = std.heap.ArenaAllocator.init(self.gpa); |
| 1522 | 1522 | defer gen_scope_arena.deinit(); |
| 1523 | 1523 | var gen_scope: Scope.GenZIR = .{ |
| ... | ... | @@ -1602,7 +1602,7 @@ fn astGenAndAnalyzeDecl(self: *Module, decl: *Decl) !bool { |
| 1602 | 1602 | decl.analysis = .complete; |
| 1603 | 1603 | decl.generation = self.generation; |
| 1604 | 1604 | |
| 1605 | | if (var_decl.getTrailer("extern_export_token")) |maybe_export_token| { |
| 1605 | if (var_decl.getTrailer(.extern_export_token)) |maybe_export_token| { |
| 1606 | 1606 | if (tree.token_ids[maybe_export_token] == .Keyword_export) { |
| 1607 | 1607 | const export_src = tree.token_locs[maybe_export_token].start; |
| 1608 | 1608 | const name_loc = tree.token_locs[var_decl.name_token]; |
| ... | ... | @@ -1768,7 +1768,7 @@ fn analyzeRootSrcFile(self: *Module, root_scope: *Scope.File) !void { |
| 1768 | 1768 | for (decls) |src_decl, decl_i| { |
| 1769 | 1769 | if (src_decl.cast(ast.Node.FnProto)) |fn_proto| { |
| 1770 | 1770 | // We will create a Decl for it regardless of analysis status. |
| 1771 | | const name_tok = fn_proto.getTrailer("name_token") orelse { |
| 1771 | const name_tok = fn_proto.getTrailer(.name_token) orelse { |
| 1772 | 1772 | @panic("TODO missing function name"); |
| 1773 | 1773 | }; |
| 1774 | 1774 | |
| ... | ... | @@ -1804,7 +1804,7 @@ fn analyzeRootSrcFile(self: *Module, root_scope: *Scope.File) !void { |
| 1804 | 1804 | } else { |
| 1805 | 1805 | const new_decl = try self.createNewDecl(&root_scope.base, name, decl_i, name_hash, contents_hash); |
| 1806 | 1806 | root_scope.decls.appendAssumeCapacity(new_decl); |
| 1807 | | if (fn_proto.getTrailer("extern_export_inline_token")) |maybe_export_token| { |
| 1807 | if (fn_proto.getTrailer(.extern_export_inline_token)) |maybe_export_token| { |
| 1808 | 1808 | if (tree.token_ids[maybe_export_token] == .Keyword_export) { |
| 1809 | 1809 | self.work_queue.writeItemAssumeCapacity(.{ .analyze_decl = new_decl }); |
| 1810 | 1810 | } |
| ... | ... | @@ -1831,7 +1831,7 @@ fn analyzeRootSrcFile(self: *Module, root_scope: *Scope.File) !void { |
| 1831 | 1831 | } else { |
| 1832 | 1832 | const new_decl = try self.createNewDecl(&root_scope.base, name, decl_i, name_hash, contents_hash); |
| 1833 | 1833 | root_scope.decls.appendAssumeCapacity(new_decl); |
| 1834 | | if (var_decl.getTrailer("extern_export_token")) |maybe_export_token| { |
| 1834 | if (var_decl.getTrailer(.extern_export_token)) |maybe_export_token| { |
| 1835 | 1835 | if (tree.token_ids[maybe_export_token] == .Keyword_export) { |
| 1836 | 1836 | self.work_queue.writeItemAssumeCapacity(.{ .analyze_decl = new_decl }); |
| 1837 | 1837 | } |