Mercurial > octave
diff libinterp/parse-tree/pt-spmd.h @ 28518:b8ab8b58547d
accept spmd command blocks as language elements (bug #58676)
* pt-spmd.h, pt-spmd.cc: New files.
* libinterp/parse-tree/module.mk: Update.
* parse.h, oct-parse.yy (base_parser::make_spmd_command): New function.
(spmd_command): New non-terminal.
(command): Include spmd_command in list of possible commands.
* pt-all.h: Also include pt-spmd.h.
* pt-walk.h, pt-walk.cc (tree_walker::visit_spmd_command):
New virtual function.
* pt-eval.h, pt-eval.cc (tree_evaluator::visit_spmd_command):
New function.
* pt-pr-code.h, pt-pr-code.cc (tree_print_code::visit_spmd_command):
New function.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 30 Jun 2020 15:52:25 -0400 |
parents | |
children | 7854d5752dd2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libinterp/parse-tree/pt-spmd.h Tue Jun 30 15:52:25 2020 -0400 @@ -0,0 +1,83 @@ +//////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2020 The Octave Project Developers +// +// See the file COPYRIGHT.md in the top-level directory of this +// distribution or <https://octave.org/copyright/>. +// +// This file is part of Octave. +// +// Octave 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. +// +// Octave 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 Octave; see the file COPYING. If not, see +// <https://www.gnu.org/licenses/>. +// +//////////////////////////////////////////////////////////////////////// + +#if ! defined (octave_pt_spmd_command_h) +#define octave_pt_spmd_command_h 1 + +#include "octave-config.h" + +#include "base-list.h" +#include "pt-cmd.h" +#include "pt-walk.h" + +namespace octave +{ + class tree_comment_list; + class tree_statement_list; + + // Spmd. + + class tree_spmd_command : public tree_command + { + public: + + tree_spmd_command (tree_statement_list *body, comment_list *lc, + comment_list *tc, int l = -1, int c = -1) + : tree_command (l, c), m_body (body), m_lead_comm (lc), m_trail_comm (tc) + { } + + // No copying! + + tree_spmd_command (const tree_spmd_command&) = delete; + + tree_spmd_command& operator = (const tree_spmd_command&) = delete; + + ~tree_spmd_command (void); + + tree_statement_list * body (void) { return m_body; } + + comment_list * leading_comment (void) { return m_lead_comm; } + + comment_list * trailing_comment (void) { return m_trail_comm; } + + void accept (tree_walker& tw) + { + tw.visit_spmd_command (*this); + } + + private: + + // List of commands. + tree_statement_list *m_body; + + // Comment preceding SPMD token. + comment_list *m_lead_comm; + + // Comment preceding ENDSPMD token. + comment_list *m_trail_comm; + }; +} + +#endif