diff --git a/src/passes/cps/test_types.fnk b/src/passes/cps/test_types.fnk index 5471cd5..8ac7b62 100644 --- a/src/passes/cps/test_types.fnk +++ b/src/passes/cps/test_types.fnk @@ -9,13 +9,13 @@ test 'unit type declaration', fn: expect cps_module ƒink: Foo = type _ | equals ƒink: - ·ƒink_module fn ·ƒctx_14, ·ƒret_1: + ·ƒink_module fn ·ƒctx_15, ·ƒret_1: ·letrec fn ·Foo_0: - ·new_type ·ƒctx_14, fn ·ƒctx_17, ·ƒv_2: + ·new_type ·ƒctx_15, ƒ'Foo', fn ·ƒctx_18, ·ƒv_2: ·set ·Foo_0, ·ƒv_2, fn: - ·ƒpub ·ƒctx_17, ·Foo_0, fn ·ƒctx_19: - ·ƒret_1 ·ƒctx_19, ·Foo_0 - # sm:KQABAAwAAQAMJAEADBgBAAwSAAIABgEADAABAAwYAQADDgACAAoBDAYAAQAGFgAUAAoAGAEABg4AAgAOAQsMAAEADAwBAAMOAAQBDAYOAAgAAgASAQsDAAEAAxAAFAAEAQADDgAKABQAAgAWAQADAAEAAxQAFAAEAQAD + ·ƒpub ·ƒctx_18, ·Foo_0, fn ·ƒctx_20: + ·ƒret_1 ·ƒctx_20, ·Foo_0 + # sm:KwABAAwAAQAMJAEADBgBAAwSAAIABgEADAABAAwYAQADDgACAAoBDAYAAQAGFgAUAAQBAAYOAAoAGAEABg4AAgAOAQsMAAEADAwBAAMOAAQBDAYOAAgAAgASAQsDAAEAAxAAFAAEAQADDgAKABQAAgAWAQADAAEAAxQAFAAEAQAD test 'record type with one field', fn: @@ -23,14 +23,14 @@ test 'record type with one field', fn: Foo = type: shrub: u8 | equals ƒink: - ·ƒink_module fn ·ƒctx_20, ·ƒret_1: + ·ƒink_module fn ·ƒctx_21, ·ƒret_1: ·letrec fn ·Foo_0: - ·new_type ·ƒctx_20, fn ·ƒctx_23, ·ƒv_2: - ·type_set_field ·ƒctx_23, ·ƒv_2, ƒ'shrub', ·∅u8, fn ·ƒctx_25, ·ƒv_6: - ·set ·Foo_0, ·ƒv_6, fn: - ·ƒpub ·ƒctx_25, ·Foo_0, fn ·ƒctx_27: - ·ƒret_1 ·ƒctx_27, ·Foo_0 - # sm:NwABABcAAQAXJAEAFxgBABcSAAIABgEAFwABABcYAQADDgACAAoBDBEAAQARFgAUAAoAGAEAEQ4AAgAOARAJAAEACSIAFAAEAQ8RDgAEARAFEgAEAQ4CDgAKABgBDQkOAAIAEgEbFwABABcMAQADDgAEARwJDgAIAAIAFgEbAwABAAMQABQABAEAAw4ACgAUAAIAGgEAAwABAAMUABQABAEAAw + ·new_type ·ƒctx_21, ƒ'Foo', fn ·ƒctx_24, ·ƒv_2: + ·type_set_field ·ƒctx_24, ·ƒv_2, ƒ'shrub', ·∅u8, fn ·ƒctx_26, ·ƒv_7: + ·set ·Foo_0, ·ƒv_7, fn: + ·ƒpub ·ƒctx_26, ·Foo_0, fn ·ƒctx_28: + ·ƒret_1 ·ƒctx_28, ·Foo_0 + # sm:OQABABcAAQAXJAEAFxgBABcSAAIABgEAFwABABcYAQADDgACAAoBDBEAAQARFgAUAAQBABEOAAoAGAEAEQ4AAgAOARAJAAEACSIAFAAEAQ8RDgAEARAFEgAEAQ4CDgAKABgBDQkOAAIAEgEbFwABABcMAQADDgAEARwJDgAIAAIAFgEbAwABAAMQABQABAEAAw4ACgAUAAIAGgEAAwABAAMUABQABAEAAw test 'subtype with base spread and field', fn: @@ -39,15 +39,15 @@ test 'subtype with base spread and field', fn: ..Foo ni: u8 | equals ƒink: - ·ƒink_module fn ·ƒctx_25, ·ƒret_1: + ·ƒink_module fn ·ƒctx_26, ·ƒret_1: ·letrec fn ·Bar_0: - ·new_type ·ƒctx_25, fn ·ƒctx_28, ·ƒv_2: - ·type_inherit ·ƒctx_28, ·ƒv_2, ·∅Foo, fn ·ƒctx_30, ·ƒv_5: - ·type_set_field ·ƒctx_30, ·ƒv_5, ƒ'ni', ·∅u8, fn ·ƒctx_32, ·ƒv_9: - ·set ·Bar_0, ·ƒv_9, fn: - ·ƒpub ·ƒctx_32, ·Bar_0, fn ·ƒctx_34: - ·ƒret_1 ·ƒctx_34, ·Bar_0 - # sm:QwABABwAAQAcJAEAHBgBABwSAAIABgEAHAABABwYAQADDgACAAoBDBYAAQAWFgAUAAoAGAEAFg4AAgAOARAFAAEABR4AFAAEAQ8WDgAEARQDEAAKABgBAwUOAAIAEgEQBgABAAYiABQABAEPBQ4ABAEQAgwABAEIAg4ACgAYAQcGDgACABYBKxwAAQAcDAEAAw4ABAEsBg4ACAACABoBKwMAAQADEAAUAAQBAAMOAAoAFAACAB4BAAMAAQADFAAUAAQBAAM + ·new_type ·ƒctx_26, ƒ'Bar', fn ·ƒctx_29, ·ƒv_2: + ·type_inherit ·ƒctx_29, ·ƒv_2, ·∅Foo, fn ·ƒctx_31, ·ƒv_6: + ·type_set_field ·ƒctx_31, ·ƒv_6, ƒ'ni', ·∅u8, fn ·ƒctx_33, ·ƒv_10: + ·set ·Bar_0, ·ƒv_10, fn: + ·ƒpub ·ƒctx_33, ·Bar_0, fn ·ƒctx_35: + ·ƒret_1 ·ƒctx_35, ·Bar_0 + # sm:RQABABwAAQAcJAEAHBgBABwSAAIABgEAHAABABwYAQADDgACAAoBDBYAAQAWFgAUAAQBABYOAAoAGAEAFg4AAgAOARAFAAEABR4AFAAEAQ8WDgAEARQDEAAKABgBAwUOAAIAEgEQBgABAAYiABQABAEPBQ4ABAEQAgwABAEIAg4ACgAYAQcGEAACABYBKxwAAQAcDAEAAw4ABAEsBhAACAACABoBKwMAAQADEAAUAAQBAAMOAAoAFAACAB4BAAMAAQADFAAUAAQBAAM @@ -55,15 +55,15 @@ test 'tuple type with two positional fields', fn: expect cps_module ƒink: Ni = type: u8, i8 | equals ƒink: - ·ƒink_module fn ·ƒctx_24, ·ƒret_1: + ·ƒink_module fn ·ƒctx_25, ·ƒret_1: ·letrec fn ·Ni_0: - ·new_type ·ƒctx_24, fn ·ƒctx_27, ·ƒv_2: - ·type_push ·ƒctx_27, ·ƒv_2, ·∅u8, fn ·ƒctx_29, ·ƒv_5: - ·type_push ·ƒctx_29, ·ƒv_5, ·∅i8, fn ·ƒctx_31, ·ƒv_8: - ·set ·Ni_0, ·ƒv_8, fn: - ·ƒpub ·ƒctx_31, ·Ni_0, fn ·ƒctx_33: - ·ƒret_1 ·ƒctx_33, ·Ni_0 - # sm:QQABABEAAQARJAEAERgBABESAAIABgEAEQABABEYAQACDAACAAoBCgwAAQAMFgAUAAoAGAEADA4AAgAOAQwCAAEAAhgAFAAEAQsMDgAEAQwCDgAKABgBAAIOAAIAEgEIAgABAAIYABQABAEHAg4ABAEIAg4ACgAYAQACDgACABYBHREAAQARDAEAAgwABAEeAg4ACAACABoBHQIAAQACEAAUAAQBAAIMAAoAFAACAB4BAAIAAQACFAAUAAQBAAI + ·new_type ·ƒctx_25, ƒ'Ni', fn ·ƒctx_28, ·ƒv_2: + ·type_push ·ƒctx_28, ·ƒv_2, ·∅u8, fn ·ƒctx_30, ·ƒv_6: + ·type_push ·ƒctx_30, ·ƒv_6, ·∅i8, fn ·ƒctx_32, ·ƒv_9: + ·set ·Ni_0, ·ƒv_9, fn: + ·ƒpub ·ƒctx_32, ·Ni_0, fn ·ƒctx_34: + ·ƒret_1 ·ƒctx_34, ·Ni_0 + # sm:QwABABEAAQARJAEAERgBABESAAIABgEAEQABABEYAQACDAACAAoBCgwAAQAMFgAUAAQBAAwMAAoAGAEADA4AAgAOAQwCAAEAAhgAFAAEAQsMDgAEAQwCDgAKABgBAAIOAAIAEgEIAgABAAIYABQABAEHAg4ABAEIAg4ACgAYAQACDgACABYBHREAAQARDAEAAgwABAEeAg4ACAACABoBHQIAAQACEAAUAAQBAAIMAAoAFAACAB4BAAIAAQACFAAUAAQBAAI test 'tuple subtype base spread before positional', fn: expect cps_module ƒink: @@ -71,15 +71,15 @@ test 'tuple subtype base spread before positional', fn: ..Ni u8 | equals ƒink: - ·ƒink_module fn ·ƒctx_24, ·ƒret_1: + ·ƒink_module fn ·ƒctx_25, ·ƒret_1: ·letrec fn ·Nu_0: - ·new_type ·ƒctx_24, fn ·ƒctx_27, ·ƒv_2: - ·type_inherit ·ƒctx_27, ·ƒv_2, ·∅Ni, fn ·ƒctx_29, ·ƒv_5: - ·type_push ·ƒctx_29, ·ƒv_5, ·∅u8, fn ·ƒctx_31, ·ƒv_8: - ·set ·Nu_0, ·ƒv_8, fn: - ·ƒpub ·ƒctx_31, ·Nu_0, fn ·ƒctx_33: - ·ƒret_1 ·ƒctx_33, ·Nu_0 - # sm:QQABABYAAQAWJAEAFhgBABYSAAIABgEAFgABABYYAQACDAACAAoBChEAAQARFgAUAAoAGAEAEQ4AAgAOARAEAAEABB4AFAAEAQ8RDgAEARQCDgAKABgBAwQOAAIAEgEOAgABAAIYABQABAENBA4ABAEOAg4ACgAYAQACDgACABYBJxYAAQAWDAEAAgwABAEoAg4ACAACABoBJwIAAQACEAAUAAQBAAIMAAoAFAACAB4BAAIAAQACFAAUAAQBAAI + ·new_type ·ƒctx_25, ƒ'Nu', fn ·ƒctx_28, ·ƒv_2: + ·type_inherit ·ƒctx_28, ·ƒv_2, ·∅Ni, fn ·ƒctx_30, ·ƒv_6: + ·type_push ·ƒctx_30, ·ƒv_6, ·∅u8, fn ·ƒctx_32, ·ƒv_9: + ·set ·Nu_0, ·ƒv_9, fn: + ·ƒpub ·ƒctx_32, ·Nu_0, fn ·ƒctx_34: + ·ƒret_1 ·ƒctx_34, ·Nu_0 + # sm:QwABABYAAQAWJAEAFhgBABYSAAIABgEAFgABABYYAQACDAACAAoBChEAAQARFgAUAAQBABEMAAoAGAEAEQ4AAgAOARAEAAEABB4AFAAEAQ8RDgAEARQCDgAKABgBAwQOAAIAEgEOAgABAAIYABQABAENBA4ABAEOAg4ACgAYAQACDgACABYBJxYAAQAWDAEAAgwABAEoAg4ACAACABoBJwIAAQACEAAUAAQBAAIMAAoAFAACAB4BAAIAAQACFAAUAAQBAAI test 'tuple subtype positional before base spread', fn: @@ -88,33 +88,33 @@ test 'tuple subtype positional before base spread', fn: u8 ..Ni | equals ƒink: - ·ƒink_module fn ·ƒctx_24, ·ƒret_1: + ·ƒink_module fn ·ƒctx_25, ·ƒret_1: ·letrec fn ·Nu_0: - ·new_type ·ƒctx_24, fn ·ƒctx_27, ·ƒv_2: - ·type_push ·ƒctx_27, ·ƒv_2, ·∅u8, fn ·ƒctx_29, ·ƒv_5: - ·type_inherit ·ƒctx_29, ·ƒv_5, ·∅Ni, fn ·ƒctx_31, ·ƒv_8: - ·set ·Nu_0, ·ƒv_8, fn: - ·ƒpub ·ƒctx_31, ·Nu_0, fn ·ƒctx_33: - ·ƒret_1 ·ƒctx_33, ·Nu_0 - # sm:QQABABYAAQAWJAEAFhgBABYSAAIABgEAFgABABYYAQACDAACAAoBChEAAQARFgAUAAoAGAEAEQ4AAgAOARACAAEAAhgAFAAEAQ8RDgAEARACDgAKABgBAAIOAAIAEgEKBAABAAQeABQABAEJAg4ABAEOAg4ACgAYAQMEDgACABYBIxYAAQAWDAEAAgwABAEkBA4ACAACABoBIwIAAQACEAAUAAQBAAIMAAoAFAACAB4BAAIAAQACFAAUAAQBAAI + ·new_type ·ƒctx_25, ƒ'Nu', fn ·ƒctx_28, ·ƒv_2: + ·type_push ·ƒctx_28, ·ƒv_2, ·∅u8, fn ·ƒctx_30, ·ƒv_6: + ·type_inherit ·ƒctx_30, ·ƒv_6, ·∅Ni, fn ·ƒctx_32, ·ƒv_9: + ·set ·Nu_0, ·ƒv_9, fn: + ·ƒpub ·ƒctx_32, ·Nu_0, fn ·ƒctx_34: + ·ƒret_1 ·ƒctx_34, ·Nu_0 + # sm:QwABABYAAQAWJAEAFhgBABYSAAIABgEAFgABABYYAQACDAACAAoBChEAAQARFgAUAAQBABEMAAoAGAEAEQ4AAgAOARACAAEAAhgAFAAEAQ8RDgAEARACDgAKABgBAAIOAAIAEgEKBAABAAQeABQABAEJAg4ABAEOAg4ACgAYAQMEDgACABYBIxYAAQAWDAEAAgwABAEkBA4ACAACABoBIwIAAQACEAAUAAQBAAIMAAoAFAACAB4BAAIAAQACFAAUAAQBAAI test 'generic type with one param', fn: expect cps_module ƒink: Spam = type T: ham: T | equals ƒink: - ·ƒink_module fn ·ƒctx_27, ·ƒret_2: + ·ƒink_module fn ·ƒctx_28, ·ƒret_2: ·letrec fn ·Spam_0: ·fn - fn ·ƒctx_29, ·ƒret_4, ·T_1: - ·new_type ·ƒctx_29, fn ·ƒctx_31, ·ƒv_5: - ·type_set_field ·ƒctx_31, ·ƒv_5, ƒ'ham', ·T_1, fn ·ƒctx_33, ·ƒv_9: - ·ƒret_4 ·ƒctx_33, ·ƒv_9 + fn ·ƒctx_30, ·ƒret_4, ·T_1: + ·new_type ·ƒctx_30, ƒ'Spam', fn ·ƒctx_32, ·ƒv_5: + ·type_set_field ·ƒctx_32, ·ƒv_5, ƒ'ham', ·T_1, fn ·ƒctx_34, ·ƒv_10: + ·ƒret_4 ·ƒctx_34, ·ƒv_10 fn ·ƒv_3: ·set ·Spam_0, ·ƒv_3, fn: - ·ƒpub ·ƒctx_27, ·Spam_0, fn ·ƒctx_36: - ·ƒret_2 ·ƒctx_36, ·Spam_0 - # sm:SAABABcAAQAXJAEAFxgBABcSAAIABgEAFwABABcYAQAEEAACAAoBDhAAAQAQCAAUABgBABAWAQoBCgACABIBCRAAAQAQFgAUAAoAGAEAEA4AAgAWARQGAAEABiIAFAAEARMQDgAEARQDDgAEAQoBCgAKABgBCQYOAAIAGgETEAABABAUABQABAEUBg4AFAETEA4AAgASAQ0XAAEAFwwBAAQQAAQBDhAOAAgAAgAWAQ0EAAEABBAAFAAEAQAEEAAKABQAAgAaAQAEAAEABBQAFAAEAQAE + ·ƒpub ·ƒctx_28, ·Spam_0, fn ·ƒctx_37: + ·ƒret_2 ·ƒctx_37, ·Spam_0 + # sm:SgABABcAAQAXJAEAFxgBABcSAAIABgEAFwABABcYAQAEEAACAAoBDhAAAQAQCAAUABgBABAWAQoBCgACABIBCRAAAQAQFgAUAAQBABAQAAoAGAEAEA4AAgAWARQGAAEABiIAFAAEARMQDgAEARQDDgAEAQoBCgAKABgBCQYQAAIAGgETEAABABAUABQABAEUBhAAFAETEA4AAgASAQ0XAAEAFwwBAAQQAAQBDhAOAAgAAgAWAQ0EAAEABBAAFAAEAQAEEAAKABQAAgAaAQAEAAEABBQAFAAEAQAE test 'generic type with two params', fn: expect cps_module ƒink: @@ -122,19 +122,19 @@ test 'generic type with two params', fn: a: T1 b: T2 | equals ƒink: - ·ƒink_module fn ·ƒctx_34, ·ƒret_3: + ·ƒink_module fn ·ƒctx_35, ·ƒret_3: ·letrec fn ·P_0: ·fn - fn ·ƒctx_36, ·ƒret_5, ·T1_1, ·T2_2: - ·new_type ·ƒctx_36, fn ·ƒctx_38, ·ƒv_6: - ·type_set_field ·ƒctx_38, ·ƒv_6, ƒ'a', ·T1_1, fn ·ƒctx_40, ·ƒv_10: - ·type_set_field ·ƒctx_40, ·ƒv_10, ƒ'b', ·T2_2, fn ·ƒctx_42, ·ƒv_14: - ·ƒret_5 ·ƒctx_42, ·ƒv_14 + fn ·ƒctx_37, ·ƒret_5, ·T1_1, ·T2_2: + ·new_type ·ƒctx_37, ƒ'P', fn ·ƒctx_39, ·ƒv_6: + ·type_set_field ·ƒctx_39, ·ƒv_6, ƒ'a', ·T1_1, fn ·ƒctx_41, ·ƒv_11: + ·type_set_field ·ƒctx_41, ·ƒv_11, ƒ'b', ·T2_2, fn ·ƒctx_43, ·ƒv_15: + ·ƒret_5 ·ƒctx_43, ·ƒv_15 fn ·ƒv_4: ·set ·P_0, ·ƒv_4, fn: - ·ƒpub ·ƒctx_34, ·P_0, fn ·ƒctx_45: - ·ƒret_3 ·ƒctx_45, ·P_0 - # sm:VwABACAAAQAgJAEAIBgBACASAAIABgEAIAABACAYAQABCgACAAoBCBwAAQAcCAAUABgBABwWAQoCEAEIAgwAAgASAREcAAEAHBYAFAAKABgBABwOAAIAFgEeBQABAAUiABQABAEdHA4ABAEeAQoABAEGAgwACgAYAQUFEAACABoBEAUAAQAFIgAUAAQBDwUQAAQBEAEKAAQBBgIMAAoAGAEFBRAAAgAeAS0cAAEAHBQAFAAEAS4FEAAUAS0cDgACABIBByAAAQAgDAEAAQoABAEIHA4ACAACABYBBwEAAQABEAAUAAQBAAEKAAoAFAACABoBAAEAAQABFAAUAAQBAAE + ·ƒpub ·ƒctx_35, ·P_0, fn ·ƒctx_46: + ·ƒret_3 ·ƒctx_46, ·P_0 + # sm:WQABACAAAQAgJAEAIBgBACASAAIABgEAIAABACAYAQABCgACAAoBCBwAAQAcCAAUABgBABwWAQoCEAEIAgwAAgASAREcAAEAHBYAFAAEAQAcCgAKABgBABwOAAIAFgEeBQABAAUiABQABAEdHA4ABAEeAQoABAEGAgwACgAYAQUFEAACABoBEAUAAQAFIgAUAAQBDwUQAAQBEAEKAAQBBgIMAAoAGAEFBRAAAgAeAS0cAAEAHBQAFAAEAS4FEAAUAS0cDgACABIBByAAAQAgDAEAAQoABAEIHA4ACAACABYBBwEAAQABEAAUAAQBAAEKAAoAFAACABoBAAEAAQABFAAUAAQBAAE @@ -144,15 +144,15 @@ test 'union of two existing types', fn: Int Float | equals ƒink: - ·ƒink_module fn ·ƒctx_24, ·ƒret_1: + ·ƒink_module fn ·ƒctx_25, ·ƒret_1: ·letrec fn ·Num_0: - ·new_union ·ƒctx_24, fn ·ƒctx_27, ·ƒv_2: - ·union_add ·ƒctx_27, ·ƒv_2, ·∅Int, fn ·ƒctx_29, ·ƒv_5: - ·union_add ·ƒctx_29, ·ƒv_5, ·∅Float, fn ·ƒctx_31, ·ƒv_8: - ·set ·Num_0, ·ƒv_8, fn: - ·ƒpub ·ƒctx_31, ·Num_0, fn ·ƒctx_33: - ·ƒret_1 ·ƒctx_33, ·Num_0 - # sm:QQABABoAAQAaJAEAGhgBABoSAAIABgEAGgABABoYAQADDgACAAoBDBQAAQAUGAAUAAoAGAEAFA4AAgAOARIDAAEAAxgAFAAEAREUDgAEARIDEAAKABgBAAMOAAIAEgEMBQABAAUYABQABAELAw4ABAEMBRQACgAYAQAFDgACABYBKRoAAQAaDAEAAw4ABAEqBQ4ACAACABoBKQMAAQADEAAUAAQBAAMOAAoAFAACAB4BAAMAAQADFAAUAAQBAAM + ·new_union ·ƒctx_25, ƒ'Num', fn ·ƒctx_28, ·ƒv_2: + ·union_add ·ƒctx_28, ·ƒv_2, ·∅Int, fn ·ƒctx_30, ·ƒv_6: + ·union_add ·ƒctx_30, ·ƒv_6, ·∅Float, fn ·ƒctx_32, ·ƒv_9: + ·set ·Num_0, ·ƒv_9, fn: + ·ƒpub ·ƒctx_32, ·Num_0, fn ·ƒctx_34: + ·ƒret_1 ·ƒctx_34, ·Num_0 + # sm:QwABABoAAQAaJAEAGhgBABoSAAIABgEAGgABABoYAQADDgACAAoBDBQAAQAUGAAUAAQBABQOAAoAGAEAFA4AAgAOARIDAAEAAxgAFAAEAREUDgAEARIDEAAKABgBAAMOAAIAEgEMBQABAAUYABQABAELAw4ABAEMBRQACgAYAQAFDgACABYBKRoAAQAaDAEAAw4ABAEqBQ4ACAACABoBKQMAAQADEAAUAAQBAAMOAAoAFAACAB4BAAMAAQADFAAUAAQBAAM test 'generic union applies referenced constructor', fn: @@ -161,23 +161,23 @@ test 'generic union applies referenced constructor', fn: Foo T Bar | equals ƒink: - ·ƒink_module fn ·ƒctx_36, ·ƒret_2: + ·ƒink_module fn ·ƒctx_37, ·ƒret_2: ·letrec fn ·U_0: ·fn - fn ·ƒctx_38, ·ƒret_4, ·T_1: - ·new_union ·ƒctx_38, fn ·ƒctx_40, ·ƒv_5: + fn ·ƒctx_39, ·ƒret_4, ·T_1: + ·new_union ·ƒctx_39, ƒ'U', fn ·ƒctx_41, ·ƒv_5: ·∅Foo - ·ƒctx_40 - fn ·ƒctx_42, ·ƒv_9: - ·union_add ·ƒctx_42, ·ƒv_5, ·ƒv_9, fn ·ƒctx_44, ·ƒv_11: - ·union_add ·ƒctx_44, ·ƒv_11, ·∅Bar, fn ·ƒctx_46, ·ƒv_14: - ·ƒret_4 ·ƒctx_46, ·ƒv_14 + ·ƒctx_41 + fn ·ƒctx_43, ·ƒv_10: + ·union_add ·ƒctx_43, ·ƒv_5, ·ƒv_10, fn ·ƒctx_45, ·ƒv_12: + ·union_add ·ƒctx_45, ·ƒv_12, ·∅Bar, fn ·ƒctx_47, ·ƒv_15: + ·ƒret_4 ·ƒctx_47, ·ƒv_15 ·T_1 fn ·ƒv_3: ·set ·U_0, ·ƒv_3, fn: - ·ƒpub ·ƒctx_36, ·U_0, fn ·ƒctx_49: - ·ƒret_2 ·ƒctx_49, ·U_0 - # sm:WgABABoAAQAaJAEAGhgBABoSAAIABgEAGgABABoYAQABCgACAAoBCBYAAQAWCAAUABgBABYWAQwBCgACABIBCxYAAQAWGAAUAAoAGAEAFg4AAgAWARYFAAEAAyoANAAYAQAFDgACAB4BAAUAAQAFGAAUAAQBFRYOAAQBFgUOAAoAGAEABRAAAgAiARADAAEAAxgAFAAEAQ8FEAAEARADEAAKABgBAAMQAAIAJgElFgABABYUABQABAEmAyoBBwEKABQBHRYOAAIAEgEHGgABABoMAQABCgAEAQgWDgAIAAIAFgEHAQABAAEQABQABAEAAQoACgAUAAIAGgEAAQABAAEUABQABAEAAQ + ·ƒpub ·ƒctx_37, ·U_0, fn ·ƒctx_50: + ·ƒret_2 ·ƒctx_50, ·U_0 + # sm:XAABABoAAQAaJAEAGhgBABoSAAIABgEAGgABABoYAQABCgACAAoBCBYAAQAWCAAUABgBABYWAQwBCgACABIBCxYAAQAWGAAUAAQBABYKAAoAGAEAFg4AAgAWARYFAAEAAyoANAAYAQAFEAACAB4BAAUAAQAFGAAUAAQBFRYOAAQBFgUQAAoAGAEABRAAAgAiARADAAEAAxgAFAAEAQ8FEAAEARADEAAKABgBAAMQAAIAJgElFgABABYUABQABAEmAyoBBwEKABQBHRYOAAIAEgEHGgABABoMAQABCgAEAQgWDgAIAAIAFgEHAQABAAEQABQABAEAAQoACgAUAAIAGgEAAQABAAEUABQABAEAAQ test 'enum with mixed member payloads', fn: @@ -187,22 +187,22 @@ test 'enum with mixed member payloads', fn: Green u8, u16 Blue | equals ƒink: - ·ƒink_module fn ·ƒctx_57, ·ƒret_1: + ·ƒink_module fn ·ƒctx_61, ·ƒret_1: ·letrec fn ·Light_0: - ·new_enum ·ƒctx_57, fn ·ƒctx_60, ·ƒv_2: - ·new_type ·ƒctx_60, fn ·ƒctx_62, ·ƒv_4: - ·type_set_field ·ƒctx_62, ·ƒv_4, ƒ'foo', ·∅u8, fn ·ƒctx_64, ·ƒv_8: - ·enum_add ·ƒctx_64, ·ƒv_2, ƒ'Red', ·ƒv_8, fn ·ƒctx_66, ·ƒv_11: - ·new_type ·ƒctx_66, fn ·ƒctx_68, ·ƒv_13: - ·type_push ·ƒctx_68, ·ƒv_13, ·∅u8, fn ·ƒctx_70, ·ƒv_16: - ·type_push ·ƒctx_70, ·ƒv_16, ·∅u16, fn ·ƒctx_72, ·ƒv_19: - ·enum_add ·ƒctx_72, ·ƒv_11, ƒ'Green', ·ƒv_19, fn ·ƒctx_74, ·ƒv_22: - ·new_type ·ƒctx_74, fn ·ƒctx_76, ·ƒv_24: - ·enum_add ·ƒctx_76, ·ƒv_22, ƒ'Blue', ·ƒv_24, fn ·ƒctx_78, ·ƒv_27: - ·set ·Light_0, ·ƒv_27, fn: - ·ƒpub ·ƒctx_78, ·Light_0, fn ·ƒctx_80: - ·ƒret_1 ·ƒctx_80, ·Light_0 - # sm:kQEAAQA0AAEANCQBADQYAQA0EgACAAYBADQAAQA0GAEABRIAAgAKARAsAAEALBYAFAAKABgBACwOAAIADgEQDQABAA0WABQACgAYAQANDgACABIBCgcAAQAHIgAUAAQBCQ0OAAQBCgMOAAQBCgIOAAoAGAEJBw4AAgAWAQkNAAEADRYAFAAEAQ8sDgAEARADDgAEAQoHDgAKABgBCQ0QAAIAGgEgDQABAA0WABQACgAYAQANEAACAB4BDAIAAQACGAAUAAQBCw0QAAQBDAIOAAoAGAEAAhAAAgAiAQgDAAEAAxgAFAAEAQcCEAAEAQgDEAAKABgBAAMQAAIAJgETDQABAA0WABQABAEfDRAABAEgBRIABAEUAxAACgAYARMNEAACACoBIAQAAQAEFgAUAAoAGAEABBAAAgAuAQAEAAEABBYAFAAEAR8NEAAEASAEEAAEAQAEEAAKABgBAAQQAAIAMgFfNAABADQMAQAFEgAEAWAEEAAIAAIANgFfBQABAAUQABQABAEABRIACgAUAAIAOgEABQABAAUUABQABAEABQ + ·new_enum ·ƒctx_61, ƒ'Light', fn ·ƒctx_64, ·ƒv_2: + ·new_type ·ƒctx_64, ƒ'Red', fn ·ƒctx_66, ·ƒv_5: + ·type_set_field ·ƒctx_66, ·ƒv_5, ƒ'foo', ·∅u8, fn ·ƒctx_68, ·ƒv_10: + ·enum_add ·ƒctx_68, ·ƒv_2, ƒ'Red', ·ƒv_10, fn ·ƒctx_70, ·ƒv_13: + ·new_type ·ƒctx_70, ƒ'Green', fn ·ƒctx_72, ·ƒv_15: + ·type_push ·ƒctx_72, ·ƒv_15, ·∅u8, fn ·ƒctx_74, ·ƒv_19: + ·type_push ·ƒctx_74, ·ƒv_19, ·∅u16, fn ·ƒctx_76, ·ƒv_22: + ·enum_add ·ƒctx_76, ·ƒv_13, ƒ'Green', ·ƒv_22, fn ·ƒctx_78, ·ƒv_25: + ·new_type ·ƒctx_78, ƒ'Blue', fn ·ƒctx_80, ·ƒv_27: + ·enum_add ·ƒctx_80, ·ƒv_25, ƒ'Blue', ·ƒv_27, fn ·ƒctx_82, ·ƒv_31: + ·set ·Light_0, ·ƒv_31, fn: + ·ƒpub ·ƒctx_82, ·Light_0, fn ·ƒctx_84: + ·ƒret_1 ·ƒctx_84, ·Light_0 + # sm:mQEAAQA0AAEANCQBADQYAQA0EgACAAYBADQAAQA0GAEABRIAAgAKARAsAAEALBYAFAAEAQAsEgAKABgBACwOAAIADgEQDQABAA0WABQABAEADQ4ACgAYAQANDgACABIBCgcAAQAHIgAUAAQBCQ0OAAQBCgMOAAQBCgIOAAoAGAEJBxAAAgAWAQkNAAEADRYAFAAEAQ8sDgAEARADDgAEAQoHEAAKABgBCQ0QAAIAGgEgDQABAA0WABQABAEADRIACgAYAQANEAACAB4BDAIAAQACGAAUAAQBCw0QAAQBDAIOAAoAGAEAAhAAAgAiAQgDAAEAAxgAFAAEAQcCEAAEAQgDEAAKABgBAAMQAAIAJgETDQABAA0WABQABAEfDRAABAEgBRIABAEUAxAACgAYARMNEAACACoBIAQAAQAEFgAUAAQBAAQQAAoAGAEABBAAAgAuAQAEAAEABBYAFAAEAR8NEAAEASAEEAAEAQAEEAAKABgBAAQQAAIAMgFfNAABADQMAQAFEgAEAWAEEAAIAAIANgFfBQABAAUQABQABAEABRIACgAUAAIAOgEABQABAAUUABQABAEABQ test 'generic enum with param', fn: expect cps_module ƒink: @@ -210,19 +210,19 @@ test 'generic enum with param', fn: Some T None | equals ƒink: - ·ƒink_module fn ·ƒctx_44, ·ƒret_2: + ·ƒink_module fn ·ƒctx_47, ·ƒret_2: ·letrec fn ·Option_0: ·fn - fn ·ƒctx_46, ·ƒret_4, ·T_1: - ·new_enum ·ƒctx_46, fn ·ƒctx_48, ·ƒv_5: - ·new_type ·ƒctx_48, fn ·ƒctx_50, ·ƒv_7: - ·type_push ·ƒctx_50, ·ƒv_7, ·T_1, fn ·ƒctx_52, ·ƒv_10: - ·enum_add ·ƒctx_52, ·ƒv_5, ƒ'Some', ·ƒv_10, fn ·ƒctx_54, ·ƒv_13: - ·new_type ·ƒctx_54, fn ·ƒctx_56, ·ƒv_15: - ·enum_add ·ƒctx_56, ·ƒv_13, ƒ'None', ·ƒv_15, fn ·ƒctx_58, ·ƒv_18: - ·ƒret_4 ·ƒctx_58, ·ƒv_18 + fn ·ƒctx_49, ·ƒret_4, ·T_1: + ·new_enum ·ƒctx_49, ƒ'Option', fn ·ƒctx_51, ·ƒv_5: + ·new_type ·ƒctx_51, ƒ'Some', fn ·ƒctx_53, ·ƒv_8: + ·type_push ·ƒctx_53, ·ƒv_8, ·T_1, fn ·ƒctx_55, ·ƒv_12: + ·enum_add ·ƒctx_55, ·ƒv_5, ƒ'Some', ·ƒv_12, fn ·ƒctx_57, ·ƒv_15: + ·new_type ·ƒctx_57, ƒ'None', fn ·ƒctx_59, ·ƒv_17: + ·enum_add ·ƒctx_59, ·ƒv_15, ƒ'None', ·ƒv_17, fn ·ƒctx_61, ·ƒv_21: + ·ƒret_4 ·ƒctx_61, ·ƒv_21 fn ·ƒv_3: ·set ·Option_0, ·ƒv_3, fn: - ·ƒpub ·ƒctx_44, ·Option_0, fn ·ƒctx_61: - ·ƒret_2 ·ƒctx_61, ·Option_0 - # sm:cgABACAAAQAgJAEAIBgBACASAAIABgEAIAABACAYAQAGFAACAAoBEhcAAQAXCAAUABgBABcWAQoBCgACABIBCRcAAQAXFgAUAAoAGAEAFw4AAgAWARQGAAEABhYAFAAKABgBAAYOAAIAGgEKAQABAAEYABQABAEJBg4ABAEKAQoACgAYAQABEAACAB4BCQYAAQAGFgAUAAQBExcOAAQBFAQQAAQBCgEQAAoAGAEJBhAAAgAiARIEAAEABBYAFAAKABgBAAQQAAIAJgEABAABAAQWABQABAERBhAABAESBBAABAEABBAACgAYAQAEEAACACoBJRcAAQAXFAAUAAQBJgQQABQBJRcOAAIAEgERIAABACAMAQAGFAAEARIXDgAIAAIAFgERBgABAAYQABQABAEABhQACgAUAAIAGgEABgABAAYUABQABAEABg + ·ƒpub ·ƒctx_47, ·Option_0, fn ·ƒctx_64: + ·ƒret_2 ·ƒctx_64, ·Option_0 + # sm:eAABACAAAQAgJAEAIBgBACASAAIABgEAIAABACAYAQAGFAACAAoBEhcAAQAXCAAUABgBABcWAQoBCgACABIBCRcAAQAXFgAUAAQBABcUAAoAGAEAFw4AAgAWARQGAAEABhYAFAAEAQAGEAAKABgBAAYOAAIAGgEKAQABAAEYABQABAEJBg4ABAEKAQoACgAYAQABEAACAB4BCQYAAQAGFgAUAAQBExcOAAQBFAQQAAQBCgEQAAoAGAEJBhAAAgAiARIEAAEABBYAFAAEAQAEEAAKABgBAAQQAAIAJgEABAABAAQWABQABAERBhAABAESBBAABAEABBAACgAYAQAEEAACACoBJRcAAQAXFAAUAAQBJgQQABQBJRcOAAIAEgERIAABACAMAQAGFAAEARIXDgAIAAIAFgERBgABAAYQABQABAEABhQACgAUAAIAGgEABgABAAYUABQABAEABg diff --git a/src/passes/cps/transform.rs b/src/passes/cps/transform.rs index 2fd6c52..8a027ae 100644 --- a/src/passes/cps/transform.rs +++ b/src/passes/cps/transform.rs @@ -185,6 +185,15 @@ fn lit_val(g: &mut Gen, lit: Lit, origin: Option) -> Val { g.val(ValKind::Lit(lit), origin) } +/// The `$name` symbol value seeded into a type/union/enum constructor. A bound +/// declaration (`Foo = type:`) passes its LHS ident; an inline / unbound +/// declaration passes `None` and carries the null name (empty symbol), which +/// the renderer reads as anonymous (bare payload, no nominal prefix). +fn type_name_val(g: &mut Gen, name: Option<&str>, origin: Option) -> Val { + let bytes = name.map(|n| n.as_bytes().to_vec()).unwrap_or_default(); + lit_val(g, Lit::Symbol(bytes), origin) +} + /// Build an explicit tail call: `App(ContRef(cont_id), [val])`. @@ -359,21 +368,25 @@ fn lower(g: &mut Gen, id: AstId) -> Lower { NodeKind::Token(_) => panic!("Token node should not reach CPS transform"), // ---- type declaration ---- + // Reached via the generic dispatch (an inline / unbound `type _`): no + // declared name, so the type carries the null name (empty symbol). A bound + // declaration (`Foo = type:`) is intercepted by lower_bind, which supplies + // the LHS name via the `_named` variants. NodeKind::Type { params, body, .. } => { let fields: Vec = body.items.to_vec(); - lower_type_decl(g, params, &fields, o) + lower_type_decl(g, params, &fields, None, o) } // ---- union declaration ---- NodeKind::Union { params, body, .. } => { let members: Vec = body.items.to_vec(); - lower_union_decl(g, params, &members, o) + lower_union_decl(g, params, &members, None, o) } // ---- enum declaration ---- NodeKind::Enum { params, body, .. } => { let members: Vec = body.items.to_vec(); - lower_enum_decl(g, params, &members, o) + lower_enum_decl(g, params, &members, None, o) } } } @@ -457,7 +470,7 @@ fn lower_bind_stmt( // Peel the synthetic `pub` modifier wrapper from the LHS, if present. // See `unwrap_modifier_lhs` and `lower_bind`. let lhs = unwrap_modifier_lhs(g.ast, lhs); - let (val, mut pending) = lower(g, rhs); + let (val, mut pending) = lower_bind_rhs(g, lhs, rhs); match &g.node(lhs).kind { NodeKind::Wildcard => { // _ discards — no store, just evaluate for side effects. @@ -470,6 +483,32 @@ fn lower_bind_stmt( pending } +/// Lower a bind's RHS, naming a type/union/enum declaration after the bind's +/// LHS ident (`Foo = type:` -> the type carries the name `Foo`). For any other +/// LHS shape (pattern destructure, wildcard) or RHS, falls back to the generic +/// `lower`, which leaves a declaration anonymous. +fn lower_bind_rhs(g: &mut Gen, lhs: AstId, rhs: AstId) -> Lower { + let NodeKind::Ident(name) = g.node(lhs).kind.clone() else { + return lower(g, rhs); + }; + let o = Some(rhs); + match g.node(rhs).kind.clone() { + NodeKind::Type { params, body, .. } => { + let fields: Vec = body.items.to_vec(); + lower_type_decl(g, params, &fields, Some(name), o) + } + NodeKind::Union { params, body, .. } => { + let members: Vec = body.items.to_vec(); + lower_union_decl(g, params, &members, Some(name), o) + } + NodeKind::Enum { params, body, .. } => { + let members: Vec = body.items.to_vec(); + lower_enum_decl(g, params, &members, Some(name), o) + } + _ => lower(g, rhs), + } +} + /// Lower a bind expression (the result IS the bound value — last in block or standalone). fn lower_bind( g: &mut Gen, @@ -482,7 +521,7 @@ fn lower_bind( // intent is recovered separately by `collect_module_exports` walking the // unpeeled AST and is realised by `inject_pub_calls`. let lhs = unwrap_modifier_lhs(g.ast, lhs); - let (val, mut pending) = lower(g, rhs); + let (val, mut pending) = lower_bind_rhs(g, lhs, rhs); match &g.node(lhs).kind { NodeKind::Wildcard => { // _ discards the value — no store, just evaluate for side effects. @@ -1061,9 +1100,10 @@ fn lower_type_decl( g: &mut Gen, params: AstId, fields: &[AstId], + name: Option<&str>, origin: Option, ) -> Lower { - wrap_decl_in_params_fn(g, params, origin, |g| lower_type_body(g, fields, origin)) + wrap_decl_in_params_fn(g, params, origin, |g| lower_type_body(g, fields, name, origin)) } // A type/enum/union declaration with params (`type T:`, `enum T:`) is `fn` @@ -1116,12 +1156,13 @@ fn wrap_decl_in_params_fn( // A field is an `Arm { lhs: Ident(name), body: [type-expr] }`: the name is a // declaration (a string-literal key, like `rec_put`'s key); the type-expr // lowers as an ordinary value (it resolves in scope, like `rec_put`'s value). -fn lower_type_body(g: &mut Gen, fields: &[AstId], origin: Option) -> Lower { +fn lower_type_body(g: &mut Gen, fields: &[AstId], name: Option<&str>, origin: Option) -> Lower { let seed = g.fresh_result(origin); let (sk, si) = (seed.kind, seed.id); + let name_val = type_name_val(g, name, origin); let mut pending = vec![Pending::App { func: Callable::BuiltIn(BuiltIn::NewType), - args: args_val(vec![]), + args: args_val(vec![name_val]), result: seed, origin, }]; @@ -1194,9 +1235,10 @@ fn lower_union_decl( g: &mut Gen, params: AstId, members: &[AstId], + name: Option<&str>, origin: Option, ) -> Lower { - wrap_decl_in_params_fn(g, params, origin, |g| lower_union_body(g, members, origin)) + wrap_decl_in_params_fn(g, params, origin, |g| lower_union_body(g, members, name, origin)) } // A union is an open union over existing types — represented at runtime as a @@ -1204,12 +1246,13 @@ fn lower_union_decl( // `lower_type_body`): a `·new_union` seed threaded through one `·union_add` // per member. Each member lowers to an ordinary value (it references an // existing type, which resolves in scope). -fn lower_union_body(g: &mut Gen, members: &[AstId], origin: Option) -> Lower { +fn lower_union_body(g: &mut Gen, members: &[AstId], name: Option<&str>, origin: Option) -> Lower { let seed = g.fresh_result(origin); let (sk, si) = (seed.kind, seed.id); + let name_val = type_name_val(g, name, origin); let mut pending = vec![Pending::App { func: Callable::BuiltIn(BuiltIn::NewUnion), - args: args_val(vec![]), + args: args_val(vec![name_val]), result: seed, origin, }]; @@ -1243,9 +1286,10 @@ fn lower_enum_decl( g: &mut Gen, params: AstId, members: &[AstId], + name: Option<&str>, origin: Option, ) -> Lower { - wrap_decl_in_params_fn(g, params, origin, |g| lower_enum_body(g, members, origin)) + wrap_decl_in_params_fn(g, params, origin, |g| lower_enum_body(g, members, name, origin)) } // A closed sum: each member mints a member-type (a `type:` with a tag) added to @@ -1253,12 +1297,13 @@ fn lower_enum_decl( // a `·new_enum` seed threaded through one `·enum_add enum, 'Name', member_type` // per member. A nullary member (`Red`) mints a bare member-type; payload-carrying // members reuse `lower_type_body` for the payload. -fn lower_enum_body(g: &mut Gen, members: &[AstId], origin: Option) -> Lower { +fn lower_enum_body(g: &mut Gen, members: &[AstId], name: Option<&str>, origin: Option) -> Lower { let seed = g.fresh_result(origin); let (sk, si) = (seed.kind, seed.id); + let name_val = type_name_val(g, name, origin); let mut pending = vec![Pending::App { func: Callable::BuiltIn(BuiltIn::NewEnum), - args: args_val(vec![]), + args: args_val(vec![name_val]), result: seed, origin, }]; @@ -1271,14 +1316,16 @@ fn lower_enum_body(g: &mut Gen, members: &[AstId], origin: Option) -> Low // `Some T` positional -> body is the Apply args // `Bar {a: T}` named -> body is the rec-literal's fields let (name_id, member_fields) = enum_member_parts(g, member); - let NodeKind::Ident(name) = g.node(name_id).kind.clone() else { + let NodeKind::Ident(member_name) = g.node(name_id).kind.clone() else { panic!("enum member name is not an Ident"); }; - // Mint the member-type (a `type:` with a tag) from its payload body. - let (mtype_val, mtype_pending) = lower_type_body(g, &member_fields, member_origin); + // Mint the member-type (a `type:` with a tag) from its payload body, named + // after the case so a case instance reprs as `Some {...}`. + let (mtype_val, mtype_pending) = + lower_type_body(g, &member_fields, Some(member_name), member_origin); pending.extend(mtype_pending); // Add it to the enum under its name. - let key_lit = lit_val(g, Lit::Symbol(name.as_bytes().to_vec()), Some(name_id)); + let key_lit = lit_val(g, Lit::Symbol(member_name.as_bytes().to_vec()), Some(name_id)); let result = g.fresh_result(member_origin); let (rk, ri) = (result.kind, result.id); pending.push(Pending::App { diff --git a/src/passes/wasm/lower.rs b/src/passes/wasm/lower.rs index 739bf29..d7b9e01 100644 --- a/src/passes/wasm/lower.rs +++ b/src/passes/wasm/lower.rs @@ -1916,9 +1916,9 @@ fn is_virtual_stdlib_path(url: &str) -> bool { /// passed to the runtime as the 0th wasm arg. Used by RecPut and /// RecPop. /// Emit a type-seed constructor (`new_type`/`new_union`/`new_enum`). The CPS -/// shape is `(ctx, cont)` with no value args; the introspection key -/// (module_id, cps_id) is injected here as two `i32.const`s at emit time (like -/// trace_push), so the runtime sig is `(ctx, mid i32, cid i32, cont)`. +/// shape is `(ctx, name, cont)`: the type's `$name` is a `Lit::Symbol` value arg +/// (the declared ident, or the empty symbol for an anonymous `type _`), boxed to +/// a tagged i31 via the symbol path. Runtime sig is `(ctx, name, cont)`. fn emit_type_seed( lcx: &mut LowerCtx<'_>, ctx: &mut FnCtx, @@ -1927,16 +1927,16 @@ fn emit_type_seed( app_id: CpsId, ) { let ctx_a = args.first().expect("type seed: missing ctx"); - let cont = args.get(1).expect("type seed: missing cont"); + let name_a = args.get(1).expect("type seed: missing name"); + let cont = args.get(2).expect("type seed: missing cont"); let ctx_op = emit_arg_as_operand(lcx, ctx, ctx_a); + let name_op = emit_key_as_operand(lcx, ctx, name_a); let cont_op = match cont { Arg::Cont(Cont::Ref(id)) => resolve_id_as_operand(lcx, ctx, *id), Arg::Val(v) => val_as_operand(lcx, ctx, v), _ => panic!("lower: type-seed cont is neither Cont::Ref nor Val"), }; - let mid = lit_i32(lcx.frag.module_id.0 as i32); - let cid = lit_i32(app_id.0 as i32); - let i = push_return_call(lcx.frag, target, vec![ctx_op, mid, cid, cont_op]); + let i = push_return_call(lcx.frag, target, vec![ctx_op, name_op, cont_op]); if let Some(o) = origin_of(lcx.cps, lcx.ast, app_id) { set_origin(lcx.frag, i, o); } set_cps_id(lcx.frag, i, app_id); ctx.instrs.push(i); diff --git a/src/passes/wasm/test_types.fnk b/src/passes/wasm/test_types.fnk index 0812f4f..21f0b89 100644 --- a/src/passes/wasm/test_types.fnk +++ b/src/passes/wasm/test_types.fnk @@ -11,37 +11,38 @@ test 'unit type declaration', fn: | equals wat": (module (type $test::Fn_host_wrapper (func (param (ref null any)))) - (func $test::v_31 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (func $test::v_32 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:v_2 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_24 (ref null $rt/apply.wat:Cell)) - (local $:slot_24_raw (ref null any)) - (local $:ret_25 (ref null any)) + (local $:slot_25 (ref null $rt/apply.wat:Cell)) + (local $:slot_25_raw (ref null any)) + (local $:ret_26 (ref null any)) (local $:pub_Foo_0 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_Foo_0 (ref null any)) - (local $:unwrap_Foo_24 (ref null any)) + (local $:unwrap_Foo_25 (ref null any)) (local $:args (ref any)) (local.set $:v_2 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_24_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_24 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_24_raw))) - (local.set $:ret_25 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_24) (local.get $:v_2)) + (local.set $:slot_25_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_25 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_25_raw))) + (local.set $:ret_26 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_25) (local.get $:v_2)) (local.set $:pub_Foo_0 (struct.get $rt/apply.wat:Cell 0 (global.get $test:Foo))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_Foo_0 (ref.i31 (i32.const 2))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_Foo_0) (local.get $:pub_Foo_0)) - (local.set $:unwrap_Foo_24 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_24))) + (local.set $:unwrap_Foo_25 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_25))) (local.set $:args (call $rt/apply.wat:args_empty)) - (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_Foo_24) (local.get $:args))) - (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_25)) + (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_Foo_25) (local.get $:args))) + (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_26)) ) (func $test::fink_module (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:ret_1 (ref null any)) (local $:cell_Foo_0 (ref null $rt/apply.wat:Cell)) - (local $:v_21 (ref null any)) + (local $:v_22 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_3 (ref null any)) (local $:mod_reg_url (ref null any)) (local $:sym_reg_name (ref null any)) (local $:sym_reg_word (ref i31)) @@ -54,8 +55,9 @@ test 'unit type declaration', fn: (local.set $:cell_Foo_0 (struct.new $rt/apply.wat:Cell (ref.null any))) (global.set $test:Foo (local.get $:cell_Foo_0)) (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (global.get $test:Foo) (local.get $:ret_1))) - (local.set $:v_21 (struct.new $rt/apply.wat:Closure (ref.func $test::v_31) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 7) (local.get $:v_21)) + (local.set $:v_22 (struct.new $rt/apply.wat:Closure (ref.func $test::v_32) (local.get $:caps_arg))) + (local.set $:sym_3 (ref.i31 (i32.const 2))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_3) (local.get $:v_22)) ) (func $test::host_wrapper (export "test") (type $test::Fn_host_wrapper) (param $:cont (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) @@ -67,11 +69,11 @@ test 'unit type declaration', fn: (return_call $std/modules.fnk:init_module (local.get $:url) (local.get $:mod_clos) (local.get $:cont)) ) (global $test:Foo (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Foo_24 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Foo_25 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (data $d_0 "test") (data $d_1 "Foo") ) - ;; sm:HeoJAJQBALoBAM4BALoBAMQBAJwBAKoBAJQBAHIA1gEAsAEAbgDQAQDoCACeAQBuAMIBAJwBAKYBAJgBAJgBAGgA4gEA0AEBDAa4BQB6AOYBAIwBAA + ;; sm:HuoJAJQBALoBAM4BALoBAMQBAJwBAKoBAJQBAHIA1gEAsAEAbgDQAQCuCQCeAQBuAMIBAJwBAKYBAJgBAJgBAGgA4gEA0AEBDAZgAQAGqAUAegDmAQCMAQA test 'record type with one field', fn: @@ -82,92 +84,95 @@ test 'record type with one field', fn: | equals wat": (module (type $test::Fn_host_wrapper (func (param (ref null any)))) - (func $test::v_58 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_9 (ref null any)) + (func $test::v_60 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_11 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_51 (ref null $rt/apply.wat:Cell)) - (local $:slot_51_raw (ref null any)) - (local $:ret_52 (ref null any)) + (local $:slot_53 (ref null $rt/apply.wat:Cell)) + (local $:slot_53_raw (ref null any)) + (local $:ret_54 (ref null any)) (local $:pub_Bar_1 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_Bar_1 (ref null any)) - (local $:unwrap_Bar_51 (ref null any)) + (local $:unwrap_Bar_53 (ref null any)) (local $:args (ref any)) - (local.set $:v_9 (call $rt/apply.wat:args_head (local.get $:params))) + (local.set $:v_11 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_51_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_51 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_51_raw))) - (local.set $:ret_52 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_51) (local.get $:v_9)) + (local.set $:slot_53_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_53 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_53_raw))) + (local.set $:ret_54 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_53) (local.get $:v_11)) (local.set $:pub_Bar_1 (struct.get $rt/apply.wat:Cell 0 (global.get $test:Bar))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_Bar_1 (ref.i31 (i32.const 2))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_Bar_1) (local.get $:pub_Bar_1)) - (local.set $:unwrap_Bar_51 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_51))) + (local.set $:unwrap_Bar_53 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_53))) (local.set $:args (call $rt/apply.wat:args_empty)) - (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_Bar_51) (local.get $:args))) - (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_52)) + (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_Bar_53) (local.get $:args))) + (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_54)) ) - (func $test::v_70 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_5 (ref null any)) + (func $test::v_72 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_6 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_61 (ref null $rt/apply.wat:Cell)) - (local $:slot_61_raw (ref null any)) - (local $:ret_62 (ref null any)) (local $:slot_63 (ref null $rt/apply.wat:Cell)) (local $:slot_63_raw (ref null any)) - (local $:v_42 (ref null any)) + (local $:ret_64 (ref null any)) + (local $:slot_65 (ref null $rt/apply.wat:Cell)) + (local $:slot_65_raw (ref null any)) + (local $:v_44 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:sym_7 (ref null any)) - (local $:unwrap_Foo_63 (ref null any)) - (local.set $:v_5 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:sym_9 (ref null any)) + (local $:unwrap_Foo_65 (ref null any)) + (local.set $:v_6 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_61_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_61 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_61_raw))) - (local.set $:ret_62 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_63_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_63_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) (local.set $:slot_63 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_63_raw))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_61) (local.get $:ret_62))) - (local.set $:v_42 (struct.new $rt/apply.wat:Closure (ref.func $test::v_58) (local.get $:caps_arg))) - (local.set $:sym_7 (ref.i31 (i32.const 10))) - (local.set $:unwrap_Foo_63 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_63))) - (return_call $rt/types.wat:type_set_field (local.get $:ctx_param) (local.get $:v_5) (local.get $:sym_7) (local.get $:unwrap_Foo_63) (local.get $:v_42)) + (local.set $:ret_64 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_65_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_65 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_65_raw))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_63) (local.get $:ret_64))) + (local.set $:v_44 (struct.new $rt/apply.wat:Closure (ref.func $test::v_60) (local.get $:caps_arg))) + (local.set $:sym_9 (ref.i31 (i32.const 10))) + (local.set $:unwrap_Foo_65 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_65))) + (return_call $rt/types.wat:type_set_field (local.get $:ctx_param) (local.get $:v_6) (local.get $:sym_9) (local.get $:unwrap_Foo_65) (local.get $:v_44)) ) - (func $test::v_82 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (func $test::v_84 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:v_3 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_73 (ref null $rt/apply.wat:Cell)) - (local $:slot_73_raw (ref null any)) - (local $:slot_74 (ref null $rt/apply.wat:Cell)) - (local $:slot_74_raw (ref null any)) - (local $:ret_75 (ref null any)) + (local $:slot_75 (ref null $rt/apply.wat:Cell)) + (local $:slot_75_raw (ref null any)) + (local $:slot_76 (ref null $rt/apply.wat:Cell)) + (local $:slot_76_raw (ref null any)) + (local $:ret_77 (ref null any)) (local $:pub_Foo_0 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_Foo_0 (ref null any)) - (local $:v_45 (ref null any)) + (local $:v_47 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_7 (ref null any)) (local.set $:v_3 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_73_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_73 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_73_raw))) - (local.set $:slot_74_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_74 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_74_raw))) - (local.set $:ret_75 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_73) (local.get $:v_3)) + (local.set $:slot_75_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_75 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_75_raw))) + (local.set $:slot_76_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_76 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_76_raw))) + (local.set $:ret_77 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_75) (local.get $:v_3)) (local.set $:pub_Foo_0 (struct.get $rt/apply.wat:Cell 0 (global.get $test:Foo))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_Foo_0 (ref.i31 (i32.const 18))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_Foo_0) (local.get $:pub_Foo_0)) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_74) (local.get $:ret_75) (local.get $:slot_73))) - (local.set $:v_45 (struct.new $rt/apply.wat:Closure (ref.func $test::v_70) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 16) (local.get $:v_45)) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_76) (local.get $:ret_77) (local.get $:slot_75))) + (local.set $:v_47 (struct.new $rt/apply.wat:Closure (ref.func $test::v_72) (local.get $:caps_arg))) + (local.set $:sym_7 (ref.i31 (i32.const 2))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_7) (local.get $:v_47)) ) (func $test::fink_module (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:ret_2 (ref null any)) (local $:cell_Foo_0 (ref null $rt/apply.wat:Cell)) (local $:cell_Bar_1 (ref null $rt/apply.wat:Cell)) - (local $:v_48 (ref null any)) + (local $:v_50 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_4 (ref null any)) (local $:mod_reg_url (ref null any)) (local $:sym_reg_name (ref null any)) (local $:sym_reg_word (ref i31)) @@ -188,8 +193,9 @@ test 'record type with one field', fn: (local.set $:cell_Bar_1 (struct.new $rt/apply.wat:Cell (ref.null any))) (global.set $test:Bar (local.get $:cell_Bar_1)) (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (global.get $test:Foo) (global.get $test:Bar) (local.get $:ret_2))) - (local.set $:v_48 (struct.new $rt/apply.wat:Closure (ref.func $test::v_82) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 20) (local.get $:v_48)) + (local.set $:v_50 (struct.new $rt/apply.wat:Closure (ref.func $test::v_84) (local.get $:caps_arg))) + (local.set $:sym_4 (ref.i31 (i32.const 18))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_4) (local.get $:v_50)) ) (func $test::host_wrapper (export "test") (type $test::Fn_host_wrapper) (param $:cont (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) @@ -202,17 +208,17 @@ test 'record type with one field', fn: ) (global $test:Bar (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (global $test:Foo (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Bar_51 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Bar_61 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Foo_63 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Foo_73 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Bar_74 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Bar_53 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Bar_63 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Foo_65 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Foo_75 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Bar_76 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (data $d_0 "test") (data $d_1 "Bar") (data $d_2 "Foo") (data $d_3 "x") ) - ;; sm:QOoJAJQBALoBAM4BALoBAMQBAJwBAKoBAJQBAHIA1gEAsAEAbgDQAQC6CwCUAQC6AQDOAQC6AQDEAQDOAQC6AQDiAQDQAQE2AWIAsAEBAAb2DACUAQC6AQDOAQC6AQDOAQC6AQDEAQCcAQCqAQCUAQB0ANYBAI4CANABAQ8O6AkAngEAbgDCAQCeAQBwAMIBAJ4BAHAAwgEAnAEApgEAmAEAmAEAaACYAQBoAJACANABARkGugUAegDmAQCMAQA + ;; sm:QuwJAJYBALoBAM4BALoBAMQBAJ4BAKoBAJQBAHIA1gEAsAEAbgDQAQC6CwCUAQC6AQDOAQC6AQDEAQDOAQC6AQDiAQDQAQE2AWIAsAEBAAa8DQCUAQC6AQDOAQC6AQDOAQC6AQDEAQCcAQCqAQCUAQB0ANYBAI4CANABAQ8OYAEADpwKAJ4BAG4AwgEAngEAcADCAQCeAQBwAMIBAJwBAKYBAJgBAJgBAGgAmAEAaACQAgDQAQEZBmIBAAaoBQB6AOYBAIwBAA test 'tuple type with positional fields', fn: @@ -223,155 +229,160 @@ test 'tuple type with positional fields', fn: | equals wat": (module (type $test::Fn_host_wrapper (func (param (ref null any)))) - (func $test::v_83 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_14 (ref null any)) + (func $test::v_86 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_17 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_76 (ref null $rt/apply.wat:Cell)) - (local $:slot_76_raw (ref null any)) - (local $:ret_77 (ref null any)) + (local $:slot_79 (ref null $rt/apply.wat:Cell)) + (local $:slot_79_raw (ref null any)) + (local $:ret_80 (ref null any)) (local $:pub_Ni_2 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_Ni_2 (ref null any)) - (local $:unwrap_Ni_76 (ref null any)) + (local $:unwrap_Ni_79 (ref null any)) (local $:args (ref any)) - (local.set $:v_14 (call $rt/apply.wat:args_head (local.get $:params))) + (local.set $:v_17 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_76_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_76 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_76_raw))) - (local.set $:ret_77 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_76) (local.get $:v_14)) + (local.set $:slot_79_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_79 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_79_raw))) + (local.set $:ret_80 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_79) (local.get $:v_17)) (local.set $:pub_Ni_2 (struct.get $rt/apply.wat:Cell 0 (global.get $test:Ni))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_Ni_2 (ref.i31 (i32.const 2))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_Ni_2) (local.get $:pub_Ni_2)) - (local.set $:unwrap_Ni_76 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_76))) + (local.set $:unwrap_Ni_79 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_79))) (local.set $:args (call $rt/apply.wat:args_empty)) - (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_Ni_76) (local.get $:args))) - (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_77)) + (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_Ni_79) (local.get $:args))) + (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_80)) ) - (func $test::v_95 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_11 (ref null any)) + (func $test::v_98 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_14 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_86 (ref null $rt/apply.wat:Cell)) - (local $:slot_86_raw (ref null any)) - (local $:ret_87 (ref null any)) - (local $:slot_88 (ref null $rt/apply.wat:Cell)) - (local $:slot_88_raw (ref null any)) - (local $:v_61 (ref null any)) + (local $:slot_89 (ref null $rt/apply.wat:Cell)) + (local $:slot_89_raw (ref null any)) + (local $:ret_90 (ref null any)) + (local $:slot_91 (ref null $rt/apply.wat:Cell)) + (local $:slot_91_raw (ref null any)) + (local $:v_64 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:unwrap_B_88 (ref null any)) - (local.set $:v_11 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:unwrap_B_91 (ref null any)) + (local.set $:v_14 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_86_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_86 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_86_raw))) - (local.set $:ret_87 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_88_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (local.set $:slot_88 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_88_raw))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_86) (local.get $:ret_87))) - (local.set $:v_61 (struct.new $rt/apply.wat:Closure (ref.func $test::v_83) (local.get $:caps_arg))) - (local.set $:unwrap_B_88 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_88))) - (return_call $rt/types.wat:type_push (local.get $:ctx_param) (local.get $:v_11) (local.get $:unwrap_B_88) (local.get $:v_61)) + (local.set $:slot_89_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_89 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_89_raw))) + (local.set $:ret_90 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_91_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_91 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_91_raw))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_89) (local.get $:ret_90))) + (local.set $:v_64 (struct.new $rt/apply.wat:Closure (ref.func $test::v_86) (local.get $:caps_arg))) + (local.set $:unwrap_B_91 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_91))) + (return_call $rt/types.wat:type_push (local.get $:ctx_param) (local.get $:v_14) (local.get $:unwrap_B_91) (local.get $:v_64)) ) - (func $test::v_109 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_8 (ref null any)) + (func $test::v_112 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_10 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_98 (ref null $rt/apply.wat:Cell)) - (local $:slot_98_raw (ref null any)) - (local $:ret_99 (ref null any)) - (local $:slot_100 (ref null $rt/apply.wat:Cell)) - (local $:slot_100_raw (ref null any)) (local $:slot_101 (ref null $rt/apply.wat:Cell)) (local $:slot_101_raw (ref null any)) - (local $:v_64 (ref null any)) + (local $:ret_102 (ref null any)) + (local $:slot_103 (ref null $rt/apply.wat:Cell)) + (local $:slot_103_raw (ref null any)) + (local $:slot_104 (ref null $rt/apply.wat:Cell)) + (local $:slot_104_raw (ref null any)) + (local $:v_67 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:unwrap_A_101 (ref null any)) - (local.set $:v_8 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:unwrap_A_104 (ref null any)) + (local.set $:v_10 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_98_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_98 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_98_raw))) - (local.set $:ret_99 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_100_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (local.set $:slot_100 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_100_raw))) - (local.set $:slot_101_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 3))) + (local.set $:slot_101_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) (local.set $:slot_101 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_101_raw))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_98) (local.get $:ret_99) (local.get $:slot_100))) - (local.set $:v_64 (struct.new $rt/apply.wat:Closure (ref.func $test::v_95) (local.get $:caps_arg))) - (local.set $:unwrap_A_101 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_101))) - (return_call $rt/types.wat:type_push (local.get $:ctx_param) (local.get $:v_8) (local.get $:unwrap_A_101) (local.get $:v_64)) + (local.set $:ret_102 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_103_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_103 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_103_raw))) + (local.set $:slot_104_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 3))) + (local.set $:slot_104 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_104_raw))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_101) (local.get $:ret_102) (local.get $:slot_103))) + (local.set $:v_67 (struct.new $rt/apply.wat:Closure (ref.func $test::v_98) (local.get $:caps_arg))) + (local.set $:unwrap_A_104 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_104))) + (return_call $rt/types.wat:type_push (local.get $:ctx_param) (local.get $:v_10) (local.get $:unwrap_A_104) (local.get $:v_67)) ) - (func $test::v_123 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_6 (ref null any)) + (func $test::v_126 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_7 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_112 (ref null $rt/apply.wat:Cell)) - (local $:slot_112_raw (ref null any)) - (local $:slot_113 (ref null $rt/apply.wat:Cell)) - (local $:slot_113_raw (ref null any)) - (local $:ret_114 (ref null any)) (local $:slot_115 (ref null $rt/apply.wat:Cell)) (local $:slot_115_raw (ref null any)) + (local $:slot_116 (ref null $rt/apply.wat:Cell)) + (local $:slot_116_raw (ref null any)) + (local $:ret_117 (ref null any)) + (local $:slot_118 (ref null $rt/apply.wat:Cell)) + (local $:slot_118_raw (ref null any)) (local $:pub_B_1 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_B_1 (ref null any)) - (local $:v_67 (ref null any)) + (local $:v_70 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local.set $:v_6 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:sym_11 (ref null any)) + (local.set $:v_7 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_112_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_112 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_112_raw))) - (local.set $:slot_113_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_113 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_113_raw))) - (local.set $:ret_114 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (local.set $:slot_115_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 3))) + (local.set $:slot_115_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) (local.set $:slot_115 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_115_raw))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_112) (local.get $:v_6)) + (local.set $:slot_116_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_116 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_116_raw))) + (local.set $:ret_117 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_118_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 3))) + (local.set $:slot_118 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_118_raw))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_115) (local.get $:v_7)) (local.set $:pub_B_1 (struct.get $rt/apply.wat:Cell 0 (global.get $test:B))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_B_1 (ref.i31 (i32.const 10))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_B_1) (local.get $:pub_B_1)) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 4 (local.get $:slot_113) (local.get $:ret_114) (local.get $:slot_112) (local.get $:slot_115))) - (local.set $:v_67 (struct.new $rt/apply.wat:Closure (ref.func $test::v_109) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 23) (local.get $:v_67)) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 4 (local.get $:slot_116) (local.get $:ret_117) (local.get $:slot_115) (local.get $:slot_118))) + (local.set $:v_70 (struct.new $rt/apply.wat:Closure (ref.func $test::v_112) (local.get $:caps_arg))) + (local.set $:sym_11 (ref.i31 (i32.const 2))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_11) (local.get $:v_70)) ) - (func $test::v_137 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (func $test::v_140 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:v_4 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_126 (ref null $rt/apply.wat:Cell)) - (local $:slot_126_raw (ref null any)) - (local $:slot_127 (ref null $rt/apply.wat:Cell)) - (local $:slot_127_raw (ref null any)) - (local $:slot_128 (ref null $rt/apply.wat:Cell)) - (local $:slot_128_raw (ref null any)) - (local $:ret_129 (ref null any)) + (local $:slot_129 (ref null $rt/apply.wat:Cell)) + (local $:slot_129_raw (ref null any)) + (local $:slot_130 (ref null $rt/apply.wat:Cell)) + (local $:slot_130_raw (ref null any)) + (local $:slot_131 (ref null $rt/apply.wat:Cell)) + (local $:slot_131_raw (ref null any)) + (local $:ret_132 (ref null any)) (local $:pub_A_0 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_A_0 (ref null any)) - (local $:v_70 (ref null any)) + (local $:v_73 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_8 (ref null any)) (local.set $:v_4 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_126_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_126 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_126_raw))) - (local.set $:slot_127_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_127 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_127_raw))) - (local.set $:slot_128_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (local.set $:slot_128 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_128_raw))) - (local.set $:ret_129 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 3))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_126) (local.get $:v_4)) + (local.set $:slot_129_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_129 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_129_raw))) + (local.set $:slot_130_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_130 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_130_raw))) + (local.set $:slot_131_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_131 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_131_raw))) + (local.set $:ret_132 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 3))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_129) (local.get $:v_4)) (local.set $:pub_A_0 (struct.get $rt/apply.wat:Cell 0 (global.get $test:A))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_A_0 (ref.i31 (i32.const 18))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_A_0) (local.get $:pub_A_0)) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 4 (local.get $:slot_127) (local.get $:slot_128) (local.get $:ret_129) (local.get $:slot_126))) - (local.set $:v_70 (struct.new $rt/apply.wat:Closure (ref.func $test::v_123) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 27) (local.get $:v_70)) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 4 (local.get $:slot_130) (local.get $:slot_131) (local.get $:ret_132) (local.get $:slot_129))) + (local.set $:v_73 (struct.new $rt/apply.wat:Closure (ref.func $test::v_126) (local.get $:caps_arg))) + (local.set $:sym_8 (ref.i31 (i32.const 10))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_8) (local.get $:v_73)) ) (func $test::fink_module (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:ret_3 (ref null any)) (local $:cell_A_0 (ref null $rt/apply.wat:Cell)) (local $:cell_B_1 (ref null $rt/apply.wat:Cell)) (local $:cell_Ni_2 (ref null $rt/apply.wat:Cell)) - (local $:v_73 (ref null any)) + (local $:v_76 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_5 (ref null any)) (local $:mod_reg_url (ref null any)) (local $:sym_reg_name (ref null any)) (local $:sym_reg_word (ref i31)) @@ -394,8 +405,9 @@ test 'tuple type with positional fields', fn: (local.set $:cell_Ni_2 (struct.new $rt/apply.wat:Cell (ref.null any))) (global.set $test:Ni (local.get $:cell_Ni_2)) (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 4 (global.get $test:A) (global.get $test:B) (global.get $test:Ni) (local.get $:ret_3))) - (local.set $:v_73 (struct.new $rt/apply.wat:Closure (ref.func $test::v_137) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 31) (local.get $:v_73)) + (local.set $:v_76 (struct.new $rt/apply.wat:Closure (ref.func $test::v_140) (local.get $:caps_arg))) + (local.set $:sym_5 (ref.i31 (i32.const 18))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_5) (local.get $:v_76)) ) (func $test::host_wrapper (export "test") (type $test::Fn_host_wrapper) (param $:cont (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) @@ -409,24 +421,24 @@ test 'tuple type with positional fields', fn: (global $test:Ni (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (global $test:B (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (global $test:A (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Ni_76 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Ni_86 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::B_88 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Ni_98 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::B_100 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::A_101 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::B_112 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Ni_113 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::A_115 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::A_126 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::B_127 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Ni_128 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Ni_79 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Ni_89 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::B_91 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Ni_101 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::B_103 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::A_104 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::B_115 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Ni_116 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::A_118 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::A_129 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::B_130 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Ni_131 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (data $d_0 "test") (data $d_1 "A") (data $d_2 "B") (data $d_3 "Ni") ) - ;; sm:YeYJAJYBALoBAM4BALoBAMQBAJ4BAKYBAJQBAHAA0gEArgEAbgDOAQDyCgCWAQC6AQDOAQC6AQDEAQDOAQC6AQDiAQDQAQCsAQFIAeoMAJQBALoBAM4BALoBAMQBANABAL4BANABAL4BAJACANABALABAQUBhA4AlAEAugEA0AEAvgEA0AEAvgEAxgEA0AEAvgEAngEAogEAlAEAcADOAQDCAgDSAQELCuINAJQBALoBANABAL4BANABAL4BANABAL4BAMYBAJ4BAKIBAJQBAHAAzgEAwgIA0gEBFwbMCgCeAQBwAMIBAJ4BAHAAwgEAngEAbgDCAQCcAQCmAQCYAQCUAQBgAJQBAGAAlgEAZAC0AgDSAQEVBroFAHoA5gEAjAEA + ;; sm:ZOYJAJYBALoBAM4BALoBAMQBAJ4BAKYBAJQBAHAA0gEArgEAbgDOAQDyCgCWAQC6AQDOAQC6AQDEAQDOAQC6AQDiAQDQAQCsAQFIAfIMAJYBALoBANABAL4BAMYBANABAL4BANABAL4BAJQCANABALABAQUBzg4AlAEAugEA0AEAvgEA0AEAvgEAxgEA0AEAvgEAngEAogEAlAEAcADOAQDCAgDSAQELCmIBAAqYDgCUAQC6AQDQAQC-AQDQAQC-AQDQAQC-AQDGAQCeAQCiAQCUAQBwAM4BAMICANIBARcGYgEABoALAJ4BAHAAwgEAngEAcADCAQCeAQBuAMIBAJwBAKYBAJgBAJQBAGAAlAEAYACWAQBkALQCANIBARUGYgEABqgFAHoA5gEAjAEA test 'subtype with base spread', fn: @@ -438,115 +450,118 @@ test 'subtype with base spread', fn: | equals wat": (module (type $test::Fn_host_wrapper (func (param (ref null any)))) - (func $test::v_68 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_12 (ref null any)) + (func $test::v_70 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_14 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_61 (ref null $rt/apply.wat:Cell)) - (local $:slot_61_raw (ref null any)) - (local $:ret_62 (ref null any)) + (local $:slot_63 (ref null $rt/apply.wat:Cell)) + (local $:slot_63_raw (ref null any)) + (local $:ret_64 (ref null any)) (local $:pub_Bar_1 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_Bar_1 (ref null any)) - (local $:unwrap_Bar_61 (ref null any)) + (local $:unwrap_Bar_63 (ref null any)) (local $:args (ref any)) - (local.set $:v_12 (call $rt/apply.wat:args_head (local.get $:params))) + (local.set $:v_14 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_61_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_61 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_61_raw))) - (local.set $:ret_62 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_61) (local.get $:v_12)) + (local.set $:slot_63_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_63 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_63_raw))) + (local.set $:ret_64 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_63) (local.get $:v_14)) (local.set $:pub_Bar_1 (struct.get $rt/apply.wat:Cell 0 (global.get $test:Bar))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_Bar_1 (ref.i31 (i32.const 2))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_Bar_1) (local.get $:pub_Bar_1)) - (local.set $:unwrap_Bar_61 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_61))) + (local.set $:unwrap_Bar_63 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_63))) (local.set $:args (call $rt/apply.wat:args_empty)) - (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_Bar_61) (local.get $:args))) - (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_62)) + (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_Bar_63) (local.get $:args))) + (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_64)) ) - (func $test::v_80 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_8 (ref null any)) + (func $test::v_82 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_10 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_71 (ref null $rt/apply.wat:Cell)) - (local $:slot_71_raw (ref null any)) - (local $:ret_72 (ref null any)) (local $:slot_73 (ref null $rt/apply.wat:Cell)) (local $:slot_73_raw (ref null any)) - (local $:v_49 (ref null any)) + (local $:ret_74 (ref null any)) + (local $:slot_75 (ref null $rt/apply.wat:Cell)) + (local $:slot_75_raw (ref null any)) + (local $:v_51 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:sym_10 (ref null any)) - (local $:unwrap_Foo_73 (ref null any)) - (local.set $:v_8 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:sym_12 (ref null any)) + (local $:unwrap_Foo_75 (ref null any)) + (local.set $:v_10 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_71_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_71 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_71_raw))) - (local.set $:ret_72 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_73_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_73_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) (local.set $:slot_73 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_73_raw))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_71) (local.get $:ret_72))) - (local.set $:v_49 (struct.new $rt/apply.wat:Closure (ref.func $test::v_68) (local.get $:caps_arg))) - (local.set $:sym_10 (ref.i31 (i32.const 10))) - (local.set $:unwrap_Foo_73 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_73))) - (return_call $rt/types.wat:type_set_field (local.get $:ctx_param) (local.get $:v_8) (local.get $:sym_10) (local.get $:unwrap_Foo_73) (local.get $:v_49)) + (local.set $:ret_74 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_75_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_75 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_75_raw))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_73) (local.get $:ret_74))) + (local.set $:v_51 (struct.new $rt/apply.wat:Closure (ref.func $test::v_70) (local.get $:caps_arg))) + (local.set $:sym_12 (ref.i31 (i32.const 10))) + (local.set $:unwrap_Foo_75 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_75))) + (return_call $rt/types.wat:type_set_field (local.get $:ctx_param) (local.get $:v_10) (local.get $:sym_12) (local.get $:unwrap_Foo_75) (local.get $:v_51)) ) - (func $test::v_92 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_5 (ref null any)) + (func $test::v_94 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_6 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_83 (ref null $rt/apply.wat:Cell)) - (local $:slot_83_raw (ref null any)) - (local $:ret_84 (ref null any)) (local $:slot_85 (ref null $rt/apply.wat:Cell)) (local $:slot_85_raw (ref null any)) - (local $:v_52 (ref null any)) + (local $:ret_86 (ref null any)) + (local $:slot_87 (ref null $rt/apply.wat:Cell)) + (local $:slot_87_raw (ref null any)) + (local $:v_54 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:unwrap_Foo_85 (ref null any)) - (local.set $:v_5 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:unwrap_Foo_87 (ref null any)) + (local.set $:v_6 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_83_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_83 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_83_raw))) - (local.set $:ret_84 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_85_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_85_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) (local.set $:slot_85 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_85_raw))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_83) (local.get $:ret_84) (local.get $:slot_85))) - (local.set $:v_52 (struct.new $rt/apply.wat:Closure (ref.func $test::v_80) (local.get $:caps_arg))) - (local.set $:unwrap_Foo_85 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_85))) - (return_call $rt/types.wat:type_inherit (local.get $:ctx_param) (local.get $:v_5) (local.get $:unwrap_Foo_85) (local.get $:v_52)) + (local.set $:ret_86 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_87_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_87 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_87_raw))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_85) (local.get $:ret_86) (local.get $:slot_87))) + (local.set $:v_54 (struct.new $rt/apply.wat:Closure (ref.func $test::v_82) (local.get $:caps_arg))) + (local.set $:unwrap_Foo_87 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_87))) + (return_call $rt/types.wat:type_inherit (local.get $:ctx_param) (local.get $:v_6) (local.get $:unwrap_Foo_87) (local.get $:v_54)) ) - (func $test::v_104 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (func $test::v_106 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:v_3 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_95 (ref null $rt/apply.wat:Cell)) - (local $:slot_95_raw (ref null any)) - (local $:slot_96 (ref null $rt/apply.wat:Cell)) - (local $:slot_96_raw (ref null any)) - (local $:ret_97 (ref null any)) + (local $:slot_97 (ref null $rt/apply.wat:Cell)) + (local $:slot_97_raw (ref null any)) + (local $:slot_98 (ref null $rt/apply.wat:Cell)) + (local $:slot_98_raw (ref null any)) + (local $:ret_99 (ref null any)) (local $:pub_Foo_0 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_Foo_0 (ref null any)) - (local $:v_55 (ref null any)) + (local $:v_57 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_7 (ref null any)) (local.set $:v_3 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_95_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_95 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_95_raw))) - (local.set $:slot_96_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_96 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_96_raw))) - (local.set $:ret_97 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_95) (local.get $:v_3)) + (local.set $:slot_97_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_97 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_97_raw))) + (local.set $:slot_98_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_98 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_98_raw))) + (local.set $:ret_99 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_97) (local.get $:v_3)) (local.set $:pub_Foo_0 (struct.get $rt/apply.wat:Cell 0 (global.get $test:Foo))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_Foo_0 (ref.i31 (i32.const 18))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_Foo_0) (local.get $:pub_Foo_0)) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_96) (local.get $:ret_97) (local.get $:slot_95))) - (local.set $:v_55 (struct.new $rt/apply.wat:Closure (ref.func $test::v_92) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 21) (local.get $:v_55)) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_98) (local.get $:ret_99) (local.get $:slot_97))) + (local.set $:v_57 (struct.new $rt/apply.wat:Closure (ref.func $test::v_94) (local.get $:caps_arg))) + (local.set $:sym_7 (ref.i31 (i32.const 2))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_7) (local.get $:v_57)) ) (func $test::fink_module (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:ret_2 (ref null any)) (local $:cell_Foo_0 (ref null $rt/apply.wat:Cell)) (local $:cell_Bar_1 (ref null $rt/apply.wat:Cell)) - (local $:v_58 (ref null any)) + (local $:v_60 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_4 (ref null any)) (local $:mod_reg_url (ref null any)) (local $:sym_reg_name (ref null any)) (local $:sym_reg_word (ref i31)) @@ -567,8 +582,9 @@ test 'subtype with base spread', fn: (local.set $:cell_Bar_1 (struct.new $rt/apply.wat:Cell (ref.null any))) (global.set $test:Bar (local.get $:cell_Bar_1)) (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (global.get $test:Foo) (global.get $test:Bar) (local.get $:ret_2))) - (local.set $:v_58 (struct.new $rt/apply.wat:Closure (ref.func $test::v_104) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 25) (local.get $:v_58)) + (local.set $:v_60 (struct.new $rt/apply.wat:Closure (ref.func $test::v_106) (local.get $:caps_arg))) + (local.set $:sym_4 (ref.i31 (i32.const 18))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_4) (local.get $:v_60)) ) (func $test::host_wrapper (export "test") (type $test::Fn_host_wrapper) (param $:cont (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) @@ -581,19 +597,19 @@ test 'subtype with base spread', fn: ) (global $test:Bar (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (global $test:Foo (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Bar_61 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Bar_71 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Foo_73 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Bar_83 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Foo_85 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Foo_95 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Bar_96 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Bar_63 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Bar_73 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Foo_75 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Bar_85 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Foo_87 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Foo_97 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Bar_98 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (data $d_0 "test") (data $d_1 "Bar") (data $d_2 "Foo") (data $d_3 "x") ) - ;; sm:S-wJAJYBALoBAM4BALoBAMQBAJ4BAKoBAJQBAHIA1gEAsAEAbgDQAQC8CwCUAQC6AQDOAQC6AQDEAQDOAQC6AQDiAQDQAQFGAWQAsAEBAAbeCwCUAQC6AQDOAQC6AQDEAQDOAQC6AQCOAgDQAQCwAQEPBcwMAJQBALoBAM4BALoBAM4BALoBAMQBAJwBAKoBAJQBAHQA1gEAjgIA0AEBDxboCQCeAQBuAMIBAJ4BAHAAwgEAngEAcADCAQCcAQCmAQCYAQCYAQBoAJgBAGgAkAIA0gEBGQa6BQB6AOYBAIwBAA + ;; sm:TewJAJYBALoBAM4BALoBAMQBAJ4BAKoBAJQBAHIA1gEAsAEAbgDQAQC-CwCWAQC6AQDOAQC6AQDEAQDOAQC6AQDiAQDQAQFGAWQAsAEBAAbgCwCUAQC6AQDOAQC6AQDEAQDOAQC6AQCOAgDQAQCwAQEPBZINAJQBALoBAM4BALoBAM4BALoBAMQBAJwBAKoBAJQBAHQA1gEAjgIA0AEBDxZgAQAWnAoAngEAbgDCAQCeAQBwAMIBAJ4BAHAAwgEAnAEApgEAmAEAmAEAaACYAQBoAJACANIBARkGYgEABqgFAHoA5gEAjAEA test 'union of existing types', fn: @@ -606,155 +622,160 @@ test 'union of existing types', fn: | equals wat": (module (type $test::Fn_host_wrapper (func (param (ref null any)))) - (func $test::v_83 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_14 (ref null any)) + (func $test::v_86 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_17 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_76 (ref null $rt/apply.wat:Cell)) - (local $:slot_76_raw (ref null any)) - (local $:ret_77 (ref null any)) + (local $:slot_79 (ref null $rt/apply.wat:Cell)) + (local $:slot_79_raw (ref null any)) + (local $:ret_80 (ref null any)) (local $:pub_U_2 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_U_2 (ref null any)) - (local $:unwrap_U_76 (ref null any)) + (local $:unwrap_U_79 (ref null any)) (local $:args (ref any)) - (local.set $:v_14 (call $rt/apply.wat:args_head (local.get $:params))) + (local.set $:v_17 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_76_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_76 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_76_raw))) - (local.set $:ret_77 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_76) (local.get $:v_14)) + (local.set $:slot_79_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_79 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_79_raw))) + (local.set $:ret_80 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_79) (local.get $:v_17)) (local.set $:pub_U_2 (struct.get $rt/apply.wat:Cell 0 (global.get $test:U))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_U_2 (ref.i31 (i32.const 2))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_U_2) (local.get $:pub_U_2)) - (local.set $:unwrap_U_76 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_76))) + (local.set $:unwrap_U_79 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_79))) (local.set $:args (call $rt/apply.wat:args_empty)) - (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_U_76) (local.get $:args))) - (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_77)) + (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_U_79) (local.get $:args))) + (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_80)) ) - (func $test::v_95 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_11 (ref null any)) + (func $test::v_98 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_14 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_86 (ref null $rt/apply.wat:Cell)) - (local $:slot_86_raw (ref null any)) - (local $:ret_87 (ref null any)) - (local $:slot_88 (ref null $rt/apply.wat:Cell)) - (local $:slot_88_raw (ref null any)) - (local $:v_61 (ref null any)) + (local $:slot_89 (ref null $rt/apply.wat:Cell)) + (local $:slot_89_raw (ref null any)) + (local $:ret_90 (ref null any)) + (local $:slot_91 (ref null $rt/apply.wat:Cell)) + (local $:slot_91_raw (ref null any)) + (local $:v_64 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:unwrap_B_88 (ref null any)) - (local.set $:v_11 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:unwrap_B_91 (ref null any)) + (local.set $:v_14 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_86_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_86 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_86_raw))) - (local.set $:ret_87 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_88_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (local.set $:slot_88 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_88_raw))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_86) (local.get $:ret_87))) - (local.set $:v_61 (struct.new $rt/apply.wat:Closure (ref.func $test::v_83) (local.get $:caps_arg))) - (local.set $:unwrap_B_88 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_88))) - (return_call $rt/types.wat:union_add (local.get $:ctx_param) (local.get $:v_11) (local.get $:unwrap_B_88) (local.get $:v_61)) + (local.set $:slot_89_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_89 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_89_raw))) + (local.set $:ret_90 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_91_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_91 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_91_raw))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_89) (local.get $:ret_90))) + (local.set $:v_64 (struct.new $rt/apply.wat:Closure (ref.func $test::v_86) (local.get $:caps_arg))) + (local.set $:unwrap_B_91 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_91))) + (return_call $rt/types.wat:union_add (local.get $:ctx_param) (local.get $:v_14) (local.get $:unwrap_B_91) (local.get $:v_64)) ) - (func $test::v_109 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_8 (ref null any)) + (func $test::v_112 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_10 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_98 (ref null $rt/apply.wat:Cell)) - (local $:slot_98_raw (ref null any)) - (local $:ret_99 (ref null any)) - (local $:slot_100 (ref null $rt/apply.wat:Cell)) - (local $:slot_100_raw (ref null any)) (local $:slot_101 (ref null $rt/apply.wat:Cell)) (local $:slot_101_raw (ref null any)) - (local $:v_64 (ref null any)) + (local $:ret_102 (ref null any)) + (local $:slot_103 (ref null $rt/apply.wat:Cell)) + (local $:slot_103_raw (ref null any)) + (local $:slot_104 (ref null $rt/apply.wat:Cell)) + (local $:slot_104_raw (ref null any)) + (local $:v_67 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:unwrap_A_101 (ref null any)) - (local.set $:v_8 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:unwrap_A_104 (ref null any)) + (local.set $:v_10 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_98_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_98 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_98_raw))) - (local.set $:ret_99 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_100_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (local.set $:slot_100 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_100_raw))) - (local.set $:slot_101_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 3))) + (local.set $:slot_101_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) (local.set $:slot_101 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_101_raw))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_98) (local.get $:ret_99) (local.get $:slot_100))) - (local.set $:v_64 (struct.new $rt/apply.wat:Closure (ref.func $test::v_95) (local.get $:caps_arg))) - (local.set $:unwrap_A_101 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_101))) - (return_call $rt/types.wat:union_add (local.get $:ctx_param) (local.get $:v_8) (local.get $:unwrap_A_101) (local.get $:v_64)) + (local.set $:ret_102 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_103_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_103 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_103_raw))) + (local.set $:slot_104_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 3))) + (local.set $:slot_104 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_104_raw))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_101) (local.get $:ret_102) (local.get $:slot_103))) + (local.set $:v_67 (struct.new $rt/apply.wat:Closure (ref.func $test::v_98) (local.get $:caps_arg))) + (local.set $:unwrap_A_104 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_104))) + (return_call $rt/types.wat:union_add (local.get $:ctx_param) (local.get $:v_10) (local.get $:unwrap_A_104) (local.get $:v_67)) ) - (func $test::v_123 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_6 (ref null any)) + (func $test::v_126 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_7 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_112 (ref null $rt/apply.wat:Cell)) - (local $:slot_112_raw (ref null any)) - (local $:slot_113 (ref null $rt/apply.wat:Cell)) - (local $:slot_113_raw (ref null any)) - (local $:ret_114 (ref null any)) (local $:slot_115 (ref null $rt/apply.wat:Cell)) (local $:slot_115_raw (ref null any)) + (local $:slot_116 (ref null $rt/apply.wat:Cell)) + (local $:slot_116_raw (ref null any)) + (local $:ret_117 (ref null any)) + (local $:slot_118 (ref null $rt/apply.wat:Cell)) + (local $:slot_118_raw (ref null any)) (local $:pub_B_1 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_B_1 (ref null any)) - (local $:v_67 (ref null any)) + (local $:v_70 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local.set $:v_6 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:sym_11 (ref null any)) + (local.set $:v_7 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_112_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_112 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_112_raw))) - (local.set $:slot_113_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_113 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_113_raw))) - (local.set $:ret_114 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (local.set $:slot_115_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 3))) + (local.set $:slot_115_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) (local.set $:slot_115 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_115_raw))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_112) (local.get $:v_6)) + (local.set $:slot_116_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_116 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_116_raw))) + (local.set $:ret_117 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_118_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 3))) + (local.set $:slot_118 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_118_raw))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_115) (local.get $:v_7)) (local.set $:pub_B_1 (struct.get $rt/apply.wat:Cell 0 (global.get $test:B))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_B_1 (ref.i31 (i32.const 10))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_B_1) (local.get $:pub_B_1)) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 4 (local.get $:slot_113) (local.get $:ret_114) (local.get $:slot_112) (local.get $:slot_115))) - (local.set $:v_67 (struct.new $rt/apply.wat:Closure (ref.func $test::v_109) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_union (local.get $:ctx_param) (i32.const 0) (i32.const 23) (local.get $:v_67)) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 4 (local.get $:slot_116) (local.get $:ret_117) (local.get $:slot_115) (local.get $:slot_118))) + (local.set $:v_70 (struct.new $rt/apply.wat:Closure (ref.func $test::v_112) (local.get $:caps_arg))) + (local.set $:sym_11 (ref.i31 (i32.const 2))) + (return_call $rt/types.wat:new_union (local.get $:ctx_param) (local.get $:sym_11) (local.get $:v_70)) ) - (func $test::v_137 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (func $test::v_140 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:v_4 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_126 (ref null $rt/apply.wat:Cell)) - (local $:slot_126_raw (ref null any)) - (local $:slot_127 (ref null $rt/apply.wat:Cell)) - (local $:slot_127_raw (ref null any)) - (local $:slot_128 (ref null $rt/apply.wat:Cell)) - (local $:slot_128_raw (ref null any)) - (local $:ret_129 (ref null any)) + (local $:slot_129 (ref null $rt/apply.wat:Cell)) + (local $:slot_129_raw (ref null any)) + (local $:slot_130 (ref null $rt/apply.wat:Cell)) + (local $:slot_130_raw (ref null any)) + (local $:slot_131 (ref null $rt/apply.wat:Cell)) + (local $:slot_131_raw (ref null any)) + (local $:ret_132 (ref null any)) (local $:pub_A_0 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_A_0 (ref null any)) - (local $:v_70 (ref null any)) + (local $:v_73 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_8 (ref null any)) (local.set $:v_4 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_126_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_126 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_126_raw))) - (local.set $:slot_127_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_127 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_127_raw))) - (local.set $:slot_128_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (local.set $:slot_128 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_128_raw))) - (local.set $:ret_129 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 3))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_126) (local.get $:v_4)) + (local.set $:slot_129_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_129 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_129_raw))) + (local.set $:slot_130_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_130 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_130_raw))) + (local.set $:slot_131_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_131 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_131_raw))) + (local.set $:ret_132 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 3))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_129) (local.get $:v_4)) (local.set $:pub_A_0 (struct.get $rt/apply.wat:Cell 0 (global.get $test:A))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_A_0 (ref.i31 (i32.const 18))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_A_0) (local.get $:pub_A_0)) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 4 (local.get $:slot_127) (local.get $:slot_128) (local.get $:ret_129) (local.get $:slot_126))) - (local.set $:v_70 (struct.new $rt/apply.wat:Closure (ref.func $test::v_123) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 27) (local.get $:v_70)) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 4 (local.get $:slot_130) (local.get $:slot_131) (local.get $:ret_132) (local.get $:slot_129))) + (local.set $:v_73 (struct.new $rt/apply.wat:Closure (ref.func $test::v_126) (local.get $:caps_arg))) + (local.set $:sym_8 (ref.i31 (i32.const 10))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_8) (local.get $:v_73)) ) (func $test::fink_module (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:ret_3 (ref null any)) (local $:cell_A_0 (ref null $rt/apply.wat:Cell)) (local $:cell_B_1 (ref null $rt/apply.wat:Cell)) (local $:cell_U_2 (ref null $rt/apply.wat:Cell)) - (local $:v_73 (ref null any)) + (local $:v_76 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_5 (ref null any)) (local $:mod_reg_url (ref null any)) (local $:sym_reg_name (ref null any)) (local $:sym_reg_word (ref i31)) @@ -777,8 +798,9 @@ test 'union of existing types', fn: (local.set $:cell_U_2 (struct.new $rt/apply.wat:Cell (ref.null any))) (global.set $test:U (local.get $:cell_U_2)) (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 4 (global.get $test:A) (global.get $test:B) (global.get $test:U) (local.get $:ret_3))) - (local.set $:v_73 (struct.new $rt/apply.wat:Closure (ref.func $test::v_137) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 31) (local.get $:v_73)) + (local.set $:v_76 (struct.new $rt/apply.wat:Closure (ref.func $test::v_140) (local.get $:caps_arg))) + (local.set $:sym_5 (ref.i31 (i32.const 18))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_5) (local.get $:v_76)) ) (func $test::host_wrapper (export "test") (type $test::Fn_host_wrapper) (param $:cont (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) @@ -792,24 +814,24 @@ test 'union of existing types', fn: (global $test:U (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (global $test:B (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (global $test:A (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::U_76 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::U_86 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::B_88 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::U_98 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::B_100 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::A_101 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::B_112 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::U_113 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::A_115 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::A_126 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::B_127 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::U_128 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::U_79 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::U_89 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::B_91 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::U_101 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::B_103 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::A_104 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::B_115 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::U_116 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::A_118 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::A_129 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::B_130 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::U_131 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (data $d_0 "test") (data $d_1 "A") (data $d_2 "B") (data $d_3 "U") ) - ;; sm:YeAJAJYBALoBAM4BALoBAMQBAJ4BAKIBAJQBAG4AzgEArAEAbgDMAQDyCgCWAQC6AQDOAQC6AQDEAQDOAQC6AQDiAQDQAQCsAQFOAeoMAJQBALoBAM4BALoBAMQBANABAL4BANABAL4BAJACANABALABAQcBhA4AlAEAugEA0AEAvgEA0AEAvgEAxgEA0AEAvgEAngEAogEAlAEAcADOAQDCAgDSAQERDuQNAJQBALoBANABAL4BANABAL4BANABAL4BAMYBAJ4BAKIBAJQBAHAAzgEAwgIA0gEBFQbKCgCeAQBwAMIBAJ4BAHAAwgEAngEAbgDCAQCcAQCmAQCYAQCUAQBgAJQBAGAAlAEAYACyAgDSAQEVBroFAHoA5gEAjAEA + ;; sm:ZOAJAJYBALoBAM4BALoBAMQBAJ4BAKIBAJQBAG4AzgEArAEAbgDMAQDyCgCWAQC6AQDOAQC6AQDEAQDOAQC6AQDiAQDQAQCsAQFOAfIMAJYBALoBANABAL4BAMYBANABAL4BANABAL4BAJQCANABALABAQcBzg4AlAEAugEA0AEAvgEA0AEAvgEAxgEA0AEAvgEAngEAogEAlAEAcADOAQDCAgDSAQERDmIBAA6aDgCUAQC6AQDQAQC-AQDQAQC-AQDQAQC-AQDGAQCeAQCiAQCUAQBwAM4BAMICANIBARUGYgEABv4KAJ4BAHAAwgEAngEAcADCAQCeAQBuAMIBAJwBAKYBAJgBAJQBAGAAlAEAYACUAQBgALICANIBARUGYgEABqgFAHoA5gEAjAEA test 'enum with nullary cases', fn: @@ -820,113 +842,118 @@ test 'enum with nullary cases', fn: | equals wat": (module (type $test::Fn_host_wrapper (func (param (ref null any)))) - (func $test::v_69 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_12 (ref null any)) + (func $test::v_72 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_15 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_62 (ref null $rt/apply.wat:Cell)) - (local $:slot_62_raw (ref null any)) - (local $:ret_63 (ref null any)) + (local $:slot_65 (ref null $rt/apply.wat:Cell)) + (local $:slot_65_raw (ref null any)) + (local $:ret_66 (ref null any)) (local $:pub_E_0 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_E_0 (ref null any)) - (local $:unwrap_E_62 (ref null any)) + (local $:unwrap_E_65 (ref null any)) (local $:args (ref any)) - (local.set $:v_12 (call $rt/apply.wat:args_head (local.get $:params))) + (local.set $:v_15 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_62_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_62 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_62_raw))) - (local.set $:ret_63 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_62) (local.get $:v_12)) + (local.set $:slot_65_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_65 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_65_raw))) + (local.set $:ret_66 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_65) (local.get $:v_15)) (local.set $:pub_E_0 (struct.get $rt/apply.wat:Cell 0 (global.get $test:E))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_E_0 (ref.i31 (i32.const 2))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_E_0) (local.get $:pub_E_0)) - (local.set $:unwrap_E_62 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_62))) + (local.set $:unwrap_E_65 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_65))) (local.set $:args (call $rt/apply.wat:args_empty)) - (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_E_62) (local.get $:args))) - (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_63)) + (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_E_65) (local.get $:args))) + (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_66)) ) - (func $test::v_81 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_9 (ref null any)) + (func $test::v_84 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_11 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_72 (ref null $rt/apply.wat:Cell)) - (local $:slot_72_raw (ref null any)) - (local $:ret_73 (ref null any)) - (local $:v_74 (ref null any)) - (local $:v_47 (ref null any)) + (local $:slot_75 (ref null $rt/apply.wat:Cell)) + (local $:slot_75_raw (ref null any)) + (local $:ret_76 (ref null any)) + (local $:v_77 (ref null any)) + (local $:v_50 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:sym_11 (ref null any)) - (local.set $:v_9 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:sym_14 (ref null any)) + (local.set $:v_11 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_72_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_72 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_72_raw))) - (local.set $:ret_73 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:v_74 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_72) (local.get $:ret_73))) - (local.set $:v_47 (struct.new $rt/apply.wat:Closure (ref.func $test::v_69) (local.get $:caps_arg))) - (local.set $:sym_11 (ref.i31 (i32.const 10))) - (return_call $rt/types.wat:enum_add (local.get $:ctx_param) (local.get $:v_74) (local.get $:sym_11) (local.get $:v_9) (local.get $:v_47)) + (local.set $:slot_75_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_75 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_75_raw))) + (local.set $:ret_76 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:v_77 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_75) (local.get $:ret_76))) + (local.set $:v_50 (struct.new $rt/apply.wat:Closure (ref.func $test::v_72) (local.get $:caps_arg))) + (local.set $:sym_14 (ref.i31 (i32.const 10))) + (return_call $rt/types.wat:enum_add (local.get $:ctx_param) (local.get $:v_77) (local.get $:sym_14) (local.get $:v_11) (local.get $:v_50)) ) - (func $test::v_91 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_7 (ref null any)) + (func $test::v_94 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_9 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_84 (ref null $rt/apply.wat:Cell)) - (local $:slot_84_raw (ref null any)) - (local $:ret_85 (ref null any)) - (local $:v_50 (ref null any)) + (local $:slot_87 (ref null $rt/apply.wat:Cell)) + (local $:slot_87_raw (ref null any)) + (local $:ret_88 (ref null any)) + (local $:v_53 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local.set $:v_7 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:sym_12 (ref null any)) + (local.set $:v_9 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_84_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_84 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_84_raw))) - (local.set $:ret_85 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_84) (local.get $:ret_85) (local.get $:v_7))) - (local.set $:v_50 (struct.new $rt/apply.wat:Closure (ref.func $test::v_81) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 19) (local.get $:v_50)) + (local.set $:slot_87_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_87 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_87_raw))) + (local.set $:ret_88 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_87) (local.get $:ret_88) (local.get $:v_9))) + (local.set $:v_53 (struct.new $rt/apply.wat:Closure (ref.func $test::v_84) (local.get $:caps_arg))) + (local.set $:sym_12 (ref.i31 (i32.const 10))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_12) (local.get $:v_53)) ) - (func $test::v_103 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_4 (ref null any)) + (func $test::v_106 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_5 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_94 (ref null $rt/apply.wat:Cell)) - (local $:slot_94_raw (ref null any)) - (local $:ret_95 (ref null any)) - (local $:v_96 (ref null any)) - (local $:v_53 (ref null any)) + (local $:slot_97 (ref null $rt/apply.wat:Cell)) + (local $:slot_97_raw (ref null any)) + (local $:ret_98 (ref null any)) + (local $:v_99 (ref null any)) + (local $:v_56 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:sym_6 (ref null any)) - (local.set $:v_4 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:sym_8 (ref null any)) + (local.set $:v_5 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_94_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_94 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_94_raw))) - (local.set $:ret_95 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:v_96 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_94) (local.get $:ret_95))) - (local.set $:v_53 (struct.new $rt/apply.wat:Closure (ref.func $test::v_91) (local.get $:caps_arg))) - (local.set $:sym_6 (ref.i31 (i32.const 18))) - (return_call $rt/types.wat:enum_add (local.get $:ctx_param) (local.get $:v_96) (local.get $:sym_6) (local.get $:v_4) (local.get $:v_53)) + (local.set $:slot_97_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_97 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_97_raw))) + (local.set $:ret_98 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:v_99 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_97) (local.get $:ret_98))) + (local.set $:v_56 (struct.new $rt/apply.wat:Closure (ref.func $test::v_94) (local.get $:caps_arg))) + (local.set $:sym_8 (ref.i31 (i32.const 18))) + (return_call $rt/types.wat:enum_add (local.get $:ctx_param) (local.get $:v_99) (local.get $:sym_8) (local.get $:v_5) (local.get $:v_56)) ) - (func $test::v_113 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (func $test::v_116 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:v_2 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_106 (ref null $rt/apply.wat:Cell)) - (local $:slot_106_raw (ref null any)) - (local $:ret_107 (ref null any)) - (local $:v_56 (ref null any)) + (local $:slot_109 (ref null $rt/apply.wat:Cell)) + (local $:slot_109_raw (ref null any)) + (local $:ret_110 (ref null any)) + (local $:v_59 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_6 (ref null any)) (local.set $:v_2 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_106_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_106 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_106_raw))) - (local.set $:ret_107 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_106) (local.get $:ret_107) (local.get $:v_2))) - (local.set $:v_56 (struct.new $rt/apply.wat:Closure (ref.func $test::v_103) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 23) (local.get $:v_56)) + (local.set $:slot_109_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_109 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_109_raw))) + (local.set $:ret_110 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_109) (local.get $:ret_110) (local.get $:v_2))) + (local.set $:v_59 (struct.new $rt/apply.wat:Closure (ref.func $test::v_106) (local.get $:caps_arg))) + (local.set $:sym_6 (ref.i31 (i32.const 18))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_6) (local.get $:v_59)) ) (func $test::fink_module (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:ret_1 (ref null any)) (local $:cell_E_0 (ref null $rt/apply.wat:Cell)) - (local $:v_59 (ref null any)) + (local $:v_62 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_3 (ref null any)) (local $:mod_reg_url (ref null any)) (local $:sym_reg_name (ref null any)) (local $:sym_reg_word (ref i31)) @@ -945,8 +972,9 @@ test 'enum with nullary cases', fn: (local.set $:cell_E_0 (struct.new $rt/apply.wat:Cell (ref.null any))) (global.set $test:E (local.get $:cell_E_0)) (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (global.get $test:E) (local.get $:ret_1))) - (local.set $:v_59 (struct.new $rt/apply.wat:Closure (ref.func $test::v_113) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_enum (local.get $:ctx_param) (i32.const 0) (i32.const 25) (local.get $:v_59)) + (local.set $:v_62 (struct.new $rt/apply.wat:Closure (ref.func $test::v_116) (local.get $:caps_arg))) + (local.set $:sym_3 (ref.i31 (i32.const 2))) + (return_call $rt/types.wat:new_enum (local.get $:ctx_param) (local.get $:sym_3) (local.get $:v_62)) ) (func $test::host_wrapper (export "test") (type $test::Fn_host_wrapper) (param $:cont (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) @@ -958,17 +986,17 @@ test 'enum with nullary cases', fn: (return_call $std/modules.fnk:init_module (local.get $:url) (local.get $:mod_clos) (local.get $:cont)) ) (global $test:E (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::E_62 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::E_72 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::E_84 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::E_94 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::E_106 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::E_65 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::E_75 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::E_87 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::E_97 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::E_109 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (data $d_0 "test") (data $d_1 "E") (data $d_2 "Green") (data $d_3 "Red") ) - ;; sm:R-AJAJYBALoBAM4BALoBAMQBAJ4BAKIBAJQBAG4AzgEArAEAbgDMAQDwCQCUAQC6AQDOAQC6AQDEAQDAAQDiAQDQAQEkBWQBAAWwCQCUAQC6AQDOAQC6AQDEAQCGAgDQAQEABYIKAJQBALoBAM4BALoBAMQBAMABAOIBANABAQsDYgEAA7YJAJQBALoBANABAL4BAMYBAIoCANIBAQAD9ggAngEAbgDCAQCeAQBwAMIBAJ4BAHAAwgEAnAEApgEAmAEAlAEAYADeAQDSAQEPE7oFAHoA5gEAjAEA + ;; sm:SuAJAJYBALoBAM4BALoBAMQBAJ4BAKIBAJQBAG4AzgEArAEAbgDMAQDyCQCWAQC6AQDOAQC6AQDEAQDAAQDiAQDQAQEkBWQBAAX6CQCUAQC6AQDOAQC6AQDEAQCGAgDQAQEABWQBAAXyCQCUAQC6AQDOAQC6AQDEAQDAAQDiAQDQAQELA2IBAAP8CQCUAQC6AQDQAQC-AQDGAQCKAgDSAQEAA2IBAAOqCQCeAQBuAMIBAJ4BAHAAwgEAngEAcADCAQCcAQCmAQCYAQCUAQBgAN4BANIBAQ8TYAEAE6gFAHoA5gEAjAEA test 'tuple subtype positional before base', fn: @@ -980,113 +1008,116 @@ test 'tuple subtype positional before base', fn: | equals wat": (module (type $test::Fn_host_wrapper (func (param (ref null any)))) - (func $test::v_67 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_11 (ref null any)) + (func $test::v_69 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_13 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_60 (ref null $rt/apply.wat:Cell)) - (local $:slot_60_raw (ref null any)) - (local $:ret_61 (ref null any)) + (local $:slot_62 (ref null $rt/apply.wat:Cell)) + (local $:slot_62_raw (ref null any)) + (local $:ret_63 (ref null any)) (local $:pub_Nu_1 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_Nu_1 (ref null any)) - (local $:unwrap_Nu_60 (ref null any)) + (local $:unwrap_Nu_62 (ref null any)) (local $:args (ref any)) - (local.set $:v_11 (call $rt/apply.wat:args_head (local.get $:params))) + (local.set $:v_13 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_60_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_60 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_60_raw))) - (local.set $:ret_61 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_60) (local.get $:v_11)) + (local.set $:slot_62_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_62 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_62_raw))) + (local.set $:ret_63 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_62) (local.get $:v_13)) (local.set $:pub_Nu_1 (struct.get $rt/apply.wat:Cell 0 (global.get $test:Nu))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_Nu_1 (ref.i31 (i32.const 2))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_Nu_1) (local.get $:pub_Nu_1)) - (local.set $:unwrap_Nu_60 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_60))) + (local.set $:unwrap_Nu_62 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_62))) (local.set $:args (call $rt/apply.wat:args_empty)) - (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_Nu_60) (local.get $:args))) - (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_61)) + (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_Nu_62) (local.get $:args))) + (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_63)) ) - (func $test::v_79 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_8 (ref null any)) + (func $test::v_81 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_10 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_70 (ref null $rt/apply.wat:Cell)) - (local $:slot_70_raw (ref null any)) - (local $:ret_71 (ref null any)) (local $:slot_72 (ref null $rt/apply.wat:Cell)) (local $:slot_72_raw (ref null any)) - (local $:v_48 (ref null any)) + (local $:ret_73 (ref null any)) + (local $:slot_74 (ref null $rt/apply.wat:Cell)) + (local $:slot_74_raw (ref null any)) + (local $:v_50 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:unwrap_Foo_72 (ref null any)) - (local.set $:v_8 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:unwrap_Foo_74 (ref null any)) + (local.set $:v_10 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_70_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_70 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_70_raw))) - (local.set $:ret_71 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_72_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_72_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) (local.set $:slot_72 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_72_raw))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_70) (local.get $:ret_71))) - (local.set $:v_48 (struct.new $rt/apply.wat:Closure (ref.func $test::v_67) (local.get $:caps_arg))) - (local.set $:unwrap_Foo_72 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_72))) - (return_call $rt/types.wat:type_inherit (local.get $:ctx_param) (local.get $:v_8) (local.get $:unwrap_Foo_72) (local.get $:v_48)) + (local.set $:ret_73 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_74_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_74 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_74_raw))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_72) (local.get $:ret_73))) + (local.set $:v_50 (struct.new $rt/apply.wat:Closure (ref.func $test::v_69) (local.get $:caps_arg))) + (local.set $:unwrap_Foo_74 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_74))) + (return_call $rt/types.wat:type_inherit (local.get $:ctx_param) (local.get $:v_10) (local.get $:unwrap_Foo_74) (local.get $:v_50)) ) - (func $test::v_91 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_5 (ref null any)) + (func $test::v_93 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_6 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_82 (ref null $rt/apply.wat:Cell)) - (local $:slot_82_raw (ref null any)) - (local $:ret_83 (ref null any)) (local $:slot_84 (ref null $rt/apply.wat:Cell)) (local $:slot_84_raw (ref null any)) - (local $:v_51 (ref null any)) + (local $:ret_85 (ref null any)) + (local $:slot_86 (ref null $rt/apply.wat:Cell)) + (local $:slot_86_raw (ref null any)) + (local $:v_53 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:unwrap_Foo_84 (ref null any)) - (local.set $:v_5 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:unwrap_Foo_86 (ref null any)) + (local.set $:v_6 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_82_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_82 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_82_raw))) - (local.set $:ret_83 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_84_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_84_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) (local.set $:slot_84 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_84_raw))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_82) (local.get $:ret_83) (local.get $:slot_84))) - (local.set $:v_51 (struct.new $rt/apply.wat:Closure (ref.func $test::v_79) (local.get $:caps_arg))) - (local.set $:unwrap_Foo_84 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_84))) - (return_call $rt/types.wat:type_push (local.get $:ctx_param) (local.get $:v_5) (local.get $:unwrap_Foo_84) (local.get $:v_51)) + (local.set $:ret_85 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_86_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_86 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_86_raw))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_84) (local.get $:ret_85) (local.get $:slot_86))) + (local.set $:v_53 (struct.new $rt/apply.wat:Closure (ref.func $test::v_81) (local.get $:caps_arg))) + (local.set $:unwrap_Foo_86 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_86))) + (return_call $rt/types.wat:type_push (local.get $:ctx_param) (local.get $:v_6) (local.get $:unwrap_Foo_86) (local.get $:v_53)) ) - (func $test::v_103 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (func $test::v_105 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:v_3 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_94 (ref null $rt/apply.wat:Cell)) - (local $:slot_94_raw (ref null any)) - (local $:slot_95 (ref null $rt/apply.wat:Cell)) - (local $:slot_95_raw (ref null any)) - (local $:ret_96 (ref null any)) + (local $:slot_96 (ref null $rt/apply.wat:Cell)) + (local $:slot_96_raw (ref null any)) + (local $:slot_97 (ref null $rt/apply.wat:Cell)) + (local $:slot_97_raw (ref null any)) + (local $:ret_98 (ref null any)) (local $:pub_Foo_0 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_Foo_0 (ref null any)) - (local $:v_54 (ref null any)) + (local $:v_56 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_7 (ref null any)) (local.set $:v_3 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_94_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_94 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_94_raw))) - (local.set $:slot_95_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_95 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_95_raw))) - (local.set $:ret_96 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_94) (local.get $:v_3)) + (local.set $:slot_96_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_96 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_96_raw))) + (local.set $:slot_97_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_97 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_97_raw))) + (local.set $:ret_98 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_96) (local.get $:v_3)) (local.set $:pub_Foo_0 (struct.get $rt/apply.wat:Cell 0 (global.get $test:Foo))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_Foo_0 (ref.i31 (i32.const 10))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_Foo_0) (local.get $:pub_Foo_0)) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_95) (local.get $:ret_96) (local.get $:slot_94))) - (local.set $:v_54 (struct.new $rt/apply.wat:Closure (ref.func $test::v_91) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 20) (local.get $:v_54)) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_97) (local.get $:ret_98) (local.get $:slot_96))) + (local.set $:v_56 (struct.new $rt/apply.wat:Closure (ref.func $test::v_93) (local.get $:caps_arg))) + (local.set $:sym_7 (ref.i31 (i32.const 2))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_7) (local.get $:v_56)) ) (func $test::fink_module (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:ret_2 (ref null any)) (local $:cell_Foo_0 (ref null $rt/apply.wat:Cell)) (local $:cell_Nu_1 (ref null $rt/apply.wat:Cell)) - (local $:v_57 (ref null any)) + (local $:v_59 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_4 (ref null any)) (local $:mod_reg_url (ref null any)) (local $:sym_reg_name (ref null any)) (local $:sym_reg_word (ref i31)) @@ -1104,8 +1135,9 @@ test 'tuple subtype positional before base', fn: (local.set $:cell_Nu_1 (struct.new $rt/apply.wat:Cell (ref.null any))) (global.set $test:Nu (local.get $:cell_Nu_1)) (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (global.get $test:Foo) (global.get $test:Nu) (local.get $:ret_2))) - (local.set $:v_57 (struct.new $rt/apply.wat:Closure (ref.func $test::v_103) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 24) (local.get $:v_57)) + (local.set $:v_59 (struct.new $rt/apply.wat:Closure (ref.func $test::v_105) (local.get $:caps_arg))) + (local.set $:sym_4 (ref.i31 (i32.const 10))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_4) (local.get $:v_59)) ) (func $test::host_wrapper (export "test") (type $test::Fn_host_wrapper) (param $:cont (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) @@ -1118,18 +1150,18 @@ test 'tuple subtype positional before base', fn: ) (global $test:Nu (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (global $test:Foo (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Nu_60 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Nu_70 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Foo_72 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Nu_82 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Foo_84 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Foo_94 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Nu_95 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Nu_62 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Nu_72 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Foo_74 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Nu_84 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Foo_86 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Foo_96 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Nu_97 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (data $d_0 "test") (data $d_1 "Foo") (data $d_2 "Nu") ) - ;; sm:R-YJAJYBALoBAM4BALoBAMQBAJ4BAKYBAJQBAHAA0gEArgEAbgDOAQD0CgCUAQC6AQDOAQC6AQDEAQDOAQC6AQDiAQDQAQCwAQFABbALAJQBALoBAM4BALoBAMQBAM4BALoBAI4CANABALABAQsDxgwAlAEAugEAzgEAugEAzgEAugEAxAEAnAEAqgEAlAEAdADWAQCOAgDQAQEPE-YJAJ4BAHAAwgEAngEAbgDCAQCcAQCmAQCYAQCYAQBoAJYBAGQAjgIA0gEBFwa6BQB6AOYBAIwBAA + ;; sm:SeYJAJYBALoBAM4BALoBAMQBAJ4BAKYBAJQBAHAA0gEArgEAbgDOAQD2CgCWAQC6AQDOAQC6AQDEAQDOAQC6AQDiAQDQAQCwAQFABbILAJQBALoBAM4BALoBAMQBAM4BALoBAI4CANABALABAQsDjA0AlAEAugEAzgEAugEAzgEAugEAxAEAnAEAqgEAlAEAdADWAQCOAgDQAQEPE2ABABOaCgCeAQBwAMIBAJ4BAG4AwgEAnAEApgEAmAEAmAEAaACWAQBkAI4CANIBARcGYgEABqgFAHoA5gEAjAEA test 'tuple subtype base before positional', fn: @@ -1141,113 +1173,116 @@ test 'tuple subtype base before positional', fn: | equals wat": (module (type $test::Fn_host_wrapper (func (param (ref null any)))) - (func $test::v_67 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_11 (ref null any)) + (func $test::v_69 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_13 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_60 (ref null $rt/apply.wat:Cell)) - (local $:slot_60_raw (ref null any)) - (local $:ret_61 (ref null any)) + (local $:slot_62 (ref null $rt/apply.wat:Cell)) + (local $:slot_62_raw (ref null any)) + (local $:ret_63 (ref null any)) (local $:pub_Nu_1 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_Nu_1 (ref null any)) - (local $:unwrap_Nu_60 (ref null any)) + (local $:unwrap_Nu_62 (ref null any)) (local $:args (ref any)) - (local.set $:v_11 (call $rt/apply.wat:args_head (local.get $:params))) + (local.set $:v_13 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_60_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_60 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_60_raw))) - (local.set $:ret_61 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_60) (local.get $:v_11)) + (local.set $:slot_62_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_62 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_62_raw))) + (local.set $:ret_63 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_62) (local.get $:v_13)) (local.set $:pub_Nu_1 (struct.get $rt/apply.wat:Cell 0 (global.get $test:Nu))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_Nu_1 (ref.i31 (i32.const 2))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_Nu_1) (local.get $:pub_Nu_1)) - (local.set $:unwrap_Nu_60 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_60))) + (local.set $:unwrap_Nu_62 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_62))) (local.set $:args (call $rt/apply.wat:args_empty)) - (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_Nu_60) (local.get $:args))) - (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_61)) + (local.set $:args (call $rt/apply.wat:args_prepend (local.get $:unwrap_Nu_62) (local.get $:args))) + (return_call $rt/apply.wat:apply_3 (local.get $:args) (local.get $:ctx_param) (local.get $:ret_63)) ) - (func $test::v_79 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_8 (ref null any)) + (func $test::v_81 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_10 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_70 (ref null $rt/apply.wat:Cell)) - (local $:slot_70_raw (ref null any)) - (local $:ret_71 (ref null any)) (local $:slot_72 (ref null $rt/apply.wat:Cell)) (local $:slot_72_raw (ref null any)) - (local $:v_48 (ref null any)) + (local $:ret_73 (ref null any)) + (local $:slot_74 (ref null $rt/apply.wat:Cell)) + (local $:slot_74_raw (ref null any)) + (local $:v_50 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:unwrap_Foo_72 (ref null any)) - (local.set $:v_8 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:unwrap_Foo_74 (ref null any)) + (local.set $:v_10 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_70_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_70 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_70_raw))) - (local.set $:ret_71 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_72_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_72_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) (local.set $:slot_72 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_72_raw))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_70) (local.get $:ret_71))) - (local.set $:v_48 (struct.new $rt/apply.wat:Closure (ref.func $test::v_67) (local.get $:caps_arg))) - (local.set $:unwrap_Foo_72 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_72))) - (return_call $rt/types.wat:type_push (local.get $:ctx_param) (local.get $:v_8) (local.get $:unwrap_Foo_72) (local.get $:v_48)) + (local.set $:ret_73 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_74_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_74 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_74_raw))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 2 (local.get $:slot_72) (local.get $:ret_73))) + (local.set $:v_50 (struct.new $rt/apply.wat:Closure (ref.func $test::v_69) (local.get $:caps_arg))) + (local.set $:unwrap_Foo_74 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_74))) + (return_call $rt/types.wat:type_push (local.get $:ctx_param) (local.get $:v_10) (local.get $:unwrap_Foo_74) (local.get $:v_50)) ) - (func $test::v_91 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) - (local $:v_5 (ref null any)) + (func $test::v_93 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (local $:v_6 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_82 (ref null $rt/apply.wat:Cell)) - (local $:slot_82_raw (ref null any)) - (local $:ret_83 (ref null any)) (local $:slot_84 (ref null $rt/apply.wat:Cell)) (local $:slot_84_raw (ref null any)) - (local $:v_51 (ref null any)) + (local $:ret_85 (ref null any)) + (local $:slot_86 (ref null $rt/apply.wat:Cell)) + (local $:slot_86_raw (ref null any)) + (local $:v_53 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) - (local $:unwrap_Foo_84 (ref null any)) - (local.set $:v_5 (call $rt/apply.wat:args_head (local.get $:params))) + (local $:unwrap_Foo_86 (ref null any)) + (local.set $:v_6 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_82_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_82 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_82_raw))) - (local.set $:ret_83 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_84_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_84_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) (local.set $:slot_84 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_84_raw))) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_82) (local.get $:ret_83) (local.get $:slot_84))) - (local.set $:v_51 (struct.new $rt/apply.wat:Closure (ref.func $test::v_79) (local.get $:caps_arg))) - (local.set $:unwrap_Foo_84 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_84))) - (return_call $rt/types.wat:type_inherit (local.get $:ctx_param) (local.get $:v_5) (local.get $:unwrap_Foo_84) (local.get $:v_51)) + (local.set $:ret_85 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_86_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (local.set $:slot_86 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_86_raw))) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_84) (local.get $:ret_85) (local.get $:slot_86))) + (local.set $:v_53 (struct.new $rt/apply.wat:Closure (ref.func $test::v_81) (local.get $:caps_arg))) + (local.set $:unwrap_Foo_86 (struct.get $rt/apply.wat:Cell 0 (local.get $:slot_86))) + (return_call $rt/types.wat:type_inherit (local.get $:ctx_param) (local.get $:v_6) (local.get $:unwrap_Foo_86) (local.get $:v_53)) ) - (func $test::v_103 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) + (func $test::v_105 (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:v_3 (ref null any)) (local $:caps_cast (ref $rt/apply.wat:Captures)) - (local $:slot_94 (ref null $rt/apply.wat:Cell)) - (local $:slot_94_raw (ref null any)) - (local $:slot_95 (ref null $rt/apply.wat:Cell)) - (local $:slot_95_raw (ref null any)) - (local $:ret_96 (ref null any)) + (local $:slot_96 (ref null $rt/apply.wat:Cell)) + (local $:slot_96_raw (ref null any)) + (local $:slot_97 (ref null $rt/apply.wat:Cell)) + (local $:slot_97_raw (ref null any)) + (local $:ret_98 (ref null any)) (local $:pub_Foo_0 (ref null any)) (local $:pub_url (ref null any)) (local $:pub_name_Foo_0 (ref null any)) - (local $:v_54 (ref null any)) + (local $:v_56 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_7 (ref null any)) (local.set $:v_3 (call $rt/apply.wat:args_head (local.get $:params))) (local.set $:caps_cast (ref.cast (ref $rt/apply.wat:Captures) (local.get $:caps_param))) - (local.set $:slot_94_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) - (local.set $:slot_94 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_94_raw))) - (local.set $:slot_95_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) - (local.set $:slot_95 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_95_raw))) - (local.set $:ret_96 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) - (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_94) (local.get $:v_3)) + (local.set $:slot_96_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 0))) + (local.set $:slot_96 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_96_raw))) + (local.set $:slot_97_raw (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 1))) + (local.set $:slot_97 (ref.cast (ref null $rt/apply.wat:Cell) (local.get $:slot_97_raw))) + (local.set $:ret_98 (array.get $rt/apply.wat:Captures (local.get $:caps_cast) (i32.const 2))) + (struct.set $rt/apply.wat:Cell 0 (local.get $:slot_96) (local.get $:v_3)) (local.set $:pub_Foo_0 (struct.get $rt/apply.wat:Cell 0 (global.get $test:Foo))) (local.set $:pub_url (call $std/str.fnk:from_data (data.ref $d_0 4))) (local.set $:pub_name_Foo_0 (ref.i31 (i32.const 10))) (call $std/modules.fnk:pub (local.get $:pub_url) (local.get $:pub_name_Foo_0) (local.get $:pub_Foo_0)) - (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_95) (local.get $:ret_96) (local.get $:slot_94))) - (local.set $:v_54 (struct.new $rt/apply.wat:Closure (ref.func $test::v_91) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 20) (local.get $:v_54)) + (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (local.get $:slot_97) (local.get $:ret_98) (local.get $:slot_96))) + (local.set $:v_56 (struct.new $rt/apply.wat:Closure (ref.func $test::v_93) (local.get $:caps_arg))) + (local.set $:sym_7 (ref.i31 (i32.const 2))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_7) (local.get $:v_56)) ) (func $test::fink_module (type $rt/apply.wat:Fn3) (param $:caps_param (ref null any)) (param $:ctx_param (ref null any)) (param $:params (ref null any)) (local $:ret_2 (ref null any)) (local $:cell_Foo_0 (ref null $rt/apply.wat:Cell)) (local $:cell_Nu_1 (ref null $rt/apply.wat:Cell)) - (local $:v_57 (ref null any)) + (local $:v_59 (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) + (local $:sym_4 (ref null any)) (local $:mod_reg_url (ref null any)) (local $:sym_reg_name (ref null any)) (local $:sym_reg_word (ref i31)) @@ -1265,8 +1300,9 @@ test 'tuple subtype base before positional', fn: (local.set $:cell_Nu_1 (struct.new $rt/apply.wat:Cell (ref.null any))) (global.set $test:Nu (local.get $:cell_Nu_1)) (local.set $:caps_arg (array.new_fixed $rt/apply.wat:Captures 3 (global.get $test:Foo) (global.get $test:Nu) (local.get $:ret_2))) - (local.set $:v_57 (struct.new $rt/apply.wat:Closure (ref.func $test::v_103) (local.get $:caps_arg))) - (return_call $rt/types.wat:new_type (local.get $:ctx_param) (i32.const 0) (i32.const 24) (local.get $:v_57)) + (local.set $:v_59 (struct.new $rt/apply.wat:Closure (ref.func $test::v_105) (local.get $:caps_arg))) + (local.set $:sym_4 (ref.i31 (i32.const 10))) + (return_call $rt/types.wat:new_type (local.get $:ctx_param) (local.get $:sym_4) (local.get $:v_59)) ) (func $test::host_wrapper (export "test") (type $test::Fn_host_wrapper) (param $:cont (ref null any)) (local $:caps_arg (ref null $rt/apply.wat:Captures)) @@ -1279,15 +1315,15 @@ test 'tuple subtype base before positional', fn: ) (global $test:Nu (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (global $test:Foo (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Nu_60 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Nu_70 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Foo_72 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Nu_82 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Foo_84 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Foo_94 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) - (global $test::Nu_95 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Nu_62 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Nu_72 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Foo_74 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Nu_84 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Foo_86 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Foo_96 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) + (global $test::Nu_97 (mut (ref null $rt/apply.wat:Cell)) (ref.null $rt/apply.wat:Cell)) (data $d_0 "test") (data $d_1 "Foo") (data $d_2 "Nu") ) - ;; sm:R-YJAJYBALoBAM4BALoBAMQBAJ4BAKYBAJQBAHAA0gEArgEAbgDOAQD0CgCUAQC6AQDOAQC6AQDEAQDOAQC6AQDiAQDQAQCwAQFEA6oLAJQBALoBAM4BALoBAMQBAM4BALoBAI4CANABALABAQ8FzAwAlAEAugEAzgEAugEAzgEAugEAxAEAnAEAqgEAlAEAdADWAQCOAgDQAQEPE-YJAJ4BAHAAwgEAngEAbgDCAQCcAQCmAQCYAQCYAQBoAJYBAGQAjgIA0gEBFwa6BQB6AOYBAIwBAA + ;; sm:SeYJAJYBALoBAM4BALoBAMQBAJ4BAKYBAJQBAHAA0gEArgEAbgDOAQD2CgCWAQC6AQDOAQC6AQDEAQDOAQC6AQDiAQDQAQCwAQFEA6wLAJQBALoBAM4BALoBAMQBAM4BALoBAI4CANABALABAQ8Fkg0AlAEAugEAzgEAugEAzgEAugEAxAEAnAEAqgEAlAEAdADWAQCOAgDQAQEPE2ABABOaCgCeAQBwAMIBAJ4BAG4AwgEAnAEApgEAmAEAmAEAaACWAQBkAI4CANIBARcGYgEABqgFAHoA5gEAjAEA diff --git a/src/runtime/rt/types.test.fnk b/src/runtime/rt/types.test.fnk index a2c265b..205dc0a 100644 --- a/src/runtime/rt/types.test.fnk +++ b/src/runtime/rt/types.test.fnk @@ -479,7 +479,6 @@ skip test 'TODO support typed fn', fn: - test 'enum case match with destructure', fn: Opt = enum: Some {val: u8} @@ -499,17 +498,17 @@ test 'fmt typed rec instance', fn: Foo = type: bar: u8 foo = Foo {bar: 1} + equals '${foo}' - '{bar: 1}' + 'Foo {bar: 1}' test 'repr typed rec instance in list', fn: Foo = type: bar: u8 - --- collections repr their elements, so a typed instance in a list - exercises the repr $Inst arm (bare payload for now) --- lst = [Foo {bar: 1}] + equals '${lst}' - '[{bar: 1}]' + '[Foo {bar: 1}]' diff --git a/src/runtime/rt/types.wat b/src/runtime/rt/types.wat index 2b8888e..e1e6176 100644 --- a/src/runtime/rt/types.wat +++ b/src/runtime/rt/types.wat @@ -6,12 +6,13 @@ ;; nominal-wrapper shape as $Opaque (rt/opaque.wat), extended with an ;; introspection key. ;; -;; Introspection key: a `$Type` carries (mod_id, cps_id) -- the SAME pair the -;; tracer carries per frame (rt/trace.wat). The host resolves it to a name and -;; source location on demand (repr / errors / debug); the runtime holds only the -;; opaque pair, so a fully-resolved type stays erasable. Two i32s, mirroring -;; trace_push/trace_mark, rather than a packed i64 -- consistent with the one -;; existing mechanism. +;; Name: a `$Type` carries a `$name` symbol (a tagged i31, rt/symbols.wat) -- +;; the interned id of its declared ident (`Foo` in `Foo = type: ...`). The +;; renderer resolves it to a source name in-band via `symbol_to_str` (repr / +;; errors), no host round-trip. An anonymous declaration (`type _` used inline +;; as a field type, never bound) carries the null-name symbol (id 0). A symbol +;; cannot carry a source span; type declarations have no diagnostic that points +;; at the declaration site, so no source location is held. (module @@ -53,10 +54,10 @@ ;; -- $Type and flavour subtypes ------------------------------------- ;; ;; A type is a `$base`-chain of nodes. `$Type` is the shared CORE every flavour - ;; carries: the (mod_id, cps_id) introspection key and the `$base` link - ;; (`..Super`, or the previous node in a multi-level decl; null at the chain - ;; root). Flavour is a SUBTYPE, discriminated by `br_on_cast` -- not a $kind tag - ;; and not inferred from collection emptiness: + ;; carries: the `$name` symbol and the `$base` link (`..Super`, or the previous + ;; node in a multi-level decl; null at the chain root). Flavour is a SUBTYPE, + ;; discriminated by `br_on_cast` -- not a $kind tag and not inferred from + ;; collection emptiness: ;; $RecType -- named fields. `$fields` is the FULL name->field-type $Dict ;; (base's fields + own, built by copying base.fields then ;; set'ing own; HAMT structural sharing keeps the copy cheap). @@ -64,19 +65,16 @@ ;; A bare `type _` / chain root is a plain `$Type` (unit); it is a marker/base, ;; never applied to construct an instance (no current caller). (type $Type (@pub) (sub (struct - (field $mod_id i32) - (field $cps_id i32) + (field $name (ref i31)) (field $base (mut (ref null $Type))) ))) (type $RecType (@pub) (sub $Type (struct - (field $mod_id i32) - (field $cps_id i32) + (field $name (ref i31)) (field $base (mut (ref null $Type))) (field $fields (mut (ref null $Dict))) ))) (type $TupleType (@pub) (sub $Type (struct - (field $mod_id i32) - (field $cps_id i32) + (field $name (ref i31)) (field $base (mut (ref null $Type))) ;; Positional field-types, in REVERSE declaration order (cons-prepend); ;; readers reverse. @@ -106,17 +104,18 @@ ;; -- new_type -------------------------------------------------------- ;; ;; Mint a fresh `$Type`. Called directly by codegen (not a first-class fink - ;; value): the lowering supplies mod_id/cps_id as constants (like trace_push). - ;; Op calling convention: (ctx, mid, cid, cont) -- tail-applies cont with the + ;; value): the lowering supplies the `$name` symbol (the declared ident's + ;; interned id, or the null-name symbol for an anonymous `type _`). + ;; Op calling convention: (ctx, name, cont) -- tail-applies cont with the ;; new type value. Starts with an empty fields dict. (func $new_type (@pub) (@impl "rt/types.wat:new_type") (param $ctx (ref null any)) - (param $mid i32) (param $cid i32) + (param $name (ref null any)) (param $cont (ref null any)) (return_call $apply_1 (local.get $ctx) (struct.new $Type - (local.get $mid) (local.get $cid) (ref.null none)) + (ref.cast (ref i31) (local.get $name)) (ref.null none)) (local.get $cont))) @@ -152,8 +151,7 @@ (return_call $apply_1 (local.get $ctx) (struct.new $RecType - (struct.get $Type $mod_id (local.get $t)) - (struct.get $Type $cps_id (local.get $t)) + (struct.get $Type $name (local.get $t)) (local.get $t) (ref.cast (ref $Dict) (call $dict_set_field (call $dict_new) (local.get $key) (local.get $val)))) @@ -187,8 +185,7 @@ (return_call $apply_1 (local.get $ctx) (struct.new $TupleType - (struct.get $Type $mod_id (local.get $t)) - (struct.get $Type $cps_id (local.get $t)) + (struct.get $Type $name (local.get $t)) (local.get $t) (call $list_prepend (ref.cast (ref any) (local.get $val)) (call $list_empty))) (local.get $cont))) @@ -205,7 +202,9 @@ ;; - base is a unit $Type -> remain unit-based (new $Type base:base); a later ;; field/positional will wrap it via type_set_field/type_push. ;; The prior `type` node (a fresh unit seed at chain start) is replaced by this - ;; base-derived node. Cont-taking. (ctx, type, base, cont). + ;; base-derived node. The new node keeps the DERIVED type's own `$name` (read + ;; off `$type`, the prior seed -- e.g. `FooBar`), NOT base's: a derived type + ;; reprs under its own name. Cont-taking. (ctx, type, base, cont). (func $type_inherit (@pub) (@impl "rt/types.wat:type_inherit") (param $ctx (ref null any)) (param $type (ref null any)) (param $base (ref null any)) @@ -213,7 +212,10 @@ (local $b (ref $Type)) (local $bt (ref $TupleType)) (local $br (ref $RecType)) + (local $name (ref i31)) (local.set $b (ref.cast (ref $Type) (local.get $base))) + (local.set $name + (struct.get $Type $name (ref.cast (ref $Type) (local.get $type)))) ;; Tuple base. (if (ref.test (ref $TupleType) (local.get $b)) (then @@ -221,8 +223,7 @@ (return_call $apply_1 (local.get $ctx) (struct.new $TupleType - (struct.get $Type $mod_id (local.get $b)) - (struct.get $Type $cps_id (local.get $b)) + (local.get $name) (local.get $b) (struct.get $TupleType $positionals (local.get $bt))) (local.get $cont)))) @@ -233,8 +234,7 @@ (return_call $apply_1 (local.get $ctx) (struct.new $RecType - (struct.get $Type $mod_id (local.get $b)) - (struct.get $Type $cps_id (local.get $b)) + (local.get $name) (local.get $b) (struct.get $RecType $fields (local.get $br))) (local.get $cont)))) @@ -242,8 +242,7 @@ (return_call $apply_1 (local.get $ctx) (struct.new $Type - (struct.get $Type $mod_id (local.get $b)) - (struct.get $Type $cps_id (local.get $b)) + (local.get $name) (local.get $b)) (local.get $cont))) @@ -256,8 +255,7 @@ ;; structural, order-independent -- so union eq delegates to set eq. ;; Inherits $Type's fields as the struct prefix (WasmGC rule). (type $Union (@pub) (sub $Type (struct - (field $mod_id i32) - (field $cps_id i32) + (field $name (ref i31)) (field $base (mut (ref null $Type))) (field $members (mut (ref null $Set))) ))) @@ -266,15 +264,15 @@ ;; -- new_union ------------------------------------------------------- ;; ;; Mint a fresh `$Union` with an empty member set. Seed constructor, same - ;; introspection-key convention as new_type. (ctx, mid, cid, cont). + ;; `$name`-symbol convention as new_type. (ctx, name, cont). (func $new_union (@pub) (@impl "rt/types.wat:new_union") (param $ctx (ref null any)) - (param $mid i32) (param $cid i32) + (param $name (ref null any)) (param $cont (ref null any)) (return_call $apply_1 (local.get $ctx) (struct.new $Union - (local.get $mid) (local.get $cid) (ref.null none) + (ref.cast (ref i31) (local.get $name)) (ref.null none) (call $set_empty)) (local.get $cont))) @@ -355,8 +353,7 @@ ;; subtypes $Type and adds $cases: a name -> member-type $Dict (an enum is "a ;; namespace = a record"). Inherits $Type's fields as the struct prefix. (type $Enum (@pub) (sub $Type (struct - (field $mod_id i32) - (field $cps_id i32) + (field $name (ref i31)) (field $base (mut (ref null $Type))) (field $cases (mut (ref null $Dict))) ))) @@ -365,15 +362,15 @@ ;; -- new_enum -------------------------------------------------------- ;; ;; Mint a fresh `$Enum` with an empty cases dict. Seed constructor. - ;; (ctx, mid, cid, cont). + ;; (ctx, name, cont). (func $new_enum (@pub) (@impl "rt/types.wat:new_enum") (param $ctx (ref null any)) - (param $mid i32) (param $cid i32) + (param $name (ref null any)) (param $cont (ref null any)) (return_call $apply_1 (local.get $ctx) (struct.new $Enum - (local.get $mid) (local.get $cid) (ref.null none) + (ref.cast (ref i31) (local.get $name)) (ref.null none) (call $dict_new)) (local.get $cont))) @@ -495,6 +492,18 @@ (struct.get $Tuple $tup_payload (ref.cast (ref $Tuple) (local.get $inst)))) + ;; -- inst_type_name -------------------------------------------------- + ;; + ;; The `$name` symbol of an instance's nominal type. The renderer (repr.wat) + ;; reads this and feeds it to the symbol repr to source-quote the type name + ;; (`Foo {bar: 1}`). A symbol word, so it routes through the same name + ;; resolution any symbol uses -- types.wat owns no string machinery. + (func $inst_type_name (@pub) + (param $inst (ref null any)) (result (ref i31)) + (struct.get $Type $name + (struct.get $Inst $type (ref.cast (ref $Inst) (local.get $inst))))) + + ;; -- project_inst ---------------------------------------------------- ;; ;; Cast (downcast) `val` to `target` for a type-guard match: build a fresh diff --git a/src/runtime/std/repr.wat b/src/runtime/std/repr.wat index 50bfde6..a78ee0d 100644 --- a/src/runtime/std/repr.wat +++ b/src/runtime/std/repr.wat @@ -60,9 +60,21 @@ (import "rt/types.wat" "Inst" (type $Inst (sub any))) (import "rt/types.wat" "inst_payload" (func $inst_payload (param (ref null any)) (result (ref null any)))) + (import "rt/types.wat" "inst_type_name" + (func $inst_type_name (param (ref null any)) (result (ref i31)))) (import "rt/symbols.wat" "is_symbol" (func $is_symbol (param (ref null any)) (result i32))) (import "rt/symbols.wat" "repr" (func $symbol_repr (param (ref i31)) (result (ref $Str)))) + ;; ByteArray-assembly helpers for prepending a nominal type name to an + ;; instance's payload repr (`Foo {bar: 1}`). Same idiom dict/list fmt use. + (import "std/str.wat" "ByteArray" (type $ByteArray (array (mut i8)))) + (import "std/str.wat" "from_bytes" + (func $str_from_bytes (param (ref $ByteArray)) (result (ref $Str)))) + (import "std/str.wat" "_str_len" + (func $_str_len (param (ref $Str)) (result i32))) + (import "std/str.wat" "_str_copy_to" + (func $_str_copy_to (param (ref $Str)) (param (ref $ByteArray)) (param i32) (result i32))) + ;; i31 (bool) renderer — repr same as fmt; share str.wat's helper. (import "std/str.wat" "_str_fmt_i31" (func $_str_fmt_i31 (param i32) (result (ref $Str)))) @@ -147,20 +159,52 @@ (local.get $val)))) (return_call $closure_repr)) - ;; Try $Inst (typed instance) — repr the bare structural payload. - ;; TODO(type-name): repr should source-quote the nominal name - ;; (`Foo {bar: 1}`), since repr is for round-trippable rendering. The type's - ;; (mod_id, cps_id) resolves to "Foo" via host reflection (the backtrace - ;; channel). Bare payload for now. + ;; Try $Inst (typed instance) — source-quote the nominal name before the + ;; structural payload (`Foo {bar: 1}`). Anonymous types (null-name symbol) + ;; render as the bare payload. (if (ref.test (ref $Inst) (local.get $val)) - (then (return_call $repr_val - (ref.as_non_null (call $inst_payload (local.get $val)))))) + (then (return_call $inst_repr (local.get $val)))) ;; Unknown type — unreachable for now. (unreachable) ) + ;; ---- Typed-instance repr -------------------------------------------- + + ;; $inst_repr : (ref any $Inst) -> (ref $Str) + ;; Source-quote the nominal type name then the structural payload, joined by a + ;; space: `Foo {bar: 1}`. The name is the type's `$name` symbol, repr'd via the + ;; symbol repr (bare ident or quoted). An anonymous type carries the null-name + ;; symbol, whose repr is empty -- detected by zero length, in which case the + ;; bare payload is returned (no leading space). + (func $inst_repr (param $val (ref null any)) (result (ref $Str)) + (local $name (ref $Str)) + (local $payload (ref $Str)) + (local $name_len i32) + (local $pay_len i32) + (local $buf (ref $ByteArray)) + (local $pos i32) + (local.set $name (call $symbol_repr (call $inst_type_name (local.get $val)))) + (local.set $payload + (call $repr_val (ref.as_non_null (call $inst_payload (local.get $val))))) + (local.set $name_len (call $_str_len (local.get $name))) + ;; Anonymous type: empty name -> bare payload, no leading space. + (if (i32.eqz (local.get $name_len)) + (then (return (local.get $payload)))) + (local.set $pay_len (call $_str_len (local.get $payload))) + ;; name + " " + payload. + (local.set $buf + (array.new $ByteArray (i32.const 0) + (i32.add (local.get $name_len) + (i32.add (i32.const 1) (local.get $pay_len))))) + (local.set $pos (call $_str_copy_to (local.get $name) (local.get $buf) (i32.const 0))) + (array.set $ByteArray (local.get $buf) (local.get $pos) (i32.const 0x20)) ;; space + (local.set $pos (i32.add (local.get $pos) (i32.const 1))) + (local.set $pos (call $_str_copy_to (local.get $payload) (local.get $buf) (local.get $pos))) + (return_call $str_from_bytes (local.get $buf))) + + ;; ---- Fink-importable wrapper (CPS) ---------------------------------- ;; std/repr.fnk:repr — user-facing `repr x` call site. diff --git a/src/runtime/std/str.wat b/src/runtime/std/str.wat index 36d8e6b..ac4e636 100644 --- a/src/runtime/std/str.wat +++ b/src/runtime/std/str.wat @@ -41,6 +41,10 @@ (import "rt/types.wat" "Inst" (type $Inst (sub any))) (import "rt/types.wat" "inst_payload" (func $inst_payload (param (ref null any)) (result (ref null any)))) + (import "rt/types.wat" "inst_type_name" + (func $inst_type_name (param (ref null any)) (result (ref i31)))) + (import "rt/symbols.wat" "repr" + (func $symbol_repr (param (ref i31)) (result (ref $Str)))) (import "rt/apply.wat" "Fn3" (type $Fn3 (sub any))) (import "rt/apply.wat" "args_head" (func $args_head (param (ref null any)) (result (ref null any)))) @@ -1664,20 +1668,45 @@ (local.get $val)))) (return_call $opaque_fmt)) - ;; Try $Inst (typed instance) — fmt the bare structural payload. Reads - ;; strip the type, so `Foo {bar: 1}` formats as `{bar: 1}`. - ;; TODO(type-name): show the nominal type name (`Foo {bar: 1}`). The - ;; instance's $type carries (mod_id, cps_id); resolving that to "Foo" is - ;; host-side reflection (the same channel backtraces use). Bare payload for - ;; now. + ;; Try $Inst (typed instance) — the nominal name then the fmt'd payload + ;; (`Foo {bar: 1}`). Anonymous types (null-name symbol) fmt as bare payload. (if (ref.test (ref $Inst) (local.get $val)) - (then (return_call $fmt_val - (ref.as_non_null (call $inst_payload (local.get $val)))))) + (then (return_call $inst_fmt (local.get $val)))) ;; Unknown type — unreachable for now. (unreachable) ) + ;; $inst_fmt : (ref any $Inst) -> (ref $Str) + ;; Nominal type name + space + fmt'd payload (`Foo {bar: 1}`). The name is the + ;; type's `$name` symbol, rendered via the symbol repr (bare ident or quoted). + ;; An anonymous type carries the null-name symbol, whose repr is empty -- in + ;; that case the bare payload is returned (no leading space). Mirrors + ;; repr.wat:$inst_repr, but fmt's the payload (so string fields render bare). + (func $inst_fmt (param $val (ref null any)) (result (ref $Str)) + (local $name (ref $Str)) + (local $payload (ref $Str)) + (local $name_len i32) + (local $pay_len i32) + (local $buf (ref $ByteArray)) + (local $pos i32) + (local.set $name (call $symbol_repr (call $inst_type_name (local.get $val)))) + (local.set $payload + (call $fmt_val (ref.as_non_null (call $inst_payload (local.get $val))))) + (local.set $name_len (call $_str_len (local.get $name))) + (if (i32.eqz (local.get $name_len)) + (then (return (local.get $payload)))) + (local.set $pay_len (call $_str_len (local.get $payload))) + (local.set $buf + (array.new $ByteArray (i32.const 0) + (i32.add (local.get $name_len) + (i32.add (i32.const 1) (local.get $pay_len))))) + (local.set $pos (call $_str_copy_to (local.get $name) (local.get $buf) (i32.const 0))) + (array.set $ByteArray (local.get $buf) (local.get $pos) (i32.const 0x20)) ;; space + (local.set $pos (i32.add (local.get $pos) (i32.const 1))) + (local.set $pos (call $_str_copy_to (local.get $payload) (local.get $buf) (local.get $pos))) + (return_call $from_bytes (local.get $buf))) + ;; _str_fmt_i31 : i32 -> (ref $Str) ;; Format an i31ref value as a boolean: 0 → "false", 1 → "true". ;; i31ref is currently only used for booleans; integer i31 rendering