diff options
author | Cinder <cinder@sdf.org> | 2015-02-08 12:53:39 -0700 |
---|---|---|
committer | Cinder <cinder@sdf.org> | 2015-02-08 12:53:39 -0700 |
commit | ca08bd5aba5e69fce3b0f5b4f861ffec9fe4d2e5 (patch) | |
tree | 16bdd84d4a0911c80d95d5dc04a3bdd342506e55 /indra/lscript/lscript_compile/lscript_scope.h | |
parent | ae6440eecc4d6c018a3634c2c06052757bde962f (diff) |
OPEN-292 - Remove lscript from project,
Remove legacy udp script upload methods,
Refactor script runtime perms from three arrays to one struct array so we don't have to juggle array order anymore.
Diffstat (limited to 'indra/lscript/lscript_compile/lscript_scope.h')
-rwxr-xr-x | indra/lscript/lscript_compile/lscript_scope.h | 401 |
1 files changed, 0 insertions, 401 deletions
diff --git a/indra/lscript/lscript_compile/lscript_scope.h b/indra/lscript/lscript_compile/lscript_scope.h deleted file mode 100755 index ffff91c81b..0000000000 --- a/indra/lscript/lscript_compile/lscript_scope.h +++ /dev/null @@ -1,401 +0,0 @@ -/** - * @file lscript_scope.h - * @brief builds nametable and checks scope - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#ifndef LL_LSCRIPT_SCOPE_H -#define LL_LSCRIPT_SCOPE_H - -#include <map> -#include "llstringtable.h" -#include "lscript_byteformat.h" - -typedef enum e_lscript_identifier_type -{ - LIT_INVALID, - LIT_GLOBAL, - LIT_VARIABLE, - LIT_FUNCTION, - LIT_LABEL, - LIT_STATE, - LIT_HANDLER, - LIT_LIBRARY_FUNCTION, - LIT_EOF -} LSCRIPTIdentifierType; - -const char LSCRIPTFunctionTypeStrings[LST_EOF] = /*Flawfinder: ignore*/ -{ - '0', - 'i', - 'f', - 's', - 'k', - 'v', - 'q', - 'l', - '0' -}; - -const char * const LSCRIPTListDescription[LST_EOF] = /*Flawfinder: ignore*/ -{ - "PUSHARGB 0", - "PUSHARGB 1", - "PUSHARGB 2", - "PUSHARGB 3", - "PUSHARGB 4", - "PUSHARGB 5", - "PUSHARGB 6", - "PUSHARGB 7", - "PUSHARGB 0" -}; - -const char * const LSCRIPTTypePush[LST_EOF] = /*Flawfinder: ignore*/ -{ - "INVALID", - "PUSHE", - "PUSHE", - "PUSHE", - "PUSHE", - "PUSHEV", - "PUSHEQ", - "PUSHE", - "undefined" -}; - -const char * const LSCRIPTTypeReturn[LST_EOF] = /*Flawfinder: ignore*/ -{ - "INVALID", - "LOADP -12", - "LOADP -12", - "STORES -12\nPOP", - "STORES -12\nPOP", - "LOADVP -20", - "LOADQP -24", - "LOADLP -12", - "undefined" -}; - -const char * const LSCRIPTTypePop[LST_EOF] = /*Flawfinder: ignore*/ -{ - "INVALID", - "POP", - "POP", - "POPS", - "POPS", - "POPV", - "POPQ", - "POPL", - "undefined" -}; - -const char * const LSCRIPTTypeDuplicate[LST_EOF] = /*Flawfinder: ignore*/ -{ - "INVALID", - "DUP", - "DUP", - "DUPS", - "DUPS", - "DUPV", - "DUPQ", - "DUPL", - "undefined" -}; - -const char * const LSCRIPTTypeLocalStore[LST_EOF] = /*Flawfinder: ignore*/ -{ - "INVALID", - "STORE ", - "STORE ", - "STORES ", - "STORES ", - "STOREV ", - "STOREQ ", - "STOREL ", - "undefined" -}; - -const char * const LSCRIPTTypeLocalDeclaration[LST_EOF] = /*Flawfinder: ignore*/ -{ - "INVALID", - "STOREP ", - "STOREP ", - "STORESP ", - "STORESP ", - "STOREVP ", - "STOREQP ", - "STORELP ", - "undefined" -}; - -const char * const LSCRIPTTypeGlobalStore[LST_EOF] = /*Flawfinder: ignore*/ -{ - "INVALID", - "STOREG ", - "STOREG ", - "STORESG ", - "STORESG ", - "STOREGV ", - "STOREGQ ", - "STORELG ", - "undefined" -}; - -const char * const LSCRIPTTypeLocalPush[LST_EOF] = /*Flawfinder: ignore*/ -{ - "INVALID", - "PUSH ", - "PUSH ", - "PUSHS ", - "PUSHS ", - "PUSHV ", - "PUSHQ ", - "PUSHL ", - "undefined" -}; - -const char * const LSCRIPTTypeLocalPush1[LST_EOF] = /*Flawfinder: ignore*/ -{ - "INVALID", - "PUSHARGI 1", - "PUSHARGF 1", - "undefined", - "undefined", - "undefined", - "undefined", - "undefined", - "undefined" -}; - -const char * const LSCRIPTTypeGlobalPush[LST_EOF] = /*Flawfinder: ignore*/ -{ - "INVALID", - "PUSHG ", - "PUSHG ", - "PUSHGS ", - "PUSHGS ", - "PUSHGV ", - "PUSHGQ ", - "PUSHGL ", - "undefined" -}; - -class LLScriptSimpleAssignable; - -class LLScriptArgString -{ -public: - LLScriptArgString() : mString(NULL) {} - ~LLScriptArgString() { delete [] mString; } - - LSCRIPTType getType(S32 count) - { - if (!mString) - return LST_NULL; - S32 length = (S32)strlen(mString); /*Flawfinder: ignore*/ - if (count >= length) - { - return LST_NULL; - } - switch(mString[count]) - { - case 'i': - return LST_INTEGER; - case 'f': - return LST_FLOATINGPOINT; - case 's': - return LST_STRING; - case 'k': - return LST_KEY; - case 'v': - return LST_VECTOR; - case 'q': - return LST_QUATERNION; - case 'l': - return LST_LIST; - default: - return LST_NULL; - } - } - - void addType(LSCRIPTType type) - { - S32 count = 0; - if (mString) - { - count = (S32)strlen(mString); /*Flawfinder: ignore*/ - char *temp = new char[count + 2]; - memcpy(temp, mString, count); /*Flawfinder: ignore*/ - delete [] mString; - mString = temp; - mString[count + 1] = 0; - } - else - { - mString = new char[count + 2]; - mString[count + 1] = 0; - } - mString[count++] = LSCRIPTFunctionTypeStrings[type]; - } - - S32 getNumber() - { - if (mString) - return (S32)strlen(mString); /*Flawfinder: ignore*/ - else - return 0; - } - - char *mString; -}; - -class LLScriptScopeEntry -{ -public: - LLScriptScopeEntry(const char *identifier, LSCRIPTIdentifierType idtype, LSCRIPTType type, S32 count = 0) - : mIdentifier(identifier), mIDType(idtype), mType(type), mOffset(0), mSize(0), mAssignable(NULL), mCount(count), mLibraryNumber(0) - { - } - - ~LLScriptScopeEntry() {} - - const char *mIdentifier; - LSCRIPTIdentifierType mIDType; - LSCRIPTType mType; - S32 mOffset; - S32 mSize; - LLScriptSimpleAssignable *mAssignable; - S32 mCount; // NOTE: Index for locals in CIL. - U16 mLibraryNumber; - LLScriptArgString mFunctionArgs; - LLScriptArgString mLocals; -}; - -class LLScriptScope -{ -public: - LLScriptScope(LLStringTable *stable) - : mParentScope(NULL), mSTable(stable), mFunctionCount(0), mStateCount(0) - { - } - - ~LLScriptScope() - { - delete_and_clear(mEntryMap); - } - - LLScriptScopeEntry *addEntry(const char *identifier, LSCRIPTIdentifierType idtype, LSCRIPTType type) - { - const char *name = mSTable->addString(identifier); - if (mEntryMap.find(name) == mEntryMap.end()) - { - if (idtype == LIT_FUNCTION) - mEntryMap[name] = new LLScriptScopeEntry(name, idtype, type, mFunctionCount++); - else if (idtype == LIT_STATE) - mEntryMap[name] = new LLScriptScopeEntry(name, idtype, type, mStateCount++); - else - mEntryMap[name] = new LLScriptScopeEntry(name, idtype, type); - return mEntryMap[name]; - } - else - { - // identifier already exists at this scope - return NULL; - } - } - - bool checkEntry(const char *identifier) - { - const char *name = mSTable->addString(identifier); - return mEntryMap.find(name) != mEntryMap.end(); - } - - LLScriptScopeEntry *findEntry(const char *identifier) - { - const char *name = mSTable->addString(identifier); - LLScriptScope *scope = this; - - while (scope) - { - entry_map_t::iterator found_it = mEntryMap.find(name); - if (found_it != mEntryMap.end()) - { - // cool, we found it at this scope - return found_it->second; - } - scope = scope->mParentScope; - } - return NULL; - } - - LLScriptScopeEntry *findEntryTyped(const char *identifier, LSCRIPTIdentifierType idtype) - { - const char *name = mSTable->addString(identifier); - LLScriptScope *scope = this; - - while (scope) - { - entry_map_t::iterator found_it = scope->mEntryMap.find(name); - if (found_it != scope->mEntryMap.end()) - { - // need to check type, and if type is function we need to check both types - if (idtype == LIT_FUNCTION) - { - if (found_it->second->mIDType == LIT_FUNCTION) - { - return (found_it->second); - } - else if (found_it->second->mIDType == LIT_LIBRARY_FUNCTION) - { - return (found_it->second); - } - } - else if (found_it->second->mIDType == idtype) - { - // cool, we found it at this scope - return (found_it->second); - } - } - scope = scope->mParentScope; - } - return NULL; - } - - void addParentScope(LLScriptScope *scope) - { - mParentScope = scope; - } - - typedef std::map<const char *, LLScriptScopeEntry *> entry_map_t; - entry_map_t mEntryMap; - LLScriptScope* mParentScope; - LLStringTable* mSTable; - S32 mFunctionCount; - S32 mStateCount; -}; - -extern LLStringTable *gScopeStringTable; - - - -#endif |