# HG changeset patch # User Michael Goffioul # Date 1411247816 14400 # Node ID fa48651fbb8ab62486dc82e8b412bd8750d2e242 # Parent e90bfaadb489469338b86c594425949ce2ff9cd7 isstruct for classdef objects should not return true. * ov.h (octave_value::is_classdef_object): New method. * ov-base.h (octave_base_value::is_classdef_object): Likewise. * ov-classdef.h (octave_classdef::is_classdef_object): Likewise. (octave_classdef::is_map): Return false. * variables.cc (generate_struct_completions): Do auto-completion for classdef objects too. diff --git a/libinterp/corefcn/variables.cc b/libinterp/corefcn/variables.cc --- a/libinterp/corefcn/variables.cc +++ b/libinterp/corefcn/variables.cc @@ -283,7 +283,8 @@ frame.run (); - if (tmp.is_defined () && (tmp.is_map () || tmp.is_java ())) + if (tmp.is_defined () && + (tmp.is_map () || tmp.is_java () || tmp.is_classdef_object ())) names = tmp.map_keys (); } } diff --git a/libinterp/octave-value/ov-base.h b/libinterp/octave-value/ov-base.h --- a/libinterp/octave-value/ov-base.h +++ b/libinterp/octave-value/ov-base.h @@ -366,6 +366,8 @@ virtual bool is_object (void) const { return false; } + virtual bool is_classdef_object (void) const { return false; } + virtual bool is_java (void) const { return false; } virtual bool is_cs_list (void) const { return false; } diff --git a/libinterp/octave-value/ov-classdef.h b/libinterp/octave-value/ov-classdef.h --- a/libinterp/octave-value/ov-classdef.h +++ b/libinterp/octave-value/ov-classdef.h @@ -1409,10 +1409,12 @@ bool is_defined (void) const { return true; } - bool is_map (void) const { return true; } + bool is_map (void) const { return false; } bool is_object (void) const { return true; } + bool is_classdef_object (void) const { return true; } + void print (std::ostream& os, bool pr_as_read_syntax = false); void print_raw (std::ostream& os, bool pr_as_read_syntax = false) const; diff --git a/libinterp/octave-value/ov.h b/libinterp/octave-value/ov.h --- a/libinterp/octave-value/ov.h +++ b/libinterp/octave-value/ov.h @@ -572,6 +572,9 @@ bool is_object (void) const { return rep->is_object (); } + bool is_classdef_object (void) const + { return rep->is_classdef_object (); } + bool is_java (void) const { return rep->is_java (); }