From 373ef6ca85e7f1bf5d7ef58f2fa60d43d5955f86 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sun, 9 Apr 2023 10:05:01 +0200 Subject: [PATCH] Add local variables to .dbj files --- oscar64/Compiler.cpp | 56 +++++++++++++++++++++++++++++++--- oscar64/InterCodeGenerator.cpp | 2 ++ 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/oscar64/Compiler.cpp b/oscar64/Compiler.cpp index f3e0fb5..15a523f 100644 --- a/oscar64/Compiler.cpp +++ b/oscar64/Compiler.cpp @@ -997,11 +997,14 @@ bool Compiler::WriteDbjFile(const char* filename) InterVariable* v(mInterCodeModule->mGlobalVars[i]); if (v->mLinkerObject && v->mIdent && v->mDeclaration) { - if (!first) - fprintf(file, ",\n"); - first = false; + if (v->mLinkerObject->mSection->mType != LST_STATIC_STACK && v->mLinkerObject->mFlags & LOBJF_PLACED) + { + if (!first) + fprintf(file, ",\n"); + first = false; - fprintf(file, "\t\t{\"name\": \"%s\", \"start\": %d, \"end\": %d, \"typeid\": %d}", v->mIdent->mString, v->mLinkerObject->mAddress, v->mLinkerObject->mAddress + v->mLinkerObject->mSize, types.IndexOrPush(v->mDeclaration->mBase)); + fprintf(file, "\t\t{\"name\": \"%s\", \"start\": %d, \"end\": %d, \"typeid\": %d}", v->mIdent->mString, v->mLinkerObject->mAddress, v->mLinkerObject->mAddress + v->mLinkerObject->mSize, types.IndexOrPush(v->mDeclaration->mBase)); + } } } fprintf(file, "\t],\n"); @@ -1037,7 +1040,50 @@ bool Compiler::WriteDbjFile(const char* filename) lo->mCodeLocations[j].mLocation.mLine); } - fprintf(file, "]}"); + fprintf(file, "], \n\t\t\t\"variables\":[\n"); + + bool vfirst = true; + for (int i = 0; i < p->mParamVars.Size(); i++) + { + InterVariable* v(p->mParamVars[i]); + if (v && v->mIdent) + { + if (v->mLinkerObject) + { + } + else + { + if (!vfirst) + fprintf(file, ",\n"); + vfirst = false; + + fprintf(file, "\t\t\t{\"name\": \"%s\", \"start\": %d, \"end\": %d, \"typeid\": %d}", v->mIdent->mString, i + BC_REG_FPARAMS, i + BC_REG_FPARAMS + v->mSize, types.IndexOrPush(v->mDeclaration->mBase)); + } + } + } + for (int i = 0; i < p->mLocalVars.Size(); i++) + { + InterVariable* v(p->mLocalVars[i]); + if (v && v->mIdent) + { + if (v->mLinkerObject) + { + if (v->mLinkerObject->mFlags & LOBJF_PLACED) + { + if (!vfirst) + fprintf(file, ",\n"); + vfirst = false; + + fprintf(file, "\t\t{\"name\": \"%s\", \"start\": %d, \"end\": %d, \"typeid\": %d}", v->mIdent->mString, v->mLinkerObject->mAddress, v->mLinkerObject->mAddress + v->mLinkerObject->mSize, types.IndexOrPush(v->mDeclaration->mBase)); + } + } + else + { + } + } + } + + fprintf(file, "]}\n"); } } fprintf(file, "\t],\n"); diff --git a/oscar64/InterCodeGenerator.cpp b/oscar64/InterCodeGenerator.cpp index 479d1c7..da136d6 100644 --- a/oscar64/InterCodeGenerator.cpp +++ b/oscar64/InterCodeGenerator.cpp @@ -279,6 +279,7 @@ void InterCodeGenerator::InitParameter(InterCodeProcedure* proc, Declaration* de { proc->mParamVars[index] = new InterVariable(); proc->mParamVars[index]->mIdent = dec->mIdent; + proc->mParamVars[index]->mDeclaration = dec; } } @@ -288,6 +289,7 @@ void InterCodeGenerator::InitLocalVariable(InterCodeProcedure* proc, Declaration { proc->mLocalVars[index] = new InterVariable(); proc->mLocalVars[index]->mIdent = dec->mIdent; + proc->mLocalVars[index]->mDeclaration = dec; } } static const Ident* StructIdent(const Ident* base, const Ident* item)