1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkScript_DEFINED 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkScript_DEFINED 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkOperand.h" 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkIntArray.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTDict.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTDStack.h" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkAnimateMaker; 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkScriptEngine { 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com enum Error { 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kNoError, 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kArrayIndexOutOfBounds, 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kCouldNotFindReferencedID, 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDotOperatorExpectsObject, 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kErrorInArrrayIndex, 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kErrorInFunctionParameters, 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kExpectedArray, 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kExpectedBooleanExpression, 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kExpectedFieldName, 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kExpectedHex, 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kExpectedIntForConditionOperator, 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kExpectedNumber, 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kExpectedNumberForArrayIndex, 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kExpectedOperator, 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kExpectedToken, 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kExpectedTokenBeforeDotOperator, 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kExpectedValue, 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kHandleMemberFailed, 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kHandleMemberFunctionFailed, 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kHandleUnboxFailed, 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kIndexOutOfRange, 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kMismatchedArrayBrace, 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kMismatchedBrackets, 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kNoFunctionHandlerFound, 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kPrematureEnd, 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kTooManyParameters, 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kTypeConversionFailed, 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kUnterminatedString 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com enum SkOpType { 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kNoType, 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kInt = 1, 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kScalar = 2, 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kString = 4, 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kArray = 8, 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kObject = 16 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// kStruct = 32 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef bool (*_boxCallBack)(void* userStorage, SkScriptValue* result); 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef bool (*_functionCallBack)(const char* func, size_t len, SkTDArray<SkScriptValue>& params, 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void* userStorage, SkScriptValue* result); 66d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com typedef bool (*_memberCallBack)(const char* member, size_t len, void* object, 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void* userStorage, SkScriptValue* result); 68d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com typedef bool (*_memberFunctionCallBack)(const char* member, size_t len, void* object, 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDArray<SkScriptValue>& params, void* userStorage, SkScriptValue* result); 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// typedef bool (*_objectToStringCallBack)(void* object, void* userStorage, SkScriptValue* result); 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef bool (*_propertyCallBack)(const char* prop, size_t len, void* userStorage, SkScriptValue* result); 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef bool (*_unboxCallBack)(void* userStorage, SkScriptValue* result); 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScriptEngine(SkOpType returnType); 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ~SkScriptEngine(); 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void boxCallBack(_boxCallBack func, void* userStorage); 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool convertTo(SkDisplayTypes , SkScriptValue* ); 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool evaluateScript(const char** script, SkScriptValue* value); 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void forget(SkTypedArray* array); 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void functionCallBack(_functionCallBack func, void* userStorage); 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Error getError() const { return fError; } 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DEBUG 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool getErrorString(SkString* err) const; 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void memberCallBack(_memberCallBack , void* userStorage); 858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void memberFunctionCallBack(_memberFunctionCallBack , void* userStorage); 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// void objectToStringCallBack(_objectToStringCallBack , void* userStorage); 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void propertyCallBack(_propertyCallBack prop, void* userStorage); 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void track(SkTypedArray* array); 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void track(SkString* string); 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void unboxCallBack(_unboxCallBack func, void* userStorage); 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static bool ConvertTo(SkScriptEngine* , SkDisplayTypes toType, SkScriptValue* value); 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static SkScalar IntToScalar(int32_t ); 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static SkDisplayTypes ToDisplayType(SkOpType type); 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static SkOpType ToOpType(SkDisplayTypes type); 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static bool ValueToString(SkScriptValue value, SkString* string); 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com enum CallBackType { 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kBox, 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kFunction, 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kMember, 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kMemberFunction, 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // kObjectToString, 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kProperty, 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kUnbox 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com struct UserCallBack { 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com CallBackType fCallBackType; 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void* fUserStorage; 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com union { 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com _boxCallBack fBoxCallBack; 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com _functionCallBack fFunctionCallBack; 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com _memberCallBack fMemberCallBack; 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com _memberFunctionCallBack fMemberFunctionCallBack; 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // _objectToStringCallBack fObjectToStringCallBack; 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com _propertyCallBack fPropertyCallBack; 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com _unboxCallBack fUnboxCallBack; 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com enum SkOp { 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kUnassigned, 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kAdd, 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kAddInt = kAdd, 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kAddScalar, 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kAddString, // string concat 1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kArrayOp, 1288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kBitAnd, 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kBitNot, 1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kBitOr, 1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDivide, 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDivideInt = kDivide, 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDivideScalar, 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kElse, 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kEqual, 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kEqualInt = kEqual, 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kEqualScalar, 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kEqualString, 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kFlipOps, 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kGreaterEqual, 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kGreaterEqualInt = kGreaterEqual, 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kGreaterEqualScalar, 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kGreaterEqualString, 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kIf, 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kLogicalAnd, 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kLogicalNot, 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kLogicalOr, 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kMinus, 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kMinusInt = kMinus, 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kMinusScalar, 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kModulo, 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kModuloInt = kModulo, 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kModuloScalar, 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kMultiply, 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kMultiplyInt = kMultiply, 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kMultiplyScalar, 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kParen, 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kShiftLeft, 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kShiftRight, // signed 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kSubtract, 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kSubtractInt = kSubtract, 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kSubtractScalar, 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kXor, 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kArtificialOp = 0x40 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com enum SkOpBias { 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kNoBias, 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kTowardsNumber = 0, 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kTowardsString 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 172d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com struct SkOperatorAttributes { 1768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com unsigned int fLeftType : 3; // SkOpType, but only lower values 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com unsigned int fRightType : 3; // SkOpType, but only lower values 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkOpBias fBias : 1; 1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com struct SkSuppress { // !!! could be compressed to a long 1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkOp fOperator; // operand which enabled suppression 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int fOpStackDepth; // depth when suppression operator was found 1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkBool8 fSuppress; // set if suppression happens now, as opposed to later 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkBool8 fElse; // set on the : half of ? : 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static const SkOperatorAttributes gOpAttributes[]; 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static const signed char gPrecedence[]; 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int arithmeticOp(char ch, char nextChar, bool lastPush); 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void commonCallBack(CallBackType type, UserCallBack& callBack, void* userStorage); 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool convertParams(SkTDArray<SkScriptValue>&, const SkFunctionParamType* , 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int paramTypeCount); 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void convertToString(SkOperand& operand, SkDisplayTypes type) { 1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScriptValue scriptValue; 1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com scriptValue.fOperand = operand; 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com scriptValue.fType = type; 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com convertTo(SkType_String, &scriptValue); 1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com operand = scriptValue.fOperand; 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool evaluateDot(const char*& script, bool suppressed); 2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool evaluateDotParam(const char*& script, bool suppressed, const char* field, size_t fieldLength); 2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool functionParams(const char** scriptPtr, SkTDArray<SkScriptValue>& params); 2048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleArrayIndexer(const char** scriptPtr, bool suppressed); 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleBox(SkScriptValue* value); 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleFunction(const char** scriptPtr, bool suppressed); 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleMember(const char* field, size_t len, void* object); 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleMemberFunction(const char* field, size_t len, void* object, SkTDArray<SkScriptValue>& params); 2098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// bool handleObjectToString(void* object); 2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleProperty(bool suppressed); 2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool handleUnbox(SkScriptValue* scriptValue); 2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool innerScript(const char** scriptPtr, SkScriptValue* value); 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int logicalOp(char ch, char nextChar); 2148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Error opError(); 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool processOp(); 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setAnimateMaker(SkAnimateMaker* maker) { fMaker = maker; } 2178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool setError(Error , const char* pos); 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com enum SkBraceStyle { 2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // kStructBrace, 2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kArrayBrace, 2218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kFunctionBrace 2228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 2238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if 0 2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkIntArray(SkBraceStyle) fBraceStack; // curly, square, function paren 2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkIntArray(SkOp) fOpStack; 2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkIntArray(SkOpType) fTypeStack; 2288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDOperandArray fOperandStack; 2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDArray<SkSuppress> fSuppressStack; 2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDStack<SkBraceStyle> fBraceStack; // curly, square, function paren 2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDStack<SkOp> fOpStack; 2338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDStack<SkOpType> fTypeStack; 2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDStack<SkOperand> fOperandStack; 2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDStack<SkSuppress> fSuppressStack; 2368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAnimateMaker* fMaker; 2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDTypedArrayArray fTrackArray; 2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDStringArray fTrackString; 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char* fToken; // one-deep stack 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com size_t fTokenLength; 2428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkTDArray<UserCallBack> fUserCallBacks; 2438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkOpType fReturnType; 2448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Error fError; 2458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int fErrorPosition; 2468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 2478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com friend class SkTypedArray; 2488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_SUPPORT_UNITTEST 2498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 2508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static void UnitTest(); 2518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_SUPPORT_UNITTEST 2558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstruct SkScriptNAnswer { 2578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char* fScript; 2588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes fType; 2598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int32_t fIntAnswer; 2608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar fScalarAnswer; 2618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char* fStringAnswer; 2628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif // SkScript_DEFINED 267