michael@0: michael@0: /* michael@0: * Copyright 2011 Google Inc. michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: #ifndef SkScriptRuntime_DEFINED michael@0: #define SkScriptRuntime_DEFINED michael@0: michael@0: #include "SkOperand2.h" michael@0: #include "SkTDArray_Experimental.h" michael@0: #include "SkTDStack.h" michael@0: michael@0: class SkScriptCallBack; michael@0: michael@0: typedef SkLongArray(SkString*) SkTDStringArray; michael@0: typedef SkLongArray(SkScriptCallBack*) SkTDScriptCallBackArray; michael@0: michael@0: class SkScriptRuntime { michael@0: public: michael@0: enum SkError { michael@0: kNoError, michael@0: kArrayIndexOutOfBounds, michael@0: kCouldNotFindReferencedID, michael@0: kFunctionCallFailed, michael@0: kMemberOpFailed, michael@0: kPropertyOpFailed michael@0: }; michael@0: michael@0: SkScriptRuntime(SkTDScriptCallBackArray& callBackArray) : fCallBackArray(callBackArray) michael@0: { } michael@0: ~SkScriptRuntime(); michael@0: bool executeTokens(unsigned char* opCode); michael@0: bool getResult(SkOperand2* result); michael@0: void untrack(SkOpArray* array); michael@0: void untrack(SkString* string); michael@0: private: michael@0: void track(SkOpArray* array); michael@0: void track(SkString* string); michael@0: SkTDScriptCallBackArray& fCallBackArray; michael@0: SkError fError; michael@0: SkTDStack fRunStack; michael@0: SkLongArray(SkOpArray*) fTrackArray; michael@0: SkTDStringArray fTrackString; michael@0: // illegal michael@0: SkScriptRuntime& operator=(const SkScriptRuntime&); michael@0: }; michael@0: michael@0: #endif // SkScriptRuntime_DEFINED