Index: skia/animator/SkScript2.h |
=================================================================== |
--- skia/animator/SkScript2.h (revision 16859) |
+++ skia/animator/SkScript2.h (working copy) |
@@ -1,285 +0,0 @@ |
-#ifndef SkScript2_DEFINED |
-#define SkScript2_DEFINED |
- |
-#include "SkOperand2.h" |
-#include "SkStream.h" |
-#include "SkTDArray.h" |
-#include "SkTDArray_Experimental.h" |
-#include "SkTDict.h" |
-#include "SkTDStack.h" |
- |
-typedef SkLongArray(SkString*) SkTDStringArray; |
- |
-class SkAnimateMaker; |
-class SkScriptCallBack; |
- |
-class SkScriptEngine2 { |
-public: |
- enum Error { |
- kNoError, |
- kArrayIndexOutOfBounds, |
- kCouldNotFindReferencedID, |
- kFunctionCallFailed, |
- kMemberOpFailed, |
- kPropertyOpFailed |
- }; |
- |
- enum Attrs { |
- kConstant, |
- kVariable |
- }; |
- |
- SkScriptEngine2(SkOperand2::OpType returnType); |
- ~SkScriptEngine2(); |
- bool convertTo(SkOperand2::OpType , SkScriptValue2* ); |
- bool evaluateScript(const char** script, SkScriptValue2* value); |
- void forget(SkOpArray* array); |
- Error getError() { return fError; } |
- SkOperand2::OpType getReturnType() { return fReturnType; } |
- void track(SkOpArray* array) { |
- SkASSERT(fTrackArray.find(array) < 0); |
- *fTrackArray.append() = array; } |
- void track(SkString* string) { |
- SkASSERT(fTrackString.find(string) < 0); |
- *fTrackString.append() = string; |
- } |
- static bool ConvertTo(SkScriptEngine2* , SkOperand2::OpType toType, SkScriptValue2* value); |
- static SkScalar IntToScalar(int32_t ); |
- static bool ValueToString(const SkScriptValue2& value, SkString* string); |
- |
- enum Op { // used by tokenizer attribute table |
- kUnassigned, |
- kAdd, |
- kBitAnd, |
- kBitNot, |
- kBitOr, |
- kDivide, |
- kEqual, |
- kFlipOps, |
- kGreaterEqual, |
- kLogicalAnd, |
- kLogicalNot, |
- kLogicalOr, |
- kMinus, |
- kModulo, |
- kMultiply, |
- kShiftLeft, |
- kShiftRight, // signed |
- kSubtract, |
- kXor, |
-// following not in attribute table |
- kArrayOp, |
- kElse, |
- kIf, |
- kParen, |
- kLastLogicalOp, |
- kArtificialOp = 0x20 |
- }; |
- |
- enum TypeOp { // generated by tokenizer |
- kNop, // should never get generated |
- kAccumulatorPop, |
- kAccumulatorPush, |
- kAddInt, |
- kAddScalar, |
- kAddString, // string concat |
- kArrayIndex, |
- kArrayParam, |
- kArrayToken, |
- kBitAndInt, |
- kBitNotInt, |
- kBitOrInt, |
- kBoxToken, |
- kCallback, |
- kDivideInt, |
- kDivideScalar, |
- kDotOperator, |
- kElseOp, |
- kEnd, |
- kEqualInt, |
- kEqualScalar, |
- kEqualString, |
- kFunctionCall, |
- kFlipOpsOp, |
- kFunctionToken, |
- kGreaterEqualInt, |
- kGreaterEqualScalar, |
- kGreaterEqualString, |
- kIfOp, |
- kIntToScalar, |
- kIntToScalar2, |
- kIntToString, |
- kIntToString2, |
- kIntegerAccumulator, |
- kIntegerOperand, |
- kLogicalAndInt, |
- kLogicalNotInt, |
- kLogicalOrInt, |
- kMemberOp, |
- kMinusInt, |
- kMinusScalar, |
- kModuloInt, |
- kModuloScalar, |
- kMultiplyInt, |
- kMultiplyScalar, |
- kPropertyOp, |
- kScalarAccumulator, |
- kScalarOperand, |
- kScalarToInt, |
- kScalarToInt2, |
- kScalarToString, |
- kScalarToString2, |
- kShiftLeftInt, |
- kShiftRightInt, // signed |
- kStringAccumulator, |
- kStringOperand, |
- kStringToInt, |
- kStringToScalar, |
- kStringToScalar2, |
- kStringTrack, |
- kSubtractInt, |
- kSubtractScalar, |
- kToBool, |
- kUnboxToken, |
- kUnboxToken2, |
- kXorInt, |
- kLastTypeOp |
- }; |
- |
- enum OpBias { |
- kNoBias, |
- kTowardsNumber = 0, |
- kTowardsString |
- }; |
- |
-protected: |
- |
- enum BraceStyle { |
- // kStructBrace, |
- kArrayBrace, |
- kFunctionBrace |
- }; |
- |
- enum AddTokenRegister { |
- kAccumulator, |
- kOperand |
- }; |
- |
- enum ResultIsBoolean { |
- kResultIsNotBoolean, |
- kResultIsBoolean |
- }; |
- |
- struct OperatorAttributes { |
- unsigned int fLeftType : 3; // SkOpType union, but only lower values |
- unsigned int fRightType : 3; // SkOpType union, but only lower values |
- OpBias fBias : 1; |
- ResultIsBoolean fResultIsBoolean : 1; |
- }; |
- |
- struct Branch { |
- Branch() { |
- } |
- |
- Branch(Op op, int depth, unsigned offset) : fOffset(offset), fOpStackDepth(depth), fOperator(op), |
- fPrimed(kIsNotPrimed), fDone(kIsNotDone) { |
- } |
- |
- enum Primed { |
- kIsNotPrimed, |
- kIsPrimed |
- }; |
- |
- enum Done { |
- kIsNotDone, |
- kIsDone, |
- }; |
- |
- unsigned fOffset : 16; // offset in generated stream where branch needs to go |
- int fOpStackDepth : 7; // depth when operator was found |
- Op fOperator : 6; // operand which generated branch |
- mutable Primed fPrimed : 1; // mark when next instruction generates branch |
- Done fDone : 1; // mark when branch is complete |
- void prime() { fPrimed = kIsPrimed; } |
- void resolve(SkDynamicMemoryWStream* , size_t offset); |
- }; |
- |
- static const OperatorAttributes gOpAttributes[]; |
- static const signed char gPrecedence[]; |
- static const TypeOp gTokens[]; |
- void addToken(TypeOp ); |
- void addTokenConst(SkScriptValue2* , AddTokenRegister , SkOperand2::OpType , TypeOp ); |
- void addTokenInt(int ); |
- void addTokenScalar(SkScalar ); |
- void addTokenString(const SkString& ); |
- void addTokenValue(const SkScriptValue2& , AddTokenRegister ); |
- int arithmeticOp(char ch, char nextChar, bool lastPush); |
- bool convertParams(SkTDArray<SkScriptValue2>* , |
- const SkOperand2::OpType* paramTypes, int paramTypeCount); |
- void convertToString(SkOperand2* operand, SkOperand2::OpType type) { |
- SkScriptValue2 scriptValue; |
- scriptValue.fOperand = *operand; |
- scriptValue.fType = type; |
- convertTo(SkOperand2::kString, &scriptValue); |
- *operand = scriptValue.fOperand; |
- } |
- bool evaluateDot(const char*& script); |
- bool evaluateDotParam(const char*& script, const char* field, size_t fieldLength); |
- bool functionParams(const char** scriptPtr, SkTDArray<SkScriptValue2>* params); |
- size_t getTokenOffset(); |
- SkOperand2::OpType getUnboxType(SkOperand2 scriptValue); |
- bool handleArrayIndexer(const char** scriptPtr); |
- bool handleFunction(const char** scriptPtr); |
- bool handleMember(const char* field, size_t len, void* object); |
- bool handleMemberFunction(const char* field, size_t len, void* object, |
- SkTDArray<SkScriptValue2>* params); |
- bool handleProperty(); |
- bool handleUnbox(SkScriptValue2* scriptValue); |
- bool innerScript(const char** scriptPtr, SkScriptValue2* value); |
- int logicalOp(char ch, char nextChar); |
- void processLogicalOp(Op op); |
- bool processOp(); |
- void resolveBranch(Branch& ); |
-// void setAnimateMaker(SkAnimateMaker* maker) { fMaker = maker; } |
- SkDynamicMemoryWStream fStream; |
- SkDynamicMemoryWStream* fActiveStream; |
- SkTDStack<BraceStyle> fBraceStack; // curly, square, function paren |
- SkTDStack<Branch> fBranchStack; // logical operators, slot to store forward branch |
- SkLongArray(SkScriptCallBack*) fCallBackArray; |
- SkTDStack<Op> fOpStack; |
- SkTDStack<SkScriptValue2> fValueStack; |
-// SkAnimateMaker* fMaker; |
- SkLongArray(SkOpArray*) fTrackArray; |
- SkTDStringArray fTrackString; |
- const char* fToken; // one-deep stack |
- size_t fTokenLength; |
- SkOperand2::OpType fReturnType; |
- Error fError; |
- SkOperand2::OpType fAccumulatorType; // tracking for code generation |
- SkBool fBranchPopAllowed; |
- SkBool fConstExpression; |
- SkBool fOperandInUse; |
-private: |
-#ifdef SK_DEBUG |
-public: |
- void decompile(const unsigned char* , size_t ); |
- static void UnitTest(); |
- static void ValidateDecompileTable(); |
-#endif |
-}; |
- |
-#ifdef SK_DEBUG |
- |
-struct SkScriptNAnswer2 { |
- const char* fScript; |
- SkOperand2::OpType fType; |
- int32_t fIntAnswer; |
- SkScalar fScalarAnswer; |
- const char* fStringAnswer; |
-}; |
- |
-#endif |
- |
- |
-#endif // SkScript2_DEFINED |
- |