//------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once /*************************************************************************** Exception blocks ***************************************************************************/ class ParseNode; class COleScript; interface IScanner; inline void FreeExcepInfo(EXCEPINFO *pei) { if (pei->bstrSource) SysFreeString(pei->bstrSource); if (pei->bstrDescription) SysFreeString(pei->bstrDescription); if (pei->bstrHelpFile) SysFreeString(pei->bstrHelpFile); memset(pei, 0, sizeof(*pei)); } void CopyException (EXCEPINFO *pexcepinfoDest, const EXCEPINFO *pexcepinfoSource); HRESULT MapHr(HRESULT hr, ErrorTypeEnum * errorTypeOut = nullptr); class SRCINFO; class ActiveScriptError; class ScriptException { public: int32 ichMin; int32 ichLim; EXCEPINFO ei; public: ScriptException() { memset(this, 0, sizeof(*this)); } ~ScriptException(void); public: void CopyInto(ScriptException *pse); void Free(); void GetError(HRESULT *phr, EXCEPINFO *pei); // Clears error. }; class CompileScriptException : public ScriptException { public: int32 line; // line number of error (zero based) int32 ichMinLine; // starting char of the line bool hasLineNumberInfo; // TODO: if the line contains \0 character the substring following \0 will not be included: BSTR bstrLine; // source line (if available) public: CompileScriptException(void) : ScriptException(), line(0), ichMinLine(0), hasLineNumberInfo(false), bstrLine(nullptr) { } ~CompileScriptException(); public: void Free(); void GetError(HRESULT *phr, EXCEPINFO *pei) { ScriptException::GetError(phr, pei); Free(); } void CopyInto(CompileScriptException* cse); HRESULT ProcessError(IScanner * pScan, HRESULT hr, ParseNode * pnodeBase); friend class ActiveScriptError; };