REBOL Technologies

A Guru-level Bug in Pseudo-datatype Reflective Construction

Carl Sassenrath, CTO
REBOL Technologies
15-Nov-2005 19:27 GMT

Article #0223
Main page || Index || Prior Article [0222] || Next Article [0224] || Post Comments || Send feedback

REBOL experts will delight in this bug recently found by guru Gabriele Santilli. (Non experts are free to skip this article. ;)

Since this article is for experts only, the problem can be concisely summarized as: construction of reflected functions may not be equivalent in some cases. This is due to a bug in pseudo-datatypes (often called just pseudo-types).

Gabriele found it when he was building an RPC mechanism on top of REBOL/Services. A bug popped up in a simple remote construction of the append function. Upon removing the RPC and REBOL/services environment and reducing it down to the minimal expression, this error was found in a new function apd that should be identical to append:

>> apd: func load mold/all third :append second :append
>> apd [1 2 3] 4
** Script Error: apd expected series argument of type: series port

In other words, a reconstructed version of append failed when it was expressed as a reflected string. You can see the problem concisely if you use the literal datatype directly:

>> do func [b [#[datatype! series!]]] [] ""
** Script Error: ?function? expected b argument of type: series

This is caused by the fact that the construct function (used within load) improperly made the pseudo-datatype.

This bug has been fixed in the next release. A good one, Gabriele! Also, I apologize if anyone found this bug earlier and reported it. If so, we missed it.

Post Comments

Updated 18-Nov-2024   -   Copyright Carl Sassenrath   -   WWW.REBOL.COM   -   Edit   -   Blogger Source Code