Fix PR 12948.
authorBen Pfaff <blp@gnu.org>
Thu, 5 May 2005 06:59:54 +0000 (06:59 +0000)
committerBen Pfaff <blp@gnu.org>
Thu, 5 May 2005 06:59:54 +0000 (06:59 +0000)
src/ChangeLog
src/dictionary.c
src/get.c
tests/ChangeLog
tests/Makefile.am

index 57d7b856fa13e161a245ae7e3e68d990e74b04a8..932fba3ecf10350be6ceaf7636b0a5c0636c478e 100644 (file)
@@ -1,3 +1,17 @@
+Wed May  4 23:54:02 2005  Ben Pfaff  <blp@gnu.org>
+
+       Fix PR 12948.  See also new test in
+       tests/bugs/match-file-scratch.sh.
+       
+       * get.c: (mtf_merge_dictionary) Don't compact dictionary because
+       that deletes scratch variables that someone else might be using,
+       and because we can't reassign our sources' value indexes.
+       Instead, simply don't copy scratch variables into the master
+       dictionary.
+
+       * dictionary.c: (dict_compact_values) Delete variables from the
+       dictionary passed in, not from default_dict (!).
+
 Tue May  3 22:25:17 2005  Ben Pfaff  <blp@gnu.org>
 
        Improve hash.c comments, error-checking.
index 43b4f7791728a8dafd14a6df4a9fd8d677ec0984..d4ff2256e541dbfcf0738b094a2538e7c2e7ce18 100644 (file)
@@ -450,7 +450,6 @@ dict_delete_var (struct dictionary *d, struct variable *v)
   assert (d != NULL);
   assert (v != NULL);
   assert (dict_contains_var (d, v));
-  assert (d->var[v->index] == v);
 
   /* Delete aux data. */
   var_clear_aux (v);
@@ -789,7 +788,7 @@ dict_compact_values (struct dictionary *d)
           i++;
         }
       else
-        dict_delete_var (default_dict, v);
+        dict_delete_var (d, v);
     }
 }
 
index 0073383b0df4c9509bdd7320d90778672c0a80d4..5ec84482d05c792d5588ea9e19b0453102bb74cd 100644 (file)
--- a/src/get.c
+++ b/src/get.c
@@ -957,6 +957,8 @@ cmd_match_files (void)
         }
     }
 
+  /* Set up mapping from each file's variables to master
+     variables. */
   for (iter = mtf.head; iter != NULL; iter = iter->next)
     {
       struct dictionary *d = iter->dict;
@@ -971,6 +973,7 @@ cmd_match_files (void)
         }
     }
 
+  /* Add IN variables to master dictionary. */
   for (iter = mtf.head; iter != NULL; iter = iter->next) 
     if (iter->in_name != NULL)
       {
@@ -1398,13 +1401,14 @@ mtf_merge_dictionary (struct dictionary *const m, struct mtf_file *f)
         }
     }
   
-  dict_compact_values (d);
-
   for (i = 0; i < dict_get_var_cnt (d); i++)
     {
       struct variable *dv = dict_get_var (d, i);
       struct variable *mv = dict_lookup_var (m, dv->name);
 
+      if (dict_class_from_id (dv->name) == DC_SCRATCH)
+        continue;
+
       if (mv != NULL)
         {
           if (mv->width != dv->width) 
index 836eda2e3af928bc692b8764fe7ec70b94f606e2..a45dfd3fd28419c1cdc40ff05a9b175ed6b1f10c 100644 (file)
@@ -1,3 +1,9 @@
+Wed May  4 23:50:02 2005  Ben Pfaff  <blp@gnu.org>
+
+       * bugs/match-files-scratch.sh: New test for PR 12948.
+
+       * Makefile.am: (TESTS) Add bugs/match-files-scratch.sh.
+
 Sun May  1 23:18:37 2005  Ben Pfaff  <blp@gnu.org>
 
        Most tests: changed capitalization of variable names in
index f2cabf49de6f3a3d7f5290268f102d383b48494c..d5ffed1f9261441315c24ec930982266b355474f 100644 (file)
@@ -65,6 +65,7 @@ TESTS = \
        bugs/html-frequency.sh \
        bugs/if_crash.sh \
        bugs/lag_crash.sh \
+       bugs/match-files-scratch.sh \
        bugs/multipass.sh \
        bugs/random.sh \
        bugs/t-test-with-temp.sh \