8000 Remove the IR nodes that were merged in `UnaryOp`. · scala-js/scala-js@e4bdf16 · GitHub
[go: up one dir, main page]

Skip to content

Commit e4bdf16

Browse files
committed
Remove the IR nodes that were merged in UnaryOp.
And update the compiler to directly generate the new `UnaryOp`s. We only enable the deserialization hack when reading IR <= 1.17.
1 parent c1646d1 commit e4bdf16

File tree

15 files changed

+37
-225
lines changed

15 files changed

+37
-225
lines changed

compiler/src/main/scala/org/scalajs/nscplugin/GenJSCode.scala

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2572,9 +2572,10 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
25722572
ex match {
25732573
case js.New(cls, _, _) if cls != JavaScriptExceptionClassName =>
25742574
// Common case where ex is neither null nor a js.JavaScriptException
2575-
js.Throw(ex)
2575+
js.UnaryOp(js.UnaryOp.Throw, ex)
25762576
case _ =>
2577-
js.Throw(js.UnwrapFromThrowable(ex))
2577+
js.UnaryOp(js.UnaryOp.Throw,
2578+
js.UnaryOp(js.UnaryOp.UnwrapFromThrowable, js.UnaryOp(js.UnaryOp.CheckNotNull, ex)))
25782579
}
25792580

