Lines Matching refs:SkOperand2
19 { SkOperand2::kNoType, SkOperand2::kNoType, kNoBias, kResultIsNotBoolean },
20 { SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar | SkOperand2::kString),
21 SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar | SkOperand2::kString), kTowardsString, kResultIsNotBoolean }, // kAdd
22 { SkOperand2::kS32, SkOperand2::kS32, kNoBias, kResultIsNotBoolean }, // kBitAnd
23 { SkOperand2::kNoType, SkOperand2::kS32, kNoBias, kResultIsNotBoolean }, // kBitNot
24 { SkOperand2::kS32, SkOperand2::kS32, kNoBias, kResultIsNotBoolean }, // kBitOr
25 { SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar),
26 SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar), kNoBias, kResultIsNotBoolean }, // kDivide
27 { SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar | SkOperand2::kString),
28 SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar |SkOperand2:: kString), kTowardsNumber,
30 { SkOperand2::kS32, SkOperand2::kNoType, kNoBias, kResultIsNotBoolean }, // kFlipOps
31 { SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar | SkOperand2::kString),
32 SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar | SkOperand2::kString), kTowardsNumber,
34 { SkOperand2::kNoType, SkOperand2::kS32, kNoBias, kResultIsNotBoolean }, // kLogicalAnd (really, ToBool)
35 { SkOperand2::kNoType, SkOperand2::kS32, kNoBias, kResultIsNotBoolean }, // kLogicalNot
36 { SkOperand2::kS32, SkOperand2::kS32, kNoBias, kResultIsNotBoolean }, // kLogicalOr
37 { SkOperand2::kNoType, SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar), kNoBias, kResultIsNotBoolean }, // kMinus
38 { SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar),
39 SkOperand2::OpType(SkOperand2::kS32 |SkOperand2:: kScalar), kNoBias, kResultIsNotBoolean }, // kModulo
40 { SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar),
41 SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar), kNoBias, kResultIsNotBoolean }, // kMultiply
42 { SkOperand2::kS32, SkOperand2::kS32, kNoBias, kResultIsNotBoolean }, // kShiftLeft
43 { SkOperand2::kS32, SkOperand2::kS32, kNoBias, kResultIsNotBoolean }, // kShiftRight
44 { SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar),
45 SkOperand2::OpType(SkOperand2::kS32 | SkOperand2::kScalar), kNoBias, kResultIsNotBoolean }, // kSubtract
46 { SkOperand2::kS32, SkOperand2::kS32, kNoBias, kResultIsNotBoolean } // kXor
122 SkScriptEngine2::SkScriptEngine2(SkOperand2::OpType returnType) : fActiveStream(&fStream),
124 fAccumulatorType(SkOperand2::kNoType),
155 SkOperand2::OpType toType, SkScriptEngine2::TypeOp op) {
181 if (fAccumulatorType == SkOperand2::kNoType)
188 if (reg == kAccumulator && fAccumulatorType != SkOperand2::kNoType)
191 case SkOperand2::kS32:
195 fAccumulatorType = SkOperand2::kS32;
199 case SkOperand2::kScalar:
203 fAccumulatorType = SkOperand2::kScalar;
207 case SkOperand2::kString:
211 fAccumulatorType = SkOperand2::kString;
320 gOpAttributes[op].fLeftType == SkOperand2::kNoType)) {
335 const SkOperand2::OpType* paramTypes, int paramCount) {
346 bool SkScriptEngine2::convertTo(SkOperand2::OpType toType, SkScriptValue2* value ) {
347 SkOperand2::OpType type = value->fType;
350 if (type == SkOperand2::kObject) {
375 if (top.fType != SkOperand2::kObject)
401 if (fReturnType == SkOperand2::kNoType || fReturnType == SkOperand2::kString) {
421 if (array->getType() == SkOperand2::kString) {
430 if (array->getType() == SkOperand2::kArray) {
463 SkOperand2::OpType SkScriptEngine2::getUnboxType(SkOperand2 scriptValue) {
469 return SkOperand2::kObject;
493 SkOperand2::OpType type = fReturnType;
494 if (fReturnType == SkOperand2::kNoType) {
554 operand.fType = SkOperand2::kS32;
558 operand.fType = SkOperand2::kScalar;
598 operand.fType = SkOperand2::kString;
615 top.fType = SkOperand2::kObject;
640 operand.fType = SkOperand2::kArray;
702 SkOperand2::OpType lastType = fValueStack.top().fType;
728 SkOperand2::OpType topType = fValueStack.count() > 0 ? fValueStack.top().fType : SkOperand2::kNoType;
730 topType == SkOperand2::kString && fReturnType != SkOperand2::kNoType) { // if result is a string, give handle property a chance to convert it to the property value
738 operand.fType = SkOperand2::kString;
761 if (value->fType != fReturnType && value->fType == SkOperand2::kObject &&
762 fReturnType != SkOperand2::kNoType)
776 SkOperand2::OpType saveType = fReturnType;
777 fReturnType = SkOperand2::kS32;
781 success = convertTo(SkOperand2::kS32, &scriptValue);
785 if (scriptValue.fType == SkOperand2::kObject) {
788 SkASSERT(scriptValue.fType == SkOperand2::kArray);
839 if (callbackResult.fType == SkOperand2::kString)
860 if (callbackResult.fType == SkOperand2::kString)
880 if (callbackResult.fType == SkOperand2::kString && callbackResult.fOperand.fString == NULL) {
902 if (scriptValue->fType == SkOperand2::kString)
986 SkASSERT(value.fType == SkOperand2::kS32 || value.fType == SkOperand2::kScalar); // !!! add error handling (although, could permit strings eventually)
987 int index = value.fType == SkOperand2::kScalar ? SkScalarFloor(value.fOperand.fScalar) :
991 SkASSERT(arrayValue.fType == SkOperand2::kArray); // !!! add error handling
993 SkOperand2 operand;
1004 if (fAccumulatorType == SkOperand2::kNoType) {
1008 SkASSERT(fAccumulatorType != SkOperand2::kString); // !!! add error handling
1013 fAccumulatorType = SkOperand2::kNoType;
1027 fAccumulatorType = SkOperand2::kNoType;
1036 if (fAccumulatorType == SkOperand2::kNoType) {
1037 SkASSERT(fValueStack.top().fType == SkOperand2::kS32); // !!! add error handling, and conversion to int?
1041 SkASSERT(fAccumulatorType == SkOperand2::kS32);
1051 fAccumulatorType = SkOperand2::kNoType;
1072 if (attributes->fLeftType != SkOperand2::kNoType) {
1084 if (value1.fType == SkOperand2::kObject && (value1.fType & attributes->fLeftType) == 0) {
1089 if (value2.fType == SkOperand2::kObject && (value2.fType & attributes->fLeftType) == 0) {
1093 if (attributes->fLeftType != SkOperand2::kNoType) {
1095 if ((attributes->fLeftType & SkOperand2::kString) && attributes->fBias & kTowardsString &&
1096 ((value1.fType | value2.fType) & SkOperand2::kString)) {
1097 if (value1.fType == SkOperand2::kS32 || value1.fType == SkOperand2::kScalar) {
1098 addTokenConst(&value1, kAccumulator, SkOperand2::kString,
1099 value1.fType == SkOperand2::kS32 ? kIntToString : kScalarToString);
1101 if (value2.fType == SkOperand2::kS32 || value2.fType == SkOperand2::kScalar) {
1102 addTokenConst(&value2, kOperand, SkOperand2::kString,
1103 value2.fType == SkOperand2::kS32 ? kIntToString2 : kScalarToString2);
1105 } else if (attributes->fLeftType & SkOperand2::kScalar && ((value1.fType | value2.fType) &
1106 SkOperand2::kScalar)) {
1107 if (value1.fType == SkOperand2::kS32)
1108 addTokenConst(&value1, kAccumulator, SkOperand2::kScalar, kIntToScalar);
1109 if (value2.fType == SkOperand2::kS32)
1110 addTokenConst(&value2, kOperand, SkOperand2::kScalar, kIntToScalar2);
1114 if (value1.fType == SkOperand2::kString)
1115 addTokenConst(&value1, kAccumulator, SkOperand2::kScalar, kStringToScalar);
1116 if (value1.fType == SkOperand2::kScalar && (attributes->fLeftType == SkOperand2::kS32 ||
1117 value2.fType == SkOperand2::kS32))
1118 addTokenConst(&value1, kAccumulator, SkOperand2::kS32, kScalarToInt);
1121 AddTokenRegister rhRegister = attributes->fLeftType != SkOperand2::kNoType ?
1124 if (value2.fType == SkOperand2::kString)
1125 addTokenConst(&value2, rhRegister, SkOperand2::kScalar, kStringToScalar2);
1126 if (value2.fType == SkOperand2::kScalar && (attributes->fRightType == SkOperand2::kS32 ||
1127 value1.fType == SkOperand2::kS32))
1128 addTokenConst(&value2, rhRegister, SkOperand2::kS32, kScalarToInt2);
1131 if (value2.fType == SkOperand2::kScalar)
1133 else if (value2.fType == SkOperand2::kString)
1136 SkOperand2::OpType saveType = SkOperand2::kNoType;
1142 fAccumulatorType = SkOperand2::kNoType;
1145 if (attributes->fLeftType != SkOperand2::kNoType) { // two operands
1162 value1.fType = SkOperand2::kS32;
1163 else if (attributes->fLeftType == SkOperand2::kNoType) // unary operand
1166 if (value1.fType == SkOperand2::kString)
1168 else if (value1.fType == SkOperand2::kArray)
1193 bool SkScriptEngine2::ConvertTo(SkScriptEngine2* engine, SkOperand2::OpType toType, SkScriptValue2* value ) {
1195 SkOperand2::OpType type = value->fType;
1198 SkOperand2& operand = value->fOperand;
1201 case SkOperand2::kS32:
1202 if (type == SkOperand2::kScalar)
1205 SkASSERT(type == SkOperand2::kString);
1209 case SkOperand2::kScalar:
1210 if (type == SkOperand2::kS32)
1213 SkASSERT(type == SkOperand2::kString);
1217 case SkOperand2::kString: {
1221 if (type == SkOperand2::kS32)
1224 SkASSERT(type == SkOperand2::kScalar);
1229 case SkOperand2::kArray: {
1255 case SkOperand2::kS32:
1259 case SkOperand2::kScalar:
1263 case SkOperand2::kString:
1276 #define testInt(expression) { #expression, SkOperand2::kS32, expression, 0, NULL }
1278 #define testScalar(expression) { #expression, SkOperand2::kScalar, 0, (float) (expression), NULL }
1279 #define testRemainder(exp1, exp2) { #exp1 "%" #exp2, SkOperand2::kScalar, 0, fmodf((float) exp1, (float) exp2), NULL }
1281 #define testScalar(expression) { #expression, SkOperand2::kScalar, 0, (int) ((expression) * 65536.0f), NULL }
1282 #define testRemainder(exp1, exp2) { #exp1 "%" #exp2, SkOperand2::kScalar, 0, (int) (fmod(exp1, exp2) * 65536.0f), NULL }
1284 #define testTrue(expression) { #expression, SkOperand2::kS32, 1, 0, NULL }
1285 #define testFalse(expression) { #expression, SkOperand2::kS32, 0, 0, NULL }
1313 { "'123'+\"456\"", SkOperand2::kString, 0, 0, "123456" },
1314 SkOperand2::kString, 0, 0, "123456" },
1315 { "'123'+456", SkOperand2::kString, 0, 0, "123456" },
1316 { "'123'|\"456\"", SkOperand2::kS32, 123|456, 0, NULL },
1317 { "123|\"456\"", SkOperand2::kS32, 123|456, 0, NULL },
1318 { "'123'|456", SkOperand2::kS32, 123|456, 0, NULL },
1319 { "'2'<11", SkOperand2::kS32, 1, 0, NULL },
1320 { "2<'11'", SkOperand2::kS32, 1, 0, NULL },
1321 { "'2'<'11'", SkOperand2::kS32, 0, 0, NULL },
1473 , { "123.5", SkOperand2::kScalar, 0, SkIntToScalar(123) + SK_Scalar1/2, NULL }
1491 case SkOperand2::kS32:
1496 case SkOperand2::kScalar:
1502 case SkOperand2::kString: