@@ -468,9 +468,9 @@ object Parsers {
468468 val l = opInfo.operand
469469 val r = top
470470 if (isType && ! op.isBackquoted && op.name == tpnme.raw.BAR ) {
471- OrTypeTree (checkWildcard (l), checkWildcard (r))
471+ OrTypeTree (checkAndOrArgument (l), checkAndOrArgument (r))
472472 } else if (isType && ! op.isBackquoted && op.name == tpnme.raw.AMP ) {
473- AndTypeTree (checkWildcard (l), checkWildcard (r))
473+ AndTypeTree (checkAndOrArgument (l), checkAndOrArgument (r))
474474 } else
475475 InfixOp (l, op, r)
476476 }
@@ -842,7 +842,7 @@ object Parsers {
842842 if (ctx.settings.strict.value)
843843 deprecationWarning(DeprecatedWithOperator ())
844844 in.nextToken()
845- AndTypeTree (checkWildcard (t), checkWildcard (withType()))
845+ AndTypeTree (checkAndOrArgument (t), checkAndOrArgument (withType()))
846846 }
847847 else t
848848
@@ -1035,6 +1035,19 @@ object Parsers {
10351035 else
10361036 rejectWildcard(t, fallbackTree)
10371037
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+
10381051/* ----------- EXPRESSIONS ------------------------------------------------ */
10391052
10401053 /** EqualsExpr ::= `=' Expr
0 commit comments