pspp-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pspp-cvs] pspp/src/language/expressions ChangeLog generat...


From: Ben Pfaff
Subject: [Pspp-cvs] pspp/src/language/expressions ChangeLog generat...
Date: Mon, 01 May 2006 22:14:53 +0000

CVSROOT:        /cvsroot/pspp
Module name:    pspp
Branch:         
Changes by:     Ben Pfaff <address@hidden>      06/05/01 22:14:53

Modified files:
        src/language/expressions: ChangeLog generate.pl operations.def 
                                  parse.c parse.inc.pl private.h 

Log message:
        Prohibit LAG following TEMPORARY.  This both matches SPSS behavior and
        fixes a bug: we saved the cases for LAG before TEMPORARY but allowed
        access to variables created afterward anyhow (which could cause a
        segfault).

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/language/expressions/ChangeLog.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/language/expressions/generate.pl.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/language/expressions/operations.def.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/language/expressions/parse.c.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/language/expressions/parse.inc.pl.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/language/expressions/private.h.diff?tr1=1.2&tr2=1.3&r1=text&r2=text

Patches:
Index: pspp/src/language/expressions/ChangeLog
diff -u pspp/src/language/expressions/ChangeLog:1.2 
pspp/src/language/expressions/ChangeLog:1.3
--- pspp/src/language/expressions/ChangeLog:1.2 Mon Apr 24 05:10:00 2006
+++ pspp/src/language/expressions/ChangeLog     Mon May  1 22:14:53 2006
@@ -1,3 +1,21 @@
+Mon May  1 15:11:48 2006  Ben Pfaff  <address@hidden>
+
+       Prohibit LAG following TEMPORARY.  This both matches SPSS behavior
+       and fixes a bug: we saved the cases for LAG before TEMPORARY but
+       allowed access to variables created afterward anyhow (which could
+       cause a segfault).
+
+       * generate.pl: Parse "perm_only" flag on operations.
+
+       * operations.def: Add "perm_only" flag to LAG operations.
+
+       * parse.c: Disallow OPF_PERM_ONLY operations after TEMPORARY.
+
+       * parse.inc.pl: Output OPF_PERM_ONLY flag for "perm_only"
+       operations.
+
+       * private.h: Add OPF_PERM_ONLY flag.
+
 Sun Apr 23 22:06:45 2006  Ben Pfaff  <address@hidden>
 
        Continue reforming error message support.  In this phase, get rid
Index: pspp/src/language/expressions/generate.pl
diff -u pspp/src/language/expressions/generate.pl:1.1 
pspp/src/language/expressions/generate.pl:1.2
--- pspp/src/language/expressions/generate.pl:1.1       Sat Mar  4 01:11:57 2006
+++ pspp/src/language/expressions/generate.pl   Mon May  1 22:14:53 2006
@@ -233,6 +233,7 @@
        $op{OPTIMIZABLE} = 1;
        $op{UNIMPLEMENTED} = 0;
        $op{EXTENSION} = 0;
+       $op{PERM_ONLY} = 0;
        for (;;) {
            if (match ('extension')) {
                $op{EXTENSION} = 1;
@@ -240,6 +241,8 @@
                $op{OPTIMIZABLE} = 0;
            } elsif (match ('absorb_miss')) {
                $op{ABSORB_MISS} = 1;
+           } elsif (match ('perm_only')) {
+               $op{PERM_ONLY} = 1;
            } else {
                last;
            }
Index: pspp/src/language/expressions/operations.def
diff -u pspp/src/language/expressions/operations.def:1.1 
pspp/src/language/expressions/operations.def:1.2
--- pspp/src/language/expressions/operations.def:1.1    Sat Mar  4 01:11:57 2006
+++ pspp/src/language/expressions/operations.def        Mon May  1 22:14:53 2006
@@ -956,7 +956,7 @@
   return s;
 }
 
-no_opt function LAG (num_var v, pos_int n_before)
+no_opt perm_only function LAG (num_var v, pos_int n_before)
 {
   struct ccase *c = lagged_case (n_before);
   if (c != NULL)
@@ -968,7 +968,7 @@
     return SYSMIS;
 }
 
-no_opt function LAG (num_var v)
+no_opt perm_only function LAG (num_var v)
 {
   struct ccase *c = lagged_case (1);
   if (c != NULL)
@@ -980,7 +980,7 @@
     return SYSMIS;
 }
 
-no_opt string function LAG (str_var v, pos_int n_before)
+no_opt perm_only string function LAG (str_var v, pos_int n_before)
      expression e;
 {
   struct ccase *c = lagged_case (n_before);
@@ -990,7 +990,7 @@
     return empty_string;
 }
 
-no_opt string function LAG (str_var v)
+no_opt perm_only string function LAG (str_var v)
      expression e;
 {
   struct ccase *c = lagged_case (1);
Index: pspp/src/language/expressions/parse.c
diff -u pspp/src/language/expressions/parse.c:1.3 
pspp/src/language/expressions/parse.c:1.4
--- pspp/src/language/expressions/parse.c:1.3   Thu Apr 27 02:42:01 2006
+++ pspp/src/language/expressions/parse.c       Mon May  1 22:14:53 2006
@@ -1222,6 +1222,11 @@
       msg (SE, _("%s is not yet implemented."), f->prototype);
       goto fail;
     }
+  if ((f->flags & OPF_PERM_ONLY) && in_temporary_transformations ()) 
+    {
+      msg (SE, _("%s may not appear after TEMPORARY."), f->prototype);
+      goto fail;
+    }
   
   n = expr_allocate_composite (e, f - operations, args, arg_cnt);
   n->composite.min_valid = min_valid != -1 ? min_valid : f->array_min_elems; 
Index: pspp/src/language/expressions/parse.inc.pl
diff -u pspp/src/language/expressions/parse.inc.pl:1.1 
pspp/src/language/expressions/parse.inc.pl:1.2
--- pspp/src/language/expressions/parse.inc.pl:1.1      Sat Mar  4 01:11:57 2006
+++ pspp/src/language/expressions/parse.inc.pl  Mon May  1 22:14:53 2006
@@ -55,6 +55,7 @@
        push (@flags, "OPF_NONOPTIMIZABLE") if !$op->{OPTIMIZABLE};
        push (@flags, "OPF_EXTENSION") if $op->{EXTENSION};
        push (@flags, "OPF_UNIMPLEMENTED") if $op->{UNIMPLEMENTED};
+       push (@flags, "OPF_PERM_ONLY") if $op->{PERM_ONLY};
        push (@members, @flags ? join (' | ', @flags) : 0);
 
        push (@members, "OP_$op->{RETURNS}{NAME}");
Index: pspp/src/language/expressions/private.h
diff -u pspp/src/language/expressions/private.h:1.2 
pspp/src/language/expressions/private.h:1.3
--- pspp/src/language/expressions/private.h:1.2 Wed Mar 15 03:29:10 2006
+++ pspp/src/language/expressions/private.h     Mon May  1 22:14:53 2006
@@ -58,7 +58,11 @@
     OPF_UNIMPLEMENTED = 020,
 
     /* If set, this operation is a PSPP extension. */
-    OPF_EXTENSION = 040
+    OPF_EXTENSION = 040,
+
+    /* If set, this operation may not occur after TEMPORARY.
+       (Currently this applies only to LAG.) */
+    OPF_PERM_ONLY = 0100
   };
 
 #define EXPR_ARG_MAX 4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]