@@ -468,9 +468,9 @@ object Parsers {
468
468
val l = opInfo.operand
469
469
val r = top
470
470
if (isType && ! op.isBackquoted && op.name == tpnme.raw.BAR ) {
471
- OrTypeTree (checkWildcard (l), checkWildcard (r))
471
+ OrTypeTree (checkAndOrArgument (l), checkAndOrArgument (r))
472
472
} else if (isType && ! op.isBackquoted && op.name == tpnme.raw.AMP ) {
473
- AndTypeTree (checkWildcard (l), checkWildcard (r))
473
+ AndTypeTree (checkAndOrArgument (l), checkAndOrArgument (r))
474
474
} else
475
475
InfixOp (l, op, r)
476
476
}
@@ -842,7 +842,7 @@ object Parsers {
842
842
if (ctx.settings.strict.value)
843
843
deprecationWarning(DeprecatedWithOperator ())
844
844
in.nextToken()
845
- AndTypeTree (checkWildcard (t), checkWildcard (withType()))
845
+ AndTypeTree (checkAndOrArgument (t), checkAndOrArgument (withType()))
846
846
}
847
847
else t
848
848
@@ -1035,6 +1035,19 @@ object Parsers {
1035
1035
else
1036
1036
rejectWildcard(t, fallbackTree)
1037
1037
1038
+ def checkAndOrArgument (t : Tree ): Tree =
1039
+ findWildcardType(t, true ) match {
1040
+ case Some (typTree) =>
1041
+ typTree match {
1042
+ case typTree : TypeBoundsTree =>
1043
+ syntaxError(UnboundWildcardType (), typTree.pos)
1044
+ case typTree : ByNameTypeTree =>
1045
+ syntaxError(ByNameParameterNotSupported (typTree), typTree.pos)
1046
+ }
1047
+ scalaAny
1048
+ case None => t
1049
+ }
1050
+
1038
1051
/* ----------- EXPRESSIONS ------------------------------------------------ */
1039
1052
1040
1053
/** EqualsExpr ::= `=' Expr
0 commit comments