summaryrefslogtreecommitdiff
path: root/2.3-1/macros/SymbolTable/ST_AnalyzeScope.sci
blob: f3b041a06d64893a75cf65b3454ce9bba04fdaec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
function OutArg = ST_AnalyzeScope(OldOutArg,NOutArg,FileInfo,SharedInfo);
// function OutArg = ST_AnalyzeScope(OldOutArg,NOutArg,FileInfo,SharedInfo);
// -----------------------------------------------------------------
// //NUT: add description here
//
// Input data:
// //NUT: add description here
//
// Output data:
// //NUT: add description here
//
// Status:
// 26-Oct-2007 -- Raffaele Nutricato: Author.
//
// Copyright 2007 Raffaele Nutricato.
// Contact: raffaele.nutricato@tiscali.it
// -----------------------------------------------------------------

// ------------------------------
// --- Check input arguments. ---
// ------------------------------
SCI2CNInArgCheck(argn(2),4,4);

// -----------------------
// --- Initialization. ---
// -----------------------
nxtscifunname   = SharedInfo.NextSCIFunName;
nxtscifunnumber = SharedInfo.NextSCIFunNumber;
ReportFileName  = FileInfo.Funct(nxtscifunnumber).ReportFileName;

// #RNU_RES_B
PrintStringInfo(' ',ReportFileName,'file','y');
PrintStringInfo('***Getting output arguments info from the symbol table***',ReportFileName,'file','y');
// #RNU_RES_E

OutArg = OldOutArg;
GlobalVarsFileName = FileInfo.GlobalVarFileName;
LocalVarsFileName  = FileInfo.Funct(nxtscifunnumber).LocalVarFileName;
TempVarsFileName   = FileInfo.Funct(nxtscifunnumber).TempVarFileName;
// ---------------------------
// --- End Initialization. ---
// ---------------------------

// #RNU_RES_B
// ------------------------------------------------------------------
// --- Check if the out variables already exist in symbol tables. ---
// ------------------------------------------------------------------
// #RNU_RES_E
for cntout = 1:NOutArg

   // #RNU_RES_B
   PrintStringInfo('   Symbol ""'+OutArg(cntout).Name+'""',ReportFileName,'file','y');
   // #RNU_RES_E
   TBName = OutArg(cntout).Name;
   
   // #RNU_RES_B
   // --- Check in temporary symbol table. ---
   // #RNU_RES_E
   SymbolTableFileName = TempVarsFileName;
   [TBFlagfound,TBType,TBSize,TBValue,TBFindLike,TBDimension] = ...
      ST_Get(TBName,SymbolTableFileName);
   if (TBFlagfound == 0)
      // #RNU_RES_B
      PrintStringInfo('   ...not found in: '+SymbolTableFileName+'.',ReportFileName,'file','y');
      // #RNU_RES_E
   else
      error(9999, 'Found a temp symbol in '+SymbolTableFileName+...
         ' with the same name of the equal output argument ""'+TBName+'"".');
   end
   
   // #RNU_RES_B
   // --- Check in local symbol table. ---
   // #RNU_RES_E
   SymbolTableFileName = LocalVarsFileName;
   [TBFlagfound,TBType,TBSize,TBValue,TBFindLike,TBDimension] = ...
      ST_Get(TBName,SymbolTableFileName);
   if (TBFlagfound == 0)
      // #RNU_RES_B
      PrintStringInfo('   ...not found in: '+SymbolTableFileName+'.',ReportFileName,'file','y');
      // #RNU_RES_E
   else
      // #RNU_RES_B
      PrintStringInfo('   ...found in: '+SymbolTableFileName+'.',ReportFileName,'file','y');
      // #RNU_RES_E
      OutArg(cntout).Scope     = 'Local';
   end
<<<<<<< HEAD
=======
   
>>>>>>> 9e5793a7b05b23e6044a6d7a9ddd5db39ba375f0
   // #RNU_RES_B
   // --- Check in global symbol table. ---
   // #RNU_RES_E
   if (TBFlagfound == 0)
      // Local wins over global.
      SymbolTableFileName = GlobalVarsFileName;
      [TBFlagfound2,TBType,TBSize,TBValue,TBFindLike,TBDimension] = ...
         ST_Get(TBName,SymbolTableFileName);
      if (TBFlagfound2 == 0)
         // #RNU_RES_B
         PrintStringInfo('   ...not found in: '+SymbolTableFileName+'.',ReportFileName,'file','y');
         // #RNU_RES_E
         if SCI2Cstrncmps1size(SharedInfo.ASTReader.TempVarsName,OutArg(cntout).Name)
            OutArg(cntout).Scope = 'Temp';
         else
            OutArg(cntout).Scope = 'Local';
         end
      else
         // #RNU_RES_B
         PrintStringInfo('   ...found in: '+SymbolTableFileName+'.',ReportFileName,'file','y');
         // #RNU_RES_E
         OutArg(cntout).Scope     = 'Global';
      end
   end
   
   // #RNU_RES_B
   PrintStringInfo('   Type:      '+OutArg(cntout).Type,ReportFileName,'file','y');
   PrintStringInfo('   Size(1):   '+string(OutArg(cntout).Size(1)),ReportFileName,'file','y');
   PrintStringInfo('   Size(2):   '+string(OutArg(cntout).Size(2)),ReportFileName,'file','y');
   PrintStringInfo('   Value:     '+string(OutArg(cntout).Value),ReportFileName,'file','y');
   PrintStringInfo('   FindLike:  '+string(OutArg(cntout).FindLike),ReportFileName,'file','y');
   PrintStringInfo('   Dimension: '+string(OutArg(cntout).Dimension),ReportFileName,'file','y');
   PrintStringInfo('   Scope:     '+string(OutArg(cntout).Scope),ReportFileName,'file','y');
   PrintStringInfo(' ',ReportFileName,'file','y');
   // #RNU_RES_E
end

endfunction