diff src/pt-funcall.cc @ 15035:a820a990968e classdef

new tree_funcall class * pt-funcall.h, pt-funcall.cc: New files. Define tree_funcall class. * pt-all.h: Also include pt-funcall.h. * pt-bp.h, pt-bp.cc (tree_breakpoint::visit_funcall): New function. * pt-check.h, pt-check.cc (tree_checker::visit_funcall): New function. * pt-eval.h, pt-eval.cc (tree_evaluator::visit_funcall): New function. * pt-pr-code.h, pt-pr-code.cc (tree_print_code::visit_funcall): New function. * pt-walk.h (tree_walker::visit_funcall): New pure virtual function. * src/Makefile.am (PT_INCLUDES): Add pt-funcall.h to the list.* (PT_SRC): Add pt-funcall.cc to the list.
author John W. Eaton <jwe@octave.org>
date Fri, 27 Jul 2012 15:44:11 -0400
parents
children
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/src/pt-funcall.cc
@@ -0,0 +1,83 @@
+/*
+
+Copyright (C) 2012 John W. Eaton
+
+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
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "ov-fcn.h"
+#include "pt-funcall.h"
+#include "pt-walk.h"
+
+// Function call objects.
+
+void
+tree_funcall::print (std::ostream& os, bool pr_as_read_syntax,
+                     bool pr_orig_text)
+{
+  print_raw (os, pr_as_read_syntax, pr_orig_text);
+}
+
+void
+tree_funcall::print_raw (std::ostream& os, bool pr_as_read_syntax,
+                         bool pr_orig_text)
+{
+  if (pr_orig_text)
+    {
+      os << original_text ();
+    }
+  else
+    {
+      octave_function *fp = fcn.function_value ();
+      std::string nm = fp ? fp->name () : std::string ("<invalid-function>");
+
+      os << nm << " (";
+
+      octave_idx_type len = args.length ();
+      for (octave_idx_type i = 0; i < len; i++)
+        {
+          args(i).print_raw (os, pr_as_read_syntax);
+
+          if (i < len - 1)
+            os << ", ";
+        }
+
+      os << ")";
+    }
+}
+
+tree_funcall *
+tree_funcall::dup (symbol_table::scope_id,
+                  symbol_table::context_id context) const
+{
+  tree_funcall *new_fc = new tree_funcall (fcn, args, line (), column ());
+
+  new_fc->copy_base (*new_fc);
+
+  return new_fc;
+}
+
+void
+tree_funcall::accept (tree_walker& tw)
+{
+  tw.visit_funcall (*this);
+}