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