Skip to content

Assertion error in dispatch when multi value types meet warnings #13108

@radeusgd

Description

@radeusgd

I encountered situations like this that were blocking my fixing of errors during the DB_Column part of #12994.

I tried to distill this into a minimal example and what I was able to find is following:

from Standard.Base import all
import Standard.Base.Errors.Illegal_State.Illegal_State

type Base_Column
    Value underlying

type In_Memory_Column
    Value vec

type My_Warning
    Warning msg

Base_Column.from (that:In_Memory_Column) =
    Base_Column.Value that

In_Memory_Column.from (that:Base_Column) =
    if that.underlying.is_a In_Memory_Column then that.underlying else
        Error.throw (Illegal_State.Error "In_Memory_Column.from: that is not an In_Memory_Column")

refine base:Base_Column =
    (base : Base_Column & In_Memory_Column)

new_column vec:Vector -> Base_Column =
    refine (In_Memory_Column.Value vec)

main =
    col = new_column [1,2,3]
    col_warn = Warning.attach (My_Warning.Warning "My warning") col
    col_as_in_mem = col_warn:In_Memory_Column
    col_as_base = col_as_in_mem:Base_Column
    col_as_both = col_as_base:(Base_Column & In_Memory_Column)
    col_back = col_as_both:In_Memory_Column
    col_back.to_text

Expected behaviour

Printing

col_warn = Base_Column & In_Memory_Column
 ! (My_Warning.Warning 'My warning')
col_as_in_mem = Base_Column & In_Memory_Column
 ! (My_Warning.Warning 'My warning')
col_as_base = Base_Column & In_Memory_Column
 ! (My_Warning.Warning 'My warning')
(In_Memory_Column.Value [1, 2, 3])

Actual behaviour

If running with -ea, this fails with assertion error:

Execution finished with an error: java.lang.AssertionError: Dispatch (MultiType{types=[Base_Column]}) and extra (MultiType{types=[Base_Column]}) should be disjoin!
        at <java> org.enso.runtime/org.enso.interpreter.runtime.data.EnsoMultiValue$NewNode.newValue(EnsoMultiValue.java:107)
        at <java> org.enso.runtime/org.enso.interpreter.runtime.data.EnsoMultiValue$CastToNode.findTypeOrNull(EnsoMultiValue.java:618)
        at <java> org.enso.runtime/org.enso.interpreter.node.typecheck.SingleTypeCheckNode.findDirectMatch(SingleTypeCheckNode.java:121)
        at <java> org.enso.runtime/org.enso.interpreter.node.typecheck.SingleTypeCheckNode.doCheckNoConversionNeeded(SingleTypeCheckNode.java:68)
        at <java> org.enso.runtime/org.enso.interpreter.node.typecheck.SingleTypeCheckNodeGen.executeCheckOrConversion(SingleTypeCheckNodeGen.java:100)
        at <java> org.enso.runtime/org.enso.interpreter.node.typecheck.TypeCheckValueNode.handleCheckOrConversion(TypeCheckValueNode.java:56)
        at <java> org.enso.runtime/org.enso.interpreter.node.typecheck.TypeCheckExpressionNode.executeGeneric(TypeCheckExpressionNode.java:23)
        at <java> org.enso.runtime/org.enso.interpreter.node.scope.AssignmentNodeGen.executeGeneric(AssignmentNodeGen.java:48)
        at <java> org.enso.runtime/org.enso.interpreter.node.callable.function.BlockNode.executeGeneric(BlockNode.java:70)
        at <java> org.enso.runtime/org.enso.interpreter.node.ClosureRootNode.execute(ClosureRootNode.java:85)
        at <enso> In_Memory_Column.from(Internal)
        at <enso> test-assert.main(test-assert.enso:32:16-26)
java.lang.AssertionError: Dispatch (MultiType{types=[Base_Column]}) and extra (MultiType{types=[Base_Column]}) should be disjoin!

Metadata

Metadata

Type

Projects

Status

🟢 Accepted

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions