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