Skip to content

Instantly share code, notes, and snippets.

@g-pechorin
Created June 29, 2020 15:07
Show Gist options
  • Save g-pechorin/4292f914cf27e22d46699558e03eb7c5 to your computer and use it in GitHub Desktop.
Save g-pechorin/4292f914cf27e22d46699558e03eb7c5 to your computer and use it in GitHub Desktop.
package peterlavalle.puregen
object ScriptedGen extends App {
val template: String =
"""
| def scripted[<tags>O](f: (<args> => O)): (<args> => O) = new (<args> => O) {
| @HostAccess.Export
| override def apply(<take>): O = f(<pass>)
| }
|""".stripMargin
(0 to 3).map {
i =>
val ran = (0 until i)
Map(
"<tags>" -> (ran.foldLeft("")(_ + "A" + _ + ", ")),
"<args>" -> ("(" + (ran.foldLeft("")(_ + ", A" + _)).drop(2) + ")"),
"<take>" ->
ran
.foldLeft("") {
case (l, i) =>
l + ", v" + i + ": A" + i
}.drop(2),
"<pass>" ->
ran.foldLeft("")(_ + ", v" + _).drop(2)
)
}.map {
data =>
data.foldLeft(template) {
case (l, (k, v)) =>
l.replace(k, v)
}
}.foreach(println)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment