cdebug: added cosmoG_disassemble

for now cosmo will disassemble each script before running
This commit is contained in:
CPunch 2023-12-29 18:17:52 -06:00
parent cd37cfdae5
commit 5cd3049d66
3 changed files with 9 additions and 0 deletions

1
main.c
View File

@ -50,6 +50,7 @@ static bool interpret(CState *state, const char *script, const char *mod)
// cosmoV_compileString pushes the result onto the stack (COBJ_ERROR or COBJ_CLOSURE) // cosmoV_compileString pushes the result onto the stack (COBJ_ERROR or COBJ_CLOSURE)
if (cosmoV_compileString(state, script, mod)) { if (cosmoV_compileString(state, script, mod)) {
cosmoG_disassemble(cosmoV_readClosure(*cosmoV_getTop(state, 0)));
if (!cosmoV_pcall(state, 0, 1)) { if (!cosmoV_pcall(state, 0, 1)) {
cosmoV_printBacktrace(state, cosmoV_readError(*cosmoV_pop(state))); cosmoV_printBacktrace(state, cosmoV_readError(*cosmoV_pop(state)));
return false; return false;

View File

@ -223,3 +223,8 @@ int disasmInstr(CChunk *chunk, int offset, int indent)
return 1; return 1;
} }
void cosmoG_disassemble(CObjClosure *closure)
{
disasmChunk(&closure->function->chunk, closure->function->name == NULL ? UNNAMEDCHUNK : closure->function->name->str, 0);
}

View File

@ -2,10 +2,13 @@
#define CDEBUG_H #define CDEBUG_H
#include "cchunk.h" #include "cchunk.h"
#include "cobj.h"
COSMO_API void disasmChunk(CChunk *chunk, const char *name, int indent); COSMO_API void disasmChunk(CChunk *chunk, const char *name, int indent);
COSMO_API int disasmInstr(CChunk *chunk, int offset, int indent); COSMO_API int disasmInstr(CChunk *chunk, int offset, int indent);
void printIndent(int indent); void printIndent(int indent);
COSMO_API void cosmoG_disassemble(CObjClosure *closure);
#endif #endif