Skip to content

Fix: A value class whose underlying property is not public crosses as a boxed object - #169

Merged
b-re-w merged 1 commit into
developfrom
feat/value-class-box
Oct 3, 2026
Merged

b-re-w merged 1 commit into
developfrom
feat/value-class-box

Conversation

@b-re-w

@b-re-w b-re-w commented Oct 3, 2026

Copy link
Copy Markdown
Member

Closes #168

Defect fixed: TextUnit(30, TextUnitType.Sp) failed with 'expected a number for TextUnitType'. TextUnitType has a public constructor but an internal underlying property, so Kotlin can only hand it to Python boxed, while the walker marshalled its parameter as the raw Long. The walker's raw-primitive rule for a parameter now also needs a public underlying property; otherwise the parameter takes the object-handle path and kotlinc unboxes (no JVM name lookup). Dp and Meters stay raw.

Test added: ksp-fixtures/artifact WalkedArtifactValueClassBoxTest (aBoxedValueClassFillsItsOwnParameter red before the fix; aRawNumberStillDoesNotFillAValueClassOffTheAllowlist as control). The refusal of a raw number in such a slot now surfaces as a stale-handle error rather than the allowlist TypeError, as for every object slot.
Spec: SPEC B-4.

Verified locally, each module separately: plugin test 274/0, desktopTest 608/0, artifact 37/0, app 79/0, compose 120/0, androidNative compile OK.

… a boxed object (#168)

TextUnitType has a public constructor but an internal property, so Kotlin can
only hand it to Python boxed; the walker read its parameter as the raw Long.
The raw-primitive rule for a parameter now also needs a public underlying
property, so such a parameter takes the object-handle path and kotlinc unboxes.
Red before: WalkedArtifactValueClassBoxTest.aBoxedValueClassFillsItsOwnParameter
(expected a number for TextUnitType).
@b-re-w
b-re-w merged commit 9d414e7 into develop Oct 3, 2026
@b-re-w
b-re-w deleted the feat/value-class-box branch October 3, 2026 16:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant