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