This commit is contained in:
Mark Canlas 2022-07-26 22:51:46 -04:00
parent e8e7491597
commit adba954ccc
4 changed files with 14 additions and 13 deletions

View File

@ -7,8 +7,8 @@ case class AsmProgram[A: Reg, MA <: MutationStatus, Z: Semigroup](a: StatefulReg
def map(f: StatefulRegister[A, MA] => Z): AsmProgram[A, MA, Z] =
AsmProgram(a, z |+| f(a))
def widen[B: Reg]: AsmProgram2[A, MA, B, Unknown, Z] =
AsmProgram2(a, ??? : StatefulRegister[B, Unknown], z)
def widen[B: Reg]: AsmProgram2[A, MA, B, Ignores, Z] =
AsmProgram2(a, ??? : StatefulRegister[B, Ignores], z)
case class AsmProgram2[A: Reg, MA <: MutationStatus, B: Reg, MB <: MutationStatus, Z: Semigroup](
a: StatefulRegister[A, MA],
@ -18,8 +18,8 @@ case class AsmProgram2[A: Reg, MA <: MutationStatus, B: Reg, MB <: MutationStatu
def map(f: (StatefulRegister[A, MA], StatefulRegister[B, MB]) => Z): AsmProgram2[A, MA, B, MB, Z] =
AsmProgram2(a, b, z |+| f(a, b))
def widen[C: Reg]: AsmProgram3[A, MA, B, MB, C, Unknown, Z] =
AsmProgram3(a, b, ??? : StatefulRegister[C, Unknown], z)
def widen[C: Reg]: AsmProgram3[A, MA, B, MB, C, Ignores, Z] =
AsmProgram3(a, b, ??? : StatefulRegister[C, Ignores], z)
case class AsmProgram3[
A: Reg,

View File

@ -62,8 +62,8 @@ object Generator extends App:
)
println(s" AsmProgram$classNum($arguments, z |+| that.z)")
println()
println(s" def widen[$newLetter : Reg]: AsmProgram$nPlus[$typeParametersShort, $newLetter, Unknown, Z] =")
println(s" AsmProgram$nPlus($arguments, ??? : StatefulRegister[$newLetter, Unknown], z)")
println(s" def widen[$newLetter : Reg]: AsmProgram$nPlus[$typeParametersShort, $newLetter, Ignores, Z] =")
println(s" AsmProgram$nPlus($arguments, ??? : StatefulRegister[$newLetter, Ignores], z)")
println()
println(s" def name(s: String): SubRoutine$classNum[$typeParametersShort, Z] =")
println(s" SubRoutine$classNum(s, this)")

View File

@ -2,5 +2,6 @@ package com.htmlism.scratchpad
sealed trait MutationStatus
trait Unknown extends MutationStatus
trait Known extends MutationStatus
class Modifies() extends MutationStatus
case class Ignores() extends Modifies

View File

@ -33,18 +33,18 @@ object ScratchPad:
trait ReadWrite[A] extends Read[A] with Write[A]
lazy val startA =
??? : StatefulRegister[Accumulator, Unknown]
??? : StatefulRegister[Accumulator, Ignores]
lazy val startX =
??? : StatefulRegister[RegisterX, Unknown]
??? : StatefulRegister[RegisterX, Ignores]
lazy val startY =
??? : StatefulRegister[RegisterY, Unknown]
??? : StatefulRegister[RegisterY, Ignores]
(AsmProgram(startA, ""): AsmProgram[Accumulator, Unknown, String])
(AsmProgram(startA, ""): AsmProgram[Accumulator, Ignores, String])
(AsmProgram(startA, "")
.widen[RegisterX]: AsmProgram2[Accumulator, Unknown, RegisterX, Unknown, String])
.widen[RegisterX]: AsmProgram2[Accumulator, Ignores, RegisterX, Ignores, String])
//
// case class Subroutine2[A, B](name: String, f: (Lease[A], Lease[B]) => State2[A, B]) {