• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

steve-downey / compile-time-scheme / 30238875600

27 Jul 2026 05:07AM UTC coverage: 92.224% (+0.3%) from 91.887%
30238875600

push

github

steve-downey
Merge step L20: multiple values (Track C)

n-ary return channel per the plan's literal wording: value_list<Core, MaxValues>
carries a possibly-empty sequence, single-value contexts take the primary, and
missing values pad with nil. Each closure-backend operation becomes a pair --
eval_direct_values / apply_function_value_values return the whole list,
eval_direct / apply_function_value adapt to one value -- and only tail positions
recurse through the primitives, which is ANSI CL's multiple-value-context rule.

values is an ordinary function, not a special operator: builtin_op::values,
installed as VALUES by every default_env overload, so (values 1 2) is a plain
core_application and #'values / funcall / apply all work. An earlier attempt at
this step introduced a core_values node instead, because it believed the builtin
switch inside anchor 1d30e953 could not be edited. That constraint was false --
see the anchor section of AGENTS.md -- and the node went away with the reason for
it. multiple-value-bind stays a special operator lowering to a real core_lambda
that gets called, so it inherits implicit progn, arity checking, capture, and
L16's dynamic-binding rule.

Three ANSI divergences recorded rather than glossed: DIV-0018 (the sender backend
diagnoses both forms rather than truncating; the other side of DIV-0017),
DIV-0019 (return-from and throw carry only the primary value, because widening
the exit-record payloads costs MaxValues x 256 slots in every env_arena), and
DIV-0020 (the operator set is these two forms, and MaxValues is 8 against ANSI's
required 20).

795 tests pass; lint clean; frozen smdscheme tree untouched.

727 of 764 new or added lines in 12 files covered. (95.16%)

53 existing lines in 1 file now uncovered.

11006 of 11934 relevant lines covered (92.22%)

272.94 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

98.06
/src/smd/smdlisp/closure/cps_code.test.cpp


Build SHA Not Found

The commit SHA "d63a6d261dc8516e04becd4adf0e49ffaeedf5d2" was not found in your repository, so the file cannot be loaded. This may be because you posted from a local development environment, or your CI created an ephemeral commit.

STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc