Cleanup parse_json_file API, some other cleanups
Signed-off-by: Clifford Wolf <clifford@clifford.at>
This commit is contained in:
parent
417e67938c
commit
4fefdbd57c
@ -52,8 +52,7 @@ void parse_json_shim(std::string filename, Context &d)
|
|||||||
std::ifstream inf(filename);
|
std::ifstream inf(filename);
|
||||||
if (!inf)
|
if (!inf)
|
||||||
throw std::runtime_error("failed to open file " + filename);
|
throw std::runtime_error("failed to open file " + filename);
|
||||||
std::istream *ifp = &inf;
|
parse_json_file(inf, filename, &d);
|
||||||
parse_json_file(ifp, filename, &d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new Chip and load design from json file
|
// Create a new Chip and load design from json file
|
||||||
|
@ -102,7 +102,7 @@ PipId Arch::getPipByName(IdString name) const { return PipId(); }
|
|||||||
|
|
||||||
IdString Arch::getPipName(PipId pip) const { return IdString(); }
|
IdString Arch::getPipName(PipId pip) const { return IdString(); }
|
||||||
|
|
||||||
uint32_t Arch::getWireChecksum(WireId wire) const { return 0; }
|
uint32_t Arch::getPipChecksum(PipId wire) const { return 0; }
|
||||||
|
|
||||||
void Arch::bindPip(PipId pip, IdString net) {}
|
void Arch::bindPip(PipId pip, IdString net) {}
|
||||||
|
|
||||||
|
@ -795,39 +795,26 @@ void json_import(Context *ctx, string modname, JsonNode *node)
|
|||||||
}
|
}
|
||||||
check_all_nets_driven(ctx);
|
check_all_nets_driven(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct JsonFrontend
|
|
||||||
{
|
|
||||||
// JsonFrontend() : Frontend("json", "read JSON file") { }
|
|
||||||
JsonFrontend(void) {}
|
|
||||||
virtual void help() {}
|
|
||||||
virtual void execute(std::istream *&f, std::string &filename, Context *ctx)
|
|
||||||
{
|
|
||||||
// log_header(ctx, "Executing JSON frontend.\n");
|
|
||||||
|
|
||||||
JsonNode root(*f);
|
|
||||||
|
|
||||||
if (root.type != 'D')
|
|
||||||
log_error("JSON root node is not a dictionary.\n");
|
|
||||||
|
|
||||||
if (root.data_dict.count("modules") != 0) {
|
|
||||||
JsonNode *modules = root.data_dict.at("modules");
|
|
||||||
|
|
||||||
if (modules->type != 'D')
|
|
||||||
log_error("JSON modules node is not a dictionary.\n");
|
|
||||||
|
|
||||||
for (auto &it : modules->data_dict)
|
|
||||||
json_import(ctx, it.first, it.second);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}; // JsonFrontend;
|
|
||||||
|
|
||||||
}; // End Namespace JsonParser
|
}; // End Namespace JsonParser
|
||||||
|
|
||||||
void parse_json_file(std::istream *&f, std::string &filename, Context *ctx)
|
void parse_json_file(std::istream &f, std::string &filename, Context *ctx)
|
||||||
{
|
{
|
||||||
auto *parser = new JsonParser::JsonFrontend();
|
using namespace JsonParser;
|
||||||
parser->execute(f, filename, ctx);
|
|
||||||
|
JsonNode root(f);
|
||||||
|
|
||||||
|
if (root.type != 'D')
|
||||||
|
log_error("JSON root node is not a dictionary.\n");
|
||||||
|
|
||||||
|
if (root.data_dict.count("modules") != 0) {
|
||||||
|
JsonNode *modules = root.data_dict.at("modules");
|
||||||
|
|
||||||
|
if (modules->type != 'D')
|
||||||
|
log_error("JSON modules node is not a dictionary.\n");
|
||||||
|
|
||||||
|
for (auto &it : modules->data_dict)
|
||||||
|
json_import(ctx, it.first, it.second);
|
||||||
|
}
|
||||||
|
|
||||||
log_info("Checksum: 0x%08x\n", ctx->checksum());
|
log_info("Checksum: 0x%08x\n", ctx->checksum());
|
||||||
log_break();
|
log_break();
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
NEXTPNR_NAMESPACE_BEGIN
|
NEXTPNR_NAMESPACE_BEGIN
|
||||||
|
|
||||||
extern void parse_json_file(std::istream *&, std::string &, Context *);
|
extern void parse_json_file(std::istream &, std::string &, Context *);
|
||||||
|
|
||||||
NEXTPNR_NAMESPACE_END
|
NEXTPNR_NAMESPACE_END
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ Worker::Worker(Context *_ctx) : ctx(_ctx)
|
|||||||
void Worker::parsejson(const std::string &filename)
|
void Worker::parsejson(const std::string &filename)
|
||||||
{
|
{
|
||||||
std::string fn = filename;
|
std::string fn = filename;
|
||||||
std::istream *f = new std::ifstream(fn);
|
std::ifstream f(fn);
|
||||||
|
|
||||||
parse_json_file(f, fn, ctx);
|
parse_json_file(f, fn, ctx);
|
||||||
if (!pack_design(ctx))
|
if (!pack_design(ctx))
|
||||||
|
@ -283,7 +283,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (vm.count("json")) {
|
if (vm.count("json")) {
|
||||||
std::string filename = vm["json"].as<std::string>();
|
std::string filename = vm["json"].as<std::string>();
|
||||||
std::istream *f = new std::ifstream(filename);
|
std::ifstream f(filename);
|
||||||
|
|
||||||
parse_json_file(f, filename, &ctx);
|
parse_json_file(f, filename, &ctx);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user