| ... | ... | @@ -3497,6 +3497,12 @@ fn fnDecl( |
| 3497 | 3497 | |
| 3498 | 3498 | const lib_name: u32 = if (fn_proto.lib_name) |lib_name_token| blk: { |
| 3499 | 3499 | const lib_name_str = try astgen.strLitAsString(lib_name_token); |
| 3500 | const lib_name_slice = astgen.string_bytes.items[lib_name_str.index..][0..lib_name_str.len]; |
| 3501 | if (mem.indexOfScalar(u8, lib_name_slice, 0) != null) { |
| 3502 | return astgen.failTok(lib_name_token, "library name cannot contain null bytes", .{}); |
| 3503 | } else if (lib_name_str.len == 0) { |
| 3504 | return astgen.failTok(lib_name_token, "library name cannot be empty", .{}); |
| 3505 | } |
| 3500 | 3506 | break :blk lib_name_str.index; |
| 3501 | 3507 | } else 0; |
| 3502 | 3508 | |
| ... | ... | @@ -3750,6 +3756,12 @@ fn globalVarDecl( |
| 3750 | 3756 | |
| 3751 | 3757 | const lib_name: u32 = if (var_decl.lib_name) |lib_name_token| blk: { |
| 3752 | 3758 | const lib_name_str = try astgen.strLitAsString(lib_name_token); |
| 3759 | const lib_name_slice = astgen.string_bytes.items[lib_name_str.index..][0..lib_name_str.len]; |
| 3760 | if (mem.indexOfScalar(u8, lib_name_slice, 0) != null) { |
| 3761 | return astgen.failTok(lib_name_token, "library name cannot contain null bytes", .{}); |
| 3762 | } else if (lib_name_str.len == 0) { |
| 3763 | return astgen.failTok(lib_name_token, "library name cannot be empty", .{}); |
| 3764 | } |
| 3753 | 3765 | break :blk lib_name_str.index; |
| 3754 | 3766 | } else 0; |
| 3755 | 3767 | |
| ... | ... | @@ -7239,6 +7251,12 @@ fn builtinCall( |
| 7239 | 7251 | } |
| 7240 | 7252 | const str_lit_token = main_tokens[operand_node]; |
| 7241 | 7253 | const str = try astgen.strLitAsString(str_lit_token); |
| 7254 | const str_slice = astgen.string_bytes.items[str.index..][0..str.len]; |
| 7255 | if (mem.indexOfScalar(u8, str_slice, 0) != null) { |
| 7256 | return astgen.failTok(str_lit_token, "import path cannot contain null bytes", .{}); |
| 7257 | } else if (str.len == 0) { |
| 7258 | return astgen.failTok(str_lit_token, "import path cannot be empty", .{}); |
| 7259 | } |
| 7242 | 7260 | const result = try gz.addStrTok(.import, str.index, str_lit_token); |
| 7243 | 7261 | const gop = try astgen.imports.getOrPut(astgen.gpa, str.index); |
| 7244 | 7262 | if (!gop.found_existing) { |
| ... | ... | @@ -9260,6 +9278,11 @@ fn identifierTokenString(astgen: *AstGen, token: Ast.TokenIndex) InnerError![]co |
| 9260 | 9278 | var buf: ArrayListUnmanaged(u8) = .{}; |
| 9261 | 9279 | defer buf.deinit(astgen.gpa); |
| 9262 | 9280 | try astgen.parseStrLit(token, &buf, ident_name, 1); |
| 9281 | if (mem.indexOfScalar(u8, buf.items, 0) != null) { |
| 9282 | return astgen.failTok(token, "identifier cannot contain null bytes", .{}); |
| 9283 | } else if (buf.items.len == 0) { |
| 9284 | return astgen.failTok(token, "identifier cannot be empty", .{}); |
| 9285 | } |
| 9263 | 9286 | const duped = try astgen.arena.dupe(u8, buf.items); |
| 9264 | 9287 | return duped; |
| 9265 | 9288 | } |
| ... | ... | @@ -9279,7 +9302,14 @@ fn appendIdentStr( |
| 9279 | 9302 | if (!mem.startsWith(u8, ident_name, "@")) { |
| 9280 | 9303 | return buf.appendSlice(astgen.gpa, ident_name); |
| 9281 | 9304 | } else { |
| 9282 | | return astgen.parseStrLit(token, buf, ident_name, 1); |
| 9305 | const start = buf.items.len; |
| 9306 | try astgen.parseStrLit(token, buf, ident_name, 1); |
| 9307 | const slice = buf.items[start..]; |
| 9308 | if (mem.indexOfScalar(u8, slice, 0) != null) { |
| 9309 | return astgen.failTok(token, "identifier cannot contain null bytes", .{}); |
| 9310 | } else if (slice.len == 0) { |
| 9311 | return astgen.failTok(token, "identifier cannot be empty", .{}); |
| 9312 | } |
| 9283 | 9313 | } |
| 9284 | 9314 | } |
| 9285 | 9315 | |
| ... | ... | @@ -9723,6 +9753,12 @@ fn testNameString(astgen: *AstGen, str_lit_token: Ast.TokenIndex) !u32 { |
| 9723 | 9753 | const token_bytes = astgen.tree.tokenSlice(str_lit_token); |
| 9724 | 9754 | try string_bytes.append(gpa, 0); // Indicates this is a test. |
| 9725 | 9755 | try astgen.parseStrLit(str_lit_token, string_bytes, token_bytes, 0); |
| 9756 | const slice = string_bytes.items[str_index + 1 ..]; |
| 9757 | if (mem.indexOfScalar(u8, slice, 0) != null) { |
| 9758 | return astgen.failTok(str_lit_token, "test name cannot contain null bytes", .{}); |
| 9759 | } else if (slice.len == 0) { |
| 9760 | return astgen.failTok(str_lit_token, "empty test name must be omitted", .{}); |
| 9761 | } |
| 9726 | 9762 | try string_bytes.append(gpa, 0); |
| 9727 | 9763 | return str_index; |
| 9728 | 9764 | } |