@@ -73,10 +73,16 @@ object JSSymUtils {
73
73
lazy val pc = sym.info.paramNamess.map(_.size).sum
74
74
75
75
sym.name match {
76
- case nme.apply => Call
77
- case JSUnaryOpMethodName (code) if pc == 0 => UnaryOp (code)
78
- case JSBinaryOpMethodName (code) if pc == 1 => BinaryOp (code)
79
- case _ => default
76
+ case nme.apply =>
77
+ Call
78
+ case JSUnaryOpMethodName (code, defaultsToOp)
79
+ if (defaultsToOp || sym.hasAnnotation(jsdefn.JSOperatorAnnot )) && pc == 0 =>
80
+ UnaryOp (code)
81
+ case JSBinaryOpMethodName (code, defaultsToOp)
82
+ if (defaultsToOp || sym.hasAnnotation(jsdefn.JSOperatorAnnot )) && pc == 1 =>
83
+ BinaryOp (code)
84
+ case _ =>
85
+ default
80
86
}
81
87
} else {
82
88
default
@@ -232,41 +238,43 @@ object JSSymUtils {
232
238
233
239
private object JSUnaryOpMethodName {
234
240
private val map = Map (
235
- nme.UNARY_+ -> js.JSUnaryOp .+ ,
236
- nme.UNARY_- -> js.JSUnaryOp .- ,
237
- nme.UNARY_~ -> js.JSUnaryOp .~ ,
238
- nme.UNARY_! -> js.JSUnaryOp .!
241
+ nme.UNARY_+ -> ( js.JSUnaryOp .+ , true ) ,
242
+ nme.UNARY_- -> ( js.JSUnaryOp .- , true ) ,
243
+ nme.UNARY_~ -> ( js.JSUnaryOp .~ , true ) ,
244
+ nme.UNARY_! -> ( js.JSUnaryOp .! , true ),
239
245
)
240
246
241
- def unapply (name : TermName ): Option [js.JSUnaryOp .Code ] =
247
+ def unapply (name : TermName ): Option [( js.JSUnaryOp .Code , Boolean ) ] =
242
248
map.get(name)
243
249
}
244
250
245
251
private object JSBinaryOpMethodName {
246
252
private val map = Map (
247
- nme.ADD -> js.JSBinaryOp .+ ,
248
- nme.SUB -> js.JSBinaryOp .- ,
249
- nme.MUL -> js.JSBinaryOp .* ,
250
- nme.DIV -> js.JSBinaryOp ./ ,
251
- nme.MOD -> js.JSBinaryOp .% ,
252
-
253
- nme.LSL -> js.JSBinaryOp .<< ,
254
- nme.ASR -> js.JSBinaryOp .>> ,
255
- nme.LSR -> js.JSBinaryOp .>>> ,
256
- nme.OR -> js.JSBinaryOp .| ,
257
- nme.AND -> js.JSBinaryOp .& ,
258
- nme.XOR -> js.JSBinaryOp .^ ,
259
-
260
- nme.LT -> js.JSBinaryOp .< ,
261
- nme.LE -> js.JSBinaryOp .<= ,
262
- nme.GT -> js.JSBinaryOp .> ,
263
- nme.GE -> js.JSBinaryOp .>= ,
264
-
265
- nme.ZAND -> js.JSBinaryOp .&& ,
266
- nme.ZOR -> js.JSBinaryOp .||
253
+ nme.ADD -> (js.JSBinaryOp .+ , true ),
254
+ nme.SUB -> (js.JSBinaryOp .- , true ),
255
+ nme.MUL -> (js.JSBinaryOp .* , true ),
256
+ nme.DIV -> (js.JSBinaryOp ./ , true ),
257
+ nme.MOD -> (js.JSBinaryOp .% , true ),
258
+
259
+ nme.LSL -> (js.JSBinaryOp .<< , true ),
260
+ nme.ASR -> (js.JSBinaryOp .>> , true ),
261
+ nme.LSR -> (js.JSBinaryOp .>>> , true ),
262
+ nme.OR -> (js.JSBinaryOp .| , true ),
263
+ nme.AND -> (js.JSBinaryOp .& , true ),
264
+ nme.XOR -> (js.JSBinaryOp .^ , true ),
265
+
266
+ nme.LT -> (js.JSBinaryOp .< , true ),
267
+ nme.LE -> (js.JSBinaryOp .<= , true ),
268
+ nme.GT -> (js.JSBinaryOp .> , true ),
269
+ nme.GE -> (js.JSBinaryOp .>= , true ),
270
+
271
+ nme.ZAND -> (js.JSBinaryOp .&& , true ),
272
+ nme.ZOR -> (js.JSBinaryOp .|| , true ),
273
+
274
+ termName(" **" ) -> (js.JSBinaryOp .** , false ),
267
275
)
268
276
269
- def unapply (name : TermName ): Option [js.JSBinaryOp .Code ] =
277
+ def unapply (name : TermName ): Option [( js.JSBinaryOp .Code , Boolean ) ] =
270
278
map.get(name)
271
279
}
272
280
}
0 commit comments