* Bugs 16567 16586 fixed: mfile2sci() supports block %{..%}. Appended comments improved"
[scilab.git] / scilab / modules / m2sci / macros / kernel / old2newinstr.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2004-2006 - INRIA - Farid BELAHCENE
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 function instr=old2newinstr(instr,oldname,newname)
14     // This function replaces by a new name (given in a input argument:newname) in a Scilab instruction all the variables names and functions names matching to a given name in a input argument:oldname
15     // INPUTS:
16     // -instr: Scilab instruction
17     // -oldname: a string, matching to the name variable which must be replaced
18     // -newname: a string, matching to the new variable name
19     // OUTPUT:
20     // -instr: Scilab instruction after modification
21
22     // VARIABLE tlist //
23     // If the variable name matches to the oldname argument then replace the variable name by the newname argument
24     if typeof(instr)=="variable" then
25         if instr.name==oldname then
26             instr.name=newname
27         end
28         // FUNCALL tlist //
29         // If the function name matches to oldname argument then replace the function name by newname argument
30     elseif typeof(instr)=="funcall"
31         if instr.name==oldname then
32             instr.name=newname
33         end
34         // ex: function return has not rhs: return.rhs is not a list
35         if typeof(instr.rhs)=="list" then
36             for i=1:size(instr.rhs)
37                 instr.rhs(i)=old2newinstr(instr.rhs(i),oldname,newname)
38             end
39         end
40         // OPERATION tlist//
41     elseif typeof(instr)=="operation" then
42         for i=1:size(instr.operands)
43             instr.operands(i)=old2newinstr(instr.operands(i),oldname,newname)
44         end
45         // IF-THEN-ELSE instruction //
46     elseif typeof(instr)=="ifthenelse" then
47         instr.expression=old2newinstr(instr.expression,oldname,newname)
48         for i=1:size(instr.then)
49             instr.then(i)=old2newinstr(instr.then(i),oldname,newname)
50         end
51         for i=1:size(instr.elseifs)
52             for k=1:size(instr.elseifs(i).then)
53                 instr.elseifs(i).then(k)=old2newinstr((instr.elseifs(i).then(k)),oldname,newname)
54             end
55         end
56         for i=1:size(instr.else)
57         instr.else(i)=old2newinstr((instr.else(i)),oldname,newname)
58         end
59         // SELECT-CASE instruction //
60     elseif typeof(instr)=="selectcase" then
61         instr.expression=old2newinstr(instr.expression,oldname,newname)
62         for i=1:size(instr.cases)
63             for j=1:size(instr.cases(i).then)
64                 instr.cases(i).then(j)=old2newinstr((instr.cases(i).then(j)),oldname,newname)
65             end
66         end
67         for i=1:size(instr.else)
68         instr.else(i)=old2newinstr(instr.else(i),oldname,newname)
69         end
70         // WHILE instruction //
71     elseif typeof(instr)=="while" then
72         instr.expression=old2newinstr(instr.expression,oldname,newname)
73         for i=1:size(instr.statements)
74             instr.statements(i)=old2newinstr(instr.statements(i),oldname,newname)
75         end
76         // TRY-CATCH instruction //
77     elseif typeof(instr)=="trycatch"
78         for i=1:size(instr.trystat)
79             instr.trystat(i)=old2newinstr(instr.trystat(i),oldname,newname)
80         end
81         for i=1:size(instr.catchstat)
82             instr.catchstat(i)=old2newinstr(instr.catchstat(i),oldname,newname)
83         end
84         // FOR instruction //
85     elseif typeof(instr)=="for" then
86         instr.expression=old2newinstr(instr.expression,oldname,newname)
87         for i=1:size(instr.statements)
88             instr.statements(i)=old2newinstr(instr.statements(i),oldname,newname)
89         end
90         // EQUAL instruction //
91     elseif typeof(instr)=="equal" then
92         instr.expression=old2newinstr(instr.expression,oldname,newname)
93         for i=1:size(instr.lhs)
94             instr.lhs(i)=old2newinstr(instr.lhs(i),oldname,newname)
95         end
96     end
97 endfunction