# HG changeset patch # User Markus Mützel # Date 1639764784 -3600 # Node ID 838e73617671e8fd0f9f6b1bb3979c958d7fdda0 # Parent 79a7f3e3cf54d7198911e81393d2b56839b6ceb1 cdef classes: Forward declare with visibility flags (bug #59820). * libinterp/octave-value/cdef-fwd.h: Add header with forward declarations of cdef classes. * libinterp/octave-value/module.mk: Add new file to build system. * libinterp/octave-value/cdef-class.h, libinterp/octave-value/cdef-manager.h, libinterp/octave-value/cdef-method.h, libinterp/octave-value/cdef-object.h, libinterp/octave-value/cdef-package.h, libinterp/octave-value/cdef-property.h, libinterp/octave-value/cdef-utils.h: Include forward declaration header where needed. Export classes from library. diff -r 79a7f3e3cf54 -r 838e73617671 libinterp/octave-value/cdef-class.h --- a/libinterp/octave-value/cdef-class.h Thu Dec 16 22:01:14 2021 +0100 +++ b/libinterp/octave-value/cdef-class.h Fri Dec 17 19:13:04 2021 +0100 @@ -34,6 +34,7 @@ #include "oct-refcount.h" +#include "cdef-fwd.h" #include "cdef-method.h" #include "cdef-object.h" #include "cdef-package.h" @@ -48,6 +49,7 @@ class tree_classdef; class + OCTINTERP_API cdef_class : public cdef_meta_object { private: diff -r 79a7f3e3cf54 -r 838e73617671 libinterp/octave-value/cdef-fwd.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libinterp/octave-value/cdef-fwd.h Fri Dec 17 19:13:04 2021 +0100 @@ -0,0 +1,38 @@ +//////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2021 The Octave Project Developers +// +// See the file COPYRIGHT.md in the top-level directory of this +// distribution or . +// +// 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 +// . +// +//////////////////////////////////////////////////////////////////////// + +#if ! defined (octave_cdef_fwd_h) +#define octave_cdef_fwd_h 1 + +#include "octave-config.h" + +namespace octave +{ + class OCTINTERP_API cdef_class; + class OCTINTERP_API cdef_object; + class OCTINTERP_API cdef_package; +} + +#endif diff -r 79a7f3e3cf54 -r 838e73617671 libinterp/octave-value/cdef-manager.h --- a/libinterp/octave-value/cdef-manager.h Thu Dec 16 22:01:14 2021 +0100 +++ b/libinterp/octave-value/cdef-manager.h Fri Dec 17 19:13:04 2021 +0100 @@ -29,6 +29,7 @@ #include "octave-config.h" #include "cdef-class.h" +#include "cdef-fwd.h" #include "cdef-method.h" #include "cdef-package.h" #include "cdef-property.h" @@ -38,7 +39,9 @@ { class interpreter; - class cdef_manager + class + OCTINTERP_API + cdef_manager { public: diff -r 79a7f3e3cf54 -r 838e73617671 libinterp/octave-value/cdef-method.h --- a/libinterp/octave-value/cdef-method.h Thu Dec 16 22:01:14 2021 +0100 +++ b/libinterp/octave-value/cdef-method.h Fri Dec 17 19:13:04 2021 +0100 @@ -40,6 +40,7 @@ namespace octave { class + OCTINTERP_API cdef_method : public cdef_meta_object { friend class cdef_class; diff -r 79a7f3e3cf54 -r 838e73617671 libinterp/octave-value/cdef-object.h --- a/libinterp/octave-value/cdef-object.h Thu Dec 16 22:01:14 2021 +0100 +++ b/libinterp/octave-value/cdef-object.h Fri Dec 17 19:13:04 2021 +0100 @@ -33,6 +33,7 @@ #include "oct-refcount.h" +#include "cdef-fwd.h" #include "error.h" #include "oct-map.h" #include "ov.h" @@ -40,9 +41,6 @@ namespace octave { - class cdef_object; - class cdef_class; - // This is mainly a bootstrap class to declare the expected interface. // The actual base class is cdef_class_base, which is declared after // cdef_object, such that it can contain cdef_object objects. @@ -201,6 +199,7 @@ }; class + OCTINTERP_API cdef_object { public: @@ -350,6 +349,7 @@ }; class + OCTINTERP_API cdef_object_base : public cdef_object_rep { public: @@ -387,6 +387,7 @@ }; class + OCTINTERP_API cdef_object_array : public cdef_object_base { public: @@ -454,6 +455,7 @@ }; class + OCTINTERP_API cdef_object_scalar : public cdef_object_base { public: @@ -540,6 +542,7 @@ }; class + OCTINTERP_API handle_cdef_object : public cdef_object_scalar { public: @@ -575,6 +578,7 @@ }; class + OCTINTERP_API value_cdef_object : public cdef_object_scalar { public: @@ -605,6 +609,7 @@ }; class + OCTINTERP_API cdef_meta_object_rep : public handle_cdef_object { public: @@ -652,6 +657,7 @@ }; class + OCTINTERP_API cdef_meta_object : public cdef_object { public: diff -r 79a7f3e3cf54 -r 838e73617671 libinterp/octave-value/cdef-package.h --- a/libinterp/octave-value/cdef-package.h Thu Dec 16 22:01:14 2021 +0100 +++ b/libinterp/octave-value/cdef-package.h Fri Dec 17 19:13:04 2021 +0100 @@ -34,6 +34,7 @@ #include "oct-refcount.h" +#include "cdef-fwd.h" #include "cdef-object.h" #include "ov.h" @@ -42,6 +43,7 @@ class interpreter; class + OCTINTERP_API cdef_package : public cdef_meta_object { friend class cdef_class; diff -r 79a7f3e3cf54 -r 838e73617671 libinterp/octave-value/cdef-property.h --- a/libinterp/octave-value/cdef-property.h Thu Dec 16 22:01:14 2021 +0100 +++ b/libinterp/octave-value/cdef-property.h Fri Dec 17 19:13:04 2021 +0100 @@ -41,6 +41,7 @@ namespace octave { class + OCTINTERP_API cdef_property : public cdef_meta_object { friend class cdef_class; diff -r 79a7f3e3cf54 -r 838e73617671 libinterp/octave-value/cdef-utils.h --- a/libinterp/octave-value/cdef-utils.h Thu Dec 16 22:01:14 2021 +0100 +++ b/libinterp/octave-value/cdef-utils.h Fri Dec 17 19:13:04 2021 +0100 @@ -31,14 +31,13 @@ #include #include +#include "cdef-fwd.h" + class octave_value; class Cell; namespace octave { - class cdef_class; - class cdef_package; - extern OCTINTERP_API std::string get_base_name (const std::string& nm); diff -r 79a7f3e3cf54 -r 838e73617671 libinterp/octave-value/module.mk --- a/libinterp/octave-value/module.mk Thu Dec 16 22:01:14 2021 +0100 +++ b/libinterp/octave-value/module.mk Fri Dec 17 19:13:04 2021 +0100 @@ -19,6 +19,7 @@ OCTAVE_VALUE_INC = \ %reldir%/cdef-class.h \ + %reldir%/cdef-fwd.h \ %reldir%/cdef-manager.h \ %reldir%/cdef-method.h \ %reldir%/cdef-object.h \