BaseXdb / basex

BaseX Main Repository.
http://basex.org
BSD 3-Clause "New" or "Revised" License
677 stars 268 forks source link

Recursive function items: Typing #2314

Open ChristianGruen opened 1 month ago

ChristianGruen commented 1 month ago

Caused at runtime by tail-call optimizations:

let $f := fn($p, $self) as xs:integer {
  if((1 to 10000)[$p + 1] <= 5000) then $self($p + 1, $self) else $p
}
return $f(1, $f)

Expected: 5000 Result: [XPTY0004] Cannot convert empty-sequence() to xs:integer: ().

ChristianGruen commented 1 month ago

Possibly related:

let $a := %basex:inline(0) fn($f) as element() { $f() }
return $a(fn() { <xml/> })

Expected: <xml/> Returned: [XPTY0004] Cannot convert empty-sequence() to element(): ().

→ This one has been fixed by a recent commit.