WSF
UsSymbolTable.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11#ifndef USSYMBOLTABLE_HPP
12#define USSYMBOLTABLE_HPP
13
14#include <algorithm>
15#include <map>
16#include <memory>
17#include <set>
18#include <string.h>
19#include <vector>
20
21#include "UtMemoryDebug.hpp"
22#include "Util.hpp"
23
24class UsType;
25class UsFunction;
26
27// Stores an array of dynamic size. If the array is smaller than ARRAY_SIZE, no memory allocations are made.
28// The array is grown by increments of size 'GROW_SIZE'
29template<typename T, int ARRAY_SIZE, int GROW_SIZE = 10>
31{
32public:
34 : mSize(0)
35 , mDynamicBuffer(nullptr)
36 {
37 }
39 {
40 mSize = aRhs.mSize;
41 mDynamicBuffer = nullptr;
42 int arrayValuesToCopy = std::min(mSize, ARRAY_SIZE);
43 std::copy(&aRhs.mArray[0], &aRhs.mArray[0] + arrayValuesToCopy, &mArray[0]);
44 if (aRhs.mDynamicBuffer && mSize > ARRAY_SIZE)
45 {
46 mDynamicBuffer = new T[mSize - ARRAY_SIZE];
47 std::copy(aRhs.mDynamicBuffer, aRhs.mDynamicBuffer + mSize - ARRAY_SIZE, mDynamicBuffer);
48 }
49 }
50 ~DynamicArray() { delete[] mDynamicBuffer; }
51 void resize(int aSize)
52 {
53 if (mSize != aSize)
54 {
55 if (mSize < ARRAY_SIZE)
56 {
57 delete mDynamicBuffer;
58 mDynamicBuffer = nullptr;
59 }
60 else
61 {
62 if (((mSize - ARRAY_SIZE) % GROW_SIZE) != ((aSize - ARRAY_SIZE) % GROW_SIZE))
63 {
64 int newMemSize = ((aSize - ARRAY_SIZE + GROW_SIZE - 1) / GROW_SIZE) * GROW_SIZE;
65 T* newBuf = new T[newMemSize];
66 if (mDynamicBuffer)
67 {
68 for (int i = ARRAY_SIZE; i < mSize; ++i)
69 {
70 newBuf[i - ARRAY_SIZE] = mDynamicBuffer[i - ARRAY_SIZE];
71 }
72 delete[] mDynamicBuffer;
73 }
74 mDynamicBuffer = newBuf;
75 }
76 }
77 }
78 mSize = aSize;
79 }
80 T& operator[](int i)
81 {
82 if (i < ARRAY_SIZE)
83 {
84 return mArray[i];
85 }
86 return mDynamicBuffer[i - ARRAY_SIZE];
87 }
88 T& operator[](size_t i) { return operator[]((int)i); }
89 const T& operator[](int i) const
90 {
91 if (i < ARRAY_SIZE)
92 {
93 return mArray[i];
94 }
95 return mDynamicBuffer[i - ARRAY_SIZE];
96 }
97 const T& operator[](size_t i) const { return operator[]((int)i); }
98 void push_back(const T& aVal)
99 {
100 int i = size();
101 resize(i + 1);
102 (*this)[i] = aVal;
103 }
104
105 int size() const { return mSize; }
106
107private:
108 int mSize;
109 T mArray[ARRAY_SIZE];
110 T* mDynamicBuffer;
111};
112
113// A function prototype
115{
116public:
118 : mFlags()
119 , mReturnType()
120 {
121 }
122 enum Flags
123 {
127 };
128 bool operator<(const UsFunction& aRhs) const;
129 bool operator==(const UsFunction& aRhs) const;
130 int SpecializeType(int aThisType, std::pair<UsType*, UsType*> aArgs, int aType);
131 void Specialize(int aThisType, const std::pair<UsType*, UsType*>& aTempArgs);
135};
136
137// Contains the set of all types for the script system.
139{
140public:
141 typedef std::pair<int, int> TemplateArgs;
142 typedef std::pair<int, TemplateArgs> TemplateType;
143 typedef std::map<TemplateType, UsType*> TemplateTypeMap;
144
145 UsTypeList();
146
147 ~UsTypeList();
148
149 UsType* GetType(int aTypeId);
150 UsType* GetType(TemplateType aTypeId);
151
152 std::pair<UsType*, UsType*> GetTemplateArgs(TemplateArgs aArgs);
153
154 const char* GetString(const char* aString);
155 std::string GetTypeName(int aTypeId);
156 UsType* FindType(const std::string& aTypeName);
157 UsType* FindType(const char* aTypeStr);
158 UsType* FindTypeOrMakeTemplate(const std::string& aTypeName);
159 static int SplitTemplateType(const std::string& aTypeName,
160 std::string& aBaseName,
161 std::string& aTemplateArg1,
162 std::string& aTemplateArg2);
163 void AddType(const std::string& aTypeName, UsType* aType);
164 int AddPrototype(const UsFunction& aPrototype);
165 const UsFunction* GetPrototype(int aId);
166 std::string GetFunctionPrototype(const std::string& aName, const UsFunction& aFunction);
167
168
169 typedef std::set<const char*, wizard::UtilCStringCompare> StrMap;
170 typedef std::map<UsFunction, int> PrototypeMap;
171
172 // To store type information about both types a function prototypes,
173 // type ID's lower than this number are interpreted as normal type ID's
174 // other type ID's are interpreted as function prototypes
175 static const int cPROTOTYPE_ID_START = 100000;
176
177 // Map from type name to type ID
178 typedef std::map<const char*, int, wizard::UtilCStringCompare> NameMap;
180 // List of all types indexed by type ID
181 // First entry is 0
182 std::vector<UsType*> mTypes;
183 // map of specialized template types
188 // Function prototypes are stored on demand so that a function may have a type ID maps to
189 // information about return type and argument types.
190 std::vector<const UsFunction*> mPrototypes;
191
193
194 // To reduce the cost of storing strings, some strings are stored as pointers
195 // and stored here for cleanup. No user-defined strings should be stored here.
198};
199
200// A script type / class
202{
203public:
212 explicit UsType(UsTypeList* aTypes)
213 : mTypeList(aTypes)
214 , mTypeId(-1)
215 , mFlags()
216 {
217 }
218 UsType* Specialize(std::pair<UsType*, UsType*> aTemplateArgs) const;
219 void ReSpecialize(UsType* aTemplateBase);
220 int Id() const { return mTypeId; }
221 bool IsImplicitlyCastable(int aTypeId) const;
222 bool IsExplicitlyCastable(int aTypeId) const;
223 bool IsBaseType(int aTypeId) const;
224 bool HasStaticMethod(const char* aName);
225 UsFunction* FindMethod(const char* aName, std::vector<int>& aArgTypes);
226
227 void AddInheritedType(int aTypeId)
228 {
229 if (mTypeId != aTypeId)
230 {
231 if (std::find(mInheritedTypes.begin(), mInheritedTypes.end(), aTypeId) == mInheritedTypes.end())
232 {
233 mInheritedTypes.push_back(aTypeId);
234 }
235 }
236 }
237 void AddImplicitCastType(int aTypeId)
238 {
239 if (std::find(mImplicitCastTypes.begin(), mImplicitCastTypes.end(), aTypeId) == mImplicitCastTypes.end())
240 {
241 mImplicitCastTypes.push_back(aTypeId);
242 }
243 }
244 void AddExplicitCastType(int aTypeId)
245 {
246 if (std::find(mExplicitCastTypes.begin(), mExplicitCastTypes.end(), aTypeId) == mExplicitCastTypes.end())
247 {
248 mExplicitCastTypes.push_back(aTypeId);
249 }
250 }
251 bool HasMethod(const char* aName, const UsFunction& aFunc) const;
252 // Parent type list
254 // Unique ID for the type
256 // Flags that apply to this type
258 std::string mName;
259 // If this is a specialized template type, 1 or both of these is non-null
260 std::pair<UsType*, UsType*> mTemplateArgs;
261
262 typedef std::multimap<const char*, UsFunction, wizard::UtilCStringCompare> MethodMap;
263 // All methods available for this class. Overloading occurs if more than one shares a single name.
264 // The key is a string returned by UsTypeList::GetString()
266 // List of type id's this type inherits from
267 std::vector<int> mInheritedTypes;
268 // List of type id's to which this type may be implicitly cast
269 std::vector<int> mImplicitCastTypes;
270 // List of type id's to which this type may be explicitly cast
271 std::vector<int> mExplicitCastTypes;
272 // All variables available for this class. The key is the variable name.
273 using VarMap = std::map<std::string, UsType*>;
275};
276class UsSymbolTable;
277
278// A symbol is a named entity that needs to be stored for later access
279// in a script related context
281{
282public:
290
302
304 // The symbol table containing this symbol
306 // The symbol table of the lexical scope. This is the same as mTablePtr for normal variables, but may be
307 // a child of mTablePtr for 'global' variables
309
310 // Name of the symbol as specified by the script
311 std::string mName;
312 // EntryType value
313 unsigned char mEntryType;
314 // StorageType value
315 unsigned char mStorageType;
316 // If this is a definition, this stores the offset in characters from the start of the script
317 unsigned short mPosition;
318 // TypeID of the symbol if the symbol has a type
320 // Indicates the 'time' at which the symbol is first added to the symbol table
322};
323
324class UsSymbolTable;
326{
327public:
328 friend class UsSymbolTable;
331
332private:
333 std::vector<UsSymbolTable*> mSymbolTables;
334};
335
336// Symbols are stored in a symbol table.
337// Symbol tables are a directed acyclic graph with a single root symbol table
338class UsSymbolTable
339{
340 UsSymbolTable(const UsSymbolTable& aRhs);
341 UsSymbolTable& operator=(const UsSymbolTable& aRhs);
342
343public:
344 // When doing a search for symbols, there is limited depth.
345 // The linkage determines how the search takes place
347 {
350 // this links to another table with the same scope,
351 // as if the inner symbol table is actually a copy of the outer one
353 // this links to a new local scope which uses this table's variables and does not add search depth
355 // this links to a new scope which may use this table's variables, but adds to the 'depth' when searched
357 };
359 {
360 TableLink(UsSymbolTable* aTablePtr, TableLinkage aLinkage)
361 : mTablePtr(aTablePtr)
362 , mLinkage(aLinkage)
363 {
364 }
365 UsSymbolTable* mTablePtr;
367 };
368
370 : mPoolPtr(aPoolPtr)
371 {
372 mPoolPtr->mSymbolTables.push_back(this);
373 mThisTypePtr = nullptr;
374 }
376 void AddOuter(TableLinkage aLinkage, UsSymbolTable* aSymbolTablePtr);
377 UsSymbol* Search(const std::string& aName, int aDepth = 1, int aSequenceNumberLimit = 0x7fffffff);
378 UsSymbol* SearchTransCopy(const std::string& aName, int aSequenceNumberLimit = 0x7fffffff);
379
380 UsSymbolTable* GetParentScope() { return mOuterScopes.empty() ? nullptr : mOuterScopes[0].mTablePtr; }
381
382 UsSymbolTable* GetParent() const
383 {
384 if (mOuterScopes.empty())
385 return nullptr;
386 return mOuterScopes.back().mTablePtr;
387 }
388
389 bool IsInheriting(UsSymbolTable* aParent)
390 {
391 if (GetParent())
392 {
393 return GetParent() == aParent || GetParent()->IsInheriting(aParent);
394 }
395 return false;
396 }
397 // The first outer scope acts as the parent symbol table, and in most cases there will be only one outer scope
398 std::vector<TableLink> mOuterScopes;
399 // Inner scopes at this point are only used for deletion later
400 std::vector<TableLink> mInnerScopes;
401 // The map of entries in this symbol table. Only one entry per name.
402 typedef std::map<std::string, UsSymbol> EntryMap;
404 // One symbol may operate as a 'this' symbol. It is implicitly used for method calls.
405 // Note: The 'this' pointer is just the type of 'this'. It's a good enough solution for now.
407
409
411};
412
413// Light-weight reference to a script value (symbol or function)
415{
417 : mFunctionNamePtr(nullptr)
418 {
419 mSymbolPtr = nullptr;
420 }
422 : mFunctionNamePtr(nullptr)
423 {
424 mSymbolPtr = aSymPtr;
425 }
426 UsValRef(UsType* aObjectTypePtr, const char* aFunctionNamePtr)
427 : mFunctionNamePtr(aFunctionNamePtr)
428 {
429 mFunctionTypePtr = aObjectTypePtr;
430 }
431 bool IsNull() const { return mSymbolPtr == nullptr; }
432 bool operator==(const UsValRef& aRhs) const
433 {
434 return mSymbolPtr == aRhs.mSymbolPtr && mFunctionNamePtr == aRhs.mFunctionNamePtr;
435 }
436 bool operator<(const UsValRef& aRhs) const
437 {
438 if (mSymbolPtr < aRhs.mSymbolPtr)
439 {
440 return true;
441 }
442 if (mSymbolPtr > aRhs.mSymbolPtr)
443 {
444 return false;
445 }
447 }
448 union
449 {
452 };
453 const char* mFunctionNamePtr;
454};
455
456#endif // UsSymbolTable_h__
@ cMDB_UsSymbolTable
Definition ViMemoryDebugMarkers.hpp:21
@ cMDB_UsTypeList
Definition ViMemoryDebugMarkers.hpp:20
Definition UsSymbolTable.hpp:31
~DynamicArray()
Definition UsSymbolTable.hpp:50
T & operator[](int i)
Definition UsSymbolTable.hpp:80
void resize(int aSize)
Definition UsSymbolTable.hpp:51
const T & operator[](size_t i) const
Definition UsSymbolTable.hpp:97
DynamicArray(const DynamicArray< T, ARRAY_SIZE > &aRhs)
Definition UsSymbolTable.hpp:38
DynamicArray()
Definition UsSymbolTable.hpp:33
int size() const
Definition UsSymbolTable.hpp:105
T & operator[](size_t i)
Definition UsSymbolTable.hpp:88
void push_back(const T &aVal)
Definition UsSymbolTable.hpp:98
const T & operator[](int i) const
Definition UsSymbolTable.hpp:89
Definition UsSymbolTable.hpp:115
UsFunction()
Definition UsSymbolTable.hpp:117
int mReturnType
Definition UsSymbolTable.hpp:133
Flags
Definition UsSymbolTable.hpp:123
@ cVARARGS
Definition UsSymbolTable.hpp:126
@ cSTATIC
Definition UsSymbolTable.hpp:125
@ cAPP_METHOD
Definition UsSymbolTable.hpp:124
DynamicArray< int, 4 > mArgs
Definition UsSymbolTable.hpp:134
int SpecializeType(int aThisType, std::pair< UsType *, UsType * > aArgs, int aType)
Definition UsSymbolTable.cpp:17
void Specialize(int aThisType, const std::pair< UsType *, UsType * > &aTempArgs)
Definition UsSymbolTable.cpp:34
int mFlags
Definition UsSymbolTable.hpp:132
bool operator==(const UsFunction &aRhs) const
Definition UsSymbolTable.cpp:43
bool operator<(const UsFunction &aRhs) const
Definition UsSymbolTable.cpp:59
Definition UsSymbolTable.hpp:326
friend class UsSymbolTable
Definition UsSymbolTable.hpp:328
~UsSymbolTablePool()
Definition UsSymbolTable.cpp:592
UsSymbolTablePool()
Definition UsSymbolTable.hpp:329
Definition UsSymbolTable.hpp:339
TableLinkage
Definition UsSymbolTable.hpp:347
@ cNEW_SCOPE
Definition UsSymbolTable.hpp:356
@ cADD_DEPTH_FLAG
Definition UsSymbolTable.hpp:349
@ cTRANSPARENT_COPY
Definition UsSymbolTable.hpp:352
@ cLOCAL_SCOPE
Definition UsSymbolTable.hpp:354
@ cOPEN_NEW_SCOPE
Definition UsSymbolTable.hpp:348
UsSymbolTable * GetParent() const
Definition UsSymbolTable.hpp:382
UsSymbol * SearchTransCopy(const std::string &aName, int aSequenceNumberLimit=0x7fffffff)
Definition UsSymbolTable.cpp:227
UsSymbolTable * AddInner(TableLinkage aLinkage)
Definition UsSymbolTable.cpp:187
UsSymbolTable * GetParentScope()
Definition UsSymbolTable.hpp:380
void AddOuter(TableLinkage aLinkage, UsSymbolTable *aSymbolTablePtr)
Definition UsSymbolTable.cpp:195
bool IsInheriting(UsSymbolTable *aParent)
Definition UsSymbolTable.hpp:389
UsSymbolTable(UsSymbolTablePool *aPoolPtr)
Definition UsSymbolTable.hpp:369
std::map< std::string, UsSymbol > EntryMap
Definition UsSymbolTable.hpp:402
UsType * mThisTypePtr
Definition UsSymbolTable.hpp:406
std::vector< TableLink > mInnerScopes
Definition UsSymbolTable.hpp:400
UsSymbol * Search(const std::string &aName, int aDepth=1, int aSequenceNumberLimit=0x7fffffff)
Definition UsSymbolTable.cpp:204
UsSymbolTablePool * mPoolPtr
Definition UsSymbolTable.hpp:408
UT_MEMORY_DEBUG_MARKER(cMDB_UsSymbolTable)
EntryMap mEntries
Definition UsSymbolTable.hpp:403
std::vector< TableLink > mOuterScopes
Definition UsSymbolTable.hpp:398
Definition UsSymbolTable.hpp:281
unsigned char mStorageType
Definition UsSymbolTable.hpp:315
std::string mName
Definition UsSymbolTable.hpp:311
unsigned char mEntryType
Definition UsSymbolTable.hpp:313
int mSequenceNumber
Definition UsSymbolTable.hpp:321
StorageType
Definition UsSymbolTable.hpp:294
@ cSE_STATIC
Definition UsSymbolTable.hpp:299
@ cSE_EXTERN
Definition UsSymbolTable.hpp:300
@ cSE_PARAMETER
Definition UsSymbolTable.hpp:297
@ cSE_NOT_APPLICABLE
Definition UsSymbolTable.hpp:295
@ cSE_GLOBAL
Definition UsSymbolTable.hpp:298
@ cSE_AUTOMATIC
Definition UsSymbolTable.hpp:296
EntryType
Definition UsSymbolTable.hpp:284
@ cSE_SCRIPT
Definition UsSymbolTable.hpp:288
@ cSE_FUNCTION
Definition UsSymbolTable.hpp:286
@ cSE_APP_FUNCTION
Definition UsSymbolTable.hpp:287
@ cSE_VARIABLE
Definition UsSymbolTable.hpp:285
UsSymbolTable * mLexicalScopePtr
Definition UsSymbolTable.hpp:308
UsSymbolTable * mTablePtr
Definition UsSymbolTable.hpp:305
bool IsPrototype() const
Definition UsSymbolTable.hpp:303
int mRTypeId
Definition UsSymbolTable.hpp:319
unsigned short mPosition
Definition UsSymbolTable.hpp:317
Definition UsSymbolTable.hpp:139
UsType * mSetBase
Definition UsSymbolTable.hpp:186
std::map< const char *, int, wizard::UtilCStringCompare > NameMap
Definition UsSymbolTable.hpp:178
std::map< UsFunction, int > PrototypeMap
Definition UsSymbolTable.hpp:170
UsType * FindType(const std::string &aTypeName)
Definition UsSymbolTable.cpp:250
UsTypeList()
Definition UsSymbolTable.cpp:558
~UsTypeList()
Definition UsSymbolTable.cpp:564
UsType * mArrayBase
Definition UsSymbolTable.hpp:187
std::string GetTypeName(int aTypeId)
Definition UsSymbolTable.cpp:510
void AddType(const std::string &aTypeName, UsType *aType)
Definition UsSymbolTable.cpp:431
static int SplitTemplateType(const std::string &aTypeName, std::string &aBaseName, std::string &aTemplateArg1, std::string &aTemplateArg2)
Definition UsSymbolTable.cpp:265
UsType * mMapBase
Definition UsSymbolTable.hpp:185
StrMap mStrings
Definition UsSymbolTable.hpp:196
std::string GetFunctionPrototype(const std::string &aName, const UsFunction &aFunction)
Definition UsSymbolTable.cpp:576
const char * GetString(const char *aString)
Definition UsSymbolTable.cpp:541
std::set< const char *, wizard::UtilCStringCompare > StrMap
Definition UsSymbolTable.hpp:169
UsType * GetType(int aTypeId)
Definition UsSymbolTable.cpp:440
TemplateTypeMap mTemplateTypes
Definition UsSymbolTable.hpp:184
UT_MEMORY_DEBUG_MARKER(cMDB_UsTypeList)
std::vector< const UsFunction * > mPrototypes
Definition UsSymbolTable.hpp:190
std::pair< UsType *, UsType * > GetTemplateArgs(TemplateArgs aArgs)
Definition UsSymbolTable.cpp:497
NameMap mNameMap
Definition UsSymbolTable.hpp:179
static const int cPROTOTYPE_ID_START
Definition UsSymbolTable.hpp:175
std::pair< int, int > TemplateArgs
Definition UsSymbolTable.hpp:141
const UsFunction * GetPrototype(int aId)
Definition UsSymbolTable.cpp:516
UsType * FindTypeOrMakeTemplate(const std::string &aTypeName)
Definition UsSymbolTable.cpp:343
std::pair< int, TemplateArgs > TemplateType
Definition UsSymbolTable.hpp:142
std::vector< UsType * > mTypes
Definition UsSymbolTable.hpp:182
int AddPrototype(const UsFunction &aPrototype)
Definition UsSymbolTable.cpp:525
PrototypeMap mPrototypeMap
Definition UsSymbolTable.hpp:192
std::map< TemplateType, UsType * > TemplateTypeMap
Definition UsSymbolTable.hpp:143
Definition UsSymbolTable.hpp:202
UsType(UsTypeList *aTypes)
Definition UsSymbolTable.hpp:212
void AddInheritedType(int aTypeId)
Definition UsSymbolTable.hpp:227
bool IsExplicitlyCastable(int aTypeId) const
Definition UsSymbolTable.cpp:106
MethodMap mMethods
Definition UsSymbolTable.hpp:265
void ReSpecialize(UsType *aTemplateBase)
Definition UsSymbolTable.cpp:626
std::vector< int > mExplicitCastTypes
Definition UsSymbolTable.hpp:271
Flags
Definition UsSymbolTable.hpp:205
@ cEQUALITY_COMPARABLE
Definition UsSymbolTable.hpp:210
@ cCLONEABLE
Definition UsSymbolTable.hpp:207
@ cLESS_THAN_COMPARABLE
Definition UsSymbolTable.hpp:209
@ cCONSTRUCTIBLE
Definition UsSymbolTable.hpp:206
@ cCONTAINER
Definition UsSymbolTable.hpp:208
std::map< std::string, UsType * > VarMap
Definition UsSymbolTable.hpp:273
bool IsImplicitlyCastable(int aTypeId) const
Definition UsSymbolTable.cpp:102
std::pair< UsType *, UsType * > mTemplateArgs
Definition UsSymbolTable.hpp:260
std::string mName
Definition UsSymbolTable.hpp:258
int mFlags
Definition UsSymbolTable.hpp:257
bool HasStaticMethod(const char *aName)
Definition UsSymbolTable.cpp:121
UsType * Specialize(std::pair< UsType *, UsType * > aTemplateArgs) const
Definition UsSymbolTable.cpp:600
std::multimap< const char *, UsFunction, wizard::UtilCStringCompare > MethodMap
Definition UsSymbolTable.hpp:262
void AddImplicitCastType(int aTypeId)
Definition UsSymbolTable.hpp:237
UsFunction * FindMethod(const char *aName, std::vector< int > &aArgTypes)
Definition UsSymbolTable.cpp:136
bool HasMethod(const char *aName, const UsFunction &aFunc) const
Definition UsSymbolTable.cpp:635
UsTypeList * mTypeList
Definition UsSymbolTable.hpp:253
VarMap mVariables
Definition UsSymbolTable.hpp:274
int Id() const
Definition UsSymbolTable.hpp:220
std::vector< int > mImplicitCastTypes
Definition UsSymbolTable.hpp:269
bool IsBaseType(int aTypeId) const
Definition UsSymbolTable.cpp:110
void AddExplicitCastType(int aTypeId)
Definition UsSymbolTable.hpp:244
std::vector< int > mInheritedTypes
Definition UsSymbolTable.hpp:267
int mTypeId
Definition UsSymbolTable.hpp:255
UsValRef(UsType *aObjectTypePtr, const char *aFunctionNamePtr)
Definition UsSymbolTable.hpp:426
UsType * mFunctionTypePtr
Definition UsSymbolTable.hpp:451
bool operator<(const UsValRef &aRhs) const
Definition UsSymbolTable.hpp:436
UsValRef()
Definition UsSymbolTable.hpp:416
bool operator==(const UsValRef &aRhs) const
Definition UsSymbolTable.hpp:432
bool IsNull() const
Definition UsSymbolTable.hpp:431
const char * mFunctionNamePtr
Definition UsSymbolTable.hpp:453
UsSymbol * mSymbolPtr
Definition UsSymbolTable.hpp:450
UsValRef(UsSymbol *aSymPtr)
Definition UsSymbolTable.hpp:421
Copyrights Multiple, All Rights Reserved