Fixed some bugs related to empty parentheses
[pspp] / src / language / stats / regression.c
index 51502e5fe03f1515f00d487012543f0cf99234d8..66a5abaf7c8aa7011d071bc5a9837c06904451e5 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2005, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2009, 2010, 2011, 2012, 2013, 2014, 2016 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -225,8 +225,7 @@ cmd_regression (struct lexer *lexer, struct dataset *ds)
 
       if (lex_match_id (lexer, "DEPENDENT"))
         {
-          if (!lex_force_match (lexer, T_EQUALS))
-            goto error;
+          lex_match (lexer, T_EQUALS);
 
          free (regression.dep_vars);
          regression.n_dep_vars = 0;
@@ -282,7 +281,8 @@ cmd_regression (struct lexer *lexer, struct dataset *ds)
                 {
                  statistics |= STATS_CI;
 
-                 if (lex_match (lexer, T_LPAREN))
+                 if (lex_match (lexer, T_LPAREN) &&
+                     lex_force_num (lexer))
                    {
                      regression.ci = lex_number (lexer) / 100.0;
                      lex_get (lexer);
@@ -349,8 +349,7 @@ cmd_regression (struct lexer *lexer, struct dataset *ds)
 
       if (regression.resid)
         {
-          workspace.extras ++;
-          workspace.res_idx = 0;
+          workspace.res_idx = workspace.extras ++;
           workspace.residvars = xcalloc (regression.n_dep_vars, sizeof (*workspace.residvars));
 
           for (i = 0; i < regression.n_dep_vars; ++i)
@@ -362,8 +361,7 @@ cmd_regression (struct lexer *lexer, struct dataset *ds)
 
       if (regression.pred)
         {
-          workspace.extras ++;
-          workspace.pred_idx = 1;
+          workspace.pred_idx = workspace.extras ++;
           workspace.predvars = xcalloc (regression.n_dep_vars, sizeof (*workspace.predvars));
 
           for (i = 0; i < regression.n_dep_vars; ++i)
@@ -377,6 +375,10 @@ cmd_regression (struct lexer *lexer, struct dataset *ds)
         msg (SW, _("REGRESSION with SAVE ignores TEMPORARY.  "
                    "Temporary transformations will be made permanent."));
 
+      if (dict_get_filter (dict))
+        msg (SW, _("REGRESSION with SAVE ignores FILTER.  "
+                   "All cases will be processed."));
+
       workspace.writer = autopaging_writer_create (proto);
       caseproto_unref (proto);
     }
@@ -706,7 +708,7 @@ run_regression (const struct regression *cmd,
       
       for (; (c = casereader_read (r)) != NULL; case_unref (c))
         {
-          struct ccase *outc = case_clone (c);
+          struct ccase *outc = case_create (casewriter_get_proto (ws->writer));
           for (k = 0; k < cmd->n_dep_vars; k++)
             {
               const struct variable **vars = xnmalloc (cmd->n_vars, sizeof (*vars));