changeset 15811:317f4857c1e1

Modify class() to return Java class name, not type name "octave_java". * libinterp/octave-value/ov-class.cc(Fclass): Check object type with is_java, call java_class_name () on java objects. Improve docstring. Add %!test block.
author Rik <rik@octave.org>
date Mon, 17 Dec 2012 16:52:10 -0800
parents 87a61a4d8fd2
children 83bf6fd9e46d
files libinterp/octave-value/ov-class.cc
diffstat 1 files changed, 27 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/octave-value/ov-class.cc	Mon Dec 17 16:44:41 2012 -0800
+++ b/libinterp/octave-value/ov-class.cc	Mon Dec 17 16:52:10 2012 -0800
@@ -45,6 +45,7 @@
 #include "mxarray.h"
 #include "oct-lvalue.h"
 #include "ov-class.h"
+#include "ov-java.h"
 #include "ov-fcn.h"
 #include "ov-usr-fcn.h"
 #include "pager.h"
@@ -1921,13 +1922,14 @@
 
 DEFUN (class, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Built-in Function} {} class (@var{expr})\n\
-@deftypefnx {Built-in Function} {} class (@var{s}, @var{id})\n\
-@deftypefnx {Built-in Function} {} class (@var{s}, @var{id}, @var{p}, @dots{})\n\
-Return the class of the expression @var{expr} or create a class with\n\
+@deftypefn  {Function File} {@var{classname} =} class (@var{obj})\n\
+@deftypefnx {Function File} {} class (@var{s}, @var{id})\n\
+@deftypefnx {Function File} {} class (@var{s}, @var{id}, @var{p}, @dots{})\n\
+Return the class of the object @var{obj} or create a class with\n\
 fields from structure @var{s} and name (string) @var{id}.  Additional\n\
 arguments name a list of parent classes from which the new class is\n\
 derived.\n\
+@seealso{typeinfo, isa}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -1937,9 +1939,17 @@
   if (nargin == 0)
     print_usage ();
   else if (nargin == 1)
-    retval = args(0).class_name ();
+    // Called for class of object
+    if (! args(0).is_java ())
+      retval = args(0).class_name ();
+    else
+      {
+        octave_java *jobj = dynamic_cast<octave_java*>(args(0).internal_rep ());
+        retval = jobj->java_class_name ();
+      }
   else
     {
+      // Called as class constructor
       octave_function *fcn = octave_call_stack::caller ();
 
       std::string id = args(1).string_value ();
@@ -1996,6 +2006,18 @@
   return retval;
 }
 
+/*
+%!assert (class (1.1), "double");
+%!assert (class (single (1.1)), "single");
+%!assert (class (uint8 (1)), "uint8");
+%!testif HAVE_JAVA
+%! jobj = javaObject ("java.lang.StringBuffer");
+%! assert (class (jobj), "java.lang.StringBuffer");
+
+%% Test Input Validation
+%!error class ()
+*/
+
 DEFUN (__isa_parent__, args, ,
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} __isa_parent__ (@var{class}, @var{name})\n\