1685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com 2685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com/* 3685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Copyright 2006 The Android Open Source Project 4685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * 5685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * found in the LICENSE file. 7685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com */ 8685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com 9bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 10bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifndef SkScript_DEFINED 11bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#define SkScript_DEFINED 12bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 13bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkOperand.h" 14bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkIntArray.h" 15bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkTDict.h" 16bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkTDStack.h" 17bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 18bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comclass SkAnimateMaker; 19bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 20bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comclass SkScriptEngine { 21bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.compublic: 22bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com enum Error { 23bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kNoError, 24bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kArrayIndexOutOfBounds, 25bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kCouldNotFindReferencedID, 26bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kDotOperatorExpectsObject, 27bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kErrorInArrrayIndex, 28bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kErrorInFunctionParameters, 29bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kExpectedArray, 30bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kExpectedBooleanExpression, 31bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kExpectedFieldName, 32bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kExpectedHex, 33bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kExpectedIntForConditionOperator, 34bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kExpectedNumber, 35bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kExpectedNumberForArrayIndex, 36bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kExpectedOperator, 37bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kExpectedToken, 38bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kExpectedTokenBeforeDotOperator, 39bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kExpectedValue, 40bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kHandleMemberFailed, 41bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kHandleMemberFunctionFailed, 42bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kHandleUnboxFailed, 43bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kIndexOutOfRange, 44bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kMismatchedArrayBrace, 45bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kMismatchedBrackets, 46bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kNoFunctionHandlerFound, 47bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kPrematureEnd, 48bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kTooManyParameters, 49bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kTypeConversionFailed, 50bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kUnterminatedString 51bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com }; 52bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 53bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com enum SkOpType { 54bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kNoType, 55bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kInt = 1, 56bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kScalar = 2, 57bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kString = 4, 58bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kArray = 8, 59bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kObject = 16 60bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// kStruct = 32 61bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com }; 62bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 63bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com typedef bool (*_boxCallBack)(void* userStorage, SkScriptValue* result); 64bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com typedef bool (*_functionCallBack)(const char* func, size_t len, SkTDArray<SkScriptValue>& params, 65bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void* userStorage, SkScriptValue* result); 66dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com typedef bool (*_memberCallBack)(const char* member, size_t len, void* object, 67bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void* userStorage, SkScriptValue* result); 68dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com typedef bool (*_memberFunctionCallBack)(const char* member, size_t len, void* object, 69bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkTDArray<SkScriptValue>& params, void* userStorage, SkScriptValue* result); 70bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// typedef bool (*_objectToStringCallBack)(void* object, void* userStorage, SkScriptValue* result); 71bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com typedef bool (*_propertyCallBack)(const char* prop, size_t len, void* userStorage, SkScriptValue* result); 72bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com typedef bool (*_unboxCallBack)(void* userStorage, SkScriptValue* result); 73bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkScriptEngine(SkOpType returnType); 74bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com ~SkScriptEngine(); 75bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void boxCallBack(_boxCallBack func, void* userStorage); 76bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool convertTo(SkDisplayTypes , SkScriptValue* ); 77bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool evaluateScript(const char** script, SkScriptValue* value); 78bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void forget(SkTypedArray* array); 79bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void functionCallBack(_functionCallBack func, void* userStorage); 80bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com Error getError() const { return fError; } 81bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifdef SK_DEBUG 82bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool getErrorString(SkString* err) const; 83bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif 84bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void memberCallBack(_memberCallBack , void* userStorage); 85bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void memberFunctionCallBack(_memberFunctionCallBack , void* userStorage); 86bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// void objectToStringCallBack(_objectToStringCallBack , void* userStorage); 87bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void propertyCallBack(_propertyCallBack prop, void* userStorage); 88bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void track(SkTypedArray* array); 89bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void track(SkString* string); 90bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void unboxCallBack(_unboxCallBack func, void* userStorage); 91bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static bool ConvertTo(SkScriptEngine* , SkDisplayTypes toType, SkScriptValue* value); 92bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static SkScalar IntToScalar(int32_t ); 93bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static SkDisplayTypes ToDisplayType(SkOpType type); 94bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static SkOpType ToOpType(SkDisplayTypes type); 95bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static bool ValueToString(SkScriptValue value, SkString* string); 96bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 97bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com enum CallBackType { 98bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kBox, 99bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kFunction, 100bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kMember, 101bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kMemberFunction, 102bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com // kObjectToString, 103bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kProperty, 104bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kUnbox 105bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com }; 106bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 107bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com struct UserCallBack { 108bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com CallBackType fCallBackType; 109bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void* fUserStorage; 110bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com union { 111bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com _boxCallBack fBoxCallBack; 112bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com _functionCallBack fFunctionCallBack; 113bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com _memberCallBack fMemberCallBack; 114bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com _memberFunctionCallBack fMemberFunctionCallBack; 115bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com // _objectToStringCallBack fObjectToStringCallBack; 116bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com _propertyCallBack fPropertyCallBack; 117bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com _unboxCallBack fUnboxCallBack; 118bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com }; 119bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com }; 120bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 121bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com enum SkOp { 122bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kUnassigned, 123bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kAdd, 124bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kAddInt = kAdd, 125bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kAddScalar, 126bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kAddString, // string concat 127bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kArrayOp, 128bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kBitAnd, 129bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kBitNot, 130bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kBitOr, 131bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kDivide, 132bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kDivideInt = kDivide, 133bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kDivideScalar, 134bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kElse, 135bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kEqual, 136bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kEqualInt = kEqual, 137bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kEqualScalar, 138bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kEqualString, 139bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kFlipOps, 140bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kGreaterEqual, 141bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kGreaterEqualInt = kGreaterEqual, 142bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kGreaterEqualScalar, 143bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kGreaterEqualString, 144bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kIf, 145bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kLogicalAnd, 146bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kLogicalNot, 147bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kLogicalOr, 148bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kMinus, 149bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kMinusInt = kMinus, 150bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kMinusScalar, 151bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kModulo, 152bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kModuloInt = kModulo, 153bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kModuloScalar, 154bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kMultiply, 155bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kMultiplyInt = kMultiply, 156bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kMultiplyScalar, 157bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kParen, 158bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kShiftLeft, 159bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kShiftRight, // signed 160bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kSubtract, 161bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kSubtractInt = kSubtract, 162bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kSubtractScalar, 163bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kXor, 164bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kArtificialOp = 0x40 165bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com }; 166bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 167bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com enum SkOpBias { 168bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kNoBias, 169bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kTowardsNumber = 0, 170bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kTowardsString 171bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com }; 172dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com 173bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comprotected: 174bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 175bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com struct SkOperatorAttributes { 176bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com unsigned int fLeftType : 3; // SkOpType, but only lower values 177bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com unsigned int fRightType : 3; // SkOpType, but only lower values 178bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkOpBias fBias : 1; 179bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com }; 180bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 181bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com struct SkSuppress { // !!! could be compressed to a long 182bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkOp fOperator; // operand which enabled suppression 183bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int fOpStackDepth; // depth when suppression operator was found 184bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkBool8 fSuppress; // set if suppression happens now, as opposed to later 185bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkBool8 fElse; // set on the : half of ? : 186bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com }; 187bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 188bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static const SkOperatorAttributes gOpAttributes[]; 189bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static const signed char gPrecedence[]; 190bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int arithmeticOp(char ch, char nextChar, bool lastPush); 191bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void commonCallBack(CallBackType type, UserCallBack& callBack, void* userStorage); 192bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool convertParams(SkTDArray<SkScriptValue>&, const SkFunctionParamType* , 193bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int paramTypeCount); 194bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void convertToString(SkOperand& operand, SkDisplayTypes type) { 195bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkScriptValue scriptValue; 196bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com scriptValue.fOperand = operand; 197bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com scriptValue.fType = type; 198bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com convertTo(SkType_String, &scriptValue); 199bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com operand = scriptValue.fOperand; 200bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 201bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool evaluateDot(const char*& script, bool suppressed); 202bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool evaluateDotParam(const char*& script, bool suppressed, const char* field, size_t fieldLength); 203bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool functionParams(const char** scriptPtr, SkTDArray<SkScriptValue>& params); 204bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool handleArrayIndexer(const char** scriptPtr, bool suppressed); 205bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool handleBox(SkScriptValue* value); 206bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool handleFunction(const char** scriptPtr, bool suppressed); 207bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool handleMember(const char* field, size_t len, void* object); 208bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool handleMemberFunction(const char* field, size_t len, void* object, SkTDArray<SkScriptValue>& params); 209bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// bool handleObjectToString(void* object); 210bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool handleProperty(bool suppressed); 211bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool handleUnbox(SkScriptValue* scriptValue); 212bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool innerScript(const char** scriptPtr, SkScriptValue* value); 213bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int logicalOp(char ch, char nextChar); 214bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com Error opError(); 215bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool processOp(); 216bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void setAnimateMaker(SkAnimateMaker* maker) { fMaker = maker; } 217bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool setError(Error , const char* pos); 218bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com enum SkBraceStyle { 219bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com // kStructBrace, 220bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kArrayBrace, 221bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com kFunctionBrace 222bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com }; 223bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 224bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#if 0 225bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkIntArray(SkBraceStyle) fBraceStack; // curly, square, function paren 226bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkIntArray(SkOp) fOpStack; 227bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkIntArray(SkOpType) fTypeStack; 228bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkTDOperandArray fOperandStack; 229bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkTDArray<SkSuppress> fSuppressStack; 230bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#else 231bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkTDStack<SkBraceStyle> fBraceStack; // curly, square, function paren 232bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkTDStack<SkOp> fOpStack; 233bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkTDStack<SkOpType> fTypeStack; 234bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkTDStack<SkOperand> fOperandStack; 235bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkTDStack<SkSuppress> fSuppressStack; 236bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif 237bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkAnimateMaker* fMaker; 238bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkTDTypedArrayArray fTrackArray; 239bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkTDStringArray fTrackString; 240bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com const char* fToken; // one-deep stack 241bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com size_t fTokenLength; 242bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkTDArray<UserCallBack> fUserCallBacks; 243bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkOpType fReturnType; 244bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com Error fError; 245bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int fErrorPosition; 246bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comprivate: 247bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com friend class SkTypedArray; 248bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifdef SK_SUPPORT_UNITTEST 249bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.compublic: 250bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static void UnitTest(); 251bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif 252bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}; 253bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 254bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifdef SK_SUPPORT_UNITTEST 255bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 256bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comstruct SkScriptNAnswer { 257bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com const char* fScript; 258bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkDisplayTypes fType; 259bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int32_t fIntAnswer; 260bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkScalar fScalarAnswer; 261bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com const char* fStringAnswer; 262bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}; 263bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 264bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif 265bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 266bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif // SkScript_DEFINED 267