kernel: add design -delete option
authorEddie Hung <eddie@fpgeh.com>
Tue, 14 Apr 2020 17:33:55 +0000 (10:33 -0700)
committerEddie Hung <eddie@fpgeh.com>
Thu, 16 Apr 2020 15:05:18 +0000 (08:05 -0700)
CHANGELOG
passes/cmds/design.cc

index 5fd82fccf0b3b22baf7a150572ce59f9e2fc7212..f9e420a093afe35520d85437471efb5b00411bdb 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -64,6 +64,7 @@ Yosys 0.9 .. Yosys 0.9-dev
     - Added "opt_lut_ins" pass
     - Added "logger" pass
     - Removed "dffsr2dff" (use opt_rmdff instead)
+    - Added "design -delete"
 
 Yosys 0.8 .. Yosys 0.9
 ----------------------
index 4612760cc9d3528e02365447e4d7d7576caf5722..3b97819e3b86743d1101ac3d08ed748c0df1ac17 100644 (file)
@@ -99,6 +99,11 @@ struct DesignPass : public Pass {
                log("The Verilog front-end remembers defined macros and top-level declarations\n");
                log("between calls to 'read_verilog'. This command resets this memory.\n");
                log("\n");
+               log("    design -delete <name>\n");
+               log("\n");
+               log("Delete the design previously saved under the given name.\n");
+               log("\n");
+
        }
        void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
        {
@@ -110,7 +115,7 @@ struct DesignPass : public Pass {
                bool pop_mode = false;
                bool import_mode = false;
                RTLIL::Design *copy_from_design = NULL, *copy_to_design = NULL;
-               std::string save_name, load_name, as_name;
+               std::string save_name, load_name, as_name, delete_name;
                std::vector<RTLIL::Module*> copy_src_modules;
 
                size_t argidx;
@@ -190,6 +195,13 @@ struct DesignPass : public Pass {
                                as_name = args[++argidx];
                                continue;
                        }
+                       if (!got_mode && args[argidx] == "-delete" && argidx+1 < args.size()) {
+                               got_mode = true;
+                               delete_name = args[++argidx];
+                               if (saved_designs.count(delete_name) == 0)
+                                       log_cmd_error("No saved design '%s' found!\n", delete_name.c_str());
+                               continue;
+                       }
                        break;
                }
 
@@ -379,6 +391,14 @@ struct DesignPass : public Pass {
                                pushed_designs.pop_back();
                        }
                }
+
+               if (!delete_name.empty())
+               {
+                       auto it = saved_designs.find(delete_name);
+                       log_assert(it != saved_designs.end());
+                       delete it->second;
+                       saved_designs.erase(it);
+               }
        }
 } DesignPass;