# HG changeset patch # User John W. Eaton # Date 1332991304 14400 # Node ID 3f21c0c34b8f39c7255775336ecb819c207fe000 # Parent 6cc30975e2628a2fdc691e6cedcdd0e9fff8d76d check for function/file name mismatch when parsing class methods * oct-parse.yy (frob_function): Also check for and repair function name/file name mismatch when parsing class methods. * test/bug-36025: New test directory. * test/Makefile.am: Include bug-36025/module.mk. diff --git a/src/oct-parse.yy b/src/oct-parse.yy --- a/src/oct-parse.yy +++ b/src/oct-parse.yy @@ -2823,8 +2823,7 @@ // file. Matlab doesn't provide a diagnostic (it ignores the stated // name). if (! autoloading && reading_fcn_file - && (current_function_depth == 1 - && ! (parsing_subfunctions || lexer_flags.parsing_class_method))) + && current_function_depth == 1 && ! parsing_subfunctions) { // FIXME -- should curr_fcn_file_name already be // preprocessed when we get here? It seems to only be a diff --git a/test/Makefile.am b/test/Makefile.am --- a/test/Makefile.am +++ b/test/Makefile.am @@ -51,6 +51,7 @@ test_while.m include bug-35448/module.mk +include bug-36025/module.mk include classes/module.mk include class-concat/module.mk include ctor-vs-method/module.mk diff --git a/test/bug-36025/@testclass/one.m b/test/bug-36025/@testclass/one.m new file mode 100644 --- /dev/null +++ b/test/bug-36025/@testclass/one.m @@ -0,0 +1,4 @@ +% function ONE return item "X" + +function a=one(m) + a=m.x; diff --git a/test/bug-36025/@testclass/testclass.m b/test/bug-36025/@testclass/testclass.m new file mode 100644 --- /dev/null +++ b/test/bug-36025/@testclass/testclass.m @@ -0,0 +1,3 @@ +function m=testclass(x,y) +m=struct('x',x,'y',y); +m=class(m,"testclass"); diff --git a/test/bug-36025/@testclass/two.m b/test/bug-36025/@testclass/two.m new file mode 100644 --- /dev/null +++ b/test/bug-36025/@testclass/two.m @@ -0,0 +1,4 @@ +% function TWO returns item "Y" + +function a=one(m) + a=m.y; diff --git a/test/bug-36025/module.mk b/test/bug-36025/module.mk new file mode 100644 --- /dev/null +++ b/test/bug-36025/module.mk @@ -0,0 +1,7 @@ +bug_36025_FCN_FILES = \ + bug-36025/@testclass/one.m \ + bug-36025/@testclass/testclass.m \ + bug-36025/@testclass/two.m \ + bug-36025/test_bug_36025.m + +FCN_FILES += $(bug_36025_FCN_FILES) diff --git a/test/bug-36025/test_bug_36025.m b/test/bug-36025/test_bug_36025.m new file mode 100644 --- /dev/null +++ b/test/bug-36025/test_bug_36025.m @@ -0,0 +1,9 @@ +%!test +%! warning off Octave:function-name-clash +%! f = testclass (1, 2); +%! assert (one (f), 1); +%! assert (two (f), 2); +%! rehash (); +%! assert (one (f), 1); +%! assert (two (f), 2); +%! assert (two (f), 2);