1
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8#ifndef SkScriptRuntime_DEFINED
9#define SkScriptRuntime_DEFINED
10
11#include "SkOperand2.h"
12#include "SkTDArray_Experimental.h"
13#include "SkTDStack.h"
14
15class SkScriptCallBack;
16
17typedef SkLongArray(SkString*) SkTDStringArray;
18typedef SkLongArray(SkScriptCallBack*) SkTDScriptCallBackArray;
19
20class SkScriptRuntime {
21public:
22    enum SkError {
23        kNoError,
24        kArrayIndexOutOfBounds,
25        kCouldNotFindReferencedID,
26        kFunctionCallFailed,
27        kMemberOpFailed,
28        kPropertyOpFailed
29    };
30
31    SkScriptRuntime(SkTDScriptCallBackArray& callBackArray) : fCallBackArray(callBackArray)
32        {  }
33    ~SkScriptRuntime();
34    bool executeTokens(unsigned char* opCode);
35    bool getResult(SkOperand2* result);
36    void untrack(SkOpArray* array);
37    void untrack(SkString* string);
38private:
39    void track(SkOpArray* array);
40    void track(SkString* string);
41    SkTDScriptCallBackArray& fCallBackArray;
42    SkError fError;
43    SkTDStack<SkOperand2> fRunStack;
44    SkLongArray(SkOpArray*) fTrackArray;
45    SkTDStringArray fTrackString;
46    // illegal
47    SkScriptRuntime& operator=(const SkScriptRuntime&);
48};
49
50#endif // SkScriptRuntime_DEFINED
51