Skip to content

[pull] master from GaijinEntertainment:master#1106

Merged
pull[bot] merged 11 commits into
forksnd:masterfrom
GaijinEntertainment:master
Jun 13, 2026
Merged

[pull] master from GaijinEntertainment:master#1106
pull[bot] merged 11 commits into
forksnd:masterfrom
GaijinEntertainment:master

Conversation

@pull

@pull pull Bot commented Jun 13, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

borisbat and others added 11 commits June 12, 2026 13:02
The qmacro iterator tag only parsed in the FIRST slot of a multi-name
list - later slots of a multi-source for, a multi-name let, or a
shared-type block argument group were grammar errors. Downstream was
already per-slot ready for for-loops (iteratorsTags, templates_boost
lowering, ast_match), so the for/comprehension/block fix is five new
continuation arms (3x ds2_parser, 2x ds_parser; gen1's for and
comprehensions share variable_name_with_pos_list).

Let declarations needed a transport: the front tag travels as an
ExprTag wrapper around the whole ExprLet, so later tagged slots now
carry per-variable tag+source (same design as block arguments) -
ast_Let stamps slots >0, ast_LetList stamps all (its form never had
the wrapper; head tags there were silently dropped), and a new
preVisitExprLetVariable arm in templates_boost lowers them. The dup
check skips tagged names (they all parse to the same placeholder,
same rule as ast_makeBlock).

With the natural form working, the two shipped workarounds are gone:
ZipShape carries gensym itAName/itBName instead of literal itA/itB,
and build_table_walk uses gensym kIter/vIter instead of
_tab_kv_key_/_tab_kv_value_ - no emission-shape change, kills the
user-name-collision risk inside generated invokes.

The make_for_loop helper proposed in #3096 is deliberately dropped:
with $i in every slot the natural qmacro form covers all static
shapes, and the only dynamic-count consumer (decs_boost
append_iterator) already has its local builder.

- tests/template/test_multislot_i_tags.das pins the five shapes
- reification.rst documents multi-slot $i with a compiled example
- linq_fold.md gets the dated journal entry

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…i-slot-iterator-tags

parser, daslib: accept $i(...) in every name-list slot
… runtime

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
 #2580)

The segfault as filed (unconditional context->to_err in the
registrator-missing and build-id-mismatch branches with the nullptr
context that JIT/standalone callers pass) was already fixed en
passant: a03cb39 guarded those two branches, 1b077a7 finished the
dlopen branch. What remained was the inverse hole - with no context a
loadable-but-broken artifact failed completely silently: the
standalone exe discards jit_register_dynamic_module_resolve's return,
so a corrupt .shared_module or build-id mismatch at exe startup
surfaced as nothing at all (unless DAS_TRACE_MODULE_LOAD=1). Same for
retry_pending_dynamic_modules.

Every report site now falls back to LOG(error) when there is no
context. The issue's suggested fix - honoring Quiet in those branches
- is deliberately rejected: Quiet governs LOAD failures (expected
during folder-scan enumeration, deferred for fixed-point retry); a
broken artifact is unfixable by retry, and silencing it recreates the
misleading-20605 class of swallowed diagnostics. Contract pinned in
the function-head and enum comments.

tests-cpp/small/test_register_dynamic_module.cpp pins the no-crash +
nullptr-return properties for all three on_error modes with a null
context, plus the non-Quiet dlopen-failure path.

While validating: exe_paths_module_resolve only ever passed via PATH
leakage - the compiled exe import-links libDaScriptDyn_runtime.dll,
but no test layout shipped it (a since-deleted SDK install on PATH had
been supplying it; exit 0xc0000135 once it vanished). run_layouts.cmake
now ships the runtime DLLs next to the exe in every layout, mirroring
daspkg release step 2.5, so the test validates genuinely
self-contained bundles.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
format (writer + string forms) is snprintf-based printf-%% and deprecated;
only fmt is colon-spec and panics on %%-form.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
das math's atan2(y, x) is spelled atan(y, x) in GLSL; without the
mapping a transpiled shader calling atan2 fails to compile at runtime.
Same class of entry as floori->floor and lerp->mix.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dynmod-quiet-contract

fio: report broken dynamic-module artifacts when context is null
glsl: map atan2 to GLSL atan in the function rename table
The parallel dispatcher in utils/jit/main.das was modeled on dastest's
isolated-mode worker pool but dropped the final `completion |> join()`
(dastest.das:743). Without it, draining the output channel is the only
synchronization main has: the last worker's final `outputChannel |>
notify()` lets main exit the with_job_status block while that worker
is still between the notify and its `completion |> notify_and_release()`
- so the AddReleaseGuard fires "synch primitive deleted while being
used (ref=1)" and the process traps (exit 133). Seen on the linux
Release "Prewarm JIT cache" CI step of PR #3122 (a doc-only PR).

The join is sufficient: NotifyAndRelease drops the worker's ref before
waking the waiter, both under one mutex, and each worker releases both
channels before notifying completion, so the outer with_channel guards
are covered too. Every other with_job_status dispatcher in the tree
already joins (dastest, parallel_workers, dasfmt, with_wait_group,
pathTracer); jit was the lone outlier.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-spec-doc

skills/strings: fmt spec is colon-prefixed (":.2f"), %-form panics at runtime
…l-join

jit: join the completion status before leaving run_parallel
@pull pull Bot locked and limited conversation to collaborators Jun 13, 2026
@pull pull Bot added the ⤵️ pull label Jun 13, 2026
@pull pull Bot merged commit 9d91b5c into forksnd:master Jun 13, 2026
2 of 6 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant