Skip to content

Commit dba967b

Browse files
committed
Merge pull request #102 from TiarkRompf/develop-1.0.x
Bring develop up-to-date with 1.0.x branch
2 parents 75e3ea4 + 8279c59 commit dba967b

File tree

158 files changed

+2044
-1565
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

158 files changed

+2044
-1565
lines changed

project/Build.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import java.io.File
33

44
object LMSBuild extends Build {
55
System.setProperty("showSuppressedErrors", "false")
6+
System.setProperty("showTimings", "false")
67

78
val virtScala = Option(System.getenv("SCALA_VIRTUALIZED_VERSION")).getOrElse("2.11.2")
89

src/common/ArrayBufferOps.scala

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,18 @@ import scala.lms.internal.GenericNestedCodegen
88
import collection.mutable.ArrayBuffer
99
import scala.reflect.SourceContext
1010

11-
trait ArrayBufferOps extends Base {
11+
trait ArrayBufferOps extends Base with StringOps with ArrayOps {
1212

1313
object ArrayBuffer {
14-
def apply[A:Manifest](xs: Rep[A]*) = arraybuffer_new(xs)
14+
def apply[A:Typ](xs: Rep[A]*) = arraybuffer_new(xs)
1515
}
1616

17-
implicit def repToArrayBufferOps[A:Manifest](l: Rep[ArrayBuffer[A]]) = new ArrayBufferOpsCls(l)
17+
implicit def arrayBufferTyp[T:Typ]: Typ[ArrayBuffer[T]]
18+
implicit def seqTyp[T:Typ]: Typ[Seq[T]] // TODO: remove?
19+
20+
implicit def repToArrayBufferOps[A:Typ](l: Rep[ArrayBuffer[A]]) = new ArrayBufferOpsCls(l)
1821

19-
class ArrayBufferOpsCls[A:Manifest](l: Rep[ArrayBuffer[A]]) {
22+
class ArrayBufferOpsCls[A:Typ](l: Rep[ArrayBuffer[A]]) {
2023
def +=(e: Rep[A])(implicit pos: SourceContext) = arraybuffer_append(l,e)
2124
def mkString(sep: Rep[String] = unit(""))(implicit pos: SourceContext) = arraybuffer_mkstring(l,sep)
2225
def append(l: Rep[ArrayBuffer[A]], e: Rep[A])(implicit pos: SourceContext) = arraybuffer_append(l,e)
@@ -25,53 +28,58 @@ trait ArrayBufferOps extends Base {
2528
def toSeq(implicit pos: SourceContext) = arraybuffer_toseq(l)
2629
}
2730

28-
def infix_+=[A:Manifest](l: Rep[ArrayBuffer[A]], e: Rep[A])(implicit pos: SourceContext) = arraybuffer_append(l, e)
31+
def infix_+=[A:Typ](l: Rep[ArrayBuffer[A]], e: Rep[A])(implicit pos: SourceContext) = arraybuffer_append(l, e)
2932

3033
/* when mixed in with OptiML, one of these infix operations causes an NPE in the scala-virtualized compiler */ //TR: still the case?
3134
/*
32-
def infix_mkString[A:Manifest](l: Rep[ArrayBuffer[A]], sep: Rep[String] = unit(""))(implicit pos: SourceContext) = arraybuffer_mkstring(l, sep)
33-
def infix_+=[A:Manifest](l: Rep[ArrayBuffer[A]], e: Rep[A])(implicit pos: SourceContext) = arraybuffer_append(l, e)
34-
def infix_append[A:Manifest](l: Rep[ArrayBuffer[A]], e: Rep[A])(implicit pos: SourceContext) = arraybuffer_append(l, e)
35-
def infix_toArray[A:Manifest](l: Rep[ArrayBuffer[A]])(implicit pos: SourceContext) = arraybuffer_toarray(l)
36-
def infix_toSeq[A:Manifest](l: Rep[ArrayBuffer[A]])(implicit pos: SourceContext) = arraybuffer_toseq(l)
35+
def infix_mkString[A:Typ](l: Rep[ArrayBuffer[A]], sep: Rep[String] = unit(""))(implicit pos: SourceContext) = arraybuffer_mkstring(l, sep)
36+
def infix_+=[A:Typ](l: Rep[ArrayBuffer[A]], e: Rep[A])(implicit pos: SourceContext) = arraybuffer_append(l, e)
37+
def infix_append[A:Typ](l: Rep[ArrayBuffer[A]], e: Rep[A])(implicit pos: SourceContext) = arraybuffer_append(l, e)
38+
def infix_toArray[A:Typ](l: Rep[ArrayBuffer[A]])(implicit pos: SourceContext) = arraybuffer_toarray(l)
39+
def infix_toSeq[A:Typ](l: Rep[ArrayBuffer[A]])(implicit pos: SourceContext) = arraybuffer_toseq(l)
3740
*/
3841

39-
def arraybuffer_mkstring[A:Manifest](l: Rep[ArrayBuffer[A]], sep: Rep[String])(implicit pos: SourceContext): Rep[String]
40-
def arraybuffer_append[A:Manifest](l: Rep[ArrayBuffer[A]], e: Rep[A])(implicit pos: SourceContext): Rep[Unit]
41-
def arraybuffer_new[A:Manifest](xs: Seq[Rep[A]])(implicit pos: SourceContext): Rep[ArrayBuffer[A]]
42-
def arraybuffer_clear[A:Manifest](l: Rep[ArrayBuffer[A]]): Rep[Unit]
43-
def arraybuffer_toarray[A:Manifest](x: Rep[ArrayBuffer[A]])(implicit pos: SourceContext): Rep[Array[A]]
44-
def arraybuffer_toseq[A:Manifest](x: Rep[ArrayBuffer[A]])(implicit pos: SourceContext): Rep[Seq[A]]
42+
def arraybuffer_mkstring[A:Typ](l: Rep[ArrayBuffer[A]], sep: Rep[String])(implicit pos: SourceContext): Rep[String]
43+
def arraybuffer_append[A:Typ](l: Rep[ArrayBuffer[A]], e: Rep[A])(implicit pos: SourceContext): Rep[Unit]
44+
def arraybuffer_new[A:Typ](xs: Seq[Rep[A]])(implicit pos: SourceContext): Rep[ArrayBuffer[A]]
45+
def arraybuffer_clear[A:Typ](l: Rep[ArrayBuffer[A]]): Rep[Unit]
46+
def arraybuffer_toarray[A:Typ](x: Rep[ArrayBuffer[A]])(implicit pos: SourceContext): Rep[Array[A]]
47+
def arraybuffer_toseq[A:Typ](x: Rep[ArrayBuffer[A]])(implicit pos: SourceContext): Rep[Seq[A]]
4548
}
4649

4750
trait ArrayBufferOpsExp extends ArrayBufferOps with EffectExp {
48-
case class ArrayBufferNew[A:Manifest](xs: Seq[Exp[A]]) extends Def[ArrayBuffer[A]] {
51+
implicit def arrayBufferTyp[T:Typ]: Typ[ArrayBuffer[T]] = {
52+
implicit val ManifestTyp(m) = typ[T]
53+
manifestTyp
54+
}
55+
56+
case class ArrayBufferNew[A:Typ](xs: Seq[Exp[A]]) extends Def[ArrayBuffer[A]] {
4957
val mA = manifest[A]
5058
}
51-
case class ArrayBufferMkString[A:Manifest](l: Exp[ArrayBuffer[A]], sep: Exp[String]) extends Def[String]
52-
case class ArrayBufferAppend[A:Manifest](l: Exp[ArrayBuffer[A]], e: Exp[A]) extends Def[Unit]
53-
case class ArrayBufferClear[A:Manifest](l: Exp[ArrayBuffer[A]]) extends Def[Unit]
54-
case class ArrayBufferToArray[A:Manifest](x: Exp[ArrayBuffer[A]]) extends Def[Array[A]]
55-
case class ArrayBufferToSeq[A:Manifest](x: Exp[ArrayBuffer[A]]) extends Def[Seq[A]]
56-
57-
def arraybuffer_new[A:Manifest](xs: Seq[Exp[A]])(implicit pos: SourceContext) = reflectMutable(ArrayBufferNew(xs))
58-
def arraybuffer_mkstring[A:Manifest](l: Exp[ArrayBuffer[A]], sep: Exp[String])(implicit pos: SourceContext) = ArrayBufferMkString(l, sep)
59-
def arraybuffer_append[A:Manifest](l: Exp[ArrayBuffer[A]], e: Exp[A])(implicit pos: SourceContext) = reflectWrite(l)(ArrayBufferAppend(l, e))
60-
def arraybuffer_clear[A:Manifest](l: Exp[ArrayBuffer[A]]) = reflectWrite(l)(ArrayBufferClear(l))
61-
def arraybuffer_toarray[A:Manifest](x: Exp[ArrayBuffer[A]])(implicit pos: SourceContext) = ArrayBufferToArray(x)
62-
def arraybuffer_toseq[A:Manifest](x: Exp[ArrayBuffer[A]])(implicit pos: SourceContext) = ArrayBufferToSeq(x)
59+
case class ArrayBufferMkString[A:Typ](l: Exp[ArrayBuffer[A]], sep: Exp[String]) extends Def[String]
60+
case class ArrayBufferAppend[A:Typ](l: Exp[ArrayBuffer[A]], e: Exp[A]) extends Def[Unit]
61+
case class ArrayBufferClear[A:Typ](l: Exp[ArrayBuffer[A]]) extends Def[Unit]
62+
case class ArrayBufferToArray[A:Typ](x: Exp[ArrayBuffer[A]]) extends Def[Array[A]]
63+
case class ArrayBufferToSeq[A:Typ](x: Exp[ArrayBuffer[A]]) extends Def[Seq[A]]
64+
65+
def arraybuffer_new[A:Typ](xs: Seq[Exp[A]])(implicit pos: SourceContext) = reflectMutable(ArrayBufferNew(xs))
66+
def arraybuffer_mkstring[A:Typ](l: Exp[ArrayBuffer[A]], sep: Exp[String])(implicit pos: SourceContext) = ArrayBufferMkString(l, sep)
67+
def arraybuffer_append[A:Typ](l: Exp[ArrayBuffer[A]], e: Exp[A])(implicit pos: SourceContext) = reflectWrite(l)(ArrayBufferAppend(l, e))
68+
def arraybuffer_clear[A:Typ](l: Exp[ArrayBuffer[A]]) = reflectWrite(l)(ArrayBufferClear(l))
69+
def arraybuffer_toarray[A:Typ](x: Exp[ArrayBuffer[A]])(implicit pos: SourceContext) = ArrayBufferToArray(x)
70+
def arraybuffer_toseq[A:Typ](x: Exp[ArrayBuffer[A]])(implicit pos: SourceContext) = ArrayBufferToSeq(x)
6371

6472
//////////////
6573
// mirroring
6674

67-
override def mirrorDef[A:Manifest](e: Def[A], f: Transformer)(implicit pos: SourceContext): Def[A] = (e match {
68-
case ArrayBufferMkString(l,r) => ArrayBufferMkString(f(l),f(r))
69-
case ArrayBufferAppend(l,r) => ArrayBufferAppend(f(l),f(r))
75+
override def mirrorDef[A:Typ](e: Def[A], f: Transformer)(implicit pos: SourceContext): Def[A] = (e match {
76+
case ArrayBufferMkString(l,r) => ArrayBufferMkString(f(l),f(r))(mtype(manifest[A]))
77+
case ArrayBufferAppend(l,r) => ArrayBufferAppend(f(l),f(r))(mtype(manifest[A]))
7078
case _ => super.mirrorDef(e,f)
7179
}).asInstanceOf[Def[A]] // why??
7280

7381
/*
74-
override def mirror[A:Manifest](e: Def[A], f: Transformer)(implicit pos: SourceContext): Exp[A] = (e match {
82+
override def mirror[A:Typ](e: Def[A], f: Transformer)(implicit pos: SourceContext): Exp[A] = (e match {
7583
case Reflect(ArrayBufferMkString(l,r), u, es) => reflectMirrored(Reflect(ArrayBufferMkString(f(l),f(r)), mapOver(f,u), f(es)))(mtype(manifest[A]))
7684
case Reflect(ArrayBufferAppend(l,r), u, es) => reflectMirrored(Reflect(ArrayBufferAppend(f(l),f(r)), mapOver(f,u), f(es)))(mtype(manifest[A]))
7785
case _ => super.mirror(e,f)

0 commit comments

Comments
 (0)