/** * @file lscript_error.h * @brief error reporting class and strings * * $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_ERROR_H #define LL_LSCRIPT_ERROR_H #include "lscript_scope.h" typedef enum e_lscript_compile_pass { LSCP_INVALID, LSCP_PRETTY_PRINT, LSCP_PRUNE, LSCP_SCOPE_PASS1, LSCP_SCOPE_PASS2, LSCP_TYPE, LSCP_RESOURCE, LSCP_EMIT_ASSEMBLY, LSCP_EMIT_BYTE_CODE, LSCP_DETERMINE_HANDLERS, LSCP_LIST_BUILD_SIMPLE, LSCP_TO_STACK, LSCP_BUILD_FUNCTION_ARGS, LSCP_EMIT_CIL_ASSEMBLY, LSCP_EOF } LSCRIPTCompilePass; typedef enum e_lscript_prune_type { LSPRUNE_INVALID, LSPRUNE_GLOBAL_VOIDS, LSPRUNE_GLOBAL_NON_VOIDS, LSPRUNE_EVENTS, LSPRUNE_DEAD_CODE, LSPRUNE_EOF } LSCRIPTPruneType; extern S32 gColumn; extern S32 gLine; extern S32 gInternalColumn; extern S32 gInternalLine; // used to describe where in the file this piece is class LLScriptByteCodeChunk; class LLScriptLibData; class LLScriptFilePosition { public: LLScriptFilePosition(S32 line, S32 col) : mLineNumber(line), mColumnNumber(col), mByteOffset(0), mByteSize(0) { } virtual ~LLScriptFilePosition() {} virtual void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) = 0; virtual S32 getSize() = 0; void fdotabs(LLFILE *fp, S32 tabs, S32 tabsize); S32 mLineNumber; S32 mColumnNumber; S32 mByteOffset; S32 mByteSize; }; typedef enum e_lscript_warnings { LSWARN_INVALID, LSWARN_DEAD_CODE, LSWARN_EOF } LSCRIPTWarnings; typedef enum e_lscript_errors { LSERROR_INVALID, LSERROR_SYNTAX_ERROR, LSERROR_NO_RETURN, LSERROR_INVALID_VOID_RETURN, LSERROR_INVALID_RETURN, LSERROR_STATE_CHANGE_IN_GLOBAL, LSERROR_DUPLICATE_NAME, LSERROR_UNDEFINED_NAME, LSERROR_TYPE_MISMATCH, LSERROR_EXPRESSION_ON_LVALUE, LSERROR_ASSEMBLE_OUT_OF_MEMORY, LSERROR_FUNCTION_TYPE_ERROR, LSERROR_VECTOR_METHOD_ERROR, LSERROR_NO_LISTS_IN_LISTS, LSERROR_NO_UNITIALIZED_VARIABLES_IN_LISTS, LSERROR_NEED_NEW_SCOPE, LSERROR_CIL_ASSEMBLER_FAILED = 16, // Mono build error. LSERROR_BYTECODE_TRANSFORM_FAILED = 17, // Mono build error. LSERROR_BYTECODE_VERIFICATION_FAILED, // Mono build error. LSERROR_EOF } LSCRIPTErrors; class LLScriptGenerateErrorText { public: LLScriptGenerateErrorText() { init(); } ~LLScriptGenerateErrorText() {} void init() { mTotalErrors = 0; mTotalWarnings = 0; } void writeWarning(LLFILE *fp, LLScriptFilePosition *pos, LSCRIPTWarnings warning); void writeWarning(LLFILE *fp, S32 line, S32 col, LSCRIPTWarnings warning); void writeError(LLFILE *fp, LLScriptFilePosition *pos, LSCRIPTErrors error); void writeError(LLFILE *fp, S32 line, S32 col, LSCRIPTErrors error); BOOL getErrors() { return mTotalErrors; } BOOL getWarnings() { return mTotalWarnings; } S32 mTotalErrors; S32 mTotalWarnings; }; std::string getLScriptErrorString(LSCRIPTErrors error); extern LLScriptGenerateErrorText gErrorToText; #endif