Mercurial > octave
diff libinterp/parse-tree/pt-classdef.cc @ 29729:d0ce7260978d
also accept validation syntax for classdef properties
* parse.h, oct-parse.yy (arg_name): New non-terminal.
(arg_validation): Don't accept identifier here.
(args_validation_list): Use arg_name here.
(class_property): Use arg_validation instead of '=' expression alone.
(base_parser::make_arg_validation): Eliminate arg_name argument.
* pt-args-block.h (tree_arg_validation::tree_arg_validation):
Elimnate arg_name argument.
(tree_arg_validation::arg_name, tree_arg_validation::validation_fcns,
tree_arg_validation::identifier_expression,
tree_arg_validation::size_spec, tree_arg_validation::class_name,
tree_arg_validation::initializer_expression): New functions.
* pt-classdef.h, pt-classdef.cc (tree_classdef_property::m_av):
New data member to replace separate m_id and m_expr data members.
(tree_classdef_property::tree_classdef_property):
Accept tree_arg_validation argument instead of tree_identifier and
tree_expression separately.
(tree_classdef_property::~tree_classdef_property,
tree_classdef_property::ident, tree_classdef_property::expression):
Update.
* pt-eval.cc (tree_evaluator::visit_arguments_block): Emphasize that
incorrect results are possible for ignored argument validation blocks.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 04 Jun 2021 13:58:59 -0400 |
parents | 0a5b15007766 |
children | 796f54d4ddbf |
line wrap: on
line diff
--- a/libinterp/parse-tree/pt-classdef.cc Fri Jun 04 08:25:35 2021 -0400 +++ b/libinterp/parse-tree/pt-classdef.cc Fri Jun 04 13:58:59 2021 -0400 @@ -31,6 +31,7 @@ #include "ov.h" #include "ov-classdef.h" +#include "pt-args-block.h" #include "pt-classdef.h" #include "pt-eval.h" @@ -137,18 +138,28 @@ return ""; } - tree_classdef_property::tree_classdef_property (tree_identifier *i, + tree_classdef_property::tree_classdef_property (tree_arg_validation *av, comment_list *comments) - : m_id (i), m_expr (nullptr), m_comments (comments), + : m_av (av), m_comments (comments), m_doc_string (check_for_doc_string (m_comments)) { } - tree_classdef_property::tree_classdef_property (tree_identifier *i, - tree_expression *e, - comment_list *comments) - : m_id (i), m_expr (e), m_comments (comments), - m_doc_string (check_for_doc_string (m_comments)) - { } + tree_classdef_property::~tree_classdef_property (void) + { + delete m_av; + } + + tree_identifier * tree_classdef_property::ident (void) + { + tree_expression *id_expr = m_av->identifier_expression (); + + return dynamic_cast<tree_identifier *> (id_expr); + } + + tree_expression * tree_classdef_property::expression (void) + { + return m_av->initializer_expression (); + } // Classdef property_list