Skip to content

Commit 9e65f20

Browse files
committed
Merge remote-tracking branch 'origin/main' into scalatest-grouping
2 parents 1eee5f9 + ec45cca commit 9e65f20

6 files changed

+23
-23
lines changed

src/main/scala/ir/eval/InterpretBasilIR.scala

+8-3
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ enum InterpretReturn {
293293
}
294294

295295
class BASILInterpreter[S](f: Effects[S, InterpreterError])
296-
extends Interpreter[S, InterpretReturn, InterpreterError](f) {
296+
/*extends Interpreter[S, InterpretReturn, InterpreterError](f) */ {
297297

298298
def interpretOne: util.functional.State[S, Next[InterpretReturn], InterpreterError] =
299299
InterpFuns.interpretContinuation(f)
@@ -724,8 +724,6 @@ object InterpFuns {
724724
}.toMap
725725
}
726726

727-
def interpretEvalProcExc(program: IRContext | Program, functionName: String, params: Map[String, Literal]) = {}
728-
729727
/* Intialise from ELF and Interpret program */
730728
def interpretEvalProg[S, T <: Effects[S, InterpreterError]](
731729
f: T
@@ -735,6 +733,13 @@ object InterpFuns {
735733
callProcedure(f)(main, mainDefaultFunctionArguments(main)).f(begin)
736734
}
737735

736+
def interpretEvalProgSkipInit[S, T <: Effects[S, InterpreterError]](
737+
f: T
738+
)(p: Program, begin: S): (S, Either[InterpreterError, Map[LocalVar, Literal]]) = {
739+
val main = p.mainProcedure
740+
callProcedure(f)(main, mainDefaultFunctionArguments(main)).f(begin)
741+
}
742+
738743
/* Interpret IR program */
739744
def interpretEvalProg[S, T <: Effects[S, InterpreterError]](
740745
f: T

src/main/scala/ir/eval/InterpretRLimit.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def interpretWithRLimit[I](
5050
val rlimitInterpreter = LayerInterpreter(innerInterpreter, EffectsRLimit(instructionLimit))
5151
val begin = InterpFuns.initProgState(rlimitInterpreter)(p, (innerInitialState, 0))
5252
// throw away initialisation trace
53-
BASILInterpreter(rlimitInterpreter).run((begin._1, 0))
53+
InterpFuns.interpretEvalProgSkipInit(rlimitInterpreter)(p.program, (begin._1, 0))._1
5454
}
5555

5656
def interpretRLimit(p: Program, instructionLimit: Int): (InterpreterState, Int) = {

src/main/scala/ir/eval/InterpretTrace.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def interpretWithTrace[I](
7575
val tracingInterpreter = ProductInterpreter(innerInterpreter, TraceGen())
7676
val begin = InterpFuns.initProgState(tracingInterpreter)(p, (innerInitialState, Trace.empty))
7777
// throw away initialisation trace
78-
BASILInterpreter(tracingInterpreter).run((begin._1, Trace.empty))
78+
InterpFuns.interpretEvalProgSkipInit(tracingInterpreter)(p.program, (begin._1, Trace.empty))._1
7979
}
8080

8181
def interpretTrace(p: Program) = {

src/main/scala/ir/eval/Interpreter.scala

-11
Original file line numberDiff line numberDiff line change
@@ -673,14 +673,3 @@ def evalInterpreter[S, V, E](f: Effects[S, E], doStep: State[S, Next[V], E]): St
673673

674674
State(begin => runEval(begin))
675675
}
676-
677-
trait Interpreter[S, V, E](val f: Effects[S, E]) {
678-
679-
/*
680-
* Returns value deciding whether to continue.
681-
*/
682-
def interpretOne: State[S, Next[V], E]
683-
684-
final def run(begin: S): S = State.execute(begin, (evalInterpreter(f, interpretOne)))
685-
686-
}

src/test/scala/DifferentialAnalysisTest.scala

+12-7
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,14 @@ abstract class DifferentialTest extends AnyFunSuite, TestCustomisation {
6161

6262
def interp(p: IRContext): (InterpreterState, Trace) = {
6363
val interpreter = LayerInterpreter(tracingInterpreter(NormalInterpreter), EffectsRLimit(instructionLimit))
64-
val initialState = InterpFuns.initProgState(NormalInterpreter)(p, InterpreterState())
64+
val initialState = ((InterpFuns.initProgState(NormalInterpreter)(p, InterpreterState()), Trace.empty), 0)
6565
// Logger.setLevel(LogLevel.DEBUG)
66-
val r = BASILInterpreter(interpreter).run((initialState, Trace.empty), 0)._1
67-
// Logger.setLevel(LogLevel.WARN)
68-
r
66+
67+
val main = p.program.mainProcedure
68+
val r = InterpFuns
69+
.callProcedure(interpreter)(main, InterpFuns.mainDefaultFunctionArguments(main))
70+
.f(initialState)
71+
r._1._1
6972
}
7073

7174
val (initialRes, traceInit) = interp(initial)
@@ -83,11 +86,13 @@ abstract class DifferentialTest extends AnyFunSuite, TestCustomisation {
8386
val initstdout =
8487
initialRes.memoryState.getMem("stdout").toList.sortBy(_._1.value).map(_._2.value.toChar).mkString("")
8588
val comparstdout = result.memoryState.getMem("stdout").toList.sortBy(_._1.value).map(_._2.value.toChar).mkString("")
86-
info("STDOUT: \"" + initstdout + "\"")
89+
if (initstdout.nonEmpty) {
90+
info("STDOUT: \"" + initstdout + "\"")
91+
}
8792
// Logger.info(initialRes.memoryState.getMem("stderr").toList.sortBy(_._1.value).map(_._2).mkString(""))
8893
assert(initstdout == comparstdout)
89-
assert(initialRes.nextCmd == Stopped())
90-
assert(result.nextCmd == Stopped())
94+
assert(normalTermination(initialRes.nextCmd), initialRes.nextCmd)
95+
assert(normalTermination(result.nextCmd), initialRes.nextCmd)
9196
assert(Set.empty == initialRes.memoryState.getMem("mem").toSet.diff(result.memoryState.getMem("mem").toSet))
9297
assert(traceInit.t.nonEmpty)
9398
assert(traceRes.t.nonEmpty)

src/test/scala/ir/InterpreterTests.scala

+1
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@ class InterpreterTests extends AnyFunSuite with BeforeAndAfter {
302302
val r = interpretTrace(fib)
303303

304304
assert(normalTermination(r._1.nextCmd), r._1.nextCmd)
305+
assert(r._2.t.nonEmpty, "Trace was empty")
305306

306307
}
307308

0 commit comments

Comments
 (0)