phino-0.0.152: test-resources/evaluate-packs/defers-a-copy-whose-argument-is-a-bare-symbol.yaml
# SPDX-FileCopyrightText: Copyright (c) 2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
# The loop of #1729: 'joined' folds a tuple whose tail is the bare symbol 'π3',
# an object nobody knows. The right branch of the first fork is the copy
# 'step( acc β¦ β¦, tup β¦ π3 )', and nothing inside its body can succeed, since
# every round asks 'π3' for its 'length'. Before #1729 the walk entered that
# body, got stuck six times, and left it as written, so the join had a symbol
# on the left and a body on the right, and 'e' came to nothing. Now the walk
# does not enter a copy one of whose arguments reads to a bare symbol: it
# answers the copy with a fresh symbol and writes a 'deferred' line naming the
# copy it stands for, the join pairs that symbol with the one the left branch
# ends in, and 'e' comes to a symbol. Since #1732 that line spells the copy as
# a call of 'Ξ¦.joined.step', the object of the world it was made of, rather
# than of 'Ξ¦.e.step', the copy of 'joined' the walk wrote into 'e', since only
# the first one has voids the copy fills. Reading 'items.length' through the
# tuple, itself a copy over bare symbols, still reaches 'π1', since a copy with
# no Ο has no body to defer.
symbolic: |
- Ξ»: L_bytes_eq
dataize:
πΏ1: $.Ο
πΏ2: $.b
π: Ξ¦.bool( if β¦ β¦ Ξ» β€ L_fork, left β¦ β
, right β¦ β
, Ο β¦ β¦ Ξ» β€ π β§ β§ )
- Ξ»: L_bytes_concat
dataize:
πΏ1: $.Ο
πΏ2: $.b
π: Ξ¦.bytes( Ο β¦ β¦ Ξ» β€ π β§ )
- Ξ»: L_dataized
dataize:
πΏ1: $.target
π: Ξ¦.bytes( Ο β¦ β¦ Ξ» β€ π β§ )
- Ξ»: L_fork
dataize:
πΏ1: $.Ο
morph:
π1: $.left
π2: $.right
symbolize:
π3: π1
π4: π2
join:
π5: [π3, π4]
π: π5
location: 'Q.e'
deep: true
partial: true
acyclic: plausible
result: 'β¦ items β¦ Ξ¦.tuple( length β¦ Ξ¦.bytes( Ο β¦ π1:Ξ» ), head β¦ π2:Ξ», tail β¦ π3:Ξ» ), Ο β¦ π9:Ξ», step(acc, tup) β¦ Ξ¦.dataized( target β¦ tup.length ).eq( b β¦ Ξ¦.bytes( Ο β¦ 00-:Ξ ) ).if( acc, Ο.step( acc β¦ acc.concat( b β¦ Ξ¦.dataized( target β¦ tup.head ) ), tup β¦ tup.tail ) ):Ο β§'
input: |
β¦
bool(if) β¦ β¦ Ο β¦ if( Ξ¦.bytes( Ο β¦ FF-:Ξ ), Ξ¦.bytes( Ο β¦ 00-:Ξ ) ) β§,
bytes(Ο) β¦ β¦ eq(Ο, b) β¦ L_bytes_eq:Ξ», concat(Ο, b) β¦ L_bytes_concat:Ξ» β§,
dataized(target) β¦ L_dataized:Ξ»,
tuple(length, head, tail) β¦ β¦β§,
joined(items) β¦ β¦
Ο β¦ Ξ¦.dataized( target β¦ items.length ).eq( b β¦ Ξ¦.bytes( Ο β¦ 00-:Ξ ) ).if(
Ξ¦.bytes( Ο β¦ --:Ξ ),
step( acc β¦ Ξ¦.dataized( target β¦ items.head ), tup β¦ items.tail )
),
step(Ο, acc, tup) β¦ Ξ¦.dataized( target β¦ tup.length ).eq( b β¦ Ξ¦.bytes( Ο β¦ 00-:Ξ ) ).if(
acc,
Ο.step( acc β¦ acc.concat( b β¦ Ξ¦.dataized( target β¦ tup.head ) ), tup β¦ tup.tail )
):Ο
β§,
e β¦ Ξ¦.joined(
items β¦ Ξ¦.tuple( length β¦ Ξ¦.bytes( Ο β¦ π1:Ξ» ), head β¦ π2:Ξ», tail β¦ π3:Ξ» )
)
β§
protocol: |
π(Ξ¦.e):
πΒ·0Β·1 := Ξ¦.joined( items β¦ Ξ¦.tuple( length β¦ Ξ¦.bytes( Ο β¦ π1:Ξ» ), head β¦ π2:Ξ», tail β¦ π3:Ξ» ) )
π(Ξ¦.e.items):
πΒ·0Β·2 := Ξ¦.bytes( Ο β¦ π1:Ξ» )
πΒ·0Β·3 := Ξ¦.tuple( length β¦ πΒ·0Β·2 )
πΒ·0Β·4 := Ξ¦.tuple( length β¦ πΒ·0Β·2 )
πΒ·0Β·5 := πΒ·0Β·4( head β¦ π2:Ξ» )
πΒ·0Β·6 := Ξ¦.tuple( length β¦ πΒ·0Β·2 )
πΒ·0Β·7 := πΒ·0Β·6( head β¦ π2:Ξ» )
πΒ·0Β·8 := πΒ·0Β·7( tail β¦ π3:Ξ» )
π(Ξ¦.e.Ο):
πΒ·0Β·9 := Ξ¦.tuple( length β¦ πΒ·0Β·2 )
πΒ·0Β·10 := πΒ·0Β·9( head β¦ π2:Ξ» )
πΒ·0Β·11 := πΒ·0Β·10( tail β¦ π3:Ξ» )
πΒ·0Β·12 := Ξ¦.tuple( length β¦ πΒ·0Β·2 )
πΒ·0Β·13 := πΒ·0Β·12( head β¦ π2:Ξ» )
πΒ·0Β·14 := πΒ·0Β·13( tail β¦ π3:Ξ» )
πΒ·0Β·15 := Ξ¦.bytes( Ο β¦ π1:Ξ» )
πΒ·0Β·16 := Ξ¦.dataized( target β¦ πΒ·0Β·14.length )
πΌ(L_dataized):
π»(Ξ¦.aπ΅0):
π(Ξ¦.aπ΅0):
πΒ·1Β·1 := Ξ¦.tuple( length β¦ πΒ·0Β·15 )
πΒ·1Β·2 := πΒ·1Β·1( head β¦ π2:Ξ» )
πΒ·1Β·3 := πΒ·1Β·2( tail β¦ π3:Ξ» )
πΒ·1Β·4 := Ξ¦.bytes( Ο β¦ π1:Ξ» )
πΏ1Β·1 := π»(π1:Ξ») # π»(ΞΎ.target)
πΒ·1Β·5 := Ξ¦.bytes( Ο β¦ π4:Ξ» ) # π
π(πΒ·1Β·5):
πΒ·1Β·6 := Ξ¦.bytes( Ο β¦ π4:Ξ» )
πΒ·1Β·7 := πΒ·1Β·6 # π(πΒ·1Β·5)
πΒ·0Β·17 := Ξ¦.bytes( Ο β¦ 00-:Ξ )
πΒ·0Β·18 := πΒ·1Β·6.eq( b β¦ πΒ·0Β·17 )
πΌ(L_bytes_eq):
π»(Ξ¦.aπ΅1):
π(Ξ¦.aπ΅1):
πΒ·2Β·1 := Ξ¦.bytes( Ο β¦ π4:Ξ» )
πΏ1Β·2 := π»(π4:Ξ») # π»(ΞΎ.Ο)
π»(Ξ¦.aπ΅2):
π(Ξ¦.aπ΅2):
πΒ·2Β·2 := Ξ¦.bytes( Ο β¦ 00-:Ξ )
πΏΒ·2Β·1 := 00-
πΏ2Β·2 := πΏΒ·2Β·1 # π»(ΞΎ.b)
πΒ·2Β·3 := Ξ¦.bool( if(left, right) β¦ β¦ Ξ» β€ L_fork, Ο β¦ π5:Ξ» β§ ) # π
π(πΒ·2Β·3):
πΒ·2Β·4 := Ξ¦.bool( if(left, right) β¦ β¦ Ξ» β€ L_fork, Ο β¦ π5:Ξ» β§ )
πΒ·2Β·5 := πΒ·2Β·4 # π(πΒ·2Β·3)
πΒ·0Β·19 := Ξ¦.bytes( Ο β¦ --:Ξ )
πΒ·0Β·20 := β¦ Ξ» β€ L_fork, left β¦ β
, right β¦ β
, Ο β¦ π5:Ξ» β§( left β¦ πΒ·0Β·19 )
πΒ·0Β·21 := Ξ¦.tuple( length β¦ πΒ·1Β·4 )
πΒ·0Β·22 := πΒ·0Β·21( head β¦ π2:Ξ» )
πΒ·0Β·23 := πΒ·0Β·22( tail β¦ π3:Ξ» )
πΒ·0Β·24 := Ξ¦.tuple( length β¦ πΒ·1Β·4 )
πΒ·0Β·25 := πΒ·0Β·24( head β¦ π2:Ξ» )
πΒ·0Β·26 := πΒ·0Β·25( tail β¦ π3:Ξ» )
πΒ·0Β·27 := Ξ¦.dataized( target β¦ πΒ·0Β·26.head )
πΌ(L_dataized):
π»(Ξ¦.aπ΅3):
π(Ξ¦.aπ΅3):
πΒ·3Β·1 := Ξ¦.tuple( length β¦ πΒ·1Β·4 )
πΒ·3Β·2 := πΒ·3Β·1( head β¦ π2:Ξ» )
πΒ·3Β·3 := πΒ·3Β·2( tail β¦ π3:Ξ» )
πΏ1Β·3 := π»(π2:Ξ») # π»(ΞΎ.target)
πΒ·3Β·4 := Ξ¦.bytes( Ο β¦ π6:Ξ» ) # π
π(πΒ·3Β·4):
πΒ·3Β·5 := Ξ¦.bytes( Ο β¦ π6:Ξ» )
πΒ·3Β·6 := πΒ·3Β·5 # π(πΒ·3Β·4)
πΒ·0Β·28 := β¦ acc β¦ β
, tup β¦ β
, Ο β¦ Ξ¦.dataized( target β¦ tup.length ).eq( b β¦ πΒ·2Β·2 ).if( acc, Ο.step( acc β¦ acc.concat( b β¦ Ξ¦.dataized( target β¦ tup.head ) ), tup β¦ tup.tail ) ) β§( acc β¦ πΒ·3Β·5 )
πΒ·0Β·29 := Ξ¦.tuple( length β¦ πΒ·1Β·4 )
πΒ·0Β·30 := πΒ·0Β·29( head β¦ π2:Ξ» )
πΒ·0Β·31 := πΒ·0Β·30( tail β¦ π3:Ξ» )
πΒ·0Β·32 := Ξ¦.tuple( length β¦ πΒ·1Β·4 )
πΒ·0Β·33 := πΒ·0Β·32( head β¦ π2:Ξ» )
πΒ·0Β·34 := πΒ·0Β·33( tail β¦ π3:Ξ» )
πΒ·0Β·35 := β¦ acc β¦ β
, tup β¦ β
, Ο β¦ Ξ¦.dataized( target β¦ tup.length ).eq( b β¦ πΒ·2Β·2 ).if( acc, Ο.step( acc β¦ acc.concat( b β¦ Ξ¦.dataized( target β¦ tup.head ) ), tup β¦ tup.tail ) ) β§( acc β¦ πΒ·3Β·5 )
πΒ·0Β·36 := πΒ·0Β·35( tup β¦ πΒ·0Β·34.tail )
πΒ·0Β·37 := β¦ Ξ» β€ L_fork, left β¦ β
, right β¦ β
, Ο β¦ π5:Ξ» β§( left β¦ πΒ·0Β·19 )
πΒ·0Β·38 := β¦ acc β¦ β
, tup β¦ β
, Ο β¦ Ξ¦.dataized( target β¦ tup.length ).eq( b β¦ πΒ·2Β·2 ).if( acc, Ο.step( acc β¦ acc.concat( b β¦ Ξ¦.dataized( target β¦ tup.head ) ), tup β¦ tup.tail ) ) β§( acc β¦ πΒ·3Β·5 )
πΒ·0Β·39 := πΒ·0Β·38( tup β¦ πΒ·0Β·34.tail )
πΒ·0Β·40 := πΒ·0Β·37( right β¦ πΒ·0Β·39 )
πΌ(L_fork):
πΏ1Β·4 := π»(π5:Ξ») # π»(ΞΎ.Ο)
π(Ξ¦.aπ΅5):
πΒ·4Β·1 := Ξ¦.bytes( Ο β¦ --:Ξ )
π1Β·4 := πΒ·4Β·1 # π(ΞΎ.left)
π(Ξ¦.aπ΅6):
deferred(π7) := Ξ¦.joined.step( acc β¦ πΒ·3Β·5, tup β¦ π3:Ξ» )
π2Β·4 := π7:Ξ» # π(ΞΎ.right)
π»(π8:Ξ») == --
π3Β·4 := β¦ Ο β¦ π8:Ξ», eq(b) β¦ L_bytes_eq:Ξ», concat(b) β¦ L_bytes_concat:Ξ» β§ # π1
π4Β·4 := π2Β·4 # π2
π»(π9:Ξ») β { π»(π8:Ξ»), π»(π7:Ξ») }
π5Β·4 := π9:Ξ» # [π3, π4]
πΒ·4Β·2 := π5Β·4 # π
πΒ·4Β·3 := π5Β·4 # π(πΒ·4Β·2)