25802581
/* !!! Copy-pasted from `CleanUp.scala` upstream and simplified with
@@ -3108,13 +3109,14 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
31083109

31093110
val (exceptValDef, exceptVar) = if (mightCatchJavaScriptException) {
31103111
val valDef = js.VarDef(freshLocalIdent("e"), NoOriginalName,
3111-
encodeClassType(ThrowableClass), mutable = false, js.WrapAsThrowable(origExceptVar))
3112+
encodeClassType(ThrowableClass), mutable = false,
3113+
js.UnaryOp(js.UnaryOp.WrapAsThrowable, origExceptVar))
31123114
(valDef, valDef.ref)
31133115
} else {
31143116
(js.Skip(), origExceptVar)
31153117
}
31163118

3117-
val elseHandler: js.Tree = js.Throw(origExceptVar)
3119+
val elseHandler: js.Tree = js.UnaryOp(js.UnaryOp.Throw, origExceptVar)
31183120

31193121
val handler = catches.foldRight(elseHandler) { (caseDef, elsep) =>
31203122
implicit val pos = caseDef.pos
@@ -3323,7 +3325,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
33233325
private def genThrowClassCastException()(implicit pos: Position): js.Tree = {
33243326
val ctor = ClassCastExceptionClass.info.member(
33253327
nme.CONSTRUCTOR).suchThat(_.tpe.params.isEmpty)
3326-
js.Throw(genNew(ClassCastExceptionClass, ctor, Nil))
3328+
js.UnaryOp(js.UnaryOp.Throw, genNew(ClassCastExceptionClass, ctor, Nil))
33273329
}
33283330

33293331
/** Gen JS code for a super call, of the form Class.super[mix].fun(args).
@@ -4891,7 +4893,8 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
48914893
js.Assign(genSelect(fun.tpe.paramTypes(1)), arguments(1))
48924894
} else {
48934895
// length of the array
4894-
js.ArrayLength(arrayValue)
4896+
js.UnaryOp(js.UnaryOp.Array_length,
4897+
js.UnaryOp(js.UnaryOp.CheckNotNull, arrayValue))
48954898
}
48964899
}
48974900

@@ -5326,7 +5329,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
53265329
case IDENTITY_HASH_CODE =>
53275330
// runtime.identityHashCode(arg)
53285331
val arg = genArgs1
5329-
js.IdentityHashCode(arg)
5332+
js.UnaryOp(js.UnaryOp.IdentityHashCode, arg)
53305333

53315334
case DEBUGGER =>
53325335
// js.special.debugger()
@@ -5463,7 +5466,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
54635466

54645467
case JS_THROW =>
54655468
// js.special.throw(arg)
5466-
js.Throw(genArgs1)
5469+
js.UnaryOp(js.UnaryOp.Throw, genArgs1)
54675470

54685471
case JS_TRY_CATCH =>
54695472
/* js.special.tryCatch(arg1, arg2)
@@ -5502,11 +5505,12 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
55025505

55035506
case WRAP_AS_THROWABLE =>
55045507
// js.special.wrapAsThrowable(arg)
5505-
js.WrapAsThrowable(genArgs1)
5508+
js.UnaryOp(js.UnaryOp.WrapAsThrowable, genArgs1)
55065509

55075510
case UNWRAP_FROM_THROWABLE =>
55085511
// js.special.unwrapFromThrowable(arg)
5509-
js.UnwrapFromThrowable(genArgs1)
5512+
js.UnaryOp(js.UnaryOp.UnwrapFromThrowable,
5513+
js.UnaryOp(js.UnaryOp.CheckNotNull, genArgs1))
55105514

55115515
case LINKTIME_PROPERTY =>
55125516
// LinkingInfo.linkTimePropertyXXX("...")

compiler/src/main/scala/org/scalajs/nscplugin/GenJSExports.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1022,7 +1022,7 @@ trait GenJSExports[G <: Global with Singleton] extends SubComponent {
10221022

10231023
private def genThrowTypeError(msg: String = "No matching overload")(
10241024
implicit pos: Position): js.Tree = {
1025-
js.Throw(js.StringLiteral(msg))
1025+
js.UnaryOp(js.UnaryOp.Throw, js.StringLiteral(msg))
10261026
}
10271027

10281028
class FormalArgsRegistry(minArgc: Int, needsRestParam: Boolean) {

compiler/src/test/scala/org/scalajs/nscplugin/test/OptimizationTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ class OptimizationTest extends JSASTTest {
519519
}
520520
}
521521
""".hasNot("WrapAsThrowable") {
522-
case js.WrapAsThrowable(_) =>
522+
case js.UnaryOp(js.UnaryOp.WrapAsThrowable, _) =>
523523
}
524524

525525
// Confidence check
@@ -536,7 +536,7 @@ class OptimizationTest extends JSASTTest {
536536
}
537537
}
538538
""".hasExactly(1, "WrapAsThrowable") {
539-
case js.WrapAsThrowable(_) =>
539+
case js.UnaryOp(js.UnaryOp.WrapAsThrowable, _) =>
540540
}
541541
}
542542

ir/shared/src/main/scala/org/scalajs/ir/Hashers.scala

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -232,10 +232,6 @@ object Hashers {
232232
mixTree(finalizer)
233233
mixType(tree.tpe)
234234

235-
case Throw(expr) =>
236-
mixTag(TagThrow)
237-
mixTree(expr)
238-
239235
case Match(selector, cases, default) =>
240236
mixTag(TagMatch)
241237
mixTree(selector)
@@ -331,10 +327,6 @@ object Hashers {
331327
mixArrayTypeRef(typeRef)
332328
mixTrees(elems)
333329

334-
case ArrayLength(array) =>
335-
mixTag(TagArrayLength)
336-
mixTree(array)
337-
338330
case ArraySelect(array, index) =>
339331
mixTag(TagArraySelect)
340332
mixTree(array)
@@ -362,26 +354,6 @@ object Hashers {
362354
mixTree(expr)
363355
mixType(tpe)
364356

365-
case GetClass(expr) =>
366-
mixTag(TagGetClass)
367-
mixTree(expr)
368-
369-
case Clone(expr) =>
370-
mixTag(TagClone)
371-
mixTree(expr)
372-
373-
case IdentityHashCode(expr) =>
374-
mixTag(TagIdentityHashCode)
375-
mixTree(expr)
376-
377-
case WrapAsThrowable(expr) =>
378-
mixTag(TagWrapAsThrowable)
379-
mixTree(expr)
380-
381-
case UnwrapFromThrowable(expr) =>
382-
mixTag(TagUnwrapFromThrowable)
383-
mixTree(expr)
384-
385357
case JSNew(ctor, args) =>
386358
mixTag(TagJSNew)
387359
mixTree(ctor)

ir/shared/src/main/scala/org/scalajs/ir/Printers.scala

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,6 @@ object Printers {
260260
print(" finally ")
261261
printBlock(finalizer)
262262

263-
case Throw(expr) =>
264-
print("throw ")
265-
print(expr)
266-
267263
case Match(selector, cases, default) =>
268264
print("match (")
269265
print(selector)
@@ -532,10 +528,6 @@ object Printers {
532528
print(typeRef)
533529
printArgs(elems)
534530

535-
case ArrayLength(array) =>
536-
print(array)
537-
print(".length")
538-
539531
case ArraySelect(array, index) =>
540532
print(array)
541533
print('[')
@@ -571,30 +563,6 @@ object Printers {
571563
print(tpe)
572564
print(']')
573565

574-
case GetClass(expr) =>
575-
print(expr)
576-
print(".getClass()")
577-
578-
case Clone(expr) =>
579-
print("<clone>(")
580-
print(expr)
581-
print(')')
582-
583-
case IdentityHashCode(expr) =>
584-
print("<identityHashCode>(")
585-
print(expr)
586-
print(')')
587-
588-
case WrapAsThrowable(expr) =>
589-
print("<wrapAsThrowable>(")
590-
print(expr)
591-
print(")")
592-
593-
case UnwrapFromThrowable(expr) =>
594-
print("<unwrapFromThrowable>(")
595-
print(expr)
596-
print(")")
597-
598566
// JavaScript expressions
599567

600568
case JSNew(ctor, args) =>

ir/shared/src/main/scala/org/scalajs/ir/Serializers.scala

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -299,10 +299,6 @@ object Serializers {
299299
writeTagAndPos(TagTryFinally)
300300
writeTree(block); writeTree(finalizer)
301301

302-
case Throw(expr) =>
303-
writeTagAndPos(TagThrow)
304-
writeTree(expr)
305-
306302
case Match(selector, cases, default) =>
307303
writeTagAndPos(TagMatch)
308304
writeTree(selector)
@@ -377,10 +373,6 @@ object Serializers {
377373
writeTagAndPos(TagArrayValue)
378374
writeArrayTypeRef(tpe); writeTrees(elems)
379375

380-
case ArrayLength(array) =>
381-
writeTagAndPos(TagArrayLength)
382-
writeTree(array)
383-
384376
case ArraySelect(array, index) =>
385377
writeTagAndPos(TagArraySelect)
386378
writeTree(array); writeTree(index)
@@ -403,26 +395,6 @@ object Serializers {
403395
writeTagAndPos(TagAsInstanceOf)
404396
writeTree(expr); writeType(tpe)
405397

406-
case GetClass(expr) =>
407-
writeTagAndPos(TagGetClass)
408-
writeTree(expr)
409-
410-
case Clone(expr) =>
411-
writeTagAndPos(TagClone)
412-
writeTree(expr)
413-
414-
case IdentityHashCode(expr) =>
415-
writeTagAndPos(TagIdentityHashCode)
416-
writeTree(expr)
417-
418-
case WrapAsThrowable(expr) =>
419-
writeTagAndPos(TagWrapAsThrowable)
420-
writeTree(expr)
421-
422-
case UnwrapFromThrowable(expr) =>
423-
writeTagAndPos(TagUnwrapFromThrowable)
424-
writeTree(expr)
425-
426398
case JSNew(ctor, args) =>
427399
writeTagAndPos(TagJSNew)
428400
writeTree(ctor); writeTreeOrJSSpreads(args)
@@ -1241,7 +1213,7 @@ object Serializers {
12411213

12421214
case TagArrayLength | TagGetClass | TagClone | TagIdentityHashCode |
12431215
TagWrapAsThrowable | TagUnwrapFromThrowable | TagThrow =>
1244-
if (false /*!hacks.use17*/) { // scalastyle:ignore
1216+
if (!hacks.use17) {
12451217
throw new IOException(
12461218
s"Illegal legacy node $tag found in class ${enclosingClassName.nameString}")
12471219
}

ir/shared/src/main/scala/org/scalajs/ir/Transformers.scala

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,6 @@ object Transformers {
7373
case TryFinally(block, finalizer) =>
7474
TryFinally(transform(block), transform(finalizer))
7575

76-
case Throw(expr) =>
77-
Throw(transform(expr))
78-
7976
case Match(selector, cases, default) =>
8077
Match(transform(selector), cases.map(c => (c._1, transform(c._2))),
8178
transform(default))(tree.tpe)
@@ -114,9 +111,6 @@ object Transformers {
114111
case ArrayValue(tpe, elems) =>
115112
ArrayValue(tpe, transformTrees(elems))
116113

117-
case ArrayLength(array) =>
118-
ArrayLength(transform(array))
119-
120114
case ArraySelect(array, index) =>
121115
ArraySelect(transform(array), transform(index))(tree.tpe)
122116

@@ -132,21 +126,6 @@ object Transformers {
132126
case AsInstanceOf(expr, tpe) =>
133127
AsInstanceOf(transform(expr), tpe)
134128

135-
case GetClass(expr) =>
136-
GetClass(transform(expr))
137-
138-
case Clone(expr) =>
139-
Clone(transform(expr))
140-
141-
case IdentityHashCode(expr) =>
142-
IdentityHashCode(transform(expr))
143-
144-
case WrapAsThrowable(expr) =>
145-
WrapAsThrowable(transform(expr))
146-
147-
case UnwrapFromThrowable(expr) =>
148-
UnwrapFromThrowable(transform(expr))
149-
150129
// JavaScript expressions
151130

152131
case JSNew(ctor, args) =>

ir/shared/src/main/scala/org/scalajs/ir/Traversers.scala

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,6 @@ object Traversers {
6464
traverse(block)
6565
traverse(finalizer)
6666

67-
case Throw(expr) =>
68-
traverse(expr)
69-
7067
case Match(selector, cases, default) =>
7168
traverse(selector)
7269
cases foreach (c => (c._1 map traverse, traverse(c._2)))
@@ -107,9 +104,6 @@ object Traversers {
107104
case ArrayValue(tpe, elems) =>
108105
elems foreach traverse
109106

110-
case ArrayLength(array) =>
111-
traverse(array)
112-
113107
case ArraySelect(array, index) =>
114108
traverse(array)
115109
traverse(index)
@@ -126,21 +120,6 @@ object Traversers {
126120
case AsInstanceOf(expr, _) =>
127121
traverse(expr)
128122

129-
case GetClass(expr) =>
130-
traverse(expr)
131-
132-
case Clone(expr) =>
133-
traverse(expr)
134-
135-
case IdentityHashCode(expr) =>
136-
traverse(expr)
137-
138-
case WrapAsThrowable(expr) =>
139-
traverse(expr)
140-
141-
case UnwrapFromThrowable(expr) =>
142-
traverse(expr)
143-
144123
// JavaScript expressions
145124

146125
case JSNew(ctor, args) =>

0 commit comments

Comments
 (0)
0