Brings the branch up to date with main (612eee251). Two textual
conflicts, both where main added its Java external-call guard (#2667)
next to this branch's Swift candidate guard:
- src/pipeline/pass_calls.c: the registry lookup still runs only when
the Swift candidates allow it, and now passes java_external.
- src/pipeline/pass_parallel.c: the registry fallback condition keeps
both !java_external and count == 0.
No other file conflicted.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
pipeline_swift_generic_return_keeps_label_match_issue2061: a callee's
generic parameter used as its return type, colliding with a project type
of the same name, leaves the variable unknown and its call keeps the
label match.
pipeline_swift_try_initializer_types_receiver_issue2061: `try await
Reader(...)` and `try ServerSocket(...)` type the variable; a subclass
receiver reaches its base class and the base class's extension in
another file, not same-labelled decoy members.
swift_conditional_retry_keeps_the_better_parse_issue2061: an `#error`
line from a dropped `#else` branch in a class body keeps the first parse,
so the class and its initializer stay in the graph.
The pipeline tests run sequential and parallel. Each test fails with its
fix reverted.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
The conditional-compilation retry always kept the masked re-parse. When
the dropped branch holds an `#error(...)` line inside a type body the
re-parse reads less of the file: Alamofire Protected.swift went from 3
to 14 unreadable lines and lost its Protected initializer.
The re-parse is now kept only when its error regions cover no more lines
than those of the first parse. Counting regions instead would reject
re-parses that split one large region into a few small ones; on
swift-nio that gave back 1,312 of the recovered lines.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
`let socket = try ServerSocket(...)` and `let reader = try await
Reader(...)` left the variable untyped, so every member call on it went
to a label-only guess or was dropped. The initializer is now unwrapped
from `try` / `await` before its constructor type is read. Only a bare
type name counts there: `try Foo.make()` returns what make returns,
which the registry still infers from the call.
With the type in place the existing base-class and extension walk
applies: on swift-nio socket.close(), socket.bind(to:) and
socket.getLocalVsockAddress() in VsockAddressTest.swift resolve to
ServerSocket, BaseSocket and the BaseSocket extension in VsockAddress.swift.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
A variable whose type comes only from its initializer call
(`let p = loop.makePromise(of: Int.self)`) replaced the label match with
a typed lookup, and a failed lookup dropped the call. On swift-nio that
left 1,976 call sites without an edge that the label match had resolved.
The inferred type now only narrows the label match. When the inference
fails (overloads with different return types, an unknown callee or root,
a cycle) the receiver stays unknown, and when the inferred type has no
member with the call's name and labels the call keeps the label match.
Written types (annotations, parameters, constructor calls) and
non-project receivers behave as before. Inferring an initializer's own
type never uses a label match, so a guess cannot become a type.
A callee's own generic parameter used as its return type
(`func runSALOnEventLoop<Result>(...) -> Result`) names no type. It is
read from the declaration's generic clause in the qualified name and
leaves the bound variable unknown.
The four rows of pipeline_swift_capped_chain_returns_and_metatype_receivers
that expected no edge for an unknown receiver now expect exactly one
label-matched upload(_:) edge.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
The first proof run failed in both FreeBSD legs at `npm ci`: the UI
dependency tree pulls in onnxruntime-node, which publishes builds for
win32, darwin and linux only, so npm stops with EBADPLATFORM before the
frontend is built. The VM boot, the pkg prepare step, the gmake detection
and the source sync all worked.
The job now builds the headless binary (scripts/build.sh without
--with-ui) and drops node22/npm-node22 from the prepare step. That still
proves the C core builds and starts on FreeBSD; the UI bundle is
platform-independent JavaScript and is built on every other leg. The
aarch64 comment now says what is actually unproven.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
Add .github/workflows/freebsd.yml, a standalone workflow triggered only
by workflow_dispatch. It builds the UI-embedded binary inside FreeBSD
15.1 and 14.4 x86_64 VMs (vmactions/freebsd-vm, full-SHA pin to v1.5.9)
with the canonical scripts/build.sh and runs the binary with --version.
It declares read-only permissions, uploads and publishes nothing, is not
part of ci-ok and is not called by release.yml or dry-run.yml, so a
FreeBSD red never gates a pull request or a release.
scripts/env.sh now detects FreeBSD and selects gmake there (BSD make
cannot read the GNU make syntax of Makefile.cbm) and make everywhere
else; the environment summary line reports the choice. scripts/build.sh
runs $MAKE at all three build call sites. macOS, Linux and Windows still
run make, so their builds are unchanged.
Distilled from #1422 by PR9000: the release matrix, the x86_64-host
choice, the aarch64 exclusion, the vmactions VM approach with a SHA pin,
fail-fast: false and the gmake detection all come from that pull
request, which built on the FreeBSD groundwork of #1093, #1423 and #1467.
Co-authored-by: Pedro Ramos <131530838+pr9000@users.noreply.github.com>
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
Include matching extension owners in typed Swift method and initializer lookup. Preserve owner metadata for incremental indexing and cover three-file resolution in sequential, parallel, and incremental runs.
Refs DeusData#2061
Signed-off-by: DavidHLP <lysf15520112973@163.com>
Bring the branch up to main e0c7a1da6c
(#2395), which includes #1724 (index resource worker and publication
fence, 008b6c3585).
Conflict resolved (1 file):
- docs/CONFIGURATION.md: both sides appended rows to the "Current keys"
table at the same spot. Resolved as main rows index_max_rss_mb and
index_max_duration_seconds first, then the branch row install_hooks
and its paragraph that closes the table. No conflict side was
concatenated as-is; the branch paragraph must follow the last table
row.
Auto-merged without conflict: README.md, src/cli/cli.c (CONFIG_KEYS
now holds the new index_max_rss_mb / index_max_duration_seconds keys
and install_hooks), src/main.c (worker publish-fence argv next to the
--hooks/--no-hooks help line).
Check: for all seven branch files, the zero-context patch-id of the
merged tree against main equals the branch own change. Semantic check:
the branch re-signs no function; main re-signed the daemon worker start
callback and the supervisor result struct, which the branch does not
use. No call site adapted.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
semantic_manifest_control_entry() reads the metadata of every entry the
control-file walk lists, and one failed read fails the whole manifest.
On Win32 the plain path <dir>\nul names the NUL device, so a real file
named nul (Git Bash leaves one behind after `cmd > nul` or `2>nul`)
cannot be read: GetFileAttributesExW fails with
ERROR_INVALID_PARAMETER. The manifest returns CBM_NOT_FOUND and every
index run on the repository ends in CBM_PIPELINE_ABORT_PRESERVE_DB
(aborted_previous_preserved). Listing nul in .gitignore does not help,
because the walk visits every entry.
Only directories and control files can contribute to the manifest.
Decide the control name first and skip an entry that the listing
already shows to be neither, without reading it. A Windows listing
always carries the attributes; on POSIX an entry whose d_type is
DT_UNKNOWN is still read. Directories and control-named entries are
read exactly as before.
Signed-off-by: Tanishq <slatorgator3@gmail.com>
The memory-core ratchet (lint-memory-core) failed on the publication
fence commit: it added six raw free() calls, each releasing a block that
existing code allocates with raw calloc, malloc or strdup. cbm_free cannot
release such a block without the core class counters drifting, so every
new exit now reuses an existing release point instead:
- index_supervisor.c: worker_artifacts_create() creates the response, log
and publish fence files and names the one that failed, so all three
failures share the single artifact_create_failed exit.
- pipeline.c: a refused publication gate takes the existing source-changed
abort exit (same CBM_PIPELINE_ABORT_PRESERVE_DB result and cleanup).
- mcp.c: index_request_names_free() is the one release point for the
request name strings, used by index_worker_json_result() and
index_args_serving_index_servable().
Raw-site counts return to the origin/main values (index_supervisor.c 8,
pipeline.c 129, mcp.c 765) with no baseline change. No behaviour change.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>