aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2021-06-08 13:08:49 +0100
committerGitHub <noreply@github.com>2021-06-08 13:08:49 +0100
commit5e18bb173575557eac49e77b9010c90f1a8ca62c (patch)
tree7bdd54bdd72a3bab18dc9a8c668763badb70f99d
parent8fa3088057633a431c342fb03d650ca06a92fb35 (diff)
parent875004d300eb4b85e13c026378e39b31b6922f93 (diff)
downloadnextpnr-5e18bb173575557eac49e77b9010c90f1a8ca62c.tar.gz
nextpnr-5e18bb173575557eac49e77b9010c90f1a8ca62c.tar.bz2
nextpnr-5e18bb173575557eac49e77b9010c90f1a8ca62c.zip
Merge pull request #723 from YosysHQ/gatecat/fix-722
gui: Don't destroy context when loading JSON
-rw-r--r--common/command.cc21
-rw-r--r--common/command.h2
-rw-r--r--gui/basewindow.cc4
3 files changed, 16 insertions, 11 deletions
diff --git a/common/command.cc b/common/command.cc
index 27e59260..3341b521 100644
--- a/common/command.cc
+++ b/common/command.cc
@@ -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(); }
diff --git a/common/command.h b/common/command.h
index ba606ea2..c82bcd3a 100644
--- a/common/command.h
+++ b/common/command.h
@@ -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:
diff --git a/gui/basewindow.cc b/gui/basewindow.cc
index 08cbafe4..50eb2e52 100644
--- a/gui/basewindow.cc
+++ b/gui/basewindow.cc
@@ -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();