protected function mathOperators($operator, $otherIntReturnType = INativeType::TYPE_INT)
{
//TODO: remove duplicate operators with types on opposite sides (binary operators are symmetrical)
$operators = [];
foreach ([INativeType::TYPE_INT, INativeType::TYPE_DOUBLE, INativeType::TYPE_NUMERIC, INativeType::TYPE_STRING, INativeType::TYPE_RESOURCE, INativeType::TYPE_BOOL, INativeType::TYPE_NULL] as $type) {
$operators = array_merge($operators, [[$type, $operator, INativeType::TYPE_NULL, 'return' => $otherIntReturnType], [$type, $operator, INativeType::TYPE_BOOL, 'return' => $otherIntReturnType], [$type, $operator, INativeType::TYPE_STRING, 'return' => INativeType::TYPE_NUMERIC], [$type, $operator, INativeType::TYPE_RESOURCE, 'return' => $otherIntReturnType]]);
}
$operators[] = [INativeType::TYPE_INT, $operator, INativeType::TYPE_INT, 'return' => $otherIntReturnType];
$operators[] = [INativeType::TYPE_INT, $operator, INativeType::TYPE_DOUBLE, 'return' => INativeType::TYPE_DOUBLE];
$operators[] = [INativeType::TYPE_DOUBLE, $operator, INativeType::TYPE_DOUBLE, 'return' => INativeType::TYPE_DOUBLE];
return $operators;
}