Commit Graph

34896 Commits

Author SHA1 Message Date
6356c15c70 parser: port test "if condition wraps"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:15 +00:00
a8bca43940 parser: implement while loops, port while test
Implement in parser.c:
- parseWhileExpr: while (cond) body, with optional payload,
  continue expression, and else clause
- while_simple, while_cont, while AST nodes

Port test "while else err prong with no block".

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:15 +00:00
26c73c4f87 parser: port test "2nd arg multiline string many args"
Split "2nd arg multiline string" to match upstream structure
(separate test for "many args" variant) and add missing
testTransform sub-case.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:14 +00:00
14fb82109b parser: port zig fmt on/off in middle of code tests
Port tests:
- "'zig fmt: (off|on)' works in the middle of code"
- "'zig fmt: on' indentation is unchanged"

Handle block-terminated expressions (if, while) that don't need
semicolons by checking if previous token was '}'.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:14 +00:00
2b48992a2f parser: port test "whitespace fixes"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:14 +00:00
854f1157c4 parser: port test "rewrite callconv(.@\"inline\") to the inline keyword"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:13 +00:00
ebda1c03bd parser: reorder tests to match upstream file order
Reorder all test blocks in parser_test.zig to match the order
they appear in the upstream zig/lib/std/zig/parser_test.zig.
Tests not in upstream ("Ast header smoke test", "my function")
are placed at the end.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:13 +00:00
ee955c8522 parser: port alignment and zig fmt whitespace tests
Port tests:
- "alignment in anonymous literal"
- "'zig fmt: (off|on)' can be surrounded by arbitrary whitespace"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:13 +00:00
5d4e50075a parser: port zig fmt on/off, defer, block slice tests
Port tests:
- "line and doc comment following 'zig fmt: off'"
- "doc and line comment following 'zig fmt: off'"
- "line comment following 'zig fmt: on'"
- "doc comment following 'zig fmt: on'"
- "line and doc comment following 'zig fmt: on'"
- "doc and line comment following 'zig fmt: on'"
- "block in slice expression"
- "defer"

Fix defer node data: body goes in lhs (not rhs) to match .node
union variant.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:12 +00:00
26725d687a parser: port fn param and container initializer tests
Port tests:
- "doc comments on param decl"
- "pointer of unknown length"
- "call expression"
- "anytype type"
- "container initializers"

Handle anytype keyword in function parameter lists.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:12 +00:00
ed6d91f2f0 parser: port misc formatting tests batch
Port tests:
- "alignment"
- "C main"
- "return"
- "arrays"
- "blocks"
- "container doc comments"
- "comments before global variables"
- "comments before test decl"
- "decimal float literals with underscore separators"
- "comptime"
- "comptime block in container"
- "comments before var decl in struct"
- "block with same line comment after end brace"
- "comment after empty comment"
- "comment after params"

Fix trailing flag for comptime blocks in parseContainerMembers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:11 +00:00
f45c71fc04 parser: port threadlocal, linksection, addrspace tests
Port tests:
- "threadlocal"
- "linksection"
- "addrspace"

Implement full var decl proto with aligned_var_decl, local_var_decl,
and global_var_decl node types for align/addrspace/linksection.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:11 +00:00
a4d9e12498 parser: port pointer modifier tests
Port tests:
- "pointer-to-one with modifiers"
- "pointer-to-many with modifiers"
- "sentinel pointer with modifiers"
- "c pointer with modifiers"
- "slice with modifiers"
- "sentinel slice with modifiers"
- "allowzero pointer"

Implement in parser.c:
- parsePtrModifiersAndType: shared pointer modifier parsing with
  align(expr:expr:expr) bit-range, addrspace, sentinel support
- ptr_type, ptr_type_bit_range nodes with proper OptionalIndex
  encoding via global OPT() macro
