|
From: Karthik C. <kar...@gm...> - 2021-07-06 22:36:37
|
Hi,
I'm having trouble using matlab-shell-region->script when my script is structured as follows, and I call matlab-shell-run-region-or-line on the function call:
%---- 8< ----
%% Function call
func2(x)
%% Local functions
function y = func1(x)
y = x * 2;
end
function z = func2(x)
y = func1(x);
z = y + 1;
end
%---- 8< ----
When I call func2(x), matlab-shell-region->script copies over only func2 to the temporary file, even though func2 requires func1 to be defined.
The problem is that matlab-shell-region->script copies over only the functions that it finds in the region being evaluated. Since func1 is not part of this region, it's not copied over. From matlab-shell-region->script:
(dolist (F functions)
(save-excursion
(when (re-search-forward (semantic-tag-name F) nil t)
;; Found, copy it in.
(let ((ft (matlab-semantic-tag-text F orig)))
(goto-char (point-max))
(insert "% Copy of " (semantic-tag-name F) "\n\n")
(insert ft)
(insert "\n%%\n")))))
The re-search-forward, which is run on the text being evaluated, is doing the filtering to func2 only. I got around this by simply copying over all local functions to the temp file:
(dolist (F functions)
(save-excursion
(let ((ft (matlab-semantic-tag-text F orig)))
;; Copy over ALL local functions to the temp file.
(goto-char (point-max))
(insert "% Copy of " (semantic-tag-name F) "\n\n")
(insert ft)
(insert "\n%%\n"))))
This probably makes the call to matlab-shell more expensive, but I think this should be the default behavior to avoid subtle failures like this.
Karthik
|