[syn] Fix behavior of parsing script in a few error cases

Signed-off-by: Michael Schaffner <msf@google.com>
diff --git a/hw/syn/tools/dc/parse-syn-report.py b/hw/syn/tools/dc/parse-syn-report.py
index 2141fff..19fe593 100755
--- a/hw/syn/tools/dc/parse-syn-report.py
+++ b/hw/syn/tools/dc/parse-syn-report.py
@@ -98,7 +98,6 @@
     This extracts detailed area information from the report.
     Area will be reported in gate equivalents.
     """
-    # TODO: covert to gate equivalents
     patterns = [("comb", r"^Combinational area: \s* (\d+\.\d+)"),
                 ("buf", r"^Buf/Inv area: \s* (\d+\.\d+)"),
                 ("reg", r"^Noncombinational area: \s* (\d+\.\d+)"),
@@ -106,7 +105,11 @@
                 ("total", r"^Total cell area: \s* (\d+\.\d+)")]
 
     nums, errs = _match_fp_number(full_file, patterns)
-    results[key] = nums
+
+    # only overwrite default values if a match has been returned
+    for num_key in nums.keys():
+        results[key][num_key] = nums[num_key]
+
     results['messages']['flow_errors'] += errs
 
     # aggregate one level of sub-modules
@@ -145,20 +148,20 @@
         results["messages"]["flow_errors"] += ["ValueError: %s" % err]
 
     # cross check whether the above accounting is correct
-    if _rel_err(comb_check, results["area"]["comb"]) > CROSSCHECK_REL_TOL:
+    if _rel_err(comb_check, results[key]["comb"]) > CROSSCHECK_REL_TOL:
         results["messages"]["flow_errors"] += [
             "Reporting error: comb_check (%e) != (%e)" %
-            (comb_check, results["area"]["comb"])
+            (comb_check, results[key]["comb"])
         ]
-    if _rel_err(reg_check, results["area"]["reg"]) > CROSSCHECK_REL_TOL:
+    if _rel_err(reg_check, results[key]["reg"]) > CROSSCHECK_REL_TOL:
         results["messages"]["flow_errors"] += [
             "Reporting error: reg_check (%e) != (%e)" %
-            (reg_check, results["area"]["reg"])
+            (reg_check, results[key]["reg"])
         ]
-    if _rel_err(macro_check, results["area"]["macro"]) > CROSSCHECK_REL_TOL:
+    if _rel_err(macro_check, results[key]["macro"]) > CROSSCHECK_REL_TOL:
         results["messages"]["flow_errors"] += [
             "Reporting error: macro_check (%e) != (%e)" %
-            (macro_check, results["area"]["macro"])
+            (macro_check, results[key]["macro"])
         ]
 
     return results
@@ -295,7 +298,11 @@
                  FP_NUMBER + r"\s*(" + FP_NUMBER + r")")]
 
     nums, errs = _match_fp_number(full_file, patterns)
-    results[key] = nums
+
+    # only overwrite default values if a match has been returned
+    for num_key in nums.keys():
+        results[key][num_key] = nums[num_key]
+
     results['messages']['flow_errors'] += errs
 
     return results