
/*
 * 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
