Lines Matching refs:left
233 bool Operator::isMatrixMultiply(const Type& left, const Type& right) {
237 if (left.isMatrix()) {
240 return left.isVector() && right.isMatrix();
248 const Type& left,
255 case Token::Kind::TK_EQ: // left = right
256 *outLeftType = &left;
257 *outRightType = &left;
258 *outResultType = &left;
259 return right.canCoerceTo(left, allowNarrowing);
261 case Token::Kind::TK_EQEQ: // left == right
262 case Token::Kind::TK_NEQ: { // left != right
263 CoercionCost rightToLeft = right.coercionCost(left),
264 leftToRight = left.coercionCost(right);
267 *outLeftType = &left;
268 *outRightType = &left;
282 case Token::Kind::TK_LOGICALOR: // left || right
283 case Token::Kind::TK_LOGICALAND: // left && right
284 case Token::Kind::TK_LOGICALXOR: // left ^^ right
288 return left.canCoerceTo(*context.fTypes.fBool, allowNarrowing) &&
291 case Token::Kind::TK_COMMA: // left, right
292 *outLeftType = &left;
303 const Type& leftComponentType = left.componentType();
310 if (this->isMatrixMultiply(left, right)) { // left * right
312 if (!this->determineBinaryType(context, left.componentType(), right.componentType(),
317 *outLeftType = &(*outResultType)->toCompound(context, left.columns(), left.rows());
319 int leftColumns = left.columns(), leftRows = left.rows();
339 bool leftIsVectorOrMatrix = left.isVector() || left.isMatrix();
344 if (!this->determineBinaryType(context, left.componentType(), right,
349 *outLeftType = &(*outLeftType)->toCompound(context, left.columns(), left.rows());
351 *outResultType = &(*outResultType)->toCompound(context, left.columns(), left.rows());
358 if (!isAssignment && rightIsVectorOrMatrix && validMatrixOrVectorOp && left.isScalar()) {
360 if (!this->determineBinaryType(context, left, right.componentType(),
372 CoercionCost rightToLeftCost = right.coercionCost(left);
374 : left.coercionCost(right);
376 if ((left.isScalar() && right.isScalar()) || (leftIsVectorOrMatrix && validMatrixOrVectorOp)) {
384 *outLeftType = &left;
385 *outRightType = &left;
386 *outResultType = &left;