Skip to content

Commit 6cfc767

Browse files
authored
use .to(ArraySeq) instead of .toArray, fixing some deprecations (#365)
The .toArray method converts an iterable to an Array. However, this is a minimal Java-esque array and does not support any of Scala's interfaces. Where an interface like Iterable or Seq was needed, this would require a coercion from Array to ArraySeq, which the compiler tells us would incur an additional copy. This fixes the deprecation warning by using converting directly to ArraySeq, avoiding the implicit coercion and additional copy.
1 parent a2c78d2 commit 6cfc767

File tree

4 files changed

+18
-15
lines changed

4 files changed

+18
-15
lines changed

build.sc

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import contrib.scalapblib._
99
object basil extends RootModule with ScalaModule with antlr.AntlrModule with ScalaPBModule {
1010
def scalaVersion = "3.3.4"
1111

12-
// def scalacOptions: T[Seq[String]] = Seq("-Xprint:typer")
12+
def scalacOptions: T[Seq[String]] = Seq("-deprecation")
1313

1414
val javaTests = ivy"com.novocode:junit-interface:0.11"
1515
val scalaTests = ivy"org.scalatest::scalatest:3.2.19"

src/main/scala/ir/dsl/DSL.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ def ret(params: (String, Expr)*): EventuallyReturn = EventuallyReturn(params)
190190
def unreachable: EventuallyUnreachable = EventuallyUnreachable()
191191

192192
def directCall(lhs: Iterable[(String, Variable)], tgt: String, actualParams: (String, Expr)*): EventuallyCall =
193-
EventuallyCall(DelayNameResolve(tgt), lhs.toArray, actualParams)
193+
EventuallyCall(DelayNameResolve(tgt), lhs.to(ArraySeq), actualParams)
194194

195195
def directCall(tgt: String): EventuallyCall = directCall(Nil, tgt)
196196

src/main/scala/ir/dsl/IRToDSL.scala

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package ir.dsl
22

3-
import scala.collection.immutable.SortedMap
3+
import scala.collection.immutable.{SortedMap, ArraySeq}
44
import ir.*
55

66
/**
@@ -20,7 +20,7 @@ object IRToDSL {
2020

2121
def convertJump(x: Jump): EventuallyJump = x match {
2222
case Unreachable(label) => EventuallyUnreachable(label)
23-
case Return(label, out) => EventuallyReturn(out.map(keyToString).toArray, label)
23+
case Return(label, out) => EventuallyReturn(out.map(keyToString).to(ArraySeq), label)
2424
case GoTo(targs, label) => EventuallyGoto(targs.map(t => DelayNameResolve(t.label)).toList, label)
2525
}
2626

@@ -29,7 +29,7 @@ object IRToDSL {
2929
def convertCallStatement(x: Call): EventuallyStatement = x match {
3030
case DirectCall(targ, outs, actuals, label) =>
3131
// XXX: be aware of ordering, .map() on a SortedMap may return a HashMap.
32-
directCall(outs.toArray.map(keyToString), targ.name, actuals.toArray.map(keyToString): _*)
32+
directCall(outs.to(ArraySeq).map(keyToString), targ.name, actuals.to(ArraySeq).map(keyToString): _*)
3333
case IndirectCall(targ, label) => indirectCall(targ)
3434
}
3535

@@ -39,21 +39,21 @@ object IRToDSL {
3939
}
4040

4141
def convertBlock(x: Block) =
42-
EventuallyBlock(x.label, x.statements.toArray.map(convertStatement), convertJump(x.jump), x.address)
42+
EventuallyBlock(x.label, x.statements.to(ArraySeq).map(convertStatement), convertJump(x.jump), x.address)
4343

4444
def convertProcedure(x: Procedure) =
4545
EventuallyProcedure(
4646
x.procName,
4747
x.formalInParam.toSeq.map(localVarToTuple).to(SortedMap),
4848
x.formalOutParam.toSeq.map(localVarToTuple).to(SortedMap),
49-
x.blocks.map(convertBlock).toArray,
49+
x.blocks.map(convertBlock).to(ArraySeq),
5050
x.entryBlock.map(_.label),
5151
x.returnBlock.map(_.label),
5252
x.address
5353
)
5454

5555
def convertProgram(x: Program) =
5656
val others = x.procedures.filter(_ != x.mainProcedure).map(convertProcedure)
57-
EventuallyProgram(convertProcedure(x.mainProcedure), others.toArray, x.initialMemory.values)
57+
EventuallyProgram(convertProcedure(x.mainProcedure), others.to(ArraySeq), x.initialMemory.values)
5858

5959
}

src/main/scala/ir/transforms/Inline.scala

+10-7
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import ir.dsl.IRToDSL.*
66
import ir.dsl.*
77

88
import scala.collection.mutable
9+
import scala.collection.immutable.{ArraySeq}
910

1011
object Counter {
1112
var id = 0
@@ -64,9 +65,11 @@ def convertJumpRenaming(blockName: String => String, varName: CILVisitor, x: Jum
6465
case Unreachable(label) => EventuallyUnreachable(label)
6566
case Return(label, out) =>
6667
EventuallyReturn(
67-
out.toList.map { case (v: Variable, e: Expr) =>
68-
((v.name, visit_expr(varName, e)))
69-
}.toArray,
68+
out.toList
69+
.map { case (v: Variable, e: Expr) =>
70+
((v.name, visit_expr(varName, e)))
71+
}
72+
.to(ArraySeq),
7073
label
7174
)
7275
}
@@ -77,9 +80,9 @@ def keyToString[T](varRenamer: CILVisitor)(x: (Variable, Expr)): (String, Expr)
7780
def convertStatementRenaming(varRenamer: CILVisitor)(x: Statement): EventuallyStatement = x match {
7881
case DirectCall(targ, outs, actuals, label) =>
7982
directCall(
80-
outs.toArray.map(v => (v(0).name, visit_rvar(varRenamer, v(1)))),
83+
outs.to(ArraySeq).map(v => (v(0).name, visit_rvar(varRenamer, v(1)))),
8184
targ.name,
82-
actuals.toArray.map(keyToString(varRenamer)): _*
85+
actuals.to(ArraySeq).map(keyToString(varRenamer)): _*
8386
)
8487
case IndirectCall(targ, label) => indirectCall(visit_rvar(varRenamer, targ))
8588
case x: NonCallStatement =>
@@ -89,7 +92,7 @@ def convertStatementRenaming(varRenamer: CILVisitor)(x: Statement): EventuallySt
8992
def convertBlockRenaming(varRenamer: CILVisitor, blockName: String => String)(x: Block) = {
9093
EventuallyBlock(
9194
blockName(x.label),
92-
x.statements.toArray.map(convertStatementRenaming(varRenamer)),
95+
x.statements.to(ArraySeq).map(convertStatementRenaming(varRenamer)),
9396
convertJumpRenaming(blockName, varRenamer, x.jump),
9497
x.address
9598
)
@@ -98,7 +101,7 @@ def convertBlockRenaming(varRenamer: CILVisitor, blockName: String => String)(x:
98101
/**
99102
* Inline a procedure call to the calling procedure;
100103
*
101-
* - maintains param form
104+
* - maintains param form
102105
* - maintain dsa form if both procedures are in dsa form
103106
*
104107
* require invariant.SingleCallBlockEnd

0 commit comments

Comments
 (0)