Skip to content

Commit 43063cd

Browse files
committed
[downcast-rework-fusion]
1 parent f8d97cb commit 43063cd

File tree

9 files changed

+345
-109
lines changed

9 files changed

+345
-109
lines changed

runtime/sam/expr/agg/fuser.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,11 +188,11 @@ func (f *Fuser) fuseIntoUnionTypes(types []super.Type, typ super.Type) []super.T
188188
switch typ := typ.(type) {
189189
case *super.TypeNamed:
190190
return f.addNamed(types, typ)
191-
case *super.TypeUnion:
192-
for _, t := range typ.Types {
193-
types = f.fuseIntoUnionTypes(types, t)
194-
}
195-
return types
191+
//case *super.TypeUnion:
192+
// for _, t := range typ.Types {
193+
// types = f.fuseIntoUnionTypes(types, t)
194+
// }
195+
// return types
196196
case *super.TypeFusion:
197197
return f.fuseIntoUnionTypes(types, typ.Type)
198198
}

runtime/sam/expr/function/defuse.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ type defuse struct {
1616
func NewDefuse(sctx *super.Context) *defuse {
1717
return &defuse{
1818
sctx: sctx,
19-
downcast: &downcast{sctx: sctx},
19+
downcast: &downcast{sctx: sctx, name: "defuse"},
2020
has: make(map[super.Type]bool),
2121
}
2222
}
@@ -95,11 +95,11 @@ func (d *defuse) eval(in super.Value) super.Value {
9595
case *super.TypeUnion:
9696
return d.eval(in.DeunionIntoNameds())
9797
case *super.TypeFusion:
98-
_, subType := typ.Deref(d.sctx, in.Bytes())
99-
if out, ok := d.downcast.Cast(in, subType); ok {
100-
return out
98+
out, errVal := d.downcast.defuse(typ, in.Bytes())
99+
if errVal != nil {
100+
return *errVal
101101
}
102-
return d.sctx.WrapError("cannot defuse super value", in)
102+
return out
103103
default:
104104
// primitives, named types, enums
105105
// BTW, named types are a barrier to defuse.

0 commit comments

Comments
 (0)