aboutsummaryrefslogtreecommitdiff
path: root/tests/pending/run/reify_printf.scala
diff options
context:
space:
mode:
Diffstat (limited to 'tests/pending/run/reify_printf.scala')
-rw-r--r--tests/pending/run/reify_printf.scala71
1 files changed, 0 insertions, 71 deletions
diff --git a/tests/pending/run/reify_printf.scala b/tests/pending/run/reify_printf.scala
deleted file mode 100644
index b957c41bb..000000000
--- a/tests/pending/run/reify_printf.scala
+++ /dev/null
@@ -1,71 +0,0 @@
-import java.io.{ ByteArrayOutputStream, PrintStream }
-import scala.reflect.runtime.universe._
-import scala.reflect.runtime.{universe => ru}
-import scala.reflect.runtime.{currentMirror => cm}
-import scala.tools.reflect.ToolBox
-import scala.reflect.api._
-import scala.reflect.api.Trees
-import scala.reflect.internal.Types
-import scala.util.matching.Regex
-
-object Test extends dotty.runtime.LegacyApp {
- //val output = new ByteArrayOutputStream()
- //Console.setOut(new PrintStream(output))
- val toolbox = cm.mkToolBox()
-
- val tree = tree_printf(reify("hello %s").tree, reify("world").tree)
- val evaluated = toolbox.eval(tree)
- //assert(output.toString() == "hello world", output.toString() +" == hello world")
-
- /*
- // upd. Oh, good old times, our very-very first experiments with macros :)
- macro def printf(format: String, params: Any*) : String = tree_printf(format: Tree, (params: Seq[Tree]): _*)
- */
-
- var i = 0
- def gensym(name: String) = { i += 1; TermName(name + i) }
-
- def createTempValDef( value : Tree, tpe : Type ) : (Option[Tree],Tree) = {
- val local = gensym("temp")
- (
- Some(
- ValDef(
- NoMods
- , local
- , TypeTree(tpe)
- , value
- )
- )
- , Ident(local)
- )
- }
-
- def tree_printf(format: Tree, params: Tree*) = {
- val Literal(Constant(s_format: String)) = format
- val paramsStack = scala.collection.mutable.Stack(params: _*)
- val parsed = s_format.split("(?<=%[\\w%])|(?=%[\\w%])") map {
- case "%d" => createTempValDef( paramsStack.pop, typeOf[Int] )
- case "%s" => createTempValDef( paramsStack.pop, typeOf[String] )
- case "%%" => {
- (None:Option[Tree], Literal(Constant("%")))
- }
- case part => {
- (None:Option[Tree], Literal(Constant(part)))
- }
- }
-
- val evals = for ((Some(eval), _) <- parsed if eval != None) yield (eval: Tree)
- val prints = for ((_, ref) <- parsed) yield
- Apply(
- Select(
- Select(
- Ident( TermName("scala") )
- , TermName("Predef")
- )
- , TermName("print")
- )
- , List(ref)
- ): Tree
- Block((evals ++ prints).toList, Literal(Constant(())))
- }
-}