-
Notifications
You must be signed in to change notification settings - Fork 330
Labels
Description
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
Assignees
Labels
Type
Projects
Status
🟢 Accepted