- Refactor * and [*] pointer type parsing to use shared code

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:11 +00:00
508a94dd33 parser: port array/slice literal and pointer type tests
- "sentinel array literal 1 element"
- "anon literal in array"
- "Unicode code point literal larger than u8"
- "slices with spaces in bounds"
- "C pointers"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:11 +00:00
19c36c5dcb parser: port test "sentinel-terminated array type"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:10 +00:00
83c463f6a7 parser: port test "sentinel-terminated slice type"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:10 +00:00
592638502a parser: port test "c pointer type"
Implement [*], [*c], and [*:s] pointer type parsing in parseTypeExpr.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:09 +00:00
74d6a66a2d parser: port test "nosuspend block"
Implement nosuspend statement in expectStatement.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:09 +00:00
2279ac85a0 parser: port test "errdefer with payload"
Implement in parser.c:
- defer and errdefer statements with expectBlockExprStatement
- parseAssignExpr for assignment expressions (expr op= expr)
- expectBlockExprStatement: block or assign expr + semicolon
- assignOpTag: map all assignment operator tokens to AST tags

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:08 +00:00
cd5ebdb904 parser: port test "top-level bare asterisk+asterisk+identifier"
Implement ** (double pointer) type parsing in parseTypeExpr.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:08 +00:00
fcfa3f3b4a parser: port test "top-level bare asterisk+identifier"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:08 +00:00
6743d5dd2f parser: port test "top-level tuple function call type"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:07 +00:00
bfc5846c4d parser: add multiline string, fn call, struct, if-else tests
Port tests from upstream parser_test.zig:
- "multiline string with backslash at end of line"
- "multiline string parameter in fn call with trailing comma"
- "trailing comma on fn call"
- "multi line arguments without last comma"
- "empty block with only comment"
- "trailing commas on struct decl"
- "extra newlines at the end"
- "nested struct literal with one item"
- "if-else with comment before else"

Fix parseSuffixExpr: continue suffix loop after call parsing
instead of returning, enabling method chains like a.b().c().

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:07 +00:00
bf632b9d6b parser: add if expression and statement tests
Port tests from upstream parser_test.zig:
- "if statement"
- "respect line breaks in if-else"
- "if nested"
- "remove empty lines at start/end of block"

Implement in parser.c:
- parseIfExpr: if/else expression parsing with payloads
- parsePtrPayload, parsePayload: |value| and |*value| handling
- Handle block-terminated expressions without semicolons in
  expectVarDeclExprStatement

Fix zigData in parser_test.zig:
- if, while, while_cont use node_and_extra (not node_and_node)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:07 +00:00
9f77f5a234 parser: add infix, fn trailing comma, enum, struct literal tests
Port tests from upstream parser_test.zig:
- "respect line breaks after infix operators"
- "fn decl with trailing comma"
- "enum decl with no trailing comma"
- "struct literal no trailing comma"
- "2nd arg multiline string"
- "final arg multiline string"
- "function call with multiline argument"

No new parser.c changes needed — all features already implemented.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:06 +00:00
c67c54c3fb parser: add zig fmt on/off and slice operator tests
Port tests from upstream parser_test.zig:
- "comment to disable/enable zig fmt"
- "line comment following 'zig fmt: off'"
- "doc comment following 'zig fmt: off'"
- "alternating 'zig fmt: off' and 'zig fmt: on'"
- "spaces around slice operator"

Fix parsePrimaryTypeExpr: don't reject identifier followed by colon;
the colon may be part of slice sentinel syntax, not a label.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:06 +00:00
1a8bb5ac10 parser: add fn params, return, call args, enum literal tests
Port tests from upstream parser_test.zig:
- "trailing comma in fn parameter list" (all combinations)
- "enum literal inside array literal"
- "builtin call with trailing comma"

Implement in parser.c:
- parseParamDeclList: full parameter parsing with names, comptime,
  noalias, doc comments, varargs
- parseFnProto: fn_proto_multi, fn_proto_one, fn_proto with
  align/addrspace/section/callconv
- parseSuffixExpr: function call with arguments
- parsePrimaryExpr: return, comptime, nosuspend, resume expressions
- parseAddrSpace, parseLinkSection, parseCallconv: full parsing
- Use OPT() macro for OptionalIndex encoding in extra data

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:05 +00:00
cb4be73acb parser: add enum, union, literal, struct doc comment tests
Port tests from upstream parser_test.zig:
- "empty enum decls" (with extern/packed modifiers)
- "empty union decls" (with extern/packed/enum modifiers)
- "enum literal"
- "character literal larger than u8"
- "infix operator and then multiline string literal" (2 tests)
- "correctly space struct fields with doc comments"
- "aligned struct field"
- "comment to disable/enable zig fmt first"

Implement in parser.c:
- extern/packed modifiers before struct/union/enum in
  parsePrimaryTypeExpr

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:05 +00:00
b2b1d8f188 parser: add slicing and tagged union tests
Port tests from upstream parser_test.zig:
- "slices" (open, closed, sentinel-terminated)
- "tagged union with enum values"
- "tagged union enum tag last token"

Implement in parser.c:
- Slice expressions in parseSuffixOp: slice_open, slice,
  slice_sentinel
- Handle OptionalIndex encoding for absent slice end expr

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:05 +00:00
8705fd0197 parser: add struct/array literal tests (2/3 element variants)
Port tests from upstream parser_test.zig:
- "struct literal 2/3 element" (with and without comma)
- "anon list literal 1/2/3 element" (with and without comma)
- "array literal 0/1/2/3 element" (with and without comma)

All 17 new tests pass without parser changes — the init list
implementation from the previous commit handles all cases.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:04 +00:00
cd93f7cffd parser: add struct/array init literal tests
Port tests from upstream parser_test.zig:
- "anon struct literal 0/1/2/3 element" (with and without comma)
- "struct literal 0/1 element"

Implement in parser.c:
- parseFieldInit: parse .field = expr field initializers
- parseInitList: full struct/array init list parsing
- parseCurlySuffixExpr: use parseInitList for X{...} syntax
- parsePrimaryTypeExpr: handle .{...} anonymous init and .ident
  enum literals
- Empty X{} produces struct_init_one (matching upstream behavior)

Fix zigData in parser_test.zig:
- array_init_one uses node_and_node (not node_and_opt_node)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:04 +00:00
a61bf83a11 parser: add block, break, grouped expression, array type tests
Port tests from upstream parser_test.zig:
- "allow empty line before comment at start of block"
- "comptime struct field"
- "break from block"
- "grouped expressions (parentheses)"
- "array types last token"

Fix bugs in parser.c:
- parseBreakLabel: use null_token instead of null_node
- test decl: use null_token for unnamed tests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:04 +00:00
b186471328 parser: add container declaration and test decl tests
Port tests from upstream parser_test.zig:
- "container declaration, one item, multi line trailing comma"
- "container declaration, no trailing comma on separate line"
- "container declaration, line break, no trailing comma"
- "container declaration, transform trailing comma"
- "container declaration, comment, add trailing comma"
- "container declaration, multiline string, add trailing comma"
- "container declaration, doc comment on member, add trailing comma"
- "remove empty lines at start/end of container decl"

Implement in parser.c:
- Test declarations in parseContainerMembers
- Comptime block/var statements in expectStatement
- Variable declaration with initializer in expectVarDeclExprStatement
- Regular assignment expressions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:03 +00:00
8d193346e8 parser: add multiline string, empty file, field, container tests
Port tests from upstream parser_test.zig:
- "multiline string mixed with comments"
- "empty file"
- "file ends in comment"
- "file ends in multi line comment"
- "file ends in comment after var decl"
- "top-level fields"
- "container declaration, single line"

Implement in parser.c:
- parseSuffixOp: array access, field access, deref, unwrap optional
- Slice/array type parsing in parseTypeExpr
- Multiline string literal parsing

Fix zigData mapping in parser_test.zig:
- optional_type uses .node (not .opt_node)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:03 +00:00
298b347cf7 parser: add function, comptime, var declaration tests
Port tests from upstream parser_test.zig:
- "respect line breaks before functions"
- "simple top level comptime block"
- "two spaced line comments before decl"
- "respect line breaks after var declarations"

Implement in parser.c:
- parseSuffixOp: array access (a[i]), field access (a.b),
  deref (a.*), unwrap optional (a.?)
- Multiline string literal parsing
- Slice types ([]T, [:s]T) and array types ([N]T, [N:s]T)
- Fix comptime block main_token in parseContainerMembers

Fix zigData mapping in parser_test.zig:
- field_access, unwrap_optional use node_and_token (not node_and_node)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:03 +00:00
0433771b3e parser: add struct field value declaration test
Port "zig fmt: respect line breaks in struct field value declaration"
test from upstream parser_test.zig.

Implement in parser.c:
- Slice types ([]T, [:s]T) in parseTypeExpr
- Array types ([N]T, [N:s]T) in parseTypeExpr
- Multiline string literals in parsePrimaryTypeExpr
- Add comments explaining why const/volatile/allowzero pointer
  modifiers are consumed (not stored in AST; renderer re-derives
  them from token positions)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:03 +00:00
1bb921b8ca parser: add tuple struct test and container decl support
Port "zig fmt: tuple struct" test from upstream parser_test.zig.

Implement in parser.c:
- parseContainerDeclAuto: struct/enum/union/opaque declarations
- parseGlobalVarDecl: const/var with initializer
- parseByteAlign: align(expr) parsing
- parseTypeExpr: pointer types (*T), optional types (?T)
- parsePrimaryTypeExpr: number_literal, char_literal,
  unreachable_literal, fn proto, grouped expressions,
  container decl, comptime prefix
- expectContainerField: default values (= expr)
- parseContainerMembers: comptime block/field handling
- Fix parseFnProto: use null_token instead of null_node

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 14:40:02 +00:00
745b38fde2 zig build does more and in parallel 2026-02-11 14:40:02 +00:00
3750469dca update license 2026-02-11 14:40:02 +00:00
cb8d46b1ab fix tcc 2026-02-10 11:35:41 +00:00
00db079347 zig build -Dcc=tcc 2026-02-10 10:47:27 +00:00
f08f4404ed zig build lint fmt 2026-02-10 10:36:40 +00:00
2948cfd7cf zig 0.15.1
With opus 4.6
2026-02-10 10:03:44 +00:00
Andrew Kelley
e4cbd752c8 Release 0.15.2 2025-10-10 20:45:47 -07:00
Andrew Kelley
f559107fee use older std.mem function names
Cherry-picked bug fix was using renamed functions
2025-10-09 12:46:55 -07:00
marximimus
ca59ad658f std.crypto.tls.Client: fix infinite loop in std.Io.Writer.writeAll 2025-10-09 12:35:19 -07:00
Andrew Kelley
8ccca8472a std.fs.File.Reader.seekTo: fix one more logical position bug 2025-10-09 12:08:45 -07:00
Andrew Kelley
6a25bfc475 std.Io.Reader: rework peekDelimiterInclusive
Now it's based on calling fillMore rather than an illegal aliased stream
into the Reader buffer.

This commit also includes a disambiguation block inspired by #25162. If
`StreamTooLong` was added to `RebaseError` then this logic could be
replaced by removing the exit condition from the while loop. That error
code would represent when `buffer` capacity is too small for an
operation, replacing the current use of asserts.
2025-10-09 12:08:36 -07:00
whatisaphone
52730f3f21 Fix Reader.Limited end of stream conditions 2025-10-09 12:08:29 -07:00
Maciej 'vesim' Kuliński
6682ff2e85 std: std.fs.File fix sendFile with buffered data
fixes #25196

Co-authored-by: Andrew Kelley <andrew@ziglang.org>
2025-10-09 12:08:17 -07:00