* Bug #13146 fixed - Functions: fix for profile 68/13368/5
Samuel Gougeon [Fri, 13 Dec 2013 13:43:46 +0000 (14:43 +0100)]
If the function that ones wishes to profile has a comment in the same line that it was declared,
the profiling failed.

Change-Id: If11d61f98d3777ced7cfa40e08b75cbd913caed7

scilab/CHANGES_5.5.X
scilab/modules/functions/macros/profile.sci
scilab/modules/functions/tests/nonreg_tests/bug_13146.dia.ref [new file with mode: 0644]
scilab/modules/functions/tests/nonreg_tests/bug_13146.tst [new file with mode: 0644]

index 1017669..e50703b 100644 (file)
@@ -318,6 +318,8 @@ Scilab Bug Fixes
 
 * Bug #13140 fixed - Various typos fixed.
 
+* Bug #13146 fixed - profile failed when a comment was on the same line as a function declaration.
+
 * Bug #13152 fixed - Typo fixed in syslin french help page.
 
 
index 1848ed7..d161fa7 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2008 - INRIA
+// Copyright (C) 2013 - Samuel GOUGEON : bug #13146 fixed
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
@@ -7,19 +8,23 @@
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
-function count=profile(fun)
+function count = profile(fun)
     if argn(2) < 1 then
         error(sprintf(_("%s: Wrong number of input argument(s): %d expected.\n"), "profile", 1));
     end
     if type(fun)==13 then
-        lst=macr2lst(fun)
+        lst = macr2lst(fun)
     else
-        lst=fun
+        lst = fun
     end
-    if lst(5)(1)<>"25" then
-        error(msprintf(gettext("%s: The function has not been built for profiling"),"profile"))
+    i = 5
+    if lst(4)(1)=="31"
+        i = 6
     end
-    count=get_profile(lst,4)
-    count=count(1:$-1,:)
-    count(:,2)=count(:,2)/1000000
+    if lst(i)(1)<>"25" then
+        error(msprintf(gettext("%s: The function has not been built for profiling"), "profile"))
+    end
+    count = get_profile(lst,4)
+    count = count(1:$-1,:)
+    count(:,2) = count(:,2)/1000000
 endfunction
diff --git a/scilab/modules/functions/tests/nonreg_tests/bug_13146.dia.ref b/scilab/modules/functions/tests/nonreg_tests/bug_13146.dia.ref
new file mode 100644 (file)
index 0000000..e293fac
--- /dev/null
@@ -0,0 +1,24 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 13146 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13146
+//
+// <-- Short Description -->
+// profile failed when a comment was at the same line as a function declaration.
+function A() // Comment
+endfunction
+add_profiling("A");
+Warning : redefining function: A                       . Use funcprot(0) to avoid this message
+
+A();
+prof = profile(A);
+assert_checkequal(prof(:, 2:3), [0 1 ; 0 0]);
diff --git a/scilab/modules/functions/tests/nonreg_tests/bug_13146.tst b/scilab/modules/functions/tests/nonreg_tests/bug_13146.tst
new file mode 100644 (file)
index 0000000..b27ef22
--- /dev/null
@@ -0,0 +1,25 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 13146 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13146
+//
+// <-- Short Description -->
+// profile failed when a comment was at the same line as a function declaration.
+
+function A() // Comment
+endfunction
+
+add_profiling("A");
+A();
+prof = profile(A);
+
+assert_checkequal(prof(:, 2:3), [0 1 ; 0 0]);