From: Ben Pfaff Date: Sat, 3 Aug 2013 23:51:31 +0000 (-0700) Subject: control-stack: Move from language to data directory. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=cfe28ef151771c04be56d459c58d818f6c43f5e1 control-stack: Move from language to data directory. --- diff --git a/src/data/automake.mk b/src/data/automake.mk index 17d5ce1d6f..43e3d4e172 100644 --- a/src/data/automake.mk +++ b/src/data/automake.mk @@ -43,6 +43,8 @@ src_data_libdata_la_SOURCES = \ src/data/case-tmpfile.c \ src/data/case-tmpfile.h \ src/data/column.h \ + src/data/control-stack.c \ + src/data/control-stack.h \ src/data/csv-file-writer.c \ src/data/csv-file-writer.h \ src/data/data-in.c \ diff --git a/src/data/control-stack.c b/src/data/control-stack.c new file mode 100644 index 0000000000..d8228f896c --- /dev/null +++ b/src/data/control-stack.c @@ -0,0 +1,98 @@ +#include + +#include "data/control-stack.h" + +#include +#include + +#include "libpspp/compiler.h" +#include "libpspp/message.h" + +#include "gl/xalloc.h" + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +struct ctl_struct + { + const struct ctl_class *class; /* Class of control structure. */ + struct ctl_struct *down; /* Points toward the bottom of ctl_stack. */ + void *private; /* Private data. */ + }; + +static struct ctl_struct *ctl_stack; + +void +ctl_stack_clear (void) +{ + while (ctl_stack != NULL) + { + struct ctl_struct *top = ctl_stack; + msg (SE, _("%s without %s."), + top->class->start_name, top->class->end_name); + ctl_stack_pop (top->private); + } +} + +void +ctl_stack_push (const struct ctl_class *class, void *private) +{ + struct ctl_struct *ctl; + + assert (private != NULL); + ctl = xmalloc (sizeof *ctl); + ctl->class = class; + ctl->down = ctl_stack; + ctl->private = private; + ctl_stack = ctl; +} + +void * +ctl_stack_top (const struct ctl_class *class) +{ + struct ctl_struct *top = ctl_stack; + if (top != NULL && top->class == class) + return top->private; + else + { + if (ctl_stack_search (class) != NULL) + msg (SE, _("This command must appear inside %s...%s, " + "without intermediate %s...%s."), + class->start_name, class->end_name, + top->class->start_name, top->class->end_name); + return NULL; + } +} + +void * +ctl_stack_search (const struct ctl_class *class) +{ + struct ctl_struct *ctl; + + for (ctl = ctl_stack; ctl != NULL; ctl = ctl->down) + if (ctl->class == class) + return ctl->private; + + msg (SE, _("This command cannot appear outside %s...%s."), + class->start_name, class->end_name); + return NULL; +} + +void +ctl_stack_pop (void *private) +{ + struct ctl_struct *top = ctl_stack; + + assert (top != NULL); + assert (top->private == private); + + top->class->close (top->private); + ctl_stack = top->down; + free (top); +} + +bool +ctl_stack_is_empty (void) +{ + return ctl_stack == NULL; +} diff --git a/src/data/control-stack.h b/src/data/control-stack.h new file mode 100644 index 0000000000..9c6824b5f6 --- /dev/null +++ b/src/data/control-stack.h @@ -0,0 +1,43 @@ +/* PSPP - a program for statistical analysis. + Copyright (C) 1997-9, 2000, 2011 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef CTL_STACK_H +#define CTL_STACK_H 1 + +#include + +/* The following #include avoids a potential problem when Gnulib substitutes + * for close() by putting "#define close rpl_close" into , by + * ensuring that every source file that includes this one sees the #define.. + * (It would probably be better to rename the 'close' member of struct + * ctl_class.) */ +#include + +struct ctl_class + { + const char *start_name; /* e.g. LOOP. */ + const char *end_name; /* e.g. END LOOP. */ + void (*close) (void *); /* Closes the control structure. */ + }; + +void ctl_stack_clear (void); +void ctl_stack_push (const struct ctl_class *, void *private); +void *ctl_stack_top (const struct ctl_class *); +void *ctl_stack_search (const struct ctl_class *); +void ctl_stack_pop (void *); +bool ctl_stack_is_empty (void); + +#endif /* ctl_stack.h */ diff --git a/src/data/transformations.c b/src/data/transformations.c index 884def6753..700ed85e40 100644 --- a/src/data/transformations.c +++ b/src/data/transformations.c @@ -22,7 +22,7 @@ #include #include "libpspp/str.h" -#include "language/control/control-stack.h" /* XXX layering violation */ +#include "data/control-stack.h" /* XXX layering violation */ #include "gl/xalloc.h" diff --git a/src/language/control/automake.mk b/src/language/control/automake.mk index 11c5fdc3d0..ca665309ee 100644 --- a/src/language/control/automake.mk +++ b/src/language/control/automake.mk @@ -2,8 +2,6 @@ language_control_sources = \ - src/language/control/control-stack.c \ - src/language/control/control-stack.h \ src/language/control/do-if.c \ src/language/control/loop.c \ src/language/control/repeat.c \ diff --git a/src/language/control/control-stack.c b/src/language/control/control-stack.c deleted file mode 100644 index f806c7803a..0000000000 --- a/src/language/control/control-stack.c +++ /dev/null @@ -1,98 +0,0 @@ -#include - -#include "language/control/control-stack.h" - -#include -#include - -#include "libpspp/compiler.h" -#include "libpspp/message.h" - -#include "gl/xalloc.h" - -#include "gettext.h" -#define _(msgid) gettext (msgid) - -struct ctl_struct - { - const struct ctl_class *class; /* Class of control structure. */ - struct ctl_struct *down; /* Points toward the bottom of ctl_stack. */ - void *private; /* Private data. */ - }; - -static struct ctl_struct *ctl_stack; - -void -ctl_stack_clear (void) -{ - while (ctl_stack != NULL) - { - struct ctl_struct *top = ctl_stack; - msg (SE, _("%s without %s."), - top->class->start_name, top->class->end_name); - ctl_stack_pop (top->private); - } -} - -void -ctl_stack_push (const struct ctl_class *class, void *private) -{ - struct ctl_struct *ctl; - - assert (private != NULL); - ctl = xmalloc (sizeof *ctl); - ctl->class = class; - ctl->down = ctl_stack; - ctl->private = private; - ctl_stack = ctl; -} - -void * -ctl_stack_top (const struct ctl_class *class) -{ - struct ctl_struct *top = ctl_stack; - if (top != NULL && top->class == class) - return top->private; - else - { - if (ctl_stack_search (class) != NULL) - msg (SE, _("This command must appear inside %s...%s, " - "without intermediate %s...%s."), - class->start_name, class->end_name, - top->class->start_name, top->class->end_name); - return NULL; - } -} - -void * -ctl_stack_search (const struct ctl_class *class) -{ - struct ctl_struct *ctl; - - for (ctl = ctl_stack; ctl != NULL; ctl = ctl->down) - if (ctl->class == class) - return ctl->private; - - msg (SE, _("This command cannot appear outside %s...%s."), - class->start_name, class->end_name); - return NULL; -} - -void -ctl_stack_pop (void *private) -{ - struct ctl_struct *top = ctl_stack; - - assert (top != NULL); - assert (top->private == private); - - top->class->close (top->private); - ctl_stack = top->down; - free (top); -} - -bool -ctl_stack_is_empty (void) -{ - return ctl_stack == NULL; -} diff --git a/src/language/control/control-stack.h b/src/language/control/control-stack.h deleted file mode 100644 index 9c6824b5f6..0000000000 --- a/src/language/control/control-stack.h +++ /dev/null @@ -1,43 +0,0 @@ -/* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2011 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 - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef CTL_STACK_H -#define CTL_STACK_H 1 - -#include - -/* The following #include avoids a potential problem when Gnulib substitutes - * for close() by putting "#define close rpl_close" into , by - * ensuring that every source file that includes this one sees the #define.. - * (It would probably be better to rename the 'close' member of struct - * ctl_class.) */ -#include - -struct ctl_class - { - const char *start_name; /* e.g. LOOP. */ - const char *end_name; /* e.g. END LOOP. */ - void (*close) (void *); /* Closes the control structure. */ - }; - -void ctl_stack_clear (void); -void ctl_stack_push (const struct ctl_class *, void *private); -void *ctl_stack_top (const struct ctl_class *); -void *ctl_stack_search (const struct ctl_class *); -void ctl_stack_pop (void *); -bool ctl_stack_is_empty (void); - -#endif /* ctl_stack.h */ diff --git a/src/language/control/do-if.c b/src/language/control/do-if.c index bbb8fa92c5..ea70567091 100644 --- a/src/language/control/do-if.c +++ b/src/language/control/do-if.c @@ -19,11 +19,11 @@ #include #include "data/case.h" +#include "data/control-stack.h" #include "data/dataset.h" #include "data/transformations.h" #include "data/value.h" #include "language/command.h" -#include "language/control/control-stack.h" #include "language/expressions/public.h" #include "language/lexer/lexer.h" #include "libpspp/compiler.h" diff --git a/src/language/control/loop.c b/src/language/control/loop.c index 4d2aaa33a4..34c6a1d363 100644 --- a/src/language/control/loop.c +++ b/src/language/control/loop.c @@ -16,9 +16,8 @@ #include -#include "language/control/control-stack.h" - #include "data/case.h" +#include "data/control-stack.h" #include "data/dataset.h" #include "data/dictionary.h" #include "data/settings.h" diff --git a/src/language/control/temporary.c b/src/language/control/temporary.c index 7ebcc5ad9c..75e5e7b28a 100644 --- a/src/language/control/temporary.c +++ b/src/language/control/temporary.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2010, 2011, 2013 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 @@ -19,13 +19,13 @@ #include #include +#include "data/control-stack.h" #include "data/dataset.h" #include "data/dictionary.h" #include "data/transformations.h" #include "data/value-labels.h" #include "data/variable.h" #include "language/command.h" -#include "language/control/control-stack.h" #include "language/lexer/lexer.h" #include "libpspp/message.h" #include "libpspp/str.h"