[ library(asm) | The ECLiPSe Libraries | Reference Manual | Alphabetic Index ]

disasm(+PredSpec, ?WAMCode)

Disassemble an existing predicate PredSpec in the current module to its WAM abstract machine representation WAMCode.
+PredSpec
Atom/Integer.
?WAMCode
Variable or a list of WAM instructions in the right format.

Description

Unifies WAMCode with the WAM instructions representing the abstract machine code for the predicate specified by PredSpec (in Name/Arity form). The WAM code is in the form of a list, with each element representing one WAM instruction. The format of the WAMCode is the same as that used by asm/2,3 and pasm/3 to assemble a predicate. Thus, the WAM code generated by disasm/2,3 can be used to load the predicate into ECLiPSe without having to compile the source Prolog form.

The library asm must be loaded to use diasm/2.

Currently asm/2 cannot disassemble dynamic predicates.

Modules

This predicate is sensitive to its module context (tool predicate, see @/2).

Fail Conditions

Fails if WAMCode is initially instantiated and does not unify with the WAM code generated by asm/1 for the predicate, or if PredSpec is dynamic.

Resatisfiable

No.

Exceptions

(5) type error
PredSpec is not in correct form.
(60) referring to an undefined procedure
PredSpec does not exist in current module.

Examples

   for fruit/1 defined by:

      fruit(orange).

   ?- disasm(fruit / 1, W).
   W = [get_atom(a(1), orange), retd, code_end]



See Also

disasm / 3, asm / 2, asm / 3, pasm / 3, wam / 1