Merge pull request #723 from YosysHQ/gatecat/fix-722

gui: Don't destroy context when loading JSON
This commit is contained in:
gatecat 2021-06-08 13:08:49 +01:00 committed by GitHub
commit 5e18bb1735
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 11 deletions

View File

@ -473,19 +473,24 @@ int CommandHandler::exec()
}
}
std::unique_ptr<Context> CommandHandler::load_json(std::string filename)
void CommandHandler::load_json(Context *ctx, std::string filename)
{
dict<std::string, Property> values;
std::unique_ptr<Context> ctx = createContext(values);
setupContext(ctx.get());
setupArchContext(ctx.get());
ctx->cells.clear();
ctx->nets.clear();
ctx->net_aliases.clear();
ctx->ports.clear();
ctx->hierarchy.clear();
ctx->settings.erase(ctx->id("pack"));
ctx->settings.erase(ctx->id("place"));
ctx->settings.erase(ctx->id("route"));
setupContext(ctx);
setupArchContext(ctx);
{
std::ifstream f(filename);
if (!parse_json(f, filename, ctx.get()))
if (!parse_json(f, filename, ctx))
log_error("Loading design failed.\n");
}
customAfterLoad(ctx.get());
return ctx;
}
void CommandHandler::clear() { vm.clear(); }

View File

@ -37,7 +37,7 @@ class CommandHandler
virtual ~CommandHandler(){};
int exec();
std::unique_ptr<Context> load_json(std::string filename);
void load_json(Context *ctx, std::string filename);
void clear();
protected:

View File

@ -30,6 +30,7 @@
#include <fstream>
#include "designwidget.h"
#include "fpgaviewwidget.h"
#include "json_frontend.h"
#include "jsonwrite.h"
#include "log.h"
#include "mainwindow.h"
@ -364,8 +365,7 @@ void BaseMainWindow::open_json()
QString fileName = QFileDialog::getOpenFileName(this, QString("Open JSON"), QString(), QString("*.json"));
if (!fileName.isEmpty()) {
disableActions();
ctx = handler->load_json(fileName.toStdString());
Q_EMIT contextChanged(ctx.get());
handler->load_json(ctx.get(), fileName.toStdString());
Q_EMIT updateTreeView();
log("Loading design successful.\n");
updateActions();