diff --git a/src/stdlib.cpp b/src/stdlib.cpp index 44210f8..ebe1c86 100644 --- a/src/stdlib.cpp +++ b/src/stdlib.cpp @@ -543,8 +543,22 @@ Result stdlib_disassemble(const StackFrame& stack) { auto val = TRY(params.get(0)); - if (!val.is()) return ERROR(TypeMismatch); - auto disassembled = Value(TRY(val.to()->disassemble())); + Value disassembled; + + if (val.is()) { + disassembled = Value(TRY(val.to()->disassemble())); + } else if (val.is()) { + auto frame = TRY(val.to()->frame()); + auto fun = TRY(frame.fun()); + if (!fun.is()) return ERROR(TypeMismatch); + disassembled = Value(TRY(fun.to()->disassemble())); + } else if (val.is()) { + auto fun = TRY(val.to()->fun()); + if (!fun.is()) return ERROR(TypeMismatch); + disassembled = Value(TRY(fun.to()->disassemble())); + } else { + return ERROR(TypeMismatch); + } auto res = TRY(stack.set(0, disassembled));