bugGNU Octave - Bugs: bug #41723, Local functions in classdef files


bug #41723: Local functions in classdef files

Submitted by:  Guillaume <gyom>
Submitted on:  Thu Feb 27 15:52:06 2014  
Category: InterpreterSeverity: 3 - Normal
Priority: 5 - NormalItem Group: Matlab Compatibility
Status: FixedAssigned to: None
Originator Name: GuillaumeOpen/Closed: Closed
Release: devOperating System: Any

Add a New Comment (Rich MarkupRich Markup):

You are not logged in

Please log in, so followups can be emailed to you.


(Jump to the original submission Jump to the original submission)

Sun Apr 9 00:03:33 2017, comment #13:

Thanks Guillaume, I merged your suggestions into my test case, pushed


Mike Miller <mtmiller>
Project Administrator
Wed Apr 5 10:41:16 2017, comment #12:

I modified my classdef files to work around bug #50716 and I can confirm everything works fine so this report can be closed as fixed after pushing Mike's test case.

I just suggest a slightly modified test using this:

and add this case:

so that it also tests local functions calling themselves or another local function, as well as being called from a method and not just the constructor.

Many thanks for this!

Guillaume <gyom>
Tue Apr 4 14:47:59 2017, comment #11:

First things first, thank you very much for your changeset!

From my initial tests, it seems to work great. There isn't a parse error for the classdef files I use any more and local functions are usable.

I am limited with further testing of existing classdef files (that use local functions called recursively, or by other local functions, or by methods (public or private), etc) by a new bug that I unearthed in the process (bug #50716).

Guillaume <gyom>
Tue Apr 4 04:15:52 2017, comment #10:

I made a very basic test case in the attached. I wonder if Guillaume or someone might want to suggest additional things to test for before pushing this.

(file #40255)

Mike Miller <mtmiller>
Project Administrator
Mon Apr 3 22:12:12 2017, comment #9:

I checked in the following changeset.


All existing tests still pass and my minimal tests show that it works, at least when calling a file-local function from a classdef constructor or method.

Could someone who needs this feature come up with some new test cases specifically for it?

John W. Eaton <jwe>
Project Administrator
Wed Mar 29 15:57:46 2017, comment #8:

Last time I heard of something like this, it took 358 years of effort to solve. :-)

I'm looking forward to it, it will be an important step towards adoption of classdef in Octave. Thanks!

Guillaume <gyom>
Fri Mar 24 19:54:47 2017, comment #7:

Guillaume: after our discussion at OctConf, I took another look at this. The parsing issue is not too difficult. But while looking at where to store the functions in the symbol table handle the details of properly searching for them, I came to the conclusion that the symbol table code could really benefit from another round of pretty serious refactoring. I have some good ideas on this, but they are too long to write in the margin of a comment box. :-)

But seriously, I will try to do something about this soon as I think the symbol table code has become far too complicated and it seems there must be a better way.

John W. Eaton <jwe>
Project Administrator
Wed Feb 8 06:53:47 2017, comment #6:

Chebfub package (http://www.chebfun.org) makes extensive use of classdef classes and local functions in classdef files.

I am asking again the question in comment #5:
"How difficult would it be to fix the parsing error first?"

Avinoam Kalma <avinoam>
Project Member
Mon Jan 30 10:31:30 2017, comment #5:

Being able to define local functions in classdef files is quite useful when classes become more complicated: how difficult would it be to fix the parsing error first, even if local functions are not dealt with properly to start with?

Guillaume <gyom>
Wed Mar 5 16:00:47 2014, comment #4:

John's right. This construct is not supported yet.

Michael Goffioul <goffioul>
Project Member
Wed Mar 5 15:56:03 2014, comment #3:

I'm pretty sure the issue is that Octave is not expecting there to be anything but comments and whitespace in the file after the END that matches CLASSDEF.

I didn't know that classdef files could define any functions outside of the classdef block.

Fixing the parsing problem will be fairly simple. Fixing the lookup rules so that these functions behave as private functions that are only visible to other functions defined in the classdef file will probably require more work.

John W. Eaton <jwe>
Project Administrator
Wed Mar 5 15:46:27 2014, comment #2:

Hi Felipe,
I removed that line from the MathWorks example beforehand so I'm afraid that's not the explanation.

Guillaume <gyom>
Wed Mar 5 08:10:07 2014, comment #1:

could it be the ellipsis on that line?

Felipe G. Nievinski <fgnievinski>
Thu Feb 27 15:52:06 2014, original submission:

There is a parse error when using a classdef file that contains local functions, as described here:

Guillaume <gyom>


(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach File(s):

Attached Files
file #40255:  test-case-41723.diff added by mtmiller (2kB - text/x-patch)


   bug dependencies.

Items that depend on this one: None found


Carbon-Copy List
  • -unavailable- added by avinoam (Posted a comment)
  • -unavailable- added by amro_octave
  • -unavailable- added by cbm
  • -unavailable- added by mtmiller (Updated the item)
  • -unavailable- added by goffioul (Posted a comment)
  • -unavailable- added by jwe (Posted a comment)
  • -unavailable- added by gyom
  • -unavailable- added by fgnievinski (Posted a comment)
  • -unavailable- added by gyom (Submitted the item)

    Do you think this task is very important?
    If so, you can click here to add your encouragement to it.
    This task has 0 encouragements so far.

    Only project members can vote.


    Please enter the title of George Orwell's famous dystopian book (it's a date):



    Follow 10 latest changes.

    Date Changed By Updated Field Previous Value => Replaced By
    Sun Apr 9 00:03:33 2017mtmillerStatusReady For Test=>Fixed
    Tue Apr 4 04:15:52 2017mtmillerAttached File-=>Added test-case-41723.diff, #40255
    Mon Apr 3 22:12:12 2017jweStatusConfirmed=>Ready For Test
    Fri Dec 9 23:23:13 2016amro_octaveCarbon-Copy-=>Added amro_octave
    Fri Mar 20 14:36:26 2015jordighDependencies-=>Depends on bugs #44590
    Fri Aug 22 09:10:57 2014cbmCarbon-Copy-=>Added cbm
    Thu Mar 27 02:44:33 2014mtmillerCategoryNone=>Interpreter
    Wed Mar 5 15:46:27 2014gyomCarbon-Copy-=>Added goffioul

    Back to the top

    Powered by Savane 3.1-cleanup1