From dac9df20c58ffece5fb6e9c0ee060b0876c725f0 Mon Sep 17 00:00:00 2001 From: Christoph Thiede Date: Sat, 13 Nov 2021 20:25:44 +0100 Subject: [PATCH 1/8] Add and test new Simulator class and (Basic)SimulatorContext Simulator implements the Chain of Responsibility pattern to make multiple customizations to the simulation engine combinable. --- .../BasicSimulatorContext.class/README.md | 1 + .../class/newFor..st | 6 ++ .../instance/initializeFrom..st | 6 ++ .../instance/simulator..st | 4 ++ .../instance/simulator.st | 4 ++ .../methodProperties.json | 7 ++ .../properties.json | 14 ++++ .../Simulator.class/README.md | 5 ++ .../class/basicContextClass.st | 4 ++ .../Simulator.class/class/cleanUp.st | 4 ++ .../class/cleanUpContextClasses.st | 6 ++ .../class/contextClassForCapabilities..st | 22 +++++++ .../class/contextClassForSimulators..st | 8 +++ .../Simulator.class/class/debug..st | 4 ++ .../Simulator.class/class/decorating..st | 6 ++ .../Simulator.class/class/evaluate..st | 4 ++ .../Simulator.class/class/fullContextClass.st | 4 ++ .../class/noteAddedSelector.meta..st | 8 +++ .../Simulator.class/class/warmUp.st | 4 ++ .../class/warmUpContextClasses.st | 5 ++ .../instance/basicSimulate.do..st | 10 +++ .../instance/basicSimulate.do.chain..st | 8 +++ ...xt.activateMethod.withArgs.receiver.do..st | 7 ++ .../context.blockReturnConstant.do..st | 7 ++ .../instance/context.callPrimitive.do..st | 7 ++ .../context.directedSuperSend.numArgs.do..st | 7 ++ .../instance/context.doBlockReturnTop..st | 7 ++ .../instance/context.doDup..st | 7 ++ .../context.doMethodReturnReceiver..st | 7 ++ .../instance/context.doMethodReturnTop..st | 7 ++ .../instance/context.doPop..st | 7 ++ ...xt.doPrimitive.method.receiver.args.do..st | 7 ++ .../instance/context.doPushActiveContext..st | 7 ++ .../instance/context.doPushReceiver..st | 7 ++ .../instance/context.jump.do..st | 7 ++ .../instance/context.jump.if.do..st | 7 ++ .../context.methodReturnConstant.do..st | 7 ++ .../context.popIntoLiteralVariable.do..st | 7 ++ .../context.popIntoReceiverVariable.do..st | 7 ++ ...ontext.popIntoRemoteTemp.inVectorAt.do..st | 7 ++ .../context.popIntoTemporaryVariable.do..st | 7 ++ .../instance/context.push.do..st | 7 ++ ...pyNumCopiedValues.numArgs.blockSize.do..st | 7 ++ .../context.pushConsArrayWithElements.do..st | 7 ++ .../instance/context.pushConstant.do..st | 7 ++ .../context.pushFullClosure.numCopied.do..st | 7 ++ .../context.pushLiteralVariable.do..st | 7 ++ .../context.pushNewArrayOfSize.do..st | 7 ++ .../context.pushReceiverVariable.do..st | 7 ++ .../context.pushRemoteTemp.inVectorAt.do..st | 7 ++ .../context.pushSpecialConstant.do..st | 7 ++ .../context.pushTemporaryVariable.do..st | 7 ++ .../instance/context.return.from.do..st | 7 ++ ...text.runSimulated.contextAtEachStep.do..st | 7 ++ .../context.send.super.numArgs.do..st | 7 ++ .../context.send.to.with.lookupIn.do..st | 7 ++ .../context.sendSpecial.numArgs.do..st | 7 ++ ...ntext.simulatedObject.instVarAt.put.do..st | 7 ++ .../Simulator.class/instance/context.step..st | 7 ++ .../context.storeIntoLiteralVariable.do..st | 7 ++ .../context.storeIntoReceiverVariable.do..st | 7 ++ ...text.storeIntoRemoteTemp.inVectorAt.do..st | 7 ++ .../context.storeIntoTemporaryVariable.do..st | 7 ++ ...xt.tryNamedPrimitiveIn.for.withArgs.do..st | 7 ++ .../Simulator.class/instance/debug..st | 9 +++ .../Simulator.class/instance/evaluate..st | 9 +++ .../instance/initializeContext..st | 7 ++ .../instance/nextSimulator..st | 4 ++ .../Simulator.class/instance/nextSimulator.st | 4 ++ .../instance/requiredCapabilities.st | 8 +++ .../Simulator.class/methodProperties.json | 65 +++++++++++++++++++ .../Simulator.class/properties.json | 14 ++++ .../SimulatorContext.class/README.md | 1 + .../class/noteAddedSelector.meta..st | 8 +++ .../activateMethod.withArgs.receiver..st | 4 ++ .../instance/blockReturnConstant..st | 4 ++ .../instance/blockReturnTop.st | 4 ++ .../instance/callPrimitive..st | 4 ++ .../instance/directedSuperSend.numArgs..st | 4 ++ .../SimulatorContext.class/instance/doDup.st | 4 ++ .../SimulatorContext.class/instance/doPop.st | 4 ++ .../SimulatorContext.class/instance/jump..st | 4 ++ .../instance/jump.if..st | 4 ++ .../instance/methodReturnConstant..st | 4 ++ .../instance/methodReturnReceiver.st | 4 ++ .../instance/methodReturnTop.st | 4 ++ .../SimulatorContext.class/instance/pop.st | 4 ++ .../instance/popIntoLiteralVariable..st | 4 ++ .../instance/popIntoReceiverVariable..st | 4 ++ .../instance/popIntoTemporaryVariable..st | 4 ++ .../SimulatorContext.class/instance/push..st | 4 ++ .../instance/pushActiveContext.st | 4 ++ ...eCopyNumCopiedValues.numArgs.blockSize..st | 4 ++ .../instance/pushConsArrayWithElements..st | 4 ++ .../instance/pushConstant..st | 4 ++ .../instance/pushFullClosure.numCopied..st | 4 ++ .../instance/pushNewArrayOfSize..st | 4 ++ .../instance/pushReceiver.st | 4 ++ .../instance/pushSpecialConstant..st | 4 ++ .../instance/pushTemporaryVariable..st | 4 ++ .../instance/send.super.numArgs..st | 4 ++ .../instance/sendSpecial.numArgs..st | 4 ++ .../instance/storeIntoLiteralVariable..st | 4 ++ .../instance/storeIntoReceiverVariable..st | 4 ++ .../instance/storeIntoTemporaryVariable..st | 4 ++ .../methodProperties.json | 35 ++++++++++ .../SimulatorContext.class/properties.json | 14 ++++ .../instance/basicPerformTest.on.do..st | 2 +- .../instance/runSimulated..st | 4 ++ .../methodProperties.json | 3 +- .../SimulatorKernelTest.class/README.md | 0 .../instance/runSimulated..st | 4 ++ .../instance/simulatorClass.st | 4 ++ .../methodProperties.json | 6 ++ .../SimulatorKernelTest.class/properties.json | 14 ++++ .../README.md | 0 .../instance/simulatorClass.st | 4 ++ .../methodProperties.json | 5 ++ .../properties.json | 14 ++++ .../TestSimulatorUnoptimized.class/README.md | 0 .../instance/requiredCapabilities.st | 4 ++ .../methodProperties.json | 5 ++ .../properties.json | 14 ++++ 123 files changed, 821 insertions(+), 2 deletions(-) create mode 100644 packages/SimulationStudio-Base.package/BasicSimulatorContext.class/README.md create mode 100644 packages/SimulationStudio-Base.package/BasicSimulatorContext.class/class/newFor..st create mode 100644 packages/SimulationStudio-Base.package/BasicSimulatorContext.class/instance/initializeFrom..st create mode 100644 packages/SimulationStudio-Base.package/BasicSimulatorContext.class/instance/simulator..st create mode 100644 packages/SimulationStudio-Base.package/BasicSimulatorContext.class/instance/simulator.st create mode 100644 packages/SimulationStudio-Base.package/BasicSimulatorContext.class/methodProperties.json create mode 100644 packages/SimulationStudio-Base.package/BasicSimulatorContext.class/properties.json create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/README.md create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/class/basicContextClass.st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/class/cleanUp.st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/class/cleanUpContextClasses.st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/class/contextClassForCapabilities..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/class/contextClassForSimulators..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/class/debug..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/class/decorating..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/class/evaluate..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/class/fullContextClass.st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/class/noteAddedSelector.meta..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/class/warmUp.st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/class/warmUpContextClasses.st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/basicSimulate.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/basicSimulate.do.chain..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.activateMethod.withArgs.receiver.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.blockReturnConstant.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.callPrimitive.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.directedSuperSend.numArgs.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.doBlockReturnTop..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.doDup..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.doMethodReturnReceiver..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.doMethodReturnTop..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPop..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPrimitive.method.receiver.args.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPushActiveContext..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPushReceiver..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.jump.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.jump.if.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.methodReturnConstant.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoLiteralVariable.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoReceiverVariable.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoRemoteTemp.inVectorAt.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoTemporaryVariable.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.push.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushClosureCopyNumCopiedValues.numArgs.blockSize.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushConsArrayWithElements.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushConstant.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushFullClosure.numCopied.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushLiteralVariable.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushNewArrayOfSize.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushReceiverVariable.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushRemoteTemp.inVectorAt.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushSpecialConstant.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushTemporaryVariable.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.return.from.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.runSimulated.contextAtEachStep.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.send.super.numArgs.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.send.to.with.lookupIn.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.sendSpecial.numArgs.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.simulatedObject.instVarAt.put.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.step..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoLiteralVariable.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoReceiverVariable.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoRemoteTemp.inVectorAt.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoTemporaryVariable.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/context.tryNamedPrimitiveIn.for.withArgs.do..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/debug..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/evaluate..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/initializeContext..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/nextSimulator..st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/nextSimulator.st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/instance/requiredCapabilities.st create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/methodProperties.json create mode 100644 packages/SimulationStudio-Base.package/Simulator.class/properties.json create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/README.md create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/class/noteAddedSelector.meta..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/activateMethod.withArgs.receiver..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/blockReturnConstant..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/blockReturnTop.st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/callPrimitive..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/directedSuperSend.numArgs..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/doDup.st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/doPop.st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/jump..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/jump.if..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/methodReturnConstant..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/methodReturnReceiver.st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/methodReturnTop.st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pop.st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoLiteralVariable..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoReceiverVariable..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoTemporaryVariable..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/push..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushActiveContext.st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushClosureCopyNumCopiedValues.numArgs.blockSize..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushConsArrayWithElements..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushConstant..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushFullClosure.numCopied..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushNewArrayOfSize..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushReceiver.st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushSpecialConstant..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushTemporaryVariable..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/send.super.numArgs..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/sendSpecial.numArgs..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoLiteralVariable..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoReceiverVariable..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoTemporaryVariable..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/methodProperties.json create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/properties.json create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulationKernelTest.class/instance/runSimulated..st create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/README.md create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/instance/runSimulated..st create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/instance/simulatorClass.st create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/methodProperties.json create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/properties.json create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/README.md create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/instance/simulatorClass.st create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/methodProperties.json create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/properties.json create mode 100644 packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/README.md create mode 100644 packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/instance/requiredCapabilities.st create mode 100644 packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/methodProperties.json create mode 100644 packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/properties.json diff --git a/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/README.md b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/README.md new file mode 100644 index 0000000..37d692a --- /dev/null +++ b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/README.md @@ -0,0 +1 @@ +I am a simulation context that delegates control to a Simulator. All delegators are implemented in my subclass SimulatorClass; however, for performance reasons, the simulator will only compile those delegators that it actually used into a private subclass of myself. See #requiredCapabilities. \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/class/newFor..st b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/class/newFor..st new file mode 100644 index 0000000..3b799d1 --- /dev/null +++ b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/class/newFor..st @@ -0,0 +1,6 @@ +instance creation +newFor: aSimulator + + ^ self new + simulator: aSimulator; + yourself \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/instance/initializeFrom..st b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/instance/initializeFrom..st new file mode 100644 index 0000000..0960008 --- /dev/null +++ b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/instance/initializeFrom..st @@ -0,0 +1,6 @@ +initialize-release +initializeFrom: anotherContext + + super initializeFrom: anotherContext. + + simulator := anotherContext simulator. \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/instance/simulator..st b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/instance/simulator..st new file mode 100644 index 0000000..b31cf12 --- /dev/null +++ b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/instance/simulator..st @@ -0,0 +1,4 @@ +accessing +simulator: aSimulator + + simulator := aSimulator \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/instance/simulator.st b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/instance/simulator.st new file mode 100644 index 0000000..50d84f2 --- /dev/null +++ b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/instance/simulator.st @@ -0,0 +1,4 @@ +accessing +simulator + + ^ simulator \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/methodProperties.json b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/methodProperties.json new file mode 100644 index 0000000..5ac4ed3 --- /dev/null +++ b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/methodProperties.json @@ -0,0 +1,7 @@ +{ + "class" : { + "newFor:" : "ct 11/11/2021 21:16" }, + "instance" : { + "initializeFrom:" : "ct 11/11/2021 21:14", + "simulator" : "ct 11/11/2021 21:14", + "simulator:" : "ct 11/11/2021 21:17" } } diff --git a/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/properties.json b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/properties.json new file mode 100644 index 0000000..83284cd --- /dev/null +++ b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "SimulationStudio-Base", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "ct 11/13/2021 16:29", + "instvars" : [ + "simulator" ], + "name" : "BasicSimulatorContext", + "pools" : [ + ], + "super" : "SimulationContext", + "type" : "variable" } diff --git a/packages/SimulationStudio-Base.package/Simulator.class/README.md b/packages/SimulationStudio-Base.package/Simulator.class/README.md new file mode 100644 index 0000000..7fb680e --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/README.md @@ -0,0 +1,5 @@ +I am an execution engine for Smalltalk code that is fully customizable by subclasses. Internally, I maintan all stack frames as subinstances of the class BasicSimulatorContext. For performance reasons, the exact stack frame class is determined dynamically based on the capabilities that my instances overwrite. See #requiredCapabilities and the #capability: pragma. + +I implement the Chain of Responsibility pattern, allowing clients to combine multiple simulators at their discretion. To chain multiple simulators, send #decorating: or #nextSimulator:. To not break the Chain of Responsibility, subclasses should usually send super when overriding any hook. + +I also provide support for the debugger - send #debug: to watch the simulated code in a normal Squeak Debugger. \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/basicContextClass.st b/packages/SimulationStudio-Base.package/Simulator.class/class/basicContextClass.st new file mode 100644 index 0000000..8ca882a --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/basicContextClass.st @@ -0,0 +1,4 @@ +context classes +basicContextClass + + ^ BasicSimulatorContext \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/cleanUp.st b/packages/SimulationStudio-Base.package/Simulator.class/class/cleanUp.st new file mode 100644 index 0000000..b006f61 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/cleanUp.st @@ -0,0 +1,4 @@ +initialize-release +cleanUp + + self cleanUpContextClasses. \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/cleanUpContextClasses.st b/packages/SimulationStudio-Base.package/Simulator.class/class/cleanUpContextClasses.st new file mode 100644 index 0000000..d3bddc3 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/cleanUpContextClasses.st @@ -0,0 +1,6 @@ +context classes +cleanUpContextClasses + + ContextClasses ifNil: [^ self]. + ContextClasses do: [:class | class removeFromSystem]. + ContextClasses := nil. \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/contextClassForCapabilities..st b/packages/SimulationStudio-Base.package/Simulator.class/class/contextClassForCapabilities..st new file mode 100644 index 0000000..a2cf9af --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/contextClassForCapabilities..st @@ -0,0 +1,22 @@ +context classes +contextClassForCapabilities: capabilities + + (capabilities isKindOf: Set) ifFalse: [^ self contextClassForCapabilities: capabilities asSet]. + + self flag: #todo. "ContextClasses are never cleaned up automatically! Should we use weak data structure and pin capabilities array in simulator?" + + ^ (ContextClasses ifNil: [ContextClasses := Dictionary new]) + at: capabilities + ifAbsentPut: [ | class | + class := self basicContextClass newSubclass. + capabilities do: [:selector | + class + addSelectorSilently: selector + withMethod: self fullContextClass >> selector]. + "Seal class to avoid developer confusion." + class theMetaClass + addSelectorSilently: #basicAddSelector:withMethod: + withMethod: (class theMetaClass lookupSelector: #forbiddenBasicAddSelector:withMethod:); + addSelectorSilently: #basicRemoveSelector: + withMethod: (class theMetaClass lookupSelector: #forbiddenBasicRemoveSelector:). + class] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/contextClassForSimulators..st b/packages/SimulationStudio-Base.package/Simulator.class/class/contextClassForSimulators..st new file mode 100644 index 0000000..0adc4c5 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/contextClassForSimulators..st @@ -0,0 +1,8 @@ +context classes +contextClassForSimulators: simulatorArray + + | requiredCapabilities | + requiredCapabilities := (simulatorArray gather: [:simulator | simulator requiredCapabilities + ifNil: [^ self fullContextClass]]) as: Set. + + ^ self contextClassForCapabilities: requiredCapabilities \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/debug..st b/packages/SimulationStudio-Base.package/Simulator.class/class/debug..st new file mode 100644 index 0000000..8dc6805 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/debug..st @@ -0,0 +1,4 @@ +support +debug: aBlock + + ^ self new debug: aBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/decorating..st b/packages/SimulationStudio-Base.package/Simulator.class/class/decorating..st new file mode 100644 index 0000000..3ce6c01 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/decorating..st @@ -0,0 +1,6 @@ +instance creation +decorating: aSimulator + + ^ self new + nextSimulator: aSimulator; + yourself \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/evaluate..st b/packages/SimulationStudio-Base.package/Simulator.class/class/evaluate..st new file mode 100644 index 0000000..e7c371c --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/evaluate..st @@ -0,0 +1,4 @@ +evaluating +evaluate: aBlock + + ^ self new evaluate: aBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/fullContextClass.st b/packages/SimulationStudio-Base.package/Simulator.class/class/fullContextClass.st new file mode 100644 index 0000000..2d61fb0 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/fullContextClass.st @@ -0,0 +1,4 @@ +context classes +fullContextClass + + ^ SimulatorContext \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/noteAddedSelector.meta..st b/packages/SimulationStudio-Base.package/Simulator.class/class/noteAddedSelector.meta..st new file mode 100644 index 0000000..942860c --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/noteAddedSelector.meta..st @@ -0,0 +1,8 @@ +accessing method dictionary +noteAddedSelector: selector meta: isMeta + + super noteAddedSelector: selector meta: isMeta. + + self flag: #todo. "Is this the right hook? There is also #noteCompilationOf:meta: ..." + self allSubInstances ifNotEmpty: [ + Transcript showln: ('You should restart all {1} subinstances now to apply the changes to {2}.' format: {self. selector})]. \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/warmUp.st b/packages/SimulationStudio-Base.package/Simulator.class/class/warmUp.st new file mode 100644 index 0000000..2ec68f6 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/warmUp.st @@ -0,0 +1,4 @@ +initialize-release +warmUp + + self warmUpContextClasses. \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/warmUpContextClasses.st b/packages/SimulationStudio-Base.package/Simulator.class/class/warmUpContextClasses.st new file mode 100644 index 0000000..0da3daf --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/warmUpContextClasses.st @@ -0,0 +1,5 @@ +context classes +warmUpContextClasses + + self withAllSubclassesDo: [:class | + self contextClassForSimulators: {class basicNew}]. \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/basicSimulate.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/basicSimulate.do..st new file mode 100644 index 0000000..a8c15ca --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/basicSimulate.do..st @@ -0,0 +1,10 @@ +private +basicSimulate: aBlock do: contextClassBlock + "DO NOT override this! To wrap custom logic around the simulated code, override #basicSimulate:do:chain: instead." + + ^ self + basicSimulate: aBlock + do: [:theBlock :simulatorArray | | contextClass | + contextClass := self class contextClassForSimulators: simulatorArray. + contextClassBlock value: contextClass value: simulatorArray first value: theBlock] + chain: {self} \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/basicSimulate.do.chain..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/basicSimulate.do.chain..st new file mode 100644 index 0000000..3fbd799 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/basicSimulate.do.chain..st @@ -0,0 +1,8 @@ +private +basicSimulate: simulatedBlock do: simulatorBlock chain: simulatorArray + "Hook for subclasses which should decorate their logic around a super send to this method." + + nextSimulator ifNotNil: [ + ^ nextSimulator basicSimulate: simulatedBlock do: simulatorBlock chain: (simulatorArray copyWith: nextSimulator)]. + + ^ simulatorBlock value: simulatedBlock value: simulatorArray \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.activateMethod.withArgs.receiver.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.activateMethod.withArgs.receiver.do..st new file mode 100644 index 0000000..969062e --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.activateMethod.withArgs.receiver.do..st @@ -0,0 +1,7 @@ +controlling +context: aContext activateMethod: aCompiledMethod withArgs: arguments receiver: receiver do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext activateMethod: aCompiledMethod withArgs: arguments receiver: receiver do: aBlock] + ifNil: [aBlock value: aCompiledMethod value: arguments value: receiver] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.blockReturnConstant.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.blockReturnConstant.do..st new file mode 100644 index 0000000..b1380b5 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.blockReturnConstant.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext blockReturnConstant: value do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext blockReturnConstant: value do: aBlock] + ifNil: [aBlock value: value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.callPrimitive.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.callPrimitive.do..st new file mode 100644 index 0000000..513bfd1 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.callPrimitive.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext callPrimitive: primNumber do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext callPrimitive: primNumber do: aBlock] + ifNil: [aBlock value: primNumber] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.directedSuperSend.numArgs.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.directedSuperSend.numArgs.do..st new file mode 100644 index 0000000..e36b809 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.directedSuperSend.numArgs.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext directedSuperSend: selector numArgs: numArgs do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext directedSuperSend: selector numArgs: numArgs do: aBlock] + ifNil: [aBlock value: selector value: numArgs] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doBlockReturnTop..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doBlockReturnTop..st new file mode 100644 index 0000000..5f26bce --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doBlockReturnTop..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext doBlockReturnTop: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext doBlockReturnTop: aBlock] + ifNil: [aBlock value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doDup..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doDup..st new file mode 100644 index 0000000..98f10cc --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doDup..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext doDup: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext doDup: aBlock] + ifNil: [aBlock value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doMethodReturnReceiver..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doMethodReturnReceiver..st new file mode 100644 index 0000000..d53a431 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doMethodReturnReceiver..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext doMethodReturnReceiver: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext doMethodReturnReceiver: aBlock] + ifNil: [aBlock value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doMethodReturnTop..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doMethodReturnTop..st new file mode 100644 index 0000000..680c82b --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doMethodReturnTop..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext doMethodReturnTop: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext doMethodReturnTop: aBlock] + ifNil: [aBlock value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPop..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPop..st new file mode 100644 index 0000000..ddda18f --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPop..st @@ -0,0 +1,7 @@ +controlling +context: aContext doPop: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext doPop: aBlock] + ifNil: [aBlock value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPrimitive.method.receiver.args.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPrimitive.method.receiver.args.do..st new file mode 100644 index 0000000..7f31cff --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPrimitive.method.receiver.args.do..st @@ -0,0 +1,7 @@ +controlling +context: aContext doPrimitive: primitiveIndex method: aCompiledMethod receiver: receiver args: arguments do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext doPrimitive: primitiveIndex method: aCompiledMethod receiver: receiver args: arguments do: aBlock] + ifNil: [aBlock value: primitiveIndex value: aCompiledMethod value: receiver value: arguments] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPushActiveContext..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPushActiveContext..st new file mode 100644 index 0000000..8744252 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPushActiveContext..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext doPushActiveContext: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext doPushActiveContext: aBlock] + ifNil: [aBlock value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPushReceiver..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPushReceiver..st new file mode 100644 index 0000000..db33a06 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doPushReceiver..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext doPushReceiver: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext doPushReceiver: aBlock] + ifNil: [aBlock value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.jump.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.jump.do..st new file mode 100644 index 0000000..1b365c1 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.jump.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext jump: distance do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext jump: distance do: aBlock] + ifNil: [aBlock value: distance] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.jump.if.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.jump.if.do..st new file mode 100644 index 0000000..0bcbac4 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.jump.if.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext jump: distance if: condition do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext jump: distance if: condition do: aBlock] + ifNil: [aBlock value: distance value: condition] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.methodReturnConstant.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.methodReturnConstant.do..st new file mode 100644 index 0000000..b246bae --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.methodReturnConstant.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext methodReturnConstant: value do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext methodReturnConstant: value do: aBlock] + ifNil: [aBlock value: value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoLiteralVariable.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoLiteralVariable.do..st new file mode 100644 index 0000000..36d74ac --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoLiteralVariable.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext popIntoLiteralVariable: value do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext popIntoLiteralVariable: value do: aBlock] + ifNil: [aBlock value: value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoReceiverVariable.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoReceiverVariable.do..st new file mode 100644 index 0000000..29d5ea1 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoReceiverVariable.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext popIntoReceiverVariable: offset do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext popIntoReceiverVariable: offset do: aBlock] + ifNil: [aBlock value: offset] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoRemoteTemp.inVectorAt.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoRemoteTemp.inVectorAt.do..st new file mode 100644 index 0000000..61fdce6 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoRemoteTemp.inVectorAt.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext popIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext popIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex do: aBlock] + ifNil: [aBlock value: remoteTempIndex value: tempVectorIndex] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoTemporaryVariable.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoTemporaryVariable.do..st new file mode 100644 index 0000000..30c975a --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.popIntoTemporaryVariable.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext popIntoTemporaryVariable: offset do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext popIntoTemporaryVariable: offset do: aBlock] + ifNil: [aBlock value: offset] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.push.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.push.do..st new file mode 100644 index 0000000..83a17ac --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.push.do..st @@ -0,0 +1,7 @@ +controlling +context: aContext push: anObject do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext push: anObject do: aBlock] + ifNil: [aBlock value: anObject] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushClosureCopyNumCopiedValues.numArgs.blockSize.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushClosureCopyNumCopiedValues.numArgs.blockSize.do..st new file mode 100644 index 0000000..b5ea2b6 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushClosureCopyNumCopiedValues.numArgs.blockSize.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushClosureCopyNumCopiedValues: numCopied numArgs: numArgs blockSize: blockSize do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext pushClosureCopyNumCopiedValues: numCopied numArgs: numArgs blockSize: blockSize do: aBlock] + ifNil: [aBlock value: numCopied value: numArgs value: blockSize] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushConsArrayWithElements.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushConsArrayWithElements.do..st new file mode 100644 index 0000000..ca6c069 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushConsArrayWithElements.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushConsArrayWithElements: numElements do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext pushConsArrayWithElements: numElements do: aBlock] + ifNil: [aBlock value: numElements] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushConstant.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushConstant.do..st new file mode 100644 index 0000000..1598746 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushConstant.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushConstant: value do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext pushConstant: value do: aBlock] + ifNil: [aBlock value: value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushFullClosure.numCopied.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushFullClosure.numCopied.do..st new file mode 100644 index 0000000..fbac8b0 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushFullClosure.numCopied.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushFullClosure: aCompiledBlock numCopied: numCopied do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext pushFullClosure: aCompiledBlock numCopied: numCopied do: aBlock] + ifNil: [aBlock value: aCompiledBlock value: numCopied value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushLiteralVariable.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushLiteralVariable.do..st new file mode 100644 index 0000000..07c6817 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushLiteralVariable.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushLiteralVariable: value do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext pushLiteralVariable: value do: aBlock] + ifNil: [aBlock value: value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushNewArrayOfSize.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushNewArrayOfSize.do..st new file mode 100644 index 0000000..3aa477c --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushNewArrayOfSize.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushNewArrayOfSize: arraySize do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext pushNewArrayOfSize: arraySize do: aBlock] + ifNil: [aBlock value: arraySize] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushReceiverVariable.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushReceiverVariable.do..st new file mode 100644 index 0000000..5bc9775 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushReceiverVariable.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushReceiverVariable: offset do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext pushReceiverVariable: offset do: aBlock] + ifNil: [aBlock value: offset] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushRemoteTemp.inVectorAt.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushRemoteTemp.inVectorAt.do..st new file mode 100644 index 0000000..0a259d1 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushRemoteTemp.inVectorAt.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext pushRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex do: aBlock] + ifNil: [aBlock value: remoteTempIndex value: tempVectorIndex] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushSpecialConstant.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushSpecialConstant.do..st new file mode 100644 index 0000000..20c35ad --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushSpecialConstant.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushSpecialConstant: value do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext pushSpecialConstant: value do: aBlock] + ifNil: [aBlock value: value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushTemporaryVariable.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushTemporaryVariable.do..st new file mode 100644 index 0000000..567b9c5 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.pushTemporaryVariable.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushTemporaryVariable: offset do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext pushTemporaryVariable: offset do: aBlock] + ifNil: [aBlock value: offset] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.return.from.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.return.from.do..st new file mode 100644 index 0000000..74ae7ad --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.return.from.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext return: value from: sender do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext return: value from: sender do: aBlock] + ifNil: [aBlock value: value value: sender] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.runSimulated.contextAtEachStep.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.runSimulated.contextAtEachStep.do..st new file mode 100644 index 0000000..a2d1f4a --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.runSimulated.contextAtEachStep.do..st @@ -0,0 +1,7 @@ +controlling +context: aContext runSimulated: aBlock contextAtEachStep: anotherBlock do: simulateBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext runSimulated: aBlock contextAtEachStep: anotherBlock do: simulateBlock] + ifNil: [simulateBlock value: aBlock value: anotherBlock] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.send.super.numArgs.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.send.super.numArgs.do..st new file mode 100644 index 0000000..49f2eba --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.send.super.numArgs.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext send: selector super: superFlag numArgs: numArgs do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext send: selector super: superFlag numArgs: numArgs do: aBlock] + ifNil: [aBlock value: selector value: superFlag value: numArgs] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.send.to.with.lookupIn.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.send.to.with.lookupIn.do..st new file mode 100644 index 0000000..718a4a4 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.send.to.with.lookupIn.do..st @@ -0,0 +1,7 @@ +controlling +context: aContext send: selector to: receiver with: arguments lookupIn: lookupClass do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext send: selector to: receiver with: arguments lookupIn: lookupClass do: aBlock] + ifNil: [aBlock value: selector value: receiver value: arguments value: lookupClass] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.sendSpecial.numArgs.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.sendSpecial.numArgs.do..st new file mode 100644 index 0000000..6fde69d --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.sendSpecial.numArgs.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext sendSpecial: selector numArgs: numArgs do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext sendSpecial: selector numArgs: numArgs do: aBlock] + ifNil: [aBlock value: selector value: numArgs] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.simulatedObject.instVarAt.put.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.simulatedObject.instVarAt.put.do..st new file mode 100644 index 0000000..d5e1208 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.simulatedObject.instVarAt.put.do..st @@ -0,0 +1,7 @@ +read-only objects +context: aContext simulatedObject: anObject instVarAt: index put: value do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext simulatedObject: anObject instVarAt: index put: value do: aBlock] + ifNil: [aBlock value: anObject value: index value: value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.step..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.step..st new file mode 100644 index 0000000..43a85a5 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.step..st @@ -0,0 +1,7 @@ +controlling +context: aContext step: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext step: aBlock] + ifNil: [aBlock value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoLiteralVariable.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoLiteralVariable.do..st new file mode 100644 index 0000000..979ce07 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoLiteralVariable.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext storeIntoLiteralVariable: value do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext storeIntoLiteralVariable: value do: aBlock] + ifNil: [aBlock value: value] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoReceiverVariable.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoReceiverVariable.do..st new file mode 100644 index 0000000..6eb4710 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoReceiverVariable.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext storeIntoReceiverVariable: offset do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext storeIntoReceiverVariable: offset do: aBlock] + ifNil: [aBlock value: offset] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoRemoteTemp.inVectorAt.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoRemoteTemp.inVectorAt.do..st new file mode 100644 index 0000000..4f2df8f --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoRemoteTemp.inVectorAt.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext storeIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext storeIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex do: aBlock] + ifNil: [aBlock value: remoteTempIndex value: tempVectorIndex] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoTemporaryVariable.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoTemporaryVariable.do..st new file mode 100644 index 0000000..e11d435 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.storeIntoTemporaryVariable.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext storeIntoTemporaryVariable: offset do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext storeIntoTemporaryVariable: offset do: aBlock] + ifNil: [aBlock value: offset] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.tryNamedPrimitiveIn.for.withArgs.do..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.tryNamedPrimitiveIn.for.withArgs.do..st new file mode 100644 index 0000000..17c450e --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.tryNamedPrimitiveIn.for.withArgs.do..st @@ -0,0 +1,7 @@ +controlling +context: aContext tryNamedPrimitiveIn: aCompiledMethod for: receiver withArgs: arguments do: aBlock + + + ^ nextSimulator + ifNotNil: [nextSimulator context: aContext tryNamedPrimitiveIn: aCompiledMethod for: receiver withArgs: arguments do: aBlock] + ifNil: [aBlock value: aCompiledMethod value: receiver value: arguments] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/debug..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/debug..st new file mode 100644 index 0000000..01c1ca0 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/debug..st @@ -0,0 +1,9 @@ +support +debug: aBlock + + ^ self + basicSimulate: aBlock + do: [:contextClass :simulator :theBlock | + (contextClass newFrom: theBlock asContext) + simulator: simulator; + debug] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/evaluate..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/evaluate..st new file mode 100644 index 0000000..c0264ae --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/evaluate..st @@ -0,0 +1,9 @@ +evaluating +evaluate: aBlock + + ^ self + basicSimulate: aBlock + do: [:contextClass :simulator :theBlock | + contextClass new + simulator: simulator; + runSimulated: theBlock] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/initializeContext..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/initializeContext..st new file mode 100644 index 0000000..7c3f387 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/initializeContext..st @@ -0,0 +1,7 @@ +controlling +initializeContext: aContext + + + ^ nextSimulator + ifNotNil: [nextSimulator initializeContext: aContext] + ifNil: [aContext] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/nextSimulator..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/nextSimulator..st new file mode 100644 index 0000000..27b3918 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/nextSimulator..st @@ -0,0 +1,4 @@ +accessing +nextSimulator: aSimulator + + nextSimulator := aSimulator \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/nextSimulator.st b/packages/SimulationStudio-Base.package/Simulator.class/instance/nextSimulator.st new file mode 100644 index 0000000..cee270d --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/nextSimulator.st @@ -0,0 +1,4 @@ +accessing +nextSimulator + + ^ nextSimulator \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/requiredCapabilities.st b/packages/SimulationStudio-Base.package/Simulator.class/instance/requiredCapabilities.st new file mode 100644 index 0000000..c3d5ca5 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/requiredCapabilities.st @@ -0,0 +1,8 @@ +context classes +requiredCapabilities + "Override this and answer nil to disable optimized capabilities." + + ^ ((Pragma allNamed: #capability: from: self class to: thisContext methodClass) + reject: [:pragma | + (self class lookupSelector: pragma selector) == pragma method]) + collect: [:pragma | pragma argumentAt: 1] as: Set \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/methodProperties.json b/packages/SimulationStudio-Base.package/Simulator.class/methodProperties.json new file mode 100644 index 0000000..f71887e --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/methodProperties.json @@ -0,0 +1,65 @@ +{ + "class" : { + "basicContextClass" : "ct 11/12/2021 18:36", + "cleanUp" : "ct 11/12/2021 19:40", + "cleanUpContextClasses" : "ct 11/12/2021 19:39", + "contextClassForCapabilities:" : "ct 11/13/2021 20:17", + "contextClassForSimulators:" : "ct 11/12/2021 18:36", + "debug:" : "ct 11/13/2021 15:46", + "decorating:" : "ct 11/11/2021 21:47", + "evaluate:" : "ct 11/11/2021 22:07", + "fullContextClass" : "ct 11/12/2021 18:36", + "noteAddedSelector:meta:" : "ct 11/13/2021 20:13", + "warmUp" : "ct 11/12/2021 19:40", + "warmUpContextClasses" : "ct 11/12/2021 19:40" }, + "instance" : { + "basicSimulate:do:" : "ct 11/13/2021 17:07", + "basicSimulate:do:chain:" : "ct 11/13/2021 17:07", + "context:activateMethod:withArgs:receiver:do:" : "ct 11/13/2021 15:45", + "context:blockReturnConstant:do:" : "ct 11/13/2021 15:19", + "context:callPrimitive:do:" : "ct 11/13/2021 15:40", + "context:directedSuperSend:numArgs:do:" : "ct 11/13/2021 15:40", + "context:doBlockReturnTop:" : "ct 11/12/2021 18:48", + "context:doDup:" : "ct 11/12/2021 18:48", + "context:doMethodReturnReceiver:" : "ct 11/12/2021 18:48", + "context:doMethodReturnTop:" : "ct 11/12/2021 18:48", + "context:doPop:" : "ct 11/12/2021 18:46", + "context:doPrimitive:method:receiver:args:do:" : "ct 11/13/2021 01:39", + "context:doPushActiveContext:" : "ct 11/12/2021 18:48", + "context:doPushReceiver:" : "ct 11/12/2021 18:49", + "context:jump:do:" : "ct 11/13/2021 15:41", + "context:jump:if:do:" : "ct 11/13/2021 15:41", + "context:methodReturnConstant:do:" : "ct 11/13/2021 15:41", + "context:popIntoLiteralVariable:do:" : "ct 11/13/2021 15:41", + "context:popIntoReceiverVariable:do:" : "ct 11/13/2021 15:41", + "context:popIntoRemoteTemp:inVectorAt:do:" : "ct 11/13/2021 15:41", + "context:popIntoTemporaryVariable:do:" : "ct 11/13/2021 15:41", + "context:push:do:" : "ct 11/13/2021 15:18", + "context:pushClosureCopyNumCopiedValues:numArgs:blockSize:do:" : "ct 11/13/2021 15:41", + "context:pushConsArrayWithElements:do:" : "ct 11/13/2021 15:41", + "context:pushConstant:do:" : "ct 11/13/2021 15:41", + "context:pushFullClosure:numCopied:do:" : "ct 11/13/2021 15:42", + "context:pushLiteralVariable:do:" : "ct 11/13/2021 15:42", + "context:pushNewArrayOfSize:do:" : "ct 11/13/2021 15:42", + "context:pushReceiverVariable:do:" : "ct 11/13/2021 15:43", + "context:pushRemoteTemp:inVectorAt:do:" : "ct 11/13/2021 15:43", + "context:pushSpecialConstant:do:" : "ct 11/13/2021 15:43", + "context:pushTemporaryVariable:do:" : "ct 11/13/2021 15:43", + "context:return:from:do:" : "ct 11/13/2021 15:43", + "context:runSimulated:contextAtEachStep:do:" : "ct 11/13/2021 00:37", + "context:send:super:numArgs:do:" : "ct 11/13/2021 15:43", + "context:send:to:with:lookupIn:do:" : "ct 11/13/2021 15:18", + "context:sendSpecial:numArgs:do:" : "ct 11/13/2021 15:43", + "context:simulatedObject:instVarAt:put:do:" : "ct 11/13/2021 15:44", + "context:step:" : "ct 11/12/2021 18:47", + "context:storeIntoLiteralVariable:do:" : "ct 11/13/2021 15:44", + "context:storeIntoReceiverVariable:do:" : "ct 11/13/2021 15:44", + "context:storeIntoRemoteTemp:inVectorAt:do:" : "ct 11/13/2021 15:44", + "context:storeIntoTemporaryVariable:do:" : "ct 11/13/2021 15:44", + "context:tryNamedPrimitiveIn:for:withArgs:do:" : "ct 11/13/2021 15:19", + "debug:" : "ct 11/13/2021 17:06", + "evaluate:" : "ct 11/13/2021 17:06", + "initializeContext:" : "ct 11/13/2021 00:19", + "nextSimulator" : "ct 11/11/2021 21:47", + "nextSimulator:" : "ct 11/11/2021 21:47", + "requiredCapabilities" : "ct 11/12/2021 19:30" } } diff --git a/packages/SimulationStudio-Base.package/Simulator.class/properties.json b/packages/SimulationStudio-Base.package/Simulator.class/properties.json new file mode 100644 index 0000000..aa6b132 --- /dev/null +++ b/packages/SimulationStudio-Base.package/Simulator.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "SimulationStudio-Base", + "classinstvars" : [ + ], + "classvars" : [ + "ContextClasses" ], + "commentStamp" : "ct 11/13/2021 17:08", + "instvars" : [ + "nextSimulator" ], + "name" : "Simulator", + "pools" : [ + ], + "super" : "Object", + "type" : "normal" } diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/README.md b/packages/SimulationStudio-Base.package/SimulatorContext.class/README.md new file mode 100644 index 0000000..d7c0297 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/README.md @@ -0,0 +1 @@ +I provide an exhaustive eager implementation of all delegators for a BasicSimulatorClass. Usually, the simulator will not actually instantiate me but copy a subset of my selectors to another class for performance reasons. See #requiredCapabilities. \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/class/noteAddedSelector.meta..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/class/noteAddedSelector.meta..st new file mode 100644 index 0000000..8c33aed --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/class/noteAddedSelector.meta..st @@ -0,0 +1,8 @@ +accessing method dictionary +noteAddedSelector: selector meta: isMeta + + super noteAddedSelector: selector meta: isMeta. + + self flag: #todo. "Is this the right hook? There is also #noteCompilationOf:meta: ..." + Simulator cleanUpContextClasses. + Transcript showln: ('You should restart all simulators now to apply the changes to {1}>>{2}.' format: {self. selector}). \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/activateMethod.withArgs.receiver..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/activateMethod.withArgs.receiver..st new file mode 100644 index 0000000..fdef927 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/activateMethod.withArgs.receiver..st @@ -0,0 +1,4 @@ +controlling +activateMethod: aCompiledMethod withArgs: arguments receiver: rcvr + + ^ simulator context: self activateMethod: aCompiledMethod withArgs: arguments receiver: rcvr do: [:theCompiledMethod :theArguments :theReceiver | super activateMethod: theCompiledMethod withArgs: theArguments receiver: theReceiver] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/blockReturnConstant..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/blockReturnConstant..st new file mode 100644 index 0000000..8a876dd --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/blockReturnConstant..st @@ -0,0 +1,4 @@ +instruction decoding +blockReturnConstant: value + + ^ simulator context: self blockReturnConstant: value do: [:theValue | super blockReturnConstant: theValue] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/blockReturnTop.st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/blockReturnTop.st new file mode 100644 index 0000000..84d0f79 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/blockReturnTop.st @@ -0,0 +1,4 @@ +instruction decoding +blockReturnTop + + ^ simulator context: self doBlockReturnTop: [super blockReturnTop] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/callPrimitive..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/callPrimitive..st new file mode 100644 index 0000000..e8a1c3a --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/callPrimitive..st @@ -0,0 +1,4 @@ +instruction decoding +callPrimitive: primNumber + + ^ simulator context: self callPrimitive: primNumber do: [:thePrimNumber | super callPrimitive: primNumber] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/directedSuperSend.numArgs..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/directedSuperSend.numArgs..st new file mode 100644 index 0000000..e057f41 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/directedSuperSend.numArgs..st @@ -0,0 +1,4 @@ +instruction decoding +directedSuperSend: selector numArgs: numArgs + + ^ simulator context: self directedSuperSend: selector numArgs: numArgs do: [:theSelector :theNumArgs | super directedSuperSend: theSelector numArgs: theNumArgs] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/doDup.st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/doDup.st new file mode 100644 index 0000000..7587306 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/doDup.st @@ -0,0 +1,4 @@ +instruction decoding +doDup + + ^ simulator context: self doDup: [super doDup] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/doPop.st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/doPop.st new file mode 100644 index 0000000..9842dd6 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/doPop.st @@ -0,0 +1,4 @@ +instruction decoding +doPop + + ^ simulator context: self doPop: [super doPop] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/jump..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/jump..st new file mode 100644 index 0000000..3346451 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/jump..st @@ -0,0 +1,4 @@ +instruction decoding +jump: distance + + ^ simulator context: self jump: distance do: [:theDistance | super jump: theDistance] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/jump.if..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/jump.if..st new file mode 100644 index 0000000..61fce39 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/jump.if..st @@ -0,0 +1,4 @@ +instruction decoding +jump: distance if: condition + + ^ simulator context: self jump: distance if: condition do: [:theDistance :theCondition | super jump: theDistance if: theCondition] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/methodReturnConstant..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/methodReturnConstant..st new file mode 100644 index 0000000..88da3dd --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/methodReturnConstant..st @@ -0,0 +1,4 @@ +instruction decoding +methodReturnConstant: value + + ^ simulator context: self methodReturnConstant: value do: [:theValue | super methodReturnConstant: theValue] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/methodReturnReceiver.st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/methodReturnReceiver.st new file mode 100644 index 0000000..162a7e3 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/methodReturnReceiver.st @@ -0,0 +1,4 @@ +instruction decoding +methodReturnReceiver + + ^ simulator context: self doMethodReturnReceiver: [super methodReturnReceiver] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/methodReturnTop.st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/methodReturnTop.st new file mode 100644 index 0000000..c36f7a7 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/methodReturnTop.st @@ -0,0 +1,4 @@ +instruction decoding +methodReturnTop + + ^ simulator context: self doMethodReturnTop: [super methodReturnTop] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pop.st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pop.st new file mode 100644 index 0000000..3538150 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pop.st @@ -0,0 +1,4 @@ +controlling +pop + + ^ simulator context: self doPop: [super pop] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoLiteralVariable..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoLiteralVariable..st new file mode 100644 index 0000000..2fd82bf --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoLiteralVariable..st @@ -0,0 +1,4 @@ +instruction decoding +popIntoLiteralVariable: value + + ^ simulator context: self popIntoLiteralVariable: value do: [:theValue | super popIntoLiteralVariable: theValue] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoReceiverVariable..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoReceiverVariable..st new file mode 100644 index 0000000..6ab60bf --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoReceiverVariable..st @@ -0,0 +1,4 @@ +instruction decoding +popIntoReceiverVariable: offset + + ^ simulator context: self popIntoReceiverVariable: offset do: [:theOffset | super popIntoReceiverVariable: theOffset] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoTemporaryVariable..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoTemporaryVariable..st new file mode 100644 index 0000000..c692d3e --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoTemporaryVariable..st @@ -0,0 +1,4 @@ +instruction decoding +popIntoTemporaryVariable: offset + + ^ simulator context: self popIntoTemporaryVariable: offset do: [:theOffset | super popIntoTemporaryVariable: theOffset] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/push..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/push..st new file mode 100644 index 0000000..cb46ba4 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/push..st @@ -0,0 +1,4 @@ +accessing - stack patching +push: anObject + + ^ simulator context: self push: anObject do: [:theObject | super push: theObject] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushActiveContext.st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushActiveContext.st new file mode 100644 index 0000000..207380e --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushActiveContext.st @@ -0,0 +1,4 @@ +instruction decoding +pushActiveContext + + ^ simulator context: self doPushActiveContext: [super pushActiveContext] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushClosureCopyNumCopiedValues.numArgs.blockSize..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushClosureCopyNumCopiedValues.numArgs.blockSize..st new file mode 100644 index 0000000..869ecb5 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushClosureCopyNumCopiedValues.numArgs.blockSize..st @@ -0,0 +1,4 @@ +instruction decoding +pushClosureCopyNumCopiedValues: numCopied numArgs: numArgs blockSize: blockSize + + ^ simulator context: self pushClosureCopyNumCopiedValues: numCopied numArgs: numArgs blockSize: blockSize do: [:theNumCopied :theNumArgs :theBlockSize | super pushClosureCopyNumCopiedValues: theNumCopied numArgs: theNumArgs blockSize: theBlockSize] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushConsArrayWithElements..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushConsArrayWithElements..st new file mode 100644 index 0000000..8957c85 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushConsArrayWithElements..st @@ -0,0 +1,4 @@ +instruction decoding +pushConsArrayWithElements: numElements + + ^ simulator context: self pushConsArrayWithElements: numElements do: [:theNumElements | super pushConsArrayWithElements: theNumElements] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushConstant..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushConstant..st new file mode 100644 index 0000000..aa0e31e --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushConstant..st @@ -0,0 +1,4 @@ +instruction decoding +pushConstant: value + + ^ simulator context: self pushConstant: value do: [:theValue | super pushConstant: theValue] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushFullClosure.numCopied..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushFullClosure.numCopied..st new file mode 100644 index 0000000..a289e6f --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushFullClosure.numCopied..st @@ -0,0 +1,4 @@ +instruction decoding +pushFullClosure: aCompiledBlock numCopied: numCopied + + ^ simulator context: self pushFullClosure: aCompiledBlock numCopied: numCopied do: [:theCompiledBlock :theNumCopied | super pushFullClosure: theCompiledBlock numCopied: theNumCopied] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushNewArrayOfSize..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushNewArrayOfSize..st new file mode 100644 index 0000000..ba4dcce --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushNewArrayOfSize..st @@ -0,0 +1,4 @@ +instruction decoding +pushNewArrayOfSize: arraySize + + ^ simulator context: self pushNewArrayOfSize: arraySize do: [:theArraySize | super pushNewArrayOfSize: theArraySize] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushReceiver.st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushReceiver.st new file mode 100644 index 0000000..58657fb --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushReceiver.st @@ -0,0 +1,4 @@ +instruction decoding +pushReceiver + + ^ simulator context: self doPushReceiver: [super pushReceiver] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushSpecialConstant..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushSpecialConstant..st new file mode 100644 index 0000000..c182271 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushSpecialConstant..st @@ -0,0 +1,4 @@ +instruction decoding implicit literals +pushSpecialConstant: value + + ^ simulator context: self pushSpecialConstant: value do: [:theValue | super pushSpecialConstant: theValue] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushTemporaryVariable..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushTemporaryVariable..st new file mode 100644 index 0000000..1d129c3 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushTemporaryVariable..st @@ -0,0 +1,4 @@ +instruction decoding +pushTemporaryVariable: offset + + ^ simulator context: self pushTemporaryVariable: offset do: [:theOffset | super pushTemporaryVariable: theOffset] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/send.super.numArgs..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/send.super.numArgs..st new file mode 100644 index 0000000..f914a08 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/send.super.numArgs..st @@ -0,0 +1,4 @@ +instruction decoding +send: selector super: superFlag numArgs: numArgs + + ^ simulator context: self send: selector super: superFlag numArgs: numArgs do: [:theSelector :theSuperFlag :theNumArgs | super send: theSelector super: theSuperFlag numArgs: theNumArgs] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/sendSpecial.numArgs..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/sendSpecial.numArgs..st new file mode 100644 index 0000000..ae3a971 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/sendSpecial.numArgs..st @@ -0,0 +1,4 @@ +instruction decoding implicit literals +sendSpecial: selector numArgs: numArgs + + ^ simulator context: self sendSpecial: selector numArgs: numArgs do: [:theSelector :theNumArgs | super sendSpecial: theSelector numArgs: theNumArgs] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoLiteralVariable..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoLiteralVariable..st new file mode 100644 index 0000000..43e266d --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoLiteralVariable..st @@ -0,0 +1,4 @@ +instruction decoding +storeIntoLiteralVariable: value + + ^ simulator context: self storeIntoLiteralVariable: value do: [:theValue | super storeIntoLiteralVariable: theValue] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoReceiverVariable..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoReceiverVariable..st new file mode 100644 index 0000000..198038e --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoReceiverVariable..st @@ -0,0 +1,4 @@ +instruction decoding +storeIntoReceiverVariable: offset + + ^ simulator context: self storeIntoReceiverVariable: offset do: [:theOffset | super storeIntoReceiverVariable: theOffset] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoTemporaryVariable..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoTemporaryVariable..st new file mode 100644 index 0000000..614d02b --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoTemporaryVariable..st @@ -0,0 +1,4 @@ +instruction decoding +storeIntoTemporaryVariable: offset + + ^ simulator context: self storeIntoTemporaryVariable: offset do: [:theOffset | super storeIntoTemporaryVariable: theOffset] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/methodProperties.json b/packages/SimulationStudio-Base.package/SimulatorContext.class/methodProperties.json new file mode 100644 index 0000000..32d5f3c --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/methodProperties.json @@ -0,0 +1,35 @@ +{ + "class" : { + "noteAddedSelector:meta:" : "ct 11/13/2021 20:14" }, + "instance" : { + "activateMethod:withArgs:receiver:" : "ct 11/13/2021 15:57", + "blockReturnConstant:" : "ct 11/13/2021 15:13", + "blockReturnTop" : "ct 11/12/2021 17:49", + "callPrimitive:" : "ct 11/13/2021 15:13", + "directedSuperSend:numArgs:" : "ct 11/13/2021 15:13", + "doDup" : "ct 11/12/2021 17:49", + "doPop" : "ct 11/12/2021 17:50", + "jump:" : "ct 11/13/2021 15:13", + "jump:if:" : "ct 11/13/2021 15:13", + "methodReturnConstant:" : "ct 11/13/2021 15:14", + "methodReturnReceiver" : "ct 11/12/2021 17:49", + "methodReturnTop" : "ct 11/12/2021 17:49", + "pop" : "ct 11/12/2021 17:51", + "popIntoLiteralVariable:" : "ct 11/13/2021 15:14", + "popIntoReceiverVariable:" : "ct 11/13/2021 15:14", + "popIntoTemporaryVariable:" : "ct 11/13/2021 15:14", + "push:" : "ct 11/13/2021 15:08", + "pushActiveContext" : "ct 11/12/2021 17:49", + "pushClosureCopyNumCopiedValues:numArgs:blockSize:" : "ct 11/13/2021 15:15", + "pushConsArrayWithElements:" : "ct 11/13/2021 15:15", + "pushConstant:" : "ct 11/13/2021 15:15", + "pushFullClosure:numCopied:" : "ct 11/13/2021 15:15", + "pushNewArrayOfSize:" : "ct 11/13/2021 15:15", + "pushReceiver" : "ct 11/12/2021 17:49", + "pushSpecialConstant:" : "ct 11/13/2021 15:17", + "pushTemporaryVariable:" : "ct 11/13/2021 15:16", + "send:super:numArgs:" : "ct 11/13/2021 15:16", + "sendSpecial:numArgs:" : "ct 11/13/2021 15:17", + "storeIntoLiteralVariable:" : "ct 11/13/2021 15:17", + "storeIntoReceiverVariable:" : "ct 11/13/2021 15:17", + "storeIntoTemporaryVariable:" : "ct 11/13/2021 15:17" } } diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/properties.json b/packages/SimulationStudio-Base.package/SimulatorContext.class/properties.json new file mode 100644 index 0000000..8cc621b --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "SimulationStudio-Base", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "ct 11/13/2021 16:31", + "instvars" : [ + ], + "name" : "SimulatorContext", + "pools" : [ + ], + "super" : "BasicSimulatorContext", + "type" : "variable" } diff --git a/packages/SimulationStudio-Tests-Base.package/SimulationKernelTest.class/instance/basicPerformTest.on.do..st b/packages/SimulationStudio-Tests-Base.package/SimulationKernelTest.class/instance/basicPerformTest.on.do..st index a6539b4..130633d 100644 --- a/packages/SimulationStudio-Tests-Base.package/SimulationKernelTest.class/instance/basicPerformTest.on.do..st +++ b/packages/SimulationStudio-Tests-Base.package/SimulationKernelTest.class/instance/basicPerformTest.on.do..st @@ -1,7 +1,7 @@ private basicPerformTest: aTestCase on: exceptionHandler do: exceptionBlock - ^ self contextClass runSimulated: [ + ^ self runSimulated: [ [aTestCase runCaseWithoutTimeout] on: exceptionHandler do: exceptionBlock ] \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Base.package/SimulationKernelTest.class/instance/runSimulated..st b/packages/SimulationStudio-Tests-Base.package/SimulationKernelTest.class/instance/runSimulated..st new file mode 100644 index 0000000..5b5a2e8 --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/SimulationKernelTest.class/instance/runSimulated..st @@ -0,0 +1,4 @@ +private +runSimulated: aBlock + + ^ self contextClass runSimulated: aBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Base.package/SimulationKernelTest.class/methodProperties.json b/packages/SimulationStudio-Tests-Base.package/SimulationKernelTest.class/methodProperties.json index acd7a57..7b44e28 100644 --- a/packages/SimulationStudio-Tests-Base.package/SimulationKernelTest.class/methodProperties.json +++ b/packages/SimulationStudio-Tests-Base.package/SimulationKernelTest.class/methodProperties.json @@ -10,11 +10,12 @@ "wantsToTest:" : "ct 3/5/2021 16:50" }, "instance" : { "basicPerformTest" : "ct 3/14/2021 16:08", - "basicPerformTest:on:do:" : "ct 3/14/2021 16:09", + "basicPerformTest:on:do:" : "ct 11/12/2021 19:37", "contextClass" : "ct 3/14/2021 16:10", "expectedFailures" : "ct 3/5/2021 17:03", "performTest" : "ct 3/5/2021 19:23", "printOn:" : "ct 3/5/2021 17:05", + "runSimulated:" : "ct 11/12/2021 19:37", "testClassChangeClassOf" : "ct 3/14/2021 15:50", "testContextRunUntilErrorOrReturnFromError" : "ct 3/14/2021 16:05", "testContextRunUntilErrorOrReturnFromNoError" : "ct 3/14/2021 16:05", diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/README.md b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/README.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/instance/runSimulated..st b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/instance/runSimulated..st new file mode 100644 index 0000000..a612492 --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/instance/runSimulated..st @@ -0,0 +1,4 @@ +private +runSimulated: aBlock + + ^ self simulatorClass evaluate: aBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/instance/simulatorClass.st b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/instance/simulatorClass.st new file mode 100644 index 0000000..522c330 --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/instance/simulatorClass.st @@ -0,0 +1,4 @@ +accessing +simulatorClass + + ^ Simulator \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/methodProperties.json b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/methodProperties.json new file mode 100644 index 0000000..9491f51 --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/methodProperties.json @@ -0,0 +1,6 @@ +{ + "class" : { + }, + "instance" : { + "runSimulated:" : "ct 11/12/2021 19:43", + "simulatorClass" : "ct 11/12/2021 19:43" } } diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/properties.json b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/properties.json new file mode 100644 index 0000000..e25c060 --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTest.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "SimulationStudio-Tests-Base", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "", + "instvars" : [ + ], + "name" : "SimulatorKernelTest", + "pools" : [ + ], + "super" : "SimulationKernelTest", + "type" : "normal" } diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/README.md b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/README.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/instance/simulatorClass.st b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/instance/simulatorClass.st new file mode 100644 index 0000000..6498879 --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/instance/simulatorClass.st @@ -0,0 +1,4 @@ +accessing +simulatorClass + + ^ TestSimulatorUnoptimized \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/methodProperties.json b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/methodProperties.json new file mode 100644 index 0000000..18f9f8d --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/methodProperties.json @@ -0,0 +1,5 @@ +{ + "class" : { + }, + "instance" : { + "simulatorClass" : "ct 11/12/2021 23:22" } } diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/properties.json b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/properties.json new file mode 100644 index 0000000..469b9d5 --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestUnoptimized.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "SimulationStudio-Tests-Base", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "", + "instvars" : [ + ], + "name" : "SimulatorKernelTestUnoptimized", + "pools" : [ + ], + "super" : "SimulatorKernelTest", + "type" : "normal" } diff --git a/packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/README.md b/packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/README.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/instance/requiredCapabilities.st b/packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/instance/requiredCapabilities.st new file mode 100644 index 0000000..e3ebfae --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/instance/requiredCapabilities.st @@ -0,0 +1,4 @@ +context classes +requiredCapabilities + + ^ nil \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/methodProperties.json b/packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/methodProperties.json new file mode 100644 index 0000000..9c42422 --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/methodProperties.json @@ -0,0 +1,5 @@ +{ + "class" : { + }, + "instance" : { + "requiredCapabilities" : "ct 11/12/2021 19:42" } } diff --git a/packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/properties.json b/packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/properties.json new file mode 100644 index 0000000..dab2cff --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/TestSimulatorUnoptimized.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "SimulationStudio-Tests-Base", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "", + "instvars" : [ + ], + "name" : "TestSimulatorUnoptimized", + "pools" : [ + ], + "super" : "Simulator", + "type" : "normal" } From 5c93c76b068382f85678f22bb465540426a974d6 Mon Sep 17 00:00:00 2001 From: Christoph Thiede Date: Sat, 13 Nov 2021 20:53:34 +0100 Subject: [PATCH 2/8] Add stuff that has escaped from previous commit --- .../instance/doPrimitive.method.receiver.args..st | 4 ++++ .../instance/initializeFrom..st | 6 ++++++ .../instance/popIntoRemoteTemp.inVectorAt..st | 4 ++++ .../instance/pushLiteralVariable..st | 4 ++++ .../instance/pushReceiverVariable..st | 4 ++++ .../instance/pushRemoteTemp.inVectorAt..st | 4 ++++ .../instance/return.from..st | 4 ++++ .../instance/runSimulated.contextAtEachStep..st | 4 ++++ .../instance/send.to.with.lookupIn..st | 4 ++++ .../instance/simulatedObject.instVarAt.put..st | 4 ++++ .../SimulatorContext.class/instance/step.st | 4 ++++ .../instance/storeIntoRemoteTemp.inVectorAt..st | 4 ++++ .../instance/tryNamedPrimitiveIn.for.withArgs..st | 4 ++++ .../SimulatorContext.class/methodProperties.json | 15 ++++++++++++++- 14 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/doPrimitive.method.receiver.args..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/initializeFrom..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoRemoteTemp.inVectorAt..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushLiteralVariable..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushReceiverVariable..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushRemoteTemp.inVectorAt..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/return.from..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/runSimulated.contextAtEachStep..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/send.to.with.lookupIn..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/simulatedObject.instVarAt.put..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/step.st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoRemoteTemp.inVectorAt..st create mode 100644 packages/SimulationStudio-Base.package/SimulatorContext.class/instance/tryNamedPrimitiveIn.for.withArgs..st diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/doPrimitive.method.receiver.args..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/doPrimitive.method.receiver.args..st new file mode 100644 index 0000000..4a899da --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/doPrimitive.method.receiver.args..st @@ -0,0 +1,4 @@ +private +doPrimitive: primitiveIndex method: meth receiver: rcvr args: arguments + + ^ simulator context: self doPrimitive: primitiveIndex method: meth receiver: rcvr args: arguments do: [:thePrimitiveIndex :theCompiledMethod :theReceiver :theArguments | super doPrimitive: thePrimitiveIndex method: theCompiledMethod receiver: theReceiver args: theArguments] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/initializeFrom..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/initializeFrom..st new file mode 100644 index 0000000..e5466a2 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/initializeFrom..st @@ -0,0 +1,6 @@ +initialize-release +initializeFrom: anotherContext + + super initializeFrom: anotherContext. + + ^ simulator initializeContext: self \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoRemoteTemp.inVectorAt..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoRemoteTemp.inVectorAt..st new file mode 100644 index 0000000..46b78b9 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/popIntoRemoteTemp.inVectorAt..st @@ -0,0 +1,4 @@ +instruction decoding +popIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex + + ^ simulator context: self popIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex do: [:theRemoteTempIndex :theTempVectorIndex | super popIntoRemoteTemp: theRemoteTempIndex inVectorAt: theTempVectorIndex] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushLiteralVariable..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushLiteralVariable..st new file mode 100644 index 0000000..d6f30db --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushLiteralVariable..st @@ -0,0 +1,4 @@ +instruction decoding +pushLiteralVariable: value + + ^ simulator context: self pushLiteralVariable: value do: [:theValue | super pushLiteralVariable: theValue] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushReceiverVariable..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushReceiverVariable..st new file mode 100644 index 0000000..5ba999d --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushReceiverVariable..st @@ -0,0 +1,4 @@ +instruction decoding +pushReceiverVariable: offset + + ^ simulator context: self pushReceiverVariable: offset do: [:theOffset | super pushReceiverVariable: theOffset] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushRemoteTemp.inVectorAt..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushRemoteTemp.inVectorAt..st new file mode 100644 index 0000000..5cc88f1 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/pushRemoteTemp.inVectorAt..st @@ -0,0 +1,4 @@ +instruction decoding +pushRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex + + ^ simulator context: self pushRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex do: [:theRemoteTempIndex :theTempVectorIndex | super pushRemoteTemp: theRemoteTempIndex inVectorAt: theTempVectorIndex] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/return.from..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/return.from..st new file mode 100644 index 0000000..11bedfb --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/return.from..st @@ -0,0 +1,4 @@ +instruction decoding +return: value from: aSender + + ^ simulator context: self return: value from: aSender do: [:theValue :theSender | super return: theValue from: theSender] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/runSimulated.contextAtEachStep..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/runSimulated.contextAtEachStep..st new file mode 100644 index 0000000..7cf2c45 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/runSimulated.contextAtEachStep..st @@ -0,0 +1,4 @@ +system simulation +runSimulated: aBlock contextAtEachStep: anotherBlock + + ^ simulator context: self runSimulated: aBlock contextAtEachStep: anotherBlock do: [:theBlock :theOtherBlock | super runSimulated: theBlock contextAtEachStep: theOtherBlock] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/send.to.with.lookupIn..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/send.to.with.lookupIn..st new file mode 100644 index 0000000..3af437d --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/send.to.with.lookupIn..st @@ -0,0 +1,4 @@ +controlling +send: selector to: rcvr with: arguments lookupIn: lookupClass + + ^ simulator context: self send: selector to: rcvr with: arguments lookupIn: lookupClass do: [:theSelector :theReceiver :theArguments :theLookupClass | super send: theSelector to: theReceiver with: theArguments lookupIn: theLookupClass] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/simulatedObject.instVarAt.put..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/simulatedObject.instVarAt.put..st new file mode 100644 index 0000000..e613d3f --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/simulatedObject.instVarAt.put..st @@ -0,0 +1,4 @@ +read-only objects +simulatedObject: anObject instVarAt: index put: value + + ^ simulator context: self simulatedObject: anObject instVarAt: index put: value do: [:theObject :theIndex :theValue | super simulatedObject: theObject instVarAt: theIndex put: theValue] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/step.st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/step.st new file mode 100644 index 0000000..6f93203 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/step.st @@ -0,0 +1,4 @@ +system simulation +step + + ^ simulator context: self step: [super step] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoRemoteTemp.inVectorAt..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoRemoteTemp.inVectorAt..st new file mode 100644 index 0000000..c32da6e --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/storeIntoRemoteTemp.inVectorAt..st @@ -0,0 +1,4 @@ +instruction decoding +storeIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex + + ^ simulator context: self storeIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex do: [:theRemoteTempIndex :theTempVectorIndex | super storeIntoRemoteTemp: theRemoteTempIndex inVectorAt: theTempVectorIndex] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/tryNamedPrimitiveIn.for.withArgs..st b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/tryNamedPrimitiveIn.for.withArgs..st new file mode 100644 index 0000000..e0e0dd3 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/instance/tryNamedPrimitiveIn.for.withArgs..st @@ -0,0 +1,4 @@ +private +tryNamedPrimitiveIn: aCompiledMethod for: rcvr withArgs: arguments + + ^ simulator context: self tryNamedPrimitiveIn: aCompiledMethod for: rcvr withArgs: arguments do: [:theCompiledMethod :theReceiver :theArguments | super tryNamedPrimitiveIn: theCompiledMethod for: theReceiver withArgs: theArguments] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulatorContext.class/methodProperties.json b/packages/SimulationStudio-Base.package/SimulatorContext.class/methodProperties.json index 32d5f3c..c092a9b 100644 --- a/packages/SimulationStudio-Base.package/SimulatorContext.class/methodProperties.json +++ b/packages/SimulationStudio-Base.package/SimulatorContext.class/methodProperties.json @@ -9,6 +9,8 @@ "directedSuperSend:numArgs:" : "ct 11/13/2021 15:13", "doDup" : "ct 11/12/2021 17:49", "doPop" : "ct 11/12/2021 17:50", + "doPrimitive:method:receiver:args:" : "ct 11/13/2021 15:08", + "initializeFrom:" : "ct 11/12/2021 23:27", "jump:" : "ct 11/13/2021 15:13", "jump:if:" : "ct 11/13/2021 15:13", "methodReturnConstant:" : "ct 11/13/2021 15:14", @@ -17,6 +19,7 @@ "pop" : "ct 11/12/2021 17:51", "popIntoLiteralVariable:" : "ct 11/13/2021 15:14", "popIntoReceiverVariable:" : "ct 11/13/2021 15:14", + "popIntoRemoteTemp:inVectorAt:" : "ct 11/13/2021 15:14", "popIntoTemporaryVariable:" : "ct 11/13/2021 15:14", "push:" : "ct 11/13/2021 15:08", "pushActiveContext" : "ct 11/12/2021 17:49", @@ -24,12 +27,22 @@ "pushConsArrayWithElements:" : "ct 11/13/2021 15:15", "pushConstant:" : "ct 11/13/2021 15:15", "pushFullClosure:numCopied:" : "ct 11/13/2021 15:15", + "pushLiteralVariable:" : "ct 11/13/2021 15:15", "pushNewArrayOfSize:" : "ct 11/13/2021 15:15", "pushReceiver" : "ct 11/12/2021 17:49", + "pushReceiverVariable:" : "ct 11/13/2021 15:16", + "pushRemoteTemp:inVectorAt:" : "ct 11/13/2021 15:16", "pushSpecialConstant:" : "ct 11/13/2021 15:17", "pushTemporaryVariable:" : "ct 11/13/2021 15:16", + "return:from:" : "ct 11/13/2021 15:16", + "runSimulated:contextAtEachStep:" : "ct 11/13/2021 02:02", "send:super:numArgs:" : "ct 11/13/2021 15:16", + "send:to:with:lookupIn:" : "ct 11/13/2021 15:09", "sendSpecial:numArgs:" : "ct 11/13/2021 15:17", + "simulatedObject:instVarAt:put:" : "ct 11/13/2021 02:02", + "step" : "ct 11/13/2021 20:22", "storeIntoLiteralVariable:" : "ct 11/13/2021 15:17", "storeIntoReceiverVariable:" : "ct 11/13/2021 15:17", - "storeIntoTemporaryVariable:" : "ct 11/13/2021 15:17" } } + "storeIntoRemoteTemp:inVectorAt:" : "ct 11/13/2021 15:17", + "storeIntoTemporaryVariable:" : "ct 11/13/2021 15:17", + "tryNamedPrimitiveIn:for:withArgs:" : "ct 11/13/2021 15:12" } } From a900c870be33b51a1cd06139615d2a5b0b7e85b0 Mon Sep 17 00:00:00 2001 From: Christoph Thiede Date: Sat, 13 Nov 2021 21:16:46 +0100 Subject: [PATCH 3/8] Add even more escaped stuff and take care of excluding these incidents in the future --- .../class/forbiddenBasicAddSelector.withMethod..st | 5 +++++ .../class/forbiddenBasicRemoveSelector..st | 5 +++++ .../BasicSimulatorContext.class/methodProperties.json | 2 ++ .../Simulator.class/class/contextClassForCapabilities..st | 6 +++--- .../Simulator.class/methodProperties.json | 2 +- 5 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 packages/SimulationStudio-Base.package/BasicSimulatorContext.class/class/forbiddenBasicAddSelector.withMethod..st create mode 100644 packages/SimulationStudio-Base.package/BasicSimulatorContext.class/class/forbiddenBasicRemoveSelector..st diff --git a/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/class/forbiddenBasicAddSelector.withMethod..st b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/class/forbiddenBasicAddSelector.withMethod..st new file mode 100644 index 0000000..8034a4f --- /dev/null +++ b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/class/forbiddenBasicAddSelector.withMethod..st @@ -0,0 +1,5 @@ +template - accessing method dictionary +forbiddenBasicAddSelector: selector withMethod: aCompiledMethod + + "This message is sent to read-only context classes!" + ^ NotImplemented signal: 'You shall not want to edit this uniclass itself. Instead, add the new method to SimulationContext or BasicSimulatorContext, or implement a capability/delegator on SimulatorContext and then restart the simulator.' \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/class/forbiddenBasicRemoveSelector..st b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/class/forbiddenBasicRemoveSelector..st new file mode 100644 index 0000000..df0b55f --- /dev/null +++ b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/class/forbiddenBasicRemoveSelector..st @@ -0,0 +1,5 @@ +template - accessing method dictionary +forbiddenBasicRemoveSelector: selector + + "This message is sent to read-only context classes!" + ^ NotImplemented signal: 'You shall not want to edit this uniclass itself. Instead, remove the undesired capability from your simulator and restart all running instances.' \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/methodProperties.json b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/methodProperties.json index 5ac4ed3..e167e51 100644 --- a/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/methodProperties.json +++ b/packages/SimulationStudio-Base.package/BasicSimulatorContext.class/methodProperties.json @@ -1,5 +1,7 @@ { "class" : { + "forbiddenBasicAddSelector:withMethod:" : "ct 11/13/2021 20:07", + "forbiddenBasicRemoveSelector:" : "ct 11/13/2021 20:14", "newFor:" : "ct 11/11/2021 21:16" }, "instance" : { "initializeFrom:" : "ct 11/11/2021 21:14", diff --git a/packages/SimulationStudio-Base.package/Simulator.class/class/contextClassForCapabilities..st b/packages/SimulationStudio-Base.package/Simulator.class/class/contextClassForCapabilities..st index a2cf9af..8dcae9f 100644 --- a/packages/SimulationStudio-Base.package/Simulator.class/class/contextClassForCapabilities..st +++ b/packages/SimulationStudio-Base.package/Simulator.class/class/contextClassForCapabilities..st @@ -12,11 +12,11 @@ contextClassForCapabilities: capabilities capabilities do: [:selector | class addSelectorSilently: selector - withMethod: self fullContextClass >> selector]. + withMethod: (self fullContextClass >> selector) copy]. "Seal class to avoid developer confusion." class theMetaClass addSelectorSilently: #basicAddSelector:withMethod: - withMethod: (class theMetaClass lookupSelector: #forbiddenBasicAddSelector:withMethod:); + withMethod: (class theMetaClass lookupSelector: #forbiddenBasicAddSelector:withMethod:) copy; addSelectorSilently: #basicRemoveSelector: - withMethod: (class theMetaClass lookupSelector: #forbiddenBasicRemoveSelector:). + withMethod: (class theMetaClass lookupSelector: #forbiddenBasicRemoveSelector:) copy. class] \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/methodProperties.json b/packages/SimulationStudio-Base.package/Simulator.class/methodProperties.json index f71887e..abfba35 100644 --- a/packages/SimulationStudio-Base.package/Simulator.class/methodProperties.json +++ b/packages/SimulationStudio-Base.package/Simulator.class/methodProperties.json @@ -3,7 +3,7 @@ "basicContextClass" : "ct 11/12/2021 18:36", "cleanUp" : "ct 11/12/2021 19:40", "cleanUpContextClasses" : "ct 11/12/2021 19:39", - "contextClassForCapabilities:" : "ct 11/13/2021 20:17", + "contextClassForCapabilities:" : "ct 11/13/2021 21:12", "contextClassForSimulators:" : "ct 11/12/2021 18:36", "debug:" : "ct 11/13/2021 15:46", "decorating:" : "ct 11/11/2021 21:47", From 03f0588b452a5f66c95efd9a8baeb931718098cf Mon Sep 17 00:00:00 2001 From: Christoph Thiede Date: Sat, 13 Nov 2021 22:17:27 +0100 Subject: [PATCH 4/8] Simulator: Make #requiredCapabilities compatible with method wrappers (SCI coverage ...) and fix capability pragma in #context:doDup: --- .../Simulator.class/instance/context.doDup..st | 2 +- .../Simulator.class/instance/requiredCapabilities.st | 2 +- .../Simulator.class/methodProperties.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doDup..st b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doDup..st index 98f10cc..54aa2f2 100644 --- a/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doDup..st +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/context.doDup..st @@ -1,6 +1,6 @@ instruction processing context: aContext doDup: aBlock - + ^ nextSimulator ifNotNil: [nextSimulator context: aContext doDup: aBlock] diff --git a/packages/SimulationStudio-Base.package/Simulator.class/instance/requiredCapabilities.st b/packages/SimulationStudio-Base.package/Simulator.class/instance/requiredCapabilities.st index c3d5ca5..3d2e56f 100644 --- a/packages/SimulationStudio-Base.package/Simulator.class/instance/requiredCapabilities.st +++ b/packages/SimulationStudio-Base.package/Simulator.class/instance/requiredCapabilities.st @@ -4,5 +4,5 @@ requiredCapabilities ^ ((Pragma allNamed: #capability: from: self class to: thisContext methodClass) reject: [:pragma | - (self class lookupSelector: pragma selector) == pragma method]) + (self class lookupSelector: pragma selector) methodClass == pragma methodClass]) collect: [:pragma | pragma argumentAt: 1] as: Set \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/Simulator.class/methodProperties.json b/packages/SimulationStudio-Base.package/Simulator.class/methodProperties.json index abfba35..2566467 100644 --- a/packages/SimulationStudio-Base.package/Simulator.class/methodProperties.json +++ b/packages/SimulationStudio-Base.package/Simulator.class/methodProperties.json @@ -20,7 +20,7 @@ "context:callPrimitive:do:" : "ct 11/13/2021 15:40", "context:directedSuperSend:numArgs:do:" : "ct 11/13/2021 15:40", "context:doBlockReturnTop:" : "ct 11/12/2021 18:48", - "context:doDup:" : "ct 11/12/2021 18:48", + "context:doDup:" : "ct 11/13/2021 22:14", "context:doMethodReturnReceiver:" : "ct 11/12/2021 18:48", "context:doMethodReturnTop:" : "ct 11/12/2021 18:48", "context:doPop:" : "ct 11/12/2021 18:46", @@ -62,4 +62,4 @@ "initializeContext:" : "ct 11/13/2021 00:19", "nextSimulator" : "ct 11/11/2021 21:47", "nextSimulator:" : "ct 11/11/2021 21:47", - "requiredCapabilities" : "ct 11/12/2021 19:30" } } + "requiredCapabilities" : "ct 11/13/2021 22:11" } } From f113bb0dbdcd05e728395cee59e868cdb886a748 Mon Sep 17 00:00:00 2001 From: Christoph Thiede Date: Sat, 13 Nov 2021 22:20:21 +0100 Subject: [PATCH 5/8] Test simulator with all capabilities --- .../README.md | 0 .../instance/simulatorClass.st | 4 ++++ .../methodProperties.json | 5 +++++ .../properties.json | 14 ++++++++++++++ .../TestSimulatorAllCapabilities.class/README.md | 0 .../instance/requiredCapabilities.st | 6 ++++++ .../methodProperties.json | 5 +++++ .../properties.json | 14 ++++++++++++++ 8 files changed, 48 insertions(+) create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/README.md create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/instance/simulatorClass.st create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/methodProperties.json create mode 100644 packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/properties.json create mode 100644 packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/README.md create mode 100644 packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/instance/requiredCapabilities.st create mode 100644 packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/methodProperties.json create mode 100644 packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/properties.json diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/README.md b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/README.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/instance/simulatorClass.st b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/instance/simulatorClass.st new file mode 100644 index 0000000..c99c7bd --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/instance/simulatorClass.st @@ -0,0 +1,4 @@ +accessing +simulatorClass + + ^ TestSimulatorAllCapabilities \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/methodProperties.json b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/methodProperties.json new file mode 100644 index 0000000..e4e18bd --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/methodProperties.json @@ -0,0 +1,5 @@ +{ + "class" : { + }, + "instance" : { + "simulatorClass" : "ct 11/13/2021 22:13" } } diff --git a/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/properties.json b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/properties.json new file mode 100644 index 0000000..930ff89 --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/SimulatorKernelTestAllCapabilities.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "SimulationStudio-Tests-Base", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "", + "instvars" : [ + ], + "name" : "SimulatorKernelTestAllCapabilities", + "pools" : [ + ], + "super" : "SimulatorKernelTest", + "type" : "normal" } diff --git a/packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/README.md b/packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/README.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/instance/requiredCapabilities.st b/packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/instance/requiredCapabilities.st new file mode 100644 index 0000000..cee65a3 --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/instance/requiredCapabilities.st @@ -0,0 +1,6 @@ +context classes +requiredCapabilities + + ^ (Pragma allNamed: #capability: in: self class superclass) + collect: [:pragma | pragma argumentAt: 1] + as: Set \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/methodProperties.json b/packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/methodProperties.json new file mode 100644 index 0000000..04266a1 --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/methodProperties.json @@ -0,0 +1,5 @@ +{ + "class" : { + }, + "instance" : { + "requiredCapabilities" : "ct 11/13/2021 22:14" } } diff --git a/packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/properties.json b/packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/properties.json new file mode 100644 index 0000000..ed331ff --- /dev/null +++ b/packages/SimulationStudio-Tests-Base.package/TestSimulatorAllCapabilities.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "SimulationStudio-Tests-Base", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "", + "instvars" : [ + ], + "name" : "TestSimulatorAllCapabilities", + "pools" : [ + ], + "super" : "Simulator", + "type" : "normal" } From 8f12aff0940e0ceb715e24874c263dd97afadda3 Mon Sep 17 00:00:00 2001 From: Christoph Thiede Date: Sat, 13 Nov 2021 22:41:47 +0100 Subject: [PATCH 6/8] Migrate SimulationMessageSendRecorder to new Simulator framework - This means that SMSR can now be combined with different simulators! - Increased robustness of recording by choosing more specific hooks (#return:from: and #send:to:with:lookupIn:) instead of #push: - Improved documentation and convenience (try out the new shortcut BlockClosure >> #browseSimulationMessageSendRecord!) --- .../browseSimulationMessageSendRecord.st | 7 ++++ .../methodProperties.json | 5 +++ .../BlockClosure.extension/properties.json | 2 + .../README.md | 0 .../class/browseRecord..st | 6 +++ .../class/on..st | 6 +++ .../class/record..st | 4 ++ .../instance/activateDuring..st | 8 ++++ .../instance/basicSimulate.do.chain..st | 11 ++++++ .../instance/browseRecord.st | 4 ++ .../instance/context.return.from.do..st | 6 +++ .../context.send.to.with.lookupIn.do..st | 13 +++++++ .../instance/initialize.st | 7 ++++ .../instance/newRecorder.st | 6 +++ .../instance/record..st | 6 +++ .../instance/recordReturn.to..st | 9 +++++ ...dSendMethod.receiver.arguments.context..st | 17 +++++++++ .../instance/recorder..st | 0 .../instance/recorder.st | 1 + .../methodProperties.json | 18 +++++++++ .../properties.json | 10 ++--- .../class/browseRecord..st | 5 ++- .../class/record..st | 4 +- .../class/todo.st | 7 ++-- .../instance/basicRecord.st | 13 +++++++ .../instance/initialize.st | 3 +- .../instance/newSimulator.st | 4 ++ .../instance/record.st | 12 +----- .../instance/sendBasicMessage..st | 6 --- .../instance/sendBasicMessage.st | 4 ++ .../instance/sendMessage.st | 37 ------------------- .../instance/setMessageSend..st | 6 +++ .../instance/simulator..st | 4 ++ .../instance/simulator.st | 4 ++ .../methodProperties.json | 18 +++++---- .../properties.json | 2 + .../instance/initializeFrom..st | 5 --- .../instance/push..st | 13 ------- .../instance/send.to.with.lookupIn..st | 21 ----------- .../methodProperties.json | 9 ----- 40 files changed, 202 insertions(+), 121 deletions(-) create mode 100644 packages/SimulationStudio-Tracing.package/BlockClosure.extension/instance/browseSimulationMessageSendRecord.st create mode 100644 packages/SimulationStudio-Tracing.package/BlockClosure.extension/methodProperties.json create mode 100644 packages/SimulationStudio-Tracing.package/BlockClosure.extension/properties.json rename packages/SimulationStudio-Tracing.package/{SimulationMsrContext.class => MessageSendRecorderSimulator.class}/README.md (100%) create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/class/browseRecord..st create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/class/on..st create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/class/record..st create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/activateDuring..st create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/basicSimulate.do.chain..st create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/browseRecord.st create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/context.return.from.do..st create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/context.send.to.with.lookupIn.do..st create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/initialize.st create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/newRecorder.st create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/record..st create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recordReturn.to..st create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recordSendMethod.receiver.arguments.context..st rename packages/SimulationStudio-Tracing.package/{SimulationMsrContext.class => MessageSendRecorderSimulator.class}/instance/recorder..st (100%) rename packages/SimulationStudio-Tracing.package/{SimulationMsrContext.class => MessageSendRecorderSimulator.class}/instance/recorder.st (96%) create mode 100644 packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/methodProperties.json rename packages/SimulationStudio-Tracing.package/{SimulationMsrContext.class => MessageSendRecorderSimulator.class}/properties.json (51%) create mode 100644 packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/basicRecord.st create mode 100644 packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/newSimulator.st delete mode 100644 packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/sendBasicMessage..st create mode 100644 packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/sendBasicMessage.st delete mode 100644 packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/sendMessage.st create mode 100644 packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/setMessageSend..st create mode 100644 packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/simulator..st create mode 100644 packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/simulator.st delete mode 100644 packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/initializeFrom..st delete mode 100644 packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/push..st delete mode 100644 packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/send.to.with.lookupIn..st delete mode 100644 packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/methodProperties.json diff --git a/packages/SimulationStudio-Tracing.package/BlockClosure.extension/instance/browseSimulationMessageSendRecord.st b/packages/SimulationStudio-Tracing.package/BlockClosure.extension/instance/browseSimulationMessageSendRecord.st new file mode 100644 index 0000000..d2c45a5 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/BlockClosure.extension/instance/browseSimulationMessageSendRecord.st @@ -0,0 +1,7 @@ +*SimulationStudio-Tracing +browseSimulationMessageSendRecord + " + ['[\w3-6]+' asRegex] browseSimulationMessageSendRecord + " + + ^ SimulationMessageSendRecorder browseRecord: self \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/BlockClosure.extension/methodProperties.json b/packages/SimulationStudio-Tracing.package/BlockClosure.extension/methodProperties.json new file mode 100644 index 0000000..55fa1df --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/BlockClosure.extension/methodProperties.json @@ -0,0 +1,5 @@ +{ + "class" : { + }, + "instance" : { + "browseSimulationMessageSendRecord" : "ct 11/13/2021 19:47" } } diff --git a/packages/SimulationStudio-Tracing.package/BlockClosure.extension/properties.json b/packages/SimulationStudio-Tracing.package/BlockClosure.extension/properties.json new file mode 100644 index 0000000..1d6f488 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/BlockClosure.extension/properties.json @@ -0,0 +1,2 @@ +{ + "name" : "BlockClosure" } diff --git a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/README.md b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/README.md similarity index 100% rename from packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/README.md rename to packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/README.md diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/class/browseRecord..st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/class/browseRecord..st new file mode 100644 index 0000000..0fe5de5 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/class/browseRecord..st @@ -0,0 +1,6 @@ +instance creation +browseRecord: aBlock + + ^ self new + record: aBlock; + browseRecord \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/class/on..st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/class/on..st new file mode 100644 index 0000000..f198bc0 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/class/on..st @@ -0,0 +1,6 @@ +instance creation +on: aMessageSendRecorder + + ^ self basicNew + recorder: aMessageSendRecorder; + initialize \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/class/record..st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/class/record..st new file mode 100644 index 0000000..9598807 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/class/record..st @@ -0,0 +1,4 @@ +instance creation +record: aBlock + + ^ self new record: aBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/activateDuring..st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/activateDuring..st new file mode 100644 index 0000000..2a8d959 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/activateDuring..st @@ -0,0 +1,8 @@ +evaluating +activateDuring: aBlock + + | result | + self recorder + setMessageSend: [result := super activateDuring: aBlock]; + basicRecord. + ^ result \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/basicSimulate.do.chain..st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/basicSimulate.do.chain..st new file mode 100644 index 0000000..47aab60 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/basicSimulate.do.chain..st @@ -0,0 +1,11 @@ +evaluating +basicSimulate: simulatedBlock do: simulatorBlock chain: simulatorArray + + | result | + self recorder + setMessageSend: [result := super + basicSimulate: simulatedBlock + do: simulatorBlock + chain: simulatorArray]; + basicRecord. + ^ result \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/browseRecord.st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/browseRecord.st new file mode 100644 index 0000000..a108426 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/browseRecord.st @@ -0,0 +1,4 @@ +recording +browseRecord + + ^ self recorder topRecord browse \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/context.return.from.do..st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/context.return.from.do..st new file mode 100644 index 0000000..fe78d63 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/context.return.from.do..st @@ -0,0 +1,6 @@ +controlling +context: aContext return: value from: sender do: aBlock + + self recordReturn: value to: sender sender. + + ^ super context: aContext return: value from: sender do: aBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/context.send.to.with.lookupIn.do..st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/context.send.to.with.lookupIn.do..st new file mode 100644 index 0000000..5ad2aa7 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/context.send.to.with.lookupIn.do..st @@ -0,0 +1,13 @@ +controlling +context: aContext send: selector to: receiver with: arguments lookupIn: lookupClass do: aBlock + + | result | + (lookupClass lookupSelector: selector) ifNotNil: [:method | + self recordSendMethod: method receiver: receiver arguments: arguments context: aContext]. + + result := super context: aContext send: selector to: receiver with: arguments lookupIn: lookupClass do: aBlock. + + result == aContext ifTrue: [ + self recordReturn: result top to: aContext]. + + ^ result \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/initialize.st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/initialize.st new file mode 100644 index 0000000..b42bbcf --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/initialize.st @@ -0,0 +1,7 @@ +initialize-release +initialize + + super initialize. + + recorder ifNil: [recorder := self newRecorder]. + recordBlocks := WeakIdentityKeyDictionary new. \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/newRecorder.st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/newRecorder.st new file mode 100644 index 0000000..6e823f4 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/newRecorder.st @@ -0,0 +1,6 @@ +recording +newRecorder + + ^ SimulationMessageSendRecorder new + simulator: self; + yourself \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/record..st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/record..st new file mode 100644 index 0000000..d555c19 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/record..st @@ -0,0 +1,6 @@ +recording +record: aBlock + + ^ self + evaluate: aBlock; + yourself \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recordReturn.to..st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recordReturn.to..st new file mode 100644 index 0000000..cb4caa1 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recordReturn.to..st @@ -0,0 +1,9 @@ +private +recordReturn: value to: aContext + + | recordBlock | + recordBlock := recordBlocks removeKey: aContext ifAbsent: [ + Transcript showln: 'Returning from unrecorded message send: '; show: aContext. + ^ self]. + + recordBlock value: value value: aContext. \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recordSendMethod.receiver.arguments.context..st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recordSendMethod.receiver.arguments.context..st new file mode 100644 index 0000000..958af00 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recordSendMethod.receiver.arguments.context..st @@ -0,0 +1,17 @@ +private +recordSendMethod: aCompiledMethod receiver: receiver arguments: arguments context: aContext + + | record | + record := recorder + recordSendMethod: aCompiledMethod + receiver: receiver + arguments: arguments + context: aContext. + recordBlocks at: aContext put: [:result :context | + self "halt". + recorder + record: record + return: result + receiver: receiver + arguments: arguments + context: context]. \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/recorder..st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recorder..st similarity index 100% rename from packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/recorder..st rename to packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recorder..st diff --git a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/recorder.st b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recorder.st similarity index 96% rename from packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/recorder.st rename to packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recorder.st index 24f4451..99573f0 100644 --- a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/recorder.st +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/instance/recorder.st @@ -1,3 +1,4 @@ accessing recorder + ^ recorder \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/methodProperties.json b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/methodProperties.json new file mode 100644 index 0000000..8047bfc --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/methodProperties.json @@ -0,0 +1,18 @@ +{ + "class" : { + "browseRecord:" : "ct 11/12/2021 22:35", + "on:" : "ct 11/12/2021 22:44", + "record:" : "ct 11/12/2021 14:15" }, + "instance" : { + "activateDuring:" : "ct 11/13/2021 16:53", + "basicSimulate:do:chain:" : "ct 11/13/2021 17:01", + "browseRecord" : "ct 11/11/2021 22:30", + "context:return:from:do:" : "ct 11/12/2021 21:29", + "context:send:to:with:lookupIn:do:" : "ct 11/12/2021 21:31", + "initialize" : "ct 11/12/2021 22:44", + "newRecorder" : "ct 11/12/2021 23:06", + "record:" : "ct 11/12/2021 14:15", + "recordReturn:to:" : "ct 11/12/2021 23:06", + "recordSendMethod:receiver:arguments:context:" : "ct 11/12/2021 21:15", + "recorder" : "ct 11/11/2021 21:29", + "recorder:" : "ct 11/11/2021 21:29" } } diff --git a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/properties.json b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/properties.json similarity index 51% rename from packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/properties.json rename to packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/properties.json index e040220..b7a3095 100644 --- a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/properties.json +++ b/packages/SimulationStudio-Tracing.package/MessageSendRecorderSimulator.class/properties.json @@ -7,11 +7,9 @@ "commentStamp" : "", "instvars" : [ "recorder", - "currentRecord", - "currentReceiver", - "currentArguments" ], - "name" : "SimulationMsrContext", + "recordBlocks" ], + "name" : "MessageSendRecorderSimulator", "pools" : [ ], - "super" : "SimulationContext", - "type" : "variable" } + "super" : "Simulator", + "type" : "normal" } diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/class/browseRecord..st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/class/browseRecord..st index 3584f25..e435c4f 100644 --- a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/class/browseRecord..st +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/class/browseRecord..st @@ -1,4 +1,7 @@ -as yet unclassified +recording browseRecord: aBlock + " + SimulationMessageSendRecorder browseRecord: [Morph new imageForm] + " ^ (self record: aBlock) browse \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/class/record..st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/class/record..st index 0faa6b2..812d102 100644 --- a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/class/record..st +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/class/record..st @@ -1,8 +1,8 @@ -as yet unclassified +recording record: aBlock ^ self new - "setRecordAllObjects;" + setRecordAllObjects; setMessageSend: aBlock; record; topRecord \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/class/todo.st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/class/todo.st index 4334053..89eba76 100644 --- a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/class/todo.st +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/class/todo.st @@ -1,11 +1,12 @@ -as yet unclassified + documentation todo self flag: #todo. 'CURRENT STATE: - #record: works for basic examples. - This does NOT work: - ContextMessageSendRecorder browseRecord: [ - ContextMessageSendRecorder record: [6 / 7]] + SimulationMessageSendRecorder browseRecord: [ + SimulationMessageSendRecorder record: [6 / 7]]. + [SimulationContextTest new testInsertEnsure] browseSimulationMessageSendRecord. "this one appears to be a general limitation of the MessageSendRecorder." - too much overhead recorded around - many stack manipulation examples such as #insertEnsure: still failing' \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/basicRecord.st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/basicRecord.st new file mode 100644 index 0000000..3009ac3 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/basicRecord.st @@ -0,0 +1,13 @@ +recording +basicRecord + "ASSUMES that we are already simulating code." + + isFirstRecording := self topRecord children isEmpty. + + [^ self sendMessage] + ensure: [ + self reset. + self collectArgumentNames. + self fixDuration]. + + ^ nil \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/initialize.st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/initialize.st index cf71b70..07d9df7 100644 --- a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/initialize.st +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/initialize.st @@ -3,4 +3,5 @@ initialize super initialize. - numCallsBefores := Dictionary new. \ No newline at end of file + numCallsBefores := Dictionary new. + simulator := self newSimulator. \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/newSimulator.st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/newSimulator.st new file mode 100644 index 0000000..6db9c76 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/newSimulator.st @@ -0,0 +1,4 @@ +initialization +newSimulator + + ^ MessageSendRecorderSimulator on: self \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/record.st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/record.st index ae6473b..b260ea1 100644 --- a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/record.st +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/record.st @@ -1,13 +1,5 @@ recording record - isFirstRecording := self topRecord children isEmpty. - - Project current uiManager informUser: 'Recording message sends ...' during: [ - [^ self sendMessage] - ensure: [ - self reset. - self collectArgumentNames. - self fixDuration]]. - - ^ nil \ No newline at end of file + ^ Project current uiManager informUser: 'Recording message sends ...' during: [ + self sendBasicMessage] \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/sendBasicMessage..st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/sendBasicMessage..st deleted file mode 100644 index 2a1e57b..0000000 --- a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/sendBasicMessage..st +++ /dev/null @@ -1,6 +0,0 @@ -private -sendBasicMessage: receiver - - ^ (SimulationMsrContext newFrom: thisContext) - recorder: self; - runSimulated: [receiver value] \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/sendBasicMessage.st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/sendBasicMessage.st new file mode 100644 index 0000000..53dcbce --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/sendBasicMessage.st @@ -0,0 +1,4 @@ +private +sendBasicMessage + + ^ self simulator evaluate: (block ifNil: [self topRecord parent]) \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/sendMessage.st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/sendMessage.st deleted file mode 100644 index c6a6c4c..0000000 --- a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/sendMessage.st +++ /dev/null @@ -1,37 +0,0 @@ -recording -sendMessage - "Simulate what method wrappers would do to the outermost message send." - - | node receiver arguments method returnValue stopwatch | - node := self topRecord. - receiver := self topRecord parent. - method := self topRecord method. - arguments := #(). - - self recordingMode == #specificCall ifTrue: [ - ^ self sendBasicMessage: receiver]. - - self - recordInto: node - receiver: receiver - arguments: arguments - context: thisContext. - - self recordingMode == #duration ifTrue: [ - stopwatch := Stopwatch new. - stopwatch activate]. - - returnValue := self sendBasicMessage: receiver. - - self recordingMode == #duration ifTrue: [ - stopwatch suspend. - node extension duration: stopwatch duration]. - - self - recordInto: node - return: returnValue - receiver: receiver - arguments: arguments - context: thisContext. - - ^ returnValue \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/setMessageSend..st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/setMessageSend..st new file mode 100644 index 0000000..52cc529 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/setMessageSend..st @@ -0,0 +1,6 @@ +initialization +setMessageSend: aMessageSend + + super setMessageSend: aMessageSend. + aMessageSend isBlock + ifTrue: [block := aMessageSend]. \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/simulator..st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/simulator..st new file mode 100644 index 0000000..876defb --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/simulator..st @@ -0,0 +1,4 @@ +accessing +simulator: aSimulator + + simulator := aSimulator \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/simulator.st b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/simulator.st new file mode 100644 index 0000000..50d84f2 --- /dev/null +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/instance/simulator.st @@ -0,0 +1,4 @@ +accessing +simulator + + ^ simulator \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/methodProperties.json b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/methodProperties.json index 68a7c5b..b652f2a 100644 --- a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/methodProperties.json +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/methodProperties.json @@ -1,11 +1,15 @@ { "class" : { - "browseRecord:" : "ct 3/3/2021 22:19", - "record:" : "ct 3/3/2021 22:20", - "todo" : "ct 3/14/2021 17:01" }, + "browseRecord:" : "ct 11/12/2021 23:14", + "record:" : "ct 11/11/2021 21:58", + "todo" : "ct 11/13/2021 22:38" }, "instance" : { - "initialize" : "ct 3/3/2021 22:09", - "record" : "ct 3/3/2021 22:02", + "basicRecord" : "ct 11/13/2021 16:52", + "initialize" : "ct 11/12/2021 22:42", + "newSimulator" : "ct 11/12/2021 23:19", + "record" : "ct 11/12/2021 23:04", "recordSendMethod:receiver:arguments:context:" : "ct 3/3/2021 22:08", - "sendBasicMessage:" : "ct 3/5/2021 19:17", - "sendMessage" : "ct 3/3/2021 22:15" } } + "sendBasicMessage" : "ct 11/12/2021 23:04", + "setMessageSend:" : "ct 11/12/2021 23:03", + "simulator" : "ct 11/12/2021 22:42", + "simulator:" : "ct 11/12/2021 22:42" } } diff --git a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/properties.json b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/properties.json index aa33ee8..6dcdf4c 100644 --- a/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/properties.json +++ b/packages/SimulationStudio-Tracing.package/SimulationMessageSendRecorder.class/properties.json @@ -6,6 +6,8 @@ ], "commentStamp" : "", "instvars" : [ + "simulator", + "block", "numCallsBefores" ], "name" : "SimulationMessageSendRecorder", "pools" : [ diff --git a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/initializeFrom..st b/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/initializeFrom..st deleted file mode 100644 index 8a014e5..0000000 --- a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/initializeFrom..st +++ /dev/null @@ -1,5 +0,0 @@ -initialize-release -initializeFrom: anotherContext - - super initializeFrom: anotherContext. - recorder := anotherContext recorder. \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/push..st b/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/push..st deleted file mode 100644 index 7872b3b..0000000 --- a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/push..st +++ /dev/null @@ -1,13 +0,0 @@ -controlling -push: anObject - - currentRecord ifNotNil: [ - recorder - record: currentRecord - return: anObject - receiver: currentReceiver - arguments: currentArguments - context: self. - currentRecord := currentReceiver := currentArguments := nil]. - - ^ super push: anObject \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/send.to.with.lookupIn..st b/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/send.to.with.lookupIn..st deleted file mode 100644 index 265a5c6..0000000 --- a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/instance/send.to.with.lookupIn..st +++ /dev/null @@ -1,21 +0,0 @@ -controlling -send: selector to: rcvr with: arguments lookupIn: lookupClass - - | meth | - (meth := lookupClass lookupSelector: selector) ifNil: - [selector == #doesNotUnderstand: ifTrue: - [self error: 'Recursive message not understood!' translated]. - ^self send: #doesNotUnderstand: - to: rcvr - with: {(Message selector: selector arguments: arguments) lookupClass: lookupClass} - lookupIn: lookupClass]. - - currentReceiver := rcvr. - currentArguments := arguments. - currentRecord := recorder - recordSendMethod: meth - receiver: rcvr - arguments: arguments - context: self. - - ^ super send: selector to: rcvr with: arguments lookupIn: lookupClass \ No newline at end of file diff --git a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/methodProperties.json b/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/methodProperties.json deleted file mode 100644 index f9e9a90..0000000 --- a/packages/SimulationStudio-Tracing.package/SimulationMsrContext.class/methodProperties.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "class" : { - }, - "instance" : { - "initializeFrom:" : "ct 3/3/2021 21:11", - "push:" : "ct 3/3/2021 21:40", - "recorder" : "ct 3/3/2021 21:11", - "recorder:" : "ct 3/3/2021 21:11", - "send:to:with:lookupIn:" : "ct 3/3/2021 22:07" } } From fddeb9a999cb6602bdaacfe1a9bea51a5f0be824 Mon Sep 17 00:00:00 2001 From: Christoph Thiede Date: Sat, 13 Nov 2021 22:49:05 +0100 Subject: [PATCH 7/8] Add and test Sandbox2, a port of Sandbox for Simulator framework Sandbox v1 remains unchanged and is still fully functional as it is slightly faster. Sandbox2, on the other hand, can be combined with other simulators. Maybe the classical sandbox will be deprecated at some point in the future ... --- .../Sandbox.class/README.md | 8 +- ...treamSelectorsFor.arguments.thatAnswer..st | 2 +- .../Sandbox.class/instance/basicEvaluate..st | 6 +- .../Sandbox.class/methodProperties.json | 4 +- .../Sandbox.class/properties.json | 6 +- .../Sandbox2.class/README.md | 23 ++ .../class/benchmarkSandboxVsSandbox2.st | 18 ++ .../Sandbox2.class/class/debug..st | 9 + .../Sandbox2.class/class/evaluate..st | 9 + .../class/evaluate.ifFailed..st | 11 + .../Sandbox2.class/class/evaluate.on.do..st | 15 ++ .../findSelectorsFor.arguments.thatAnswer..st | 14 ++ .../Sandbox2.class/class/fromMemory..st | 4 + ...treamSelectorsFor.arguments.thatAnswer..st | 24 ++ .../instance/access.indirectors..st | 6 + .../Sandbox2.class/instance/addObject..st | 4 + .../Sandbox2.class/instance/basicEvaluate..st | 6 + .../context.activateOperationForbidden..st | 5 + .../instance/context.canBeImmutable..st | 13 ++ ...ontext.doNamedPrimitiveIn.for.withArgs..st | 50 +++++ ...xt.doPrimitive.method.receiver.args.do..st | 210 ++++++++++++++++++ .../context.doPrimitiveHash.receiver.args..st | 10 + .../context.doPrimitiveNew.receiver.args..st | 22 ++ ...PrimitiveSetImmutability.receiver.args..st | 16 ++ .../context.elements.exchangeIdentityWith..st | 11 + ...text.elements.forwardIdentityAndHashTo..st | 8 + .../context.elements.forwardIdentityTo..st | 8 + ...xt.elements.forwardIdentityTo.copyHash..st | 8 + ...ontext.popIntoRemoteTemp.inVectorAt.do..st | 9 + .../context.primitiveFailTokenFor..st | 4 + .../context.pushLiteralVariable.do..st | 7 + .../context.pushReceiverVariable.do..st | 7 + .../context.pushRemoteTemp.inVectorAt.do..st | 7 + ...text.runSimulated.contextAtEachStep.do..st | 9 + .../context.simulatedObject.basicAt..st | 6 + .../context.simulatedObject.basicAt.put..st | 7 + .../context.simulatedObject.instVarAt..st | 6 + ...ntext.simulatedObject.instVarAt.put.do..st | 9 + .../Sandbox2.class/instance/context.step..st | 6 + ...text.storeIntoRemoteTemp.inVectorAt.do..st | 9 + ...xt.tryNamedPrimitiveIn.for.withArgs.do..st | 5 + .../elements.exchangeIdentityWith..st | 8 + .../elements.forwardIdentityTo.copyHash..st | 10 + .../Sandbox2.class/instance/evaluate..st | 14 ++ .../instance/evaluate.ifFailed..st | 12 + .../instance/evaluate.on.do..st | 19 ++ .../Sandbox2.class/instance/exportMemory.st | 6 + .../Sandbox2.class/instance/hashFor..st | 6 + .../Sandbox2.class/instance/importMemory..st | 6 + .../Sandbox2.class/instance/initialize.st | 8 + .../instance/initializeContext..st | 9 + .../instance/operationForbidden..st | 7 + .../instance/patchObject.with..st | 4 + .../instance/readableObjectFor..st | 6 + .../Sandbox2.class/instance/registerStep.st | 7 + .../instance/shouldBeImplemented..st | 4 + .../instance/shouldNotImplement..st | 4 + .../Sandbox2.class/instance/stepCount.st | 4 + .../Sandbox2.class/instance/stepLimit..st | 5 + .../Sandbox2.class/instance/stepLimit.st | 5 + .../Sandbox2.class/instance/valueIndex.st | 4 + .../instance/writableObjectFor..st | 10 + .../Sandbox2.class/methodProperties.json | 59 +++++ .../Sandbox2.class/properties.json | 17 ++ .../Sandbox2KernelTest.class/README.md | 0 .../instance/sandboxClass.st | 4 + .../methodProperties.json | 5 + .../Sandbox2KernelTest.class/properties.json | 14 ++ .../Sandbox2Test.class/README.md | 0 .../instance/sandboxClass.st | 4 + .../Sandbox2Test.class/methodProperties.json | 5 + .../Sandbox2Test.class/properties.json | 14 ++ .../instance/basicPerformTest.on.do..st | 2 +- .../instance/sandboxClass.st | 4 + .../methodProperties.json | 3 +- .../instance/sandboxClass.st | 4 + .../SandboxTest.class/instance/testBitBlt.st | 2 +- .../instance/testCannotUsurpExecution.st | 2 +- .../instance/testFindSelectors.st | 2 +- .../instance/testIdentityHashConstant.st | 2 +- .../instance/testMemoryHashes.st | 4 +- .../instance/testMemoryObjects.st | 4 +- .../instance/testOperationForbidden.st | 2 +- .../instance/testRecursiveSandbox.st | 6 +- .../SandboxTest.class/instance/testSandbox.st | 2 +- .../instance/testSandbox2.st | 14 +- .../SandboxTest.class/methodProperties.json | 21 +- 87 files changed, 931 insertions(+), 44 deletions(-) create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/README.md create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/benchmarkSandboxVsSandbox2.st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/debug..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/evaluate..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/evaluate.ifFailed..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/evaluate.on.do..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/findSelectorsFor.arguments.thatAnswer..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/fromMemory..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/streamSelectorsFor.arguments.thatAnswer..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/access.indirectors..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/addObject..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/basicEvaluate..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.activateOperationForbidden..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.canBeImmutable..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doNamedPrimitiveIn.for.withArgs..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitive.method.receiver.args.do..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitiveHash.receiver.args..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitiveNew.receiver.args..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitiveSetImmutability.receiver.args..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.exchangeIdentityWith..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.forwardIdentityAndHashTo..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.forwardIdentityTo..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.forwardIdentityTo.copyHash..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.popIntoRemoteTemp.inVectorAt.do..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.primitiveFailTokenFor..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.pushLiteralVariable.do..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.pushReceiverVariable.do..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.pushRemoteTemp.inVectorAt.do..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.runSimulated.contextAtEachStep.do..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.basicAt..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.basicAt.put..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.instVarAt..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.instVarAt.put.do..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.step..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.storeIntoRemoteTemp.inVectorAt.do..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.tryNamedPrimitiveIn.for.withArgs.do..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/elements.exchangeIdentityWith..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/elements.forwardIdentityTo.copyHash..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/evaluate..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/evaluate.ifFailed..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/evaluate.on.do..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/exportMemory.st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/hashFor..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/importMemory..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/initialize.st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/initializeContext..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/operationForbidden..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/patchObject.with..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/readableObjectFor..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/registerStep.st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/shouldBeImplemented..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/shouldNotImplement..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/stepCount.st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/stepLimit..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/stepLimit.st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/valueIndex.st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/writableObjectFor..st create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/methodProperties.json create mode 100644 packages/SimulationStudio-Sandbox.package/Sandbox2.class/properties.json create mode 100644 packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/README.md create mode 100644 packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/instance/sandboxClass.st create mode 100644 packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/methodProperties.json create mode 100644 packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/properties.json create mode 100644 packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/README.md create mode 100644 packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/instance/sandboxClass.st create mode 100644 packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/methodProperties.json create mode 100644 packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/properties.json create mode 100644 packages/SimulationStudio-Tests-Sandbox.package/SandboxKernelTest.class/instance/sandboxClass.st create mode 100644 packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/sandboxClass.st diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox.class/README.md b/packages/SimulationStudio-Sandbox.package/Sandbox.class/README.md index 13eee70..7cf3e50 100644 --- a/packages/SimulationStudio-Sandbox.package/Sandbox.class/README.md +++ b/packages/SimulationStudio-Sandbox.package/Sandbox.class/README.md @@ -1,11 +1,17 @@ I provide an isolated environment to a stack of SandboxContexts. -Public API can be found in the class-side protocls 'evaluating' and 'support'. Examples: +Public API can be found in the class-side protocols 'evaluating' and 'support'. Examples: Sandbox evaluate: [World extent: 0 @ 0; bounds]. Sandbox debug: [World extent: 0 @ 0; bounds]. Sandbox evaluate: [1 / 0]. Sandbox evaluate: [1 / 0] ifFailed: [:ex | Transcript showln: ex description]. +--- +## VERSIONING NOTE + +This class is a legacy implementation of the new Sandbox2 simulator class. See class comment of Sandbox2. My only advantage is that I am ~10 % faster, but my design in inferior to Sandbox2, so I might be deprecated at some point in the future. +--- + # Instance Variables (internal) ## objects diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox.class/class/streamSelectorsFor.arguments.thatAnswer..st b/packages/SimulationStudio-Sandbox.package/Sandbox.class/class/streamSelectorsFor.arguments.thatAnswer..st index 80c2e5c..942a9ca 100644 --- a/packages/SimulationStudio-Sandbox.package/Sandbox.class/class/streamSelectorsFor.arguments.thatAnswer..st +++ b/packages/SimulationStudio-Sandbox.package/Sandbox.class/class/streamSelectorsFor.arguments.thatAnswer..st @@ -11,7 +11,7 @@ streamSelectorsFor: receiver arguments: arguments thatAnswer: expectedResult ^ Generator on: [:generator | selectors do: [:sel | | match sandbox | - sandbox := Sandbox new. + sandbox := self new. sandbox stepLimit: 100000. match := [sandbox evaluate: [ diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox.class/instance/basicEvaluate..st b/packages/SimulationStudio-Sandbox.package/Sandbox.class/instance/basicEvaluate..st index 9c87011..cf66dff 100644 --- a/packages/SimulationStudio-Sandbox.package/Sandbox.class/instance/basicEvaluate..st +++ b/packages/SimulationStudio-Sandbox.package/Sandbox.class/instance/basicEvaluate..st @@ -1,11 +1,7 @@ evaluating basicEvaluate: aBlock "Evaluate aBlock in a the receiver, isolating it from the rest of the image, and answer the result as it is seen from the global perspective. - PRIVATE! Does not care about any exceptions that are signaled during the simulation, causing them to be handled still inside the sandbox, even if an exception handler has been defined outside of the sandbox stack. Depending on the configuration of the sandbox and your image, this can mean that even the eventual pop-up of the debugger will be simulated and thus invisible to you! Usually, it is a better idea to use the public #evaluate: protocol instead. - - Example: - Sandbox evaluate: [World extent: 0 @ 0; bounds]. - " + PRIVATE! Does not care about any exceptions that are signaled during the simulation, causing them to be handled still inside the sandbox, even if an exception handler has been defined outside of the sandbox stack. Depending on the configuration of the sandbox and your image, this can mean that even the eventual pop-up of the debugger will be simulated and thus invisible to you! Usually, it is a better idea to use the public #evaluate: protocol instead." ^ (SandboxContext newFrom: thisContext) sandbox: self; diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox.class/methodProperties.json b/packages/SimulationStudio-Sandbox.package/Sandbox.class/methodProperties.json index 1f0eeca..721aba3 100644 --- a/packages/SimulationStudio-Sandbox.package/Sandbox.class/methodProperties.json +++ b/packages/SimulationStudio-Sandbox.package/Sandbox.class/methodProperties.json @@ -6,10 +6,10 @@ "evaluate:on:do:" : "ct 3/6/2021 13:12", "findSelectorsFor:arguments:thatAnswer:" : "ct 3/15/2021 12:45", "fromMemory:" : "ct 3/6/2021 01:39", - "streamSelectorsFor:arguments:thatAnswer:" : "ct 3/15/2021 12:43" }, + "streamSelectorsFor:arguments:thatAnswer:" : "ct 11/13/2021 16:11" }, "instance" : { "addObject:" : "ct 3/22/2021 17:51", - "basicEvaluate:" : "ct 3/6/2021 13:12", + "basicEvaluate:" : "ct 11/13/2021 16:12", "debug:" : "ct 3/5/2021 21:25", "elements:exchangeIdentityWith:" : "ct 1/10/2021 21:03", "elements:forwardIdentityTo:copyHash:" : "ct 3/4/2021 20:19", diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox.class/properties.json b/packages/SimulationStudio-Sandbox.package/Sandbox.class/properties.json index 9158512..57c2873 100644 --- a/packages/SimulationStudio-Sandbox.package/Sandbox.class/properties.json +++ b/packages/SimulationStudio-Sandbox.package/Sandbox.class/properties.json @@ -4,11 +4,11 @@ ], "classvars" : [ ], - "commentStamp" : "ct 3/5/2021 23:26", + "commentStamp" : "ct 11/13/2021 16:22", "instvars" : [ - "objects", - "stepCount", "stepLimit", + "stepCount", + "objects", "hashes" ], "name" : "Sandbox", "pools" : [ diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/README.md b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/README.md new file mode 100644 index 0000000..4f17e7c --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/README.md @@ -0,0 +1,23 @@ +I execute code a sandbox environment aiming, to isolate all side effects and keeping them apart from the rest of the image. + +--- +## VERSIONING NOTE + +This class is a successor implementation of the old Sandbox which needed a special SandboxContext to operate. This class (Sandbox2) is a Simulator subclass instead and can be chained with different simulators on demand. However, this comes with a performance overhead of ~10 %, so make your choice ... The classical sandbox might be deprecated at some point in the future. +--- + +Public API can be found in the class-side protocols 'evaluating' and 'support'. Examples: + Sandbox2 evaluate: [World extent: 0 @ 0; bounds]. + Sandbox2 debug: [World extent: 0 @ 0; bounds]. + Sandbox2 evaluate: [1 / 0]. + Sandbox2 evaluate: [1 / 0] ifFailed: [:ex | Transcript showln: ex description]. + +# Instance Variables (internal) + +## objects + +A WeakIdentityKeyDictionary that maps real objects to copies of them that have been modified by the simulated code. Entries where key and value are the same represent objects that are possessed by the simulated code. + +## hashes + +A WeakIdentityKeyDictionary that maps real objects to other real objects whose identity have been exchanged. See #elements:forwardIdentityTo:copyHash:. \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/benchmarkSandboxVsSandbox2.st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/benchmarkSandboxVsSandbox2.st new file mode 100644 index 0000000..40f4de8 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/benchmarkSandboxVsSandbox2.st @@ -0,0 +1,18 @@ +benchmarks +benchmarkSandboxVsSandbox2 + " + self benchmarkSandboxVsSandbox2 explore + " + + | workloads | + workloads := OrderedDictionary new + at: #factorial put: [100 factorial]; + at: #regex put: ['\w+' asRegex]; + yourself. + + ^ workloads collect: [:workload | + {Sandbox. Sandbox2} + collect: [:sandbox | sandbox -> + (BenchmarkSimulator record: + [sandbox evaluate: workload])] + as: Dictionary] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/debug..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/debug..st new file mode 100644 index 0000000..f8c3c67 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/debug..st @@ -0,0 +1,9 @@ +support +debug: aBlock + "Spawn a new debugger to evaluate aBlock in a new sandbox instance, isolating it from the rest of the image. Debugging convenience may be limited. + + Example: + Sandbox2 debug: [World extent: 0 @ 0; bounds]. + " + + ^ super debug: aBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/evaluate..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/evaluate..st new file mode 100644 index 0000000..581a9fa --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/evaluate..st @@ -0,0 +1,9 @@ +evaluating +evaluate: aBlock + "Evaluate aBlock in a new sandbox instance and answer the result, isolating it from the rest of the image. + + Example: + Sandbox2 evaluate: [World extent: 0 @ 0; bounds]. + " + + ^ super evaluate: aBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/evaluate.ifFailed..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/evaluate.ifFailed..st new file mode 100644 index 0000000..edd0f61 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/evaluate.ifFailed..st @@ -0,0 +1,11 @@ +evaluating +evaluate: aBlock ifFailed: failBlock + "Evaluate aBlock in a new sandbox instance and answer the result, isolating it from the rest of the image. If aBlock signals a failure, evaluate failBlock with that failure. + + Example: + Sandbox2 evaluate: [1 / 0] ifFailed: [:ex | Transcript showln: ex description]. + " + + ^ self new + evaluate: aBlock + ifFailed: failBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/evaluate.on.do..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/evaluate.on.do..st new file mode 100644 index 0000000..6157ba4 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/evaluate.on.do..st @@ -0,0 +1,15 @@ +evaluating +evaluate: aBlock on: exceptionHandler do: exceptionBlock + "Evaluate aBlock in a new sandbox instance and answer the result, isolating it from the rest of the image. If aBlock signals an exception that can handled by the exceptionHandler, evaluate exceptionBlock with it. NOTE: Unhandled errors raised by aBlock will bubble up along the sender stack, but still, all handling is simulated in the sandbox until the exception will have been resumed. Depending on the configuration of the sandbox and your image, this can mean that even the eventual pop-up of the debugger will be simulated and thus invisible to you! Thus make sure to pass all relevant exceptions with this message. + + Example: + Sandbox2 evaluate: [1 / 0] on: ZeroDivide do: [:ex | Transcript showln: ex description]. + + ""Use with CAUTION and check your image via the ProcessBrowser afterwards"" + Sandbox evaluate: [self halt] on: ZeroDivide do: [:ex | Transcript showln: ex description]. + " + + ^ self new + evaluate: aBlock + on: exceptionHandler + do: exceptionBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/findSelectorsFor.arguments.thatAnswer..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/findSelectorsFor.arguments.thatAnswer..st new file mode 100644 index 0000000..927b521 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/findSelectorsFor.arguments.thatAnswer..st @@ -0,0 +1,14 @@ +examples +findSelectorsFor: receiver arguments: arguments thatAnswer: expectedResult + "Answer all selectors that can be performed by the given receiver with the given arguments to return the expected result. Lightweight alternative for MethodFinder." + " + Sandbox2 findSelectorsFor: {1. 2. 3. 4} arguments: {[:x | x asWords] ascending} thatAnswer: {4. 1. 3. 2}. + Sandbox2 findSelectorsFor: Sandbox arguments: {[2 + 3]} thatAnswer: 5. + (Sandbox2 streamSelectorsFor: [self error: 'foo'] arguments: {[:x | x]} thatAnswer: 'Error: foo') next. + " + + ^ (self + streamSelectorsFor: receiver + arguments: arguments + thatAnswer: expectedResult) + contents as: Set \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/fromMemory..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/fromMemory..st new file mode 100644 index 0000000..f8eead8 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/fromMemory..st @@ -0,0 +1,4 @@ +instance creation +fromMemory: memory + + ^ self new importMemory: memory \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/streamSelectorsFor.arguments.thatAnswer..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/streamSelectorsFor.arguments.thatAnswer..st new file mode 100644 index 0000000..b55a0d4 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/class/streamSelectorsFor.arguments.thatAnswer..st @@ -0,0 +1,24 @@ +examples +streamSelectorsFor: receiver arguments: arguments thatAnswer: expectedResult + "Answer a generator to stream all selectors that can be performed by the given receiver with the given arguments to return the expected result. Lightweight alternative for MethodFinder." + " + (Sandbox2 streamSelectorsFor: [self error: 'foo'] arguments: {[:x | x]} thatAnswer: 'Error: foo') next. + " + + | selectors | + selectors := receiver class allSelectors select: [:sel | sel numArgs = arguments size]. + + ^ Generator on: [:generator | + selectors do: [:sel | + | match sandbox | + sandbox := self new. + sandbox stepLimit: 100000. + match := [sandbox + evaluate: [ + | result | + result := (receiver perform: sel withArguments: arguments). + result = expectedResult] + ifFailed: [false]] + on: Error, Warning + do: [false]. + match ifTrue: [generator nextPut: sel] ] ] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/access.indirectors..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/access.indirectors..st new file mode 100644 index 0000000..ad9e7f4 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/access.indirectors..st @@ -0,0 +1,6 @@ +private +access: objects indirectors: indirectors + + ^ objects with: indirectors collect: [:object :indirector | + indirector ifNil: [object] ifNotNil: [ + indirector value: self value: object]] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/addObject..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/addObject..st new file mode 100644 index 0000000..56cc563 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/addObject..st @@ -0,0 +1,4 @@ +private +addObject: anObject + + ^ objects at: anObject put: anObject \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/basicEvaluate..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/basicEvaluate..st new file mode 100644 index 0000000..fd6a892 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/basicEvaluate..st @@ -0,0 +1,6 @@ +evaluating +basicEvaluate: aBlock + "Evaluate aBlock in a the receiver, isolating it from the rest of the image, and answer the result as it is seen from the global perspective. + PRIVATE! Does not care about any exceptions that are signaled during the simulation, causing them to be handled still inside the sandbox, even if an exception handler has been defined outside of the sandbox stack. Depending on the configuration of the sandbox and your image, this can mean that even the eventual pop-up of the debugger will be simulated and thus invisible to you! Usually, it is a better idea to use the public #evaluate: protocol instead." + + ^ super evaluate: aBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.activateOperationForbidden..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.activateOperationForbidden..st new file mode 100644 index 0000000..d2291f5 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.activateOperationForbidden..st @@ -0,0 +1,5 @@ +controlling +context: aContext activateOperationForbidden: messageText + + self flag: #todo. "Raise SandboxError here if configured" + ^ aContext send: #operationForbidden: to: self with: {messageText} \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.canBeImmutable..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.canBeImmutable..st new file mode 100644 index 0000000..e2fa514 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.canBeImmutable..st @@ -0,0 +1,13 @@ +private - object access +context: aContext canBeImmutable: anObject + "See InterpreterPrimitives>>canBeImmutable:." + + | class processor | + class := aContext objectClass: anObject. + + class isEphemeronClass ifTrue: [^ false]. + class isWeak ifTrue: [^ false]. + ({Context. LinkedList. Process. Semaphore} includes: class) ifTrue: [^ false]. + ({processor := self readableObjectFor: Processor. self readableObjectFor: (processor instVarAt: 1 "quiescentProcessLists")} includes: anObject) ifTrue: [^ false]. + + ^ true \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doNamedPrimitiveIn.for.withArgs..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doNamedPrimitiveIn.for.withArgs..st new file mode 100644 index 0000000..9d12296 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doNamedPrimitiveIn.for.withArgs..st @@ -0,0 +1,50 @@ +controlling +context: aContext doNamedPrimitiveIn: aCompiledMethod for: rcvr withArgs: arguments + + | literal primitiveName accessIndirectors directRcvrAndArgs value | + literal := aCompiledMethod literalAt: 1. + primitiveName := literal second. + + accessIndirectors := Array new: arguments size + 1 "withAll: nil". + literal first + caseOf: { + [#B2DPlugin] -> [ + ((aContext objectClass: rcvr) includesBehavior: BalloonEngine) + ifTrue: ["allowed"] + ifFalse: [ + (primitiveName = #primitiveSetBitBltPlugin and: [arguments = #('BitBltPlugin')]) + ifTrue: ["This primitive appears to be an assertion only." + ^ aContext push: rcvr]. + ^ self context: aContext activateOperationForbidden: ('Global B2D primitive {1} not available in simulation' format: {primitiveName})]. + accessIndirectors at: 1 put: #writableObjectFor:]. + [#BitBltPlugin] -> ["allowed" + accessIndirectors at: 1 put: [:sandbox :object | | writableObject | + writableObject := sandbox writableObjectFor: object. + ((aContext objectClass: writableObject) includesBehavior: BitBlt) ifTrue: [ | destForm | + "Any BitBlt primitive modifies destForm. Thus always sandbox it and its bits. See Form >> #postCopy." + destForm := aContext object: writableObject instVarAt: 1 put: + (sandbox writableObjectFor: (aContext object: writableObject instVarAt: 1)). + aContext object: destForm instVarAt: 1 "bits" put: + (sandbox writableObjectFor: (aContext object: destForm instVarAt: 1))]. + writableObject]]. + [#FilePlugin] -> [^ self context: aContext activateOperationForbidden: 'FilePlugin not available in simulation']. + [#LargeIntegers] -> ["allowed"]. + [#MiscPrimitivePlugin] -> [^ self context: aContext primitiveFailTokenFor: nil "use image implementation"]. + [#SimulationStudio] -> ["allowed"]. + [nil] -> [ + (#('primitiveHighResClock' 'primitiveUtcWithOffset' 'primitiveUtcWithOffset') includes: primitiveName) + ifTrue: ["allowed"] + ifFalse: [^ self context: aContext activateOperationForbidden: ('Unknown primitive {1} not available in simulation' format: {primitiveName})]] } + otherwise: [":pluginName |" ^ self context: aContext activateOperationForbidden: ('Unknown plugin {1} not available in simulation' format: {literal first})]. + + directRcvrAndArgs := self + access: (arguments copyWithFirst: rcvr) + indirectors: accessIndirectors. + value := aContext + flag: #horrible; "design issue: We cannot enter a different chain of responsibility at a custom place. What shall we do now? Manual recursion detection? Super hooks on SimulatorContext? Despair???" + perform: #tryNamedPrimitiveIn:for:withArgs: + withArguments: {aCompiledMethod. directRcvrAndArgs first. directRcvrAndArgs allButFirst} + inSuperclass: SimulationContext. + ^ (aContext isPrimFailToken: value) + ifTrue: [value] + ifFalse: [aContext push: value] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitive.method.receiver.args.do..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitive.method.receiver.args.do..st new file mode 100644 index 0000000..c27b065 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitive.method.receiver.args.do..st @@ -0,0 +1,210 @@ +controlling +context: aContext doPrimitive: primitiveIndex method: aCompiledMethod receiver: receiver args: arguments do: aBlock + + | accessIndirectors selector directRcvrAndArgs | + self flag: #refactor. "Maybe use a generated array of blocks/symbols instead? Could also be faster." + + accessIndirectors := Array new: arguments size + 1 "withAll: nil". + primitiveIndex + caseOf: { + [18 "primitiveMakePoint"] -> [ + accessIndirectors at: 1 put: #readableObjectFor:. + selector := #context:doPrimitiveNew:receiver:args:]. + [38 "primitiveFloatAt"] -> [accessIndirectors at: 1 put: #readableObjectFor:]. + [39 "primitiveFloatAtPut"] -> [accessIndirectors at: 1 put: #writableObjectFor:]. + [40 "primitiveAsFloat"] -> [ + accessIndirectors at: 1 put: #readableObjectFor:. + selector := #context:doPrimitiveNew:receiver:args:]. + [60 "primitiveAt"] -> [accessIndirectors atLast: 2 put: #readableObjectFor:]. + [61 "primitiveAtPut"] -> [accessIndirectors atLast: 3 put: #writableObjectFor:]. + [62 "primitiveSize"] -> [accessIndirectors atLast: 1 put: #readableObjectFor:]. + [63 "primitiveStringAt"] -> [accessIndirectors at: 1 put: #readableObjectFor:]. + [64 "primitiveStringAtPut"] -> [accessIndirectors at: 1 put: #writableObjectFor:]. + [68 "primitiveObjectAt"] -> [accessIndirectors at: 1 put: #readableObjectFor:]. + [69 "primitiveObjectAtPut"] -> [accessIndirectors at: 1 put: #writableObjectFor:]. + [70 "primitiveNew"] -> [ + selector := #context:doPrimitiveNew:receiver:args:. + accessIndirectors at: 1 put: #readableObjectFor:]. + [71 "primitiveNewWithArg"] -> [ + selector := #context:doPrimitiveNew:receiver:args:. + accessIndirectors at: 1 put: #readableObjectFor:]. + [72 "primitiveArrayBecomeOneWay"] -> [ + ^ self context: aContext elements: receiver forwardIdentityAndHashTo: arguments first]. + [73 "primitiveInstVarAt"] -> [accessIndirectors at: 1 put: #readableObjectFor:]. + [74 "primitiveInstVarAtPut"] -> [accessIndirectors at: 1 put: #writableObjectFor:]. + [75 "primitiveIdentityHash"] -> [selector := #context:doPrimitiveHash:receiver:args:]. + [76 "primitiveStoreStackp"] -> [accessIndirectors at: 1 put: #writableObjectFor:]. + [77 "primitiveSomeInstance"] -> ["allowed"]. + [78 "primitiveNextInstance"] -> ["allowed"]. + [79 "primitiveNewMethod"] -> [ + selector := #context:doPrimitiveNew:receiver:args:. + accessIndirectors at: 1 put: #readableObjectFor:]. + [85 "primitiveSignal"] -> [accessIndirectors at: 1 put: #writableObjectFor: "External processes will not be signaled"]. + [86 "primitiveWait"] -> [accessIndirectors at: 1 put: #writableObjectFor:]. + [87 "primitiveResume"] -> [^ self context: aContext activateOperationForbidden: 'Control primitives are disabled in sandbox simulation']. + [88 "primitiveSuspend"] -> [^ self context: aContext activateOperationForbidden: 'Control primitives are disabled in sandbox simulation']. + [89 "primitiveFlushCache"] -> [self flag: #shouldBeImplemented]. + [92 "primitiveSetDisplayMode"] -> [^ self context: aContext activateOperationForbidden: 'primitiveSetDisplayMode is disabled in sandbox simulation']. + [93 "primitiveInputSemaphore"] -> [^ self context: aContext activateOperationForbidden: 'primitiveInputSemaphore is disabled in sandbox simulation']. + [94 "primitiveGetNextEvent"] -> [^ self context: aContext activateOperationForbidden: 'primitiveGetNextEvent is disabled in sandbox simulation']. + [95 "primitiveInputWord"] -> [^ self context: aContext activateOperationForbidden: 'primitiveInputWord is disabled in sandbox simulation']. + [97 "primitiveSnapshot"] -> [^ self context: aContext activateOperationForbidden: 'primitiveSnapshot is disabled in sandbox simulation']. + [98 "primitiveStoreImageSegment"] -> [^ self context: aContext activateOperationForbidden: 'Image segment primitives are disabled in sandbox simulation']. + [99 "primitiveLoadImageSegment"] -> [^ self context: aContext activateOperationForbidden: 'Image segment primitives are disabled in sandbox simulation']. + [101 "primitiveBeCursor"] -> [^ self context: aContext activateOperationForbidden: 'primitiveBeCursor is disabled in sandbox simulation']. + [102 "primitiveBeDisplay"] -> [^ self context: aContext activateOperationForbidden: 'primitiveBeDisplay is disabled in sandbox simulation']. + [103 "primitiveScanCharacters"] -> [accessIndirectors at: 1 put: #writableObjectFor:]. + [105 "primitiveStringReplace"] -> [^ self context: aContext primitiveFailTokenFor: nil "use image implementation"]. + [106 "primitiveScreenSize"] -> ["allowed"]. + [107 "primitiveMouseButtons"] -> ["allowed"]. + [108 "primitiveKbdNext"] -> [^ self context: aContext activateOperationForbidden: 'primitiveKbdNext is disabled in sandbox simulation']. + [109 "primitiveKbdPeek"] -> ["allowed"]. + [110 "primitiveIdentical"] -> [accessIndirectors + atLast: 2 put: #readableObjectFor:; + atLast: 1 put: #readableObjectFor:]. + [111 "primitiveClass"] -> [accessIndirectors atLast: 1 put: #readableObjectFor:]. + [112 "primitiveBytesLeft"] -> ["allowed"]. + [113 "primitiveQuit"] -> [^ self context: aContext activateOperationForbidden: 'primitiveQuit is disabled in sandbox simulation']. + [114 "primitiveExitToDebugger"] -> [ + self flag: #todo. "Should be moved up to Context" + self halt: 'primitiveExitToDebugger'. + ^ aContext push: receiver]. + [115 "primitiveChangeClass"] -> [accessIndirectors + at: 1 put: #writableObjectFor:; + at: 2 put: #readableObjectFor:]. + [116 "primitiveFlushCacheByMethod"] -> [ + self flag: #shouldBeImplemented. "This has not been tested. See primitiveFlushCache." + accessIndirectors at: 1 put: #writableObjectFor:]. + [117 "primitiveExternalCall"] -> [^ self context: aContext doNamedPrimitiveIn: aCompiledMethod for: receiver withArgs: arguments]. + [119 "primitiveFlushCacheBySelector"] -> [ + self flag: #shouldBeImplemented. "This has not been tested. See primitiveFlushCache." + accessIndirectors at: 1 put: #writableObjectFor:]. + [120 "primitiveCalloutToFFI"] -> [^ self context: aContext doNamedPrimitiveIn: aCompiledMethod for: receiver withArgs: arguments]. + [121 "primitiveImageName"] -> [^ self context: aContext activateOperationForbidden: 'primitiveImageName is disabled in sandbox simulation']. + [124 "primitiveLowSpaceSemaphore"] -> [^ self context: aContext activateOperationForbidden: 'primitiveLowSpaceSemaphore is disabled in sandbox simulation']. + [125 "primitiveSignalAtBytesLeft"] -> [^ self context: aContext activateOperationForbidden: 'primitiveSignalAtBytesLeft is disabled in sandbox simulation']. + + [126 "primitiveDeferDisplayUpdates"] -> [^ self context: aContext primitiveFailTokenFor: nil "use image implementation"]. + [127 "primitiveShowDisplayRect"] -> [^ self context: aContext activateOperationForbidden: 'primitiveShowDisplayRect is disabled in sandbox simulation']. + [128 "primitiveArrayBecome"] -> [^ self context: aContext elements: receiver exchangeIdentityWith: arguments first]. + [129 "primitiveSpecialObjectsOop"] -> ["allowed" self flag: #todo "This object is shared with the VM! Forbid manipulation - even when accessed without the primitive"]. + [130 "primitiveFullGC"] -> [^ self context: aContext activateOperationForbidden: 'GC primitives are disabled in sandbox simulation']. + [131 "primitiveIncrementalGC"] -> [^ self context: aContext activateOperationForbidden: 'GC primitives are disabled in sandbox simulation']. + [132 "primitiveObjectPointsTo"] -> [^ self context: aContext primitiveFailTokenFor: nil "use image implementation"]. + [133 "primitiveSetInterruptKey"] -> [^ self context: aContext activateOperationForbidden: 'primitiveSetInterruptKey is disabled in sandbox simulation']. + [134 "primitiveInterruptSemaphore"] -> [^ self context: aContext activateOperationForbidden: 'primitiveInterruptSemaphore is disabled in sandbox simulation']. + [136 "primitiveSignalAtMilliseconds"] -> [^ self context: aContext activateOperationForbidden: 'primitiveSignalAtMilliseconds is disabled in sandbox simulation']. + [138 "primitiveSomeObject"] -> ["allowed"]. + [139 "primitiveNextObject"] -> ["allowed"]. + [140 "primitiveBeep"] -> [^ self context: aContext activateOperationForbidden: 'primitiveBeep is disabled in sandbox simulation']. + [141 "primitiveClipboardText"] -> [^ self context: aContext activateOperationForbidden: 'primitiveClipboardText is disabled in sandbox simulation']. + [142 "primitiveVMPath"] -> ["allowed"]. + [143 "primitiveShortAt"] -> [accessIndirectors at: 1 put: #readableObjectFor:]. + [144 "primitiveShortAtPut"] -> [accessIndirectors at: 1 put: #writableObjectFor:]. + [145 "primitiveConstantFill"] -> [accessIndirectors at: 1 put: #writableObjectFor:]. + [148 "primitiveClone"] -> [ + selector := #context:doPrimitiveNew:receiver:args:. + accessIndirectors at: 1 put: #readableObjectFor:]. + [149 "primitiveGetAttribute"] -> ["allowed"]. + [158 "primitiveCompareWith"] -> [^ self context: aContext primitiveFailTokenFor: nil "use image implementation"]. + [160 "primitiveAdoptInstance"] -> [accessIndirectors + at: 1 put: #readableObjectFor:; + at: 2 put: #writableObjectFor:]. + [161 "primitiveSetOrHasIdentityHash"] -> [self shouldBeImplemented: 'primitiveSetOrHasIdentityHash']. + [163 "primitiveGetImmutability"] -> [accessIndirectors at: 1 put: #readableObjectFor:]. + [164 "primitiveSetImmutability"] -> [selector := #context:doPrimitiveSetImmutability:receiver:args:]. + [165 "primitiveIntegerAt"] -> [accessIndirectors at: 1 put: #readableObjectFor:]. + [166 "primitiveIntegerAtPut"] -> [accessIndirectors at: 1 put: #writableObjectFor:]. + [167 "primitiveYield"] -> [^ self context: aContext activateOperationForbidden: 'Control primitives are disabled in sandbox simulation']. + [168 "primitiveCopyObject"] -> [^ self context: aContext primitiveFailTokenFor: nil "use image implementation"]. + [169 "primitiveNotIdentical"] -> [accessIndirectors + at: 1 put: #readableObjectFor:; + at: 2 put: #readableObjectFor:]. + [170 "primitiveAsCharacter"] -> [ + accessIndirectors at: 1 put: #readableObjectFor:. + selector := #context:doPrimitiveNew:receiver:args:]. + [171 "primitiveImmediateAsInteger"] -> [ + accessIndirectors at: 1 put: #readableObjectFor:. + selector := #context:doPrimitiveNew:receiver:args:]. + [172 "primitiveFetchNextMourner"] -> [self flag: #reconsider]. + [173 "primitiveSlotAt"] -> [accessIndirectors atLast: 2 put: #readableObjectFor:]. + [174 "primitiveSlotAtPut"] -> [accessIndirectors atLast: 3 put: #writableObjectFor:]. + [175 "primitiveBehaviorHash"] -> [#doPrimitiveHash:receiver:args:]. + [176 "primitiveMaxIdentityHash"] -> ["allowed"]. + [177 "primitiveAllInstances"] -> ["allowed"]. + [178 "primitiveAllObjects"] -> ["allowed"]. + [180 "primitiveGrowMemoryByAtLeast"] -> [^ self context: aContext activateOperationForbidden: 'primitiveGrowMemoryByAtLeast is disabled in sandbox simulation']. + [181 "primitiveSizeInBytesOfInstance"] -> [ + self flag: #shouldBeImplemented. + ^ self activateOperationForbidden: 'primitiveSizeInBytesOfInstance is disabled in sandbox simulation']. + [182 "primitiveSizeInBytes"] -> [ + self flag: #shouldBeImplemented. + ^ self activateOperationForbidden: 'primitiveSizeInBytesOfInstance is disabled in sandbox simulation']. + [183 "primitiveIsPinned"] -> [^ self context: aContext activateOperationForbidden: 'Pinning primitives are disabled in sandbox simulation']. + [184 "primitivePin"] -> [ + self flag: #forLater. "We could simulate that, too. Maybe interesting for TelegramSmalltalkSession?" + ^ self activateOperationForbidden: 'Pinning primitives are disabled in sandbox simulation']. + [185 "primitiveExitCriticalSection"] -> [^ self context: aContext activateOperationForbidden: 'Critical section primitives are disabled in sandbox simulation']. + [186 "primitiveEnterCriticalSection"] -> [^ self context: aContext activateOperationForbidden: 'Critical section primitives are disabled in sandbox simulation']. + [187 "primitiveTestAndSetOwnershipOfCriticalSection"] -> [^ self context: aContext activateOperationForbidden: 'Critical section primitives are disabled in sandbox simulation']. + [195 "primitiveFindNextUnwindContext"] -> [ + "Note: Usually, this primitive will not be called for thisContext during simulation. However, if that's what the client is after, don't fall for it but use the image implementation." + ^ self context: aContext primitiveFailTokenFor: nil]. + [196 "primitiveTerminateTo"] -> [ + "Note: Usually, this primitive will not be called for thisContext during simulation. However, if that's what the client is after, don't fall for it but use the image implementation." + ^ self context: aContext primitiveFailTokenFor: nil]. + [197 "primitiveFindHandlerContext"] -> [ + "Note: Usually, this primitive will not be called for thisContext during simulation. However, if that's what the client is after, don't fall for it but use the image implementation." + ^ self context: aContext primitiveFailTokenFor: nil]. + [210 "primitiveContextAt"] -> [accessIndirectors at: 1 put: #readableObjectFor:]. + [211 "primitiveContextAtPut"] -> [accessIndirectors at: 1 put: #writableObjectFor:]. + [212 "primitiveContextSize"] -> [accessIndirectors at: 1 put: #readableObjectFor:]. + [213 "primitiveContextXray"] -> [self shouldBeImplemented: 'primitiveContextXray']. + [214 "primitiveVoidVMState"] -> [self shouldBeImplemented: 'primitiveVoidVMState']. + [215 "primitiveFlushCacheByMethod"] -> [ + self flag: #shouldBeImplemented. "This has not been tested. See primitiveFlushCache." + accessIndirectors at: 1 put: #writableObjectFor:]. + [230 "primitiveRelinquishProcessor"] -> [^ self context: aContext primitiveFailTokenFor: nil "optional primitive, just skip it"]. + [231 "primitiveForceDisplayUpdate"] -> [^ self context: aContext primitiveFailTokenFor: nil "use image implementation"]. + [232 "primitiveFormPrint"] -> [^ self context: aContext primitiveFailTokenFor: nil "don't support"]. + [233 "primitiveSetFullScreen"] -> [^ self context: aContext activateOperationForbidden: 'primitiveSetFullScreen is disabled in sandbox simulation']. + [238] -> [self isThisEverCalled: 'serial port primitive?']. + [239] -> [self isThisEverCalled: 'serial port primitive?']. + [242 "primitiveSignalAtUTCMicroseconds"] -> [^ self context: aContext activateOperationForbidden: 'primitiveSignalAtMilliseconds is disabled in sandbox simulation']. + [243 "primitiveUpdateTimezone"] -> [^ self context: aContext primitiveFailTokenFor: nil "don't support"]. + [247 "primitiveSnapshotEmbedded"] -> [^ self context: aContext activateOperationForbidden: 'primitiveSnapshotEmbedded is disabled in sandbox simulation']. + [248 "primitiveArrayBecomeOneWayNoCopyHash"] -> [ + ^ self context: aContext elements: receiver forwardIdentityTo: arguments first]. + [249 "primitiveArrayBecomeOneWayCopyHash"] -> [ + ^ self context: aContext elements: receiver forwardIdentityTo: arguments first copyHash: arguments second]. + [570 "primitiveFlushExternalPrimitives"] -> [^ self context: aContext activateOperationForbidden: 'primitiveFlushExternalPrimitives is disabled in sandbox simulation']. + [571 "primitiveUnloadModule"] -> [^ self context: aContext activateOperationForbidden: 'primitiveUnloadModule is disabled in sandbox simulation']. + [572 "primitiveListBuiltinModule"] -> ["allowed"]. + [573 "primitiveListExternalModule"] -> ["allowed"]. + } + otherwise: [ + (primitiveIndex >= 250 and: [primitiveIndex <= 254]) "VM implementor primitives" + ifTrue: [^ self context: aContext activateOperationForbidden: 'VM implementor primitives are disabled in sandbox simulation']. + (primitiveIndex >= 264 and: [primitiveIndex <= 519]) "primitiveLoadInstVar" + ifTrue: [accessIndirectors at: 1 put: #readableObjectFor:]]. + + self flag: #forLater. "Rethink several restrictions, e.g. instance enumeration, process signaling etc. Can we simulate sum of them?" + + directRcvrAndArgs := self + access: (arguments copyWithFirst: receiver) + indirectors: accessIndirectors. + selector ifNotNil: [ + ^ self + perform: selector + with: aContext + with: primitiveIndex + with: directRcvrAndArgs first + with: directRcvrAndArgs allButFirst]. + + ^ super + context: aContext + doPrimitive: primitiveIndex + method: aCompiledMethod + receiver: directRcvrAndArgs first + args: directRcvrAndArgs allButFirst + do: aBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitiveHash.receiver.args..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitiveHash.receiver.args..st new file mode 100644 index 0000000..08afaab --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitiveHash.receiver.args..st @@ -0,0 +1,10 @@ +controlling +context: aContext doPrimitiveHash: primitiveIndex receiver: rcvr args: arguments + + | result | + result := (self hashFor: rcvr) + tryPrimitive: primitiveIndex + withArgs: arguments. + ^ (aContext isPrimFailToken: result) + ifTrue: [result] + ifFalse: [aContext push: result] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitiveNew.receiver.args..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitiveNew.receiver.args..st new file mode 100644 index 0000000..fc880e6 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitiveNew.receiver.args..st @@ -0,0 +1,22 @@ +controlling +context: aContext doPrimitiveNew: primitiveIndex receiver: rcvr args: arguments + + | result class | + result := (self readableObjectFor: rcvr) + tryPrimitive: primitiveIndex withArgs: arguments. + + "Special treatment for Metaclass instances and their instances. Metaclass instance instances are initialized correctly by them VM only if the following order of operations has been ensured: + 0. aMetaclass := Metaclass primitiveNew. + 1. aMetaclass(Behavior) initialize + 2. aMetaclass primitiveBehaviorHash. + n. aMetaclassInstance := metaclassInstance primitiveNew. + n+1. aMetaclassInstance primitiveClass. + Violations to this order can cause the VM to crash! Since Sandbox objects calls primitiveBehaviorHash, we guarantee the right order here." + ((class := aContext objectClass: result) == Metaclass or: [(aContext objectClass: class) == Metaclass]) + ifTrue: [ + result perform: #initialize withArguments: #() inSuperclass: Behavior. + self flag: #todo. "Should we add result members to sandbox here?"]. + + ^ (aContext isPrimFailToken: result) + ifTrue: [result] + ifFalse: [aContext push: (self addObject: result)] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitiveSetImmutability.receiver.args..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitiveSetImmutability.receiver.args..st new file mode 100644 index 0000000..d4cb79a --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.doPrimitiveSetImmutability.receiver.args..st @@ -0,0 +1,16 @@ +controlling +context: aContext doPrimitiveSetImmutability: primitiveIndex receiver: rcvr args: arguments + + | boolean result | + boolean := arguments first. + boolean isBoolean ifFalse: [ + ^ self context: aContext primitiveFailTokenFor: #'bad argument']. + (boolean and: [(self context: aContext canBeImmutable: (self readableObjectFor: rcvr)) not]) ifTrue: [ + ^ self context: aContext primitiveFailTokenFor: #'no modification']. + + result := (self readableObjectFor: rcvr) + tryPrimitive: primitiveIndex + withArgs: arguments. + ^ (aContext isPrimFailToken: result) + ifTrue: [result] + ifFalse: [aContext push: result] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.exchangeIdentityWith..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.exchangeIdentityWith..st new file mode 100644 index 0000000..4a4d8a3 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.exchangeIdentityWith..st @@ -0,0 +1,11 @@ +controlling +context: aContext elements: anArray exchangeIdentityWith: anotherArray + + anArray do: [:object | + (self readableObjectFor: object) isReadOnlyObject + ifTrue: [^ self context: aContext primitiveFailTokenFor: #'no modification']]. + anotherArray do: [:object | + (self readableObjectFor: object) isReadOnlyObject + ifTrue: [^ self context: aContext primitiveFailTokenFor: #'no modification']]. + + ^ aContext push: (self elements: anArray exchangeIdentityWith: anotherArray) \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.forwardIdentityAndHashTo..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.forwardIdentityAndHashTo..st new file mode 100644 index 0000000..861bbb1 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.forwardIdentityAndHashTo..st @@ -0,0 +1,8 @@ +controlling +context: aContext elements: anArray forwardIdentityAndHashTo: anotherArray + + ^ self + context: aContext + elements: anArray + forwardIdentityTo: anotherArray + copyHash: true \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.forwardIdentityTo..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.forwardIdentityTo..st new file mode 100644 index 0000000..ae14915 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.forwardIdentityTo..st @@ -0,0 +1,8 @@ +controlling +context: aContext elements: anArray forwardIdentityTo: anotherArray + + ^ self + context: aContext + elements: anArray + forwardIdentityTo: anotherArray + copyHash: false \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.forwardIdentityTo.copyHash..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.forwardIdentityTo.copyHash..st new file mode 100644 index 0000000..03e50f6 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.elements.forwardIdentityTo.copyHash..st @@ -0,0 +1,8 @@ +controlling +context: aContext elements: anArray forwardIdentityTo: otherArray copyHash: copyHash + + anArray do: [:object | + (self readableObjectFor: object) isReadOnlyObject + ifTrue: [^ self context: aContext primitiveFailTokenFor: #'no modification']]. + + ^ aContext push: (self elements: anArray forwardIdentityTo: otherArray copyHash: copyHash) \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.popIntoRemoteTemp.inVectorAt.do..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.popIntoRemoteTemp.inVectorAt.do..st new file mode 100644 index 0000000..826da6d --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.popIntoRemoteTemp.inVectorAt.do..st @@ -0,0 +1,9 @@ +instruction processing +context: aContext popIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex do: aBlock + + self + context: aContext + simulatedObject: (aContext at: tempVectorIndex + 1) + basicAt: remoteTempIndex + 1 + put: aContext pop. + ^ aContext \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.primitiveFailTokenFor..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.primitiveFailTokenFor..st new file mode 100644 index 0000000..2257480 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.primitiveFailTokenFor..st @@ -0,0 +1,4 @@ +controlling +context: aContext primitiveFailTokenFor: errorCode + + ^ aContext class primitiveFailTokenFor: errorCode \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.pushLiteralVariable.do..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.pushLiteralVariable.do..st new file mode 100644 index 0000000..4ab673d --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.pushLiteralVariable.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushLiteralVariable: value do: aBlock + + ^ aContext push: (self + context: aContext + simulatedObject: value + instVarAt: self valueIndex) \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.pushReceiverVariable.do..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.pushReceiverVariable.do..st new file mode 100644 index 0000000..4b7fd25 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.pushReceiverVariable.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushReceiverVariable: offset do: aBlock + + ^ aContext push: (self + context: aContext + simulatedObject: aContext receiver + instVarAt: offset + 1) \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.pushRemoteTemp.inVectorAt.do..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.pushRemoteTemp.inVectorAt.do..st new file mode 100644 index 0000000..ea36d67 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.pushRemoteTemp.inVectorAt.do..st @@ -0,0 +1,7 @@ +instruction processing +context: aContext pushRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex do: aBlock + + ^ aContext push: (self + context: aContext + simulatedObject: (aContext at: tempVectorIndex + 1) + basicAt: remoteTempIndex + 1) \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.runSimulated.contextAtEachStep.do..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.runSimulated.contextAtEachStep.do..st new file mode 100644 index 0000000..d07ea96 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.runSimulated.contextAtEachStep.do..st @@ -0,0 +1,9 @@ +controlling +context: aContext runSimulated: aBlock contextAtEachStep: anotherBlock do: simulateBlock + "Prevent optimization with ensure variable in super by never passing a zero-arg block. Reason: The variable would be only modified within the sandbox. We must not do 'sandbox addObject: thisContext' since this would allow the code under simulation to usurp the execution." + + ^ super + context: aContext + runSimulated: aBlock + contextAtEachStep: [:context | anotherBlock cull: context] + do: simulateBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.basicAt..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.basicAt..st new file mode 100644 index 0000000..f3c3e96 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.basicAt..st @@ -0,0 +1,6 @@ +private - object access +context: aContext simulatedObject: anObject basicAt: index + + ^ aContext + object: (self readableObjectFor: anObject) + basicAt: index \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.basicAt.put..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.basicAt.put..st new file mode 100644 index 0000000..01f586d --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.basicAt.put..st @@ -0,0 +1,7 @@ +private - object access +context: aContext simulatedObject: anObject basicAt: index put: value + + ^ aContext + object: (self writableObjectFor: anObject) + basicAt: index + put: value \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.instVarAt..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.instVarAt..st new file mode 100644 index 0000000..829273e --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.instVarAt..st @@ -0,0 +1,6 @@ +private - object access +context: aContext simulatedObject: anObject instVarAt: index + + ^ aContext + object: (self readableObjectFor: anObject) + instVarAt: index \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.instVarAt.put.do..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.instVarAt.put.do..st new file mode 100644 index 0000000..2067ffe --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.simulatedObject.instVarAt.put.do..st @@ -0,0 +1,9 @@ +private - object access +context: aContext simulatedObject: anObject instVarAt: index put: value do: aBlock + + ^ super + context: aContext + simulatedObject: (self writableObjectFor: anObject) + instVarAt: index + put: value + do: aBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.step..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.step..st new file mode 100644 index 0000000..131d686 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.step..st @@ -0,0 +1,6 @@ +controlling +context: aContext step: aBlock + + self registerStep. + + ^ super context: aContext step: aBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.storeIntoRemoteTemp.inVectorAt.do..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.storeIntoRemoteTemp.inVectorAt.do..st new file mode 100644 index 0000000..0f14bcb --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.storeIntoRemoteTemp.inVectorAt.do..st @@ -0,0 +1,9 @@ +instruction processing +context: aContext storeIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex do: aBlock + + self + context: aContext + simulatedObject: (aContext at: tempVectorIndex + 1) + basicAt: remoteTempIndex + 1 + put: aContext top. + ^ aContext \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.tryNamedPrimitiveIn.for.withArgs.do..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.tryNamedPrimitiveIn.for.withArgs.do..st new file mode 100644 index 0000000..a6c2a73 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/context.tryNamedPrimitiveIn.for.withArgs.do..st @@ -0,0 +1,5 @@ +controlling +context: aContext tryNamedPrimitiveIn: aCompiledMethod for: receiver withArgs: arguments do: aBlock + + self flag: #suspicious. + ^ self shouldNotImplement: 'Use #doNamedPrimitiveIn:for:withArgs:' \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/elements.exchangeIdentityWith..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/elements.exchangeIdentityWith..st new file mode 100644 index 0000000..abb70d0 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/elements.exchangeIdentityWith..st @@ -0,0 +1,8 @@ +primitives +elements: anArray exchangeIdentityWith: anotherArray + + anArray with: anotherArray do: [:object :otherObject | + objects + at: object put: otherObject; + at: otherObject put: object]. + ^ anotherArray \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/elements.forwardIdentityTo.copyHash..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/elements.forwardIdentityTo.copyHash..st new file mode 100644 index 0000000..aa9babe --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/elements.forwardIdentityTo.copyHash..st @@ -0,0 +1,10 @@ +primitives +elements: anArray forwardIdentityTo: anotherArray copyHash: copyHash + + anArray with: anotherArray do: [:object :otherObject | + objects at: object put: otherObject. + copyHash + ifFalse: [hashes at: object put: otherObject] + ifTrue: [hashes at: otherObject put: object]]. + + ^ anotherArray \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/evaluate..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/evaluate..st new file mode 100644 index 0000000..adebecb --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/evaluate..st @@ -0,0 +1,14 @@ +evaluating +evaluate: aBlock + "Evaluate aBlock in a the receiver and answer the result, isolating it from the rest of the image. + + Example: + Sandbox2 evaluate: [World extent: 0 @ 0; bounds]. + " + + ^ self + evaluate: aBlock + ifFailed: [:ex | SandboxError new + messageText: 'Exception from simulated code: ' , ex; + tag: ex; + signal] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/evaluate.ifFailed..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/evaluate.ifFailed..st new file mode 100644 index 0000000..167f596 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/evaluate.ifFailed..st @@ -0,0 +1,12 @@ +evaluating +evaluate: aBlock ifFailed: failBlock + "Evaluate aBlock in a the receiver and answer the result, isolating it from the rest of the image. If aBlock signals a failure, evaluate failBlock with that failure. + + Example: + Sandbox2 evaluate: [1 / 0] ifFailed: [:ex | Transcript showln: ex description]. + " + + ^ self + evaluate: aBlock + on: Error, Warning, Halt + do: failBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/evaluate.on.do..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/evaluate.on.do..st new file mode 100644 index 0000000..2041757 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/evaluate.on.do..st @@ -0,0 +1,19 @@ +evaluating +evaluate: aBlock on: exceptionHandler do: exceptionBlock + "Evaluate aBlock in the receiver, isolating it from the rest of the image. If aBlock signals an exception that can handled by the exceptionHandler, evaluate exceptionBlock with it. NOTE: Unhandled errors raised by aBlock will bubble up along the sender stack, but still, all handling is simulated in the sandbox until the exception will have been resumed. Depending on the configuration of the sandbox and your image, this can mean that even the pop-up of the eventual debugger will be simulated and thus invisible to you! Thus make sure to pass all relevant exceptions with this message. + + Example: + Sandbox2 evaluate: [1 / 0] on: ZeroDivide do: [:ex | Transcript showln: ex description]. + + ""Use with CAUTION and check your image via the ProcessBrowser afterwards"" + Sandbox2 evaluate: [self halt] on: ZeroDivide do: [:ex | Transcript showln: ex description]. + " + + | result exception | + self basicEvaluate: [[result := aBlock value] + on: exceptionHandler + do: [:ex | exception := ex]]. + + (self basicEvaluate: [exception]) ifNotNil: [:ex | ^ exceptionBlock cull: ex]. + + ^ self readableObjectFor: (self basicEvaluate: [result]) \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/exportMemory.st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/exportMemory.st new file mode 100644 index 0000000..11ef1af --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/exportMemory.st @@ -0,0 +1,6 @@ +accessing +exportMemory + + ^ SandboxMemory + objects: objects + hashes: hashes \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/hashFor..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/hashFor..st new file mode 100644 index 0000000..5e86f39 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/hashFor..st @@ -0,0 +1,6 @@ +private +hashFor: hash + + ^ hashes + at: hash + ifAbsent: [hash] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/importMemory..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/importMemory..st new file mode 100644 index 0000000..18041c1 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/importMemory..st @@ -0,0 +1,6 @@ +initialize-release +importMemory: memory + "Overwrites existing memory. Thus classificed as initialize-release rather than accessing." + + objects := memory objects. + hashes := memory hashes. \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/initialize.st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/initialize.st new file mode 100644 index 0000000..b459ea4 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/initialize.st @@ -0,0 +1,8 @@ +initialize-release +initialize + + super initialize. + + objects := WeakIdentityKeyDictionary new. + hashes := WeakIdentityKeyDictionary new. + stepCount := 0. \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/initializeContext..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/initializeContext..st new file mode 100644 index 0000000..f666321 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/initializeContext..st @@ -0,0 +1,9 @@ +controlling +initializeContext: aContext + + | result | + result := super initializeContext: aContext. + + self addObject: result. + + ^ result \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/operationForbidden..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/operationForbidden..st new file mode 100644 index 0000000..be13b7f --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/operationForbidden..st @@ -0,0 +1,7 @@ +private-exceptions +operationForbidden: messageText + + ^ SandboxOperationForbidden new + messageText: messageText; + tag: self; + signal \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/patchObject.with..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/patchObject.with..st new file mode 100644 index 0000000..a9ded56 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/patchObject.with..st @@ -0,0 +1,4 @@ +accessing +patchObject: anObject with: anotherObject + + objects at: anObject put: anotherObject. \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/readableObjectFor..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/readableObjectFor..st new file mode 100644 index 0000000..0bce72c --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/readableObjectFor..st @@ -0,0 +1,6 @@ +private +readableObjectFor: anObject + + ^ objects + at: anObject + ifAbsent: [anObject] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/registerStep.st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/registerStep.st new file mode 100644 index 0000000..12ee1db --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/registerStep.st @@ -0,0 +1,7 @@ +stepping +registerStep + + stepCount := stepCount + 1. + stepLimit ifNil: [^ self]. + stepCount >= stepLimit ifTrue: [ + SandboxError signal: 'Step limit exceeded']. \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/shouldBeImplemented..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/shouldBeImplemented..st new file mode 100644 index 0000000..d834e8a --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/shouldBeImplemented..st @@ -0,0 +1,4 @@ +error handling +shouldBeImplemented: messageText + + ^ NotImplemented signal: messageText \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/shouldNotImplement..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/shouldNotImplement..st new file mode 100644 index 0000000..6b35559 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/shouldNotImplement..st @@ -0,0 +1,4 @@ +error handling +shouldNotImplement: messageText + + ^ NotImplemented signal: messageText \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/stepCount.st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/stepCount.st new file mode 100644 index 0000000..83c2523 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/stepCount.st @@ -0,0 +1,4 @@ +accessing +stepCount + + ^ stepCount \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/stepLimit..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/stepLimit..st new file mode 100644 index 0000000..1814659 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/stepLimit..st @@ -0,0 +1,5 @@ +accessing +stepLimit: anIntegerOrNil + "If stepLimit is not nil, simulation will be interrupted after n bytecode steps." + + stepLimit := anIntegerOrNil \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/stepLimit.st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/stepLimit.st new file mode 100644 index 0000000..2d6ddb3 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/stepLimit.st @@ -0,0 +1,5 @@ +accessing +stepLimit + "If stepLimit is not nil, simulation will be interrupted after n bytecode steps." + + ^ stepLimit \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/valueIndex.st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/valueIndex.st new file mode 100644 index 0000000..4080550 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/valueIndex.st @@ -0,0 +1,4 @@ +private +valueIndex + + ^ 2 "See Context class >> #initialize" \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/writableObjectFor..st b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/writableObjectFor..st new file mode 100644 index 0000000..f28d71f --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/instance/writableObjectFor..st @@ -0,0 +1,10 @@ +private +writableObjectFor: anObject + + ^ objects + at: anObject + ifAbsentPut: [| writableObject | + writableObject := anObject shallowCopy. + (anObject isReadOnlyObject and: [anObject class isImmediateClass not]) + ifTrue: [writableObject setIsReadOnlyObject: true]. + writableObject] \ No newline at end of file diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/methodProperties.json b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/methodProperties.json new file mode 100644 index 0000000..042b37c --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/methodProperties.json @@ -0,0 +1,59 @@ +{ + "class" : { + "benchmarkSandboxVsSandbox2" : "ct 11/13/2021 17:25", + "debug:" : "ct 11/13/2021 16:11", + "evaluate:" : "ct 11/13/2021 16:12", + "evaluate:ifFailed:" : "ct 11/13/2021 16:12", + "evaluate:on:do:" : "ct 11/13/2021 16:12", + "findSelectorsFor:arguments:thatAnswer:" : "ct 11/13/2021 16:11", + "fromMemory:" : "ct 3/6/2021 01:39", + "streamSelectorsFor:arguments:thatAnswer:" : "ct 11/13/2021 16:11" }, + "instance" : { + "access:indirectors:" : "ct 11/12/2021 23:58", + "addObject:" : "ct 3/22/2021 17:51", + "basicEvaluate:" : "ct 11/13/2021 16:12", + "context:activateOperationForbidden:" : "ct 11/13/2021 01:04", + "context:canBeImmutable:" : "ct 11/12/2021 23:54", + "context:doNamedPrimitiveIn:for:withArgs:" : "ct 11/13/2021 16:14", + "context:doPrimitive:method:receiver:args:do:" : "ct 11/13/2021 02:25", + "context:doPrimitiveHash:receiver:args:" : "ct 11/12/2021 23:56", + "context:doPrimitiveNew:receiver:args:" : "ct 11/12/2021 23:55", + "context:doPrimitiveSetImmutability:receiver:args:" : "ct 11/13/2021 02:25", + "context:elements:exchangeIdentityWith:" : "ct 11/13/2021 02:26", + "context:elements:forwardIdentityAndHashTo:" : "ct 11/13/2021 00:21", + "context:elements:forwardIdentityTo:" : "ct 11/13/2021 00:21", + "context:elements:forwardIdentityTo:copyHash:" : "ct 11/13/2021 02:26", + "context:popIntoRemoteTemp:inVectorAt:do:" : "ct 11/13/2021 01:09", + "context:primitiveFailTokenFor:" : "ct 11/13/2021 02:26", + "context:pushLiteralVariable:do:" : "ct 11/13/2021 00:44", + "context:pushReceiverVariable:do:" : "ct 11/13/2021 00:44", + "context:pushRemoteTemp:inVectorAt:do:" : "ct 11/13/2021 00:44", + "context:runSimulated:contextAtEachStep:do:" : "ct 11/13/2021 00:35", + "context:simulatedObject:basicAt:" : "ct 11/13/2021 00:22", + "context:simulatedObject:basicAt:put:" : "ct 11/13/2021 00:22", + "context:simulatedObject:instVarAt:" : "ct 11/13/2021 00:22", + "context:simulatedObject:instVarAt:put:do:" : "ct 11/13/2021 15:12", + "context:step:" : "ct 11/12/2021 23:37", + "context:storeIntoRemoteTemp:inVectorAt:do:" : "ct 11/13/2021 00:49", + "context:tryNamedPrimitiveIn:for:withArgs:do:" : "ct 11/12/2021 23:40", + "elements:exchangeIdentityWith:" : "ct 1/10/2021 21:03", + "elements:forwardIdentityTo:copyHash:" : "ct 3/4/2021 20:19", + "evaluate:" : "ct 11/13/2021 16:12", + "evaluate:ifFailed:" : "ct 11/13/2021 16:12", + "evaluate:on:do:" : "ct 11/13/2021 16:12", + "exportMemory" : "ct 3/6/2021 01:38", + "hashFor:" : "ct 1/10/2021 21:40", + "importMemory:" : "ct 3/6/2021 01:39", + "initialize" : "ct 1/18/2021 17:06", + "initializeContext:" : "ct 11/13/2021 00:18", + "operationForbidden:" : "ct 3/4/2021 23:48", + "patchObject:with:" : "ct 3/6/2021 13:25", + "readableObjectFor:" : "ct 12/28/2020 21:24", + "registerStep" : "ct 12/31/2020 02:05", + "shouldBeImplemented:" : "ct 3/6/2021 13:30", + "shouldNotImplement:" : "ct 12/28/2020 15:29", + "stepCount" : "ct 12/31/2020 01:54", + "stepLimit" : "ct 3/5/2021 23:27", + "stepLimit:" : "ct 3/5/2021 23:27", + "valueIndex" : "ct 11/12/2021 23:34", + "writableObjectFor:" : "ct 3/22/2021 22:04" } } diff --git a/packages/SimulationStudio-Sandbox.package/Sandbox2.class/properties.json b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/properties.json new file mode 100644 index 0000000..7e22427 --- /dev/null +++ b/packages/SimulationStudio-Sandbox.package/Sandbox2.class/properties.json @@ -0,0 +1,17 @@ +{ + "category" : "SimulationStudio-Sandbox", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "ct 11/13/2021 16:21", + "instvars" : [ + "stepLimit", + "stepCount", + "objects", + "hashes" ], + "name" : "Sandbox2", + "pools" : [ + ], + "super" : "Simulator", + "type" : "normal" } diff --git a/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/README.md b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/README.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/instance/sandboxClass.st b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/instance/sandboxClass.st new file mode 100644 index 0000000..c361e0c --- /dev/null +++ b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/instance/sandboxClass.st @@ -0,0 +1,4 @@ +accessing +sandboxClass + + ^ Sandbox2 \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/methodProperties.json b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/methodProperties.json new file mode 100644 index 0000000..03774fc --- /dev/null +++ b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/methodProperties.json @@ -0,0 +1,5 @@ +{ + "class" : { + }, + "instance" : { + "sandboxClass" : "ct 11/13/2021 00:00" } } diff --git a/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/properties.json b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/properties.json new file mode 100644 index 0000000..744e034 --- /dev/null +++ b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2KernelTest.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "SimulationStudio-Tests-Sandbox", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "", + "instvars" : [ + ], + "name" : "Sandbox2KernelTest", + "pools" : [ + ], + "super" : "SandboxKernelTest", + "type" : "normal" } diff --git a/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/README.md b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/README.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/instance/sandboxClass.st b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/instance/sandboxClass.st new file mode 100644 index 0000000..c361e0c --- /dev/null +++ b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/instance/sandboxClass.st @@ -0,0 +1,4 @@ +accessing +sandboxClass + + ^ Sandbox2 \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/methodProperties.json b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/methodProperties.json new file mode 100644 index 0000000..2d760bc --- /dev/null +++ b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/methodProperties.json @@ -0,0 +1,5 @@ +{ + "class" : { + }, + "instance" : { + "sandboxClass" : "ct 11/13/2021 16:05" } } diff --git a/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/properties.json b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/properties.json new file mode 100644 index 0000000..2fa6e65 --- /dev/null +++ b/packages/SimulationStudio-Tests-Sandbox.package/Sandbox2Test.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "SimulationStudio-Tests-Sandbox", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "", + "instvars" : [ + ], + "name" : "Sandbox2Test", + "pools" : [ + ], + "super" : "SandboxTest", + "type" : "normal" } diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxKernelTest.class/instance/basicPerformTest.on.do..st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxKernelTest.class/instance/basicPerformTest.on.do..st index 5d7ce5f..398304a 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxKernelTest.class/instance/basicPerformTest.on.do..st +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxKernelTest.class/instance/basicPerformTest.on.do..st @@ -1,7 +1,7 @@ private basicPerformTest: aTestCase on: exceptionHandler do: exceptionBlock - ^ Sandbox + ^ self sandboxClass evaluate: [aTestCase runCaseWithoutTimeout] on: exceptionHandler do: exceptionBlock \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxKernelTest.class/instance/sandboxClass.st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxKernelTest.class/instance/sandboxClass.st new file mode 100644 index 0000000..2f0f839 --- /dev/null +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxKernelTest.class/instance/sandboxClass.st @@ -0,0 +1,4 @@ +accessing +sandboxClass + + ^ Sandbox \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxKernelTest.class/methodProperties.json b/packages/SimulationStudio-Tests-Sandbox.package/SandboxKernelTest.class/methodProperties.json index cf1fe83..68b854d 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxKernelTest.class/methodProperties.json +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxKernelTest.class/methodProperties.json @@ -3,4 +3,5 @@ "expectedFailureGroups" : "ct 3/24/2021 20:33", "testGroups" : "ct 3/14/2021 20:10" }, "instance" : { - "basicPerformTest:on:do:" : "ct 3/14/2021 16:09" } } + "basicPerformTest:on:do:" : "ct 11/13/2021 16:05", + "sandboxClass" : "ct 11/13/2021 16:05" } } diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/sandboxClass.st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/sandboxClass.st new file mode 100644 index 0000000..2f0f839 --- /dev/null +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/sandboxClass.st @@ -0,0 +1,4 @@ +accessing +sandboxClass + + ^ Sandbox \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testBitBlt.st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testBitBlt.st index ebc2813..34aeafe 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testBitBlt.st +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testBitBlt.st @@ -6,7 +6,7 @@ testBitBlt originalColors := display colorsUsed. self deny: {Color blue} equals: originalColors description: 'Prerequisites not matched'. - Sandbox evaluate: [ + self sandboxClass evaluate: [ display fillColor: Color blue. self assert: {Color blue} equals: display colorsUsed]. diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testCannotUsurpExecution.st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testCannotUsurpExecution.st index d884560..257f0ae 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testCannotUsurpExecution.st +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testCannotUsurpExecution.st @@ -5,5 +5,5 @@ testCannotUsurpExecution self shouldNotChange: [thisContext simCustomizationLevel] after: [ - Sandbox evaluate: [(thisContext findContextSuchThat: [:ctx | + self sandboxClass evaluate: [(thisContext findContextSuchThat: [:ctx | ctx selector = #runSimulated:contextAtEachStep:]) privSender: nil]]. \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testFindSelectors.st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testFindSelectors.st index 643128a..6501bae 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testFindSelectors.st +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testFindSelectors.st @@ -8,7 +8,7 @@ testFindSelectors } withIndexDo: [:fixture :index | | selectors | Transcript showln: ('{1}({2}: {3}' format: {self. index. fixture}). - selectors := Sandbox + selectors := self sandboxClass findSelectorsFor: fixture first arguments: fixture second thatAnswer: fixture third. diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testIdentityHashConstant.st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testIdentityHashConstant.st index 9f0c6b9..a021eb8 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testIdentityHashConstant.st +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testIdentityHashConstant.st @@ -3,7 +3,7 @@ testIdentityHashConstant | point result | point := Point basicNew. - result := Sandbox evaluate: [{ + result := self sandboxClass evaluate: [{ point identityHash. point setX: 1 setY: 2. point identityHash}]. diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testMemoryHashes.st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testMemoryHashes.st index e26969c..b50ec28 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testMemoryHashes.st +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testMemoryHashes.st @@ -2,7 +2,7 @@ tests testMemoryHashes | sandbox a b | - sandbox := Sandbox new. + sandbox := self sandboxClass new. a := Object new. b := Object new. a identityHash = b identityHash ifTrue: [ @@ -13,5 +13,5 @@ testMemoryHashes self deny: a identityHash equals: b identityHash. self assert: b identityHash equals: (sandbox evaluate: [a identityHash]). - sandbox := Sandbox fromMemory: sandbox exportMemory. + sandbox := self sandboxClass fromMemory: sandbox exportMemory. self assert: b identityHash equals: (sandbox evaluate: [a identityHash]). \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testMemoryObjects.st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testMemoryObjects.st index ba917cc..df89a7b 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testMemoryObjects.st +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testMemoryObjects.st @@ -2,7 +2,7 @@ tests testMemoryObjects | sandbox a b x | - sandbox := Sandbox new. + sandbox := self sandboxClass new. a := Object new. b := Object new. x := a. @@ -12,5 +12,5 @@ testMemoryObjects self assert: b equals: x]. self assert: a equals: x. - sandbox := Sandbox fromMemory: sandbox exportMemory. + sandbox := self sandboxClass fromMemory: sandbox exportMemory. self assert: b equals: (sandbox evaluate: [x]). \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testOperationForbidden.st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testOperationForbidden.st index 799f593..46893bd 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testOperationForbidden.st +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testOperationForbidden.st @@ -1,6 +1,6 @@ tests testOperationForbidden - Sandbox evaluate: [self + self sandboxClass evaluate: [self should: [FileDirectory default exists] raise: SandboxOperationForbidden]. \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testRecursiveSandbox.st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testRecursiveSandbox.st index 248ce0e..df95f43 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testRecursiveSandbox.st +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testRecursiveSandbox.st @@ -2,10 +2,10 @@ tests testRecursiveSandbox self assert: 6 * 7 equals: ( - Sandbox + self sandboxClass evaluate: [6 * 7] ifFailed: [^ self fail]). self assert: 6 * 7 equals: ( - Sandbox - evaluate: [Sandbox evaluate: [6 * 7] ifFailed: [^ self fail]] + self sandboxClass + evaluate: [self sandboxClass evaluate: [6 * 7] ifFailed: [^ self fail]] ifFailed: [^ self fail]). \ No newline at end of file diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testSandbox.st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testSandbox.st index 8af4fb4..10849b2 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testSandbox.st +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testSandbox.st @@ -6,7 +6,7 @@ testSandbox obj add: 1. self assert: [obj includes: 1]. - sandbox := Sandbox new. + sandbox := self sandboxClass new. sandbox evaluate: [obj add: 2]. self deny: [obj includes: 2]. diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testSandbox2.st b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testSandbox2.st index 69daea0..7550a32 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testSandbox2.st +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/instance/testSandbox2.st @@ -4,27 +4,27 @@ testSandbox2 | assertions | assertions := OrderedDictionary new at: [String streamContents: [:s | - Sandbox new evaluate: [s nextPut: $x]]] + self sandboxClass new evaluate: [s nextPut: $x]]] put: ''; at: [| x | x := {1}. - Sandbox new evaluate: [x at: 1 put: 2. x]] + self sandboxClass new evaluate: [x at: 1 put: 2. x]] put: {2}; - at: [Sandbox new evaluate: [ + at: [self sandboxClass new evaluate: [ (String streamContents: [:s | s nextPut: $x]) copy]] put: 'x'; - at: [Sandbox new evaluate: [Point basicNew setX: 1 setY: 2; x]] + at: [self sandboxClass new evaluate: [Point basicNew setX: 1 setY: 2; x]] put: 1; at: [Point basicNew in: [:point | - Sandbox new evaluate: [point setX: 1 setY: 2]. + self sandboxClass new evaluate: [point setX: 1 setY: 2]. point x]] put: nil; at: [Point basicNew in: [:point | - Sandbox new evaluate: [ + self sandboxClass new evaluate: [ point setX: 1 setY: 2. point x]]] put: 1; - at: [Sandbox new evaluate: [ + at: [self sandboxClass new evaluate: [ [Notification signal * 2] on: Notification do: [:ex | ex resume: 3]]] put: 6; yourself. diff --git a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/methodProperties.json b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/methodProperties.json index bd63061..49c8743 100644 --- a/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/methodProperties.json +++ b/packages/SimulationStudio-Tests-Sandbox.package/SandboxTest.class/methodProperties.json @@ -2,13 +2,14 @@ "class" : { }, "instance" : { - "testBitBlt" : "ct 3/20/2021 20:55", - "testCannotUsurpExecution" : "ct 3/5/2021 19:23", - "testFindSelectors" : "ct 3/22/2021 18:56", - "testIdentityHashConstant" : "ct 1/18/2021 18:31", - "testMemoryHashes" : "ct 3/6/2021 01:54", - "testMemoryObjects" : "ct 3/6/2021 01:44", - "testOperationForbidden" : "ct 3/3/2021 17:38", - "testRecursiveSandbox" : "ct 3/3/2021 12:46", - "testSandbox" : "ct 12/28/2020 20:42", - "testSandbox2" : "ct 3/6/2021 13:14" } } + "sandboxClass" : "ct 11/13/2021 16:05", + "testBitBlt" : "ct 11/13/2021 00:00", + "testCannotUsurpExecution" : "ct 11/13/2021 00:01", + "testFindSelectors" : "ct 11/13/2021 00:01", + "testIdentityHashConstant" : "ct 11/13/2021 00:01", + "testMemoryHashes" : "ct 11/13/2021 00:01", + "testMemoryObjects" : "ct 11/13/2021 00:01", + "testOperationForbidden" : "ct 11/13/2021 00:01", + "testRecursiveSandbox" : "ct 11/13/2021 00:01", + "testSandbox" : "ct 11/13/2021 00:01", + "testSandbox2" : "ct 11/13/2021 00:01" } } From 7edfff7c76418996bf5357d26aa30ca31c719a7f Mon Sep 17 00:00:00 2001 From: Christoph Thiede Date: Sun, 14 Nov 2021 00:26:09 +0100 Subject: [PATCH 8/8] Run context customizations eagerly Note that some contexts still are not customized before the step is left which is an imperfect state because certain simulators might expect to always work with custom contexts. --- .../instance/activateMethod.withArgs.receiver..st | 4 ++++ .../SimulationContext.class/instance/activateReturn.value..st | 4 ++++ .../SimulationContext.class/instance/step.st | 1 + .../SimulationContext.class/methodProperties.json | 4 +++- 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 packages/SimulationStudio-Base.package/SimulationContext.class/instance/activateMethod.withArgs.receiver..st create mode 100644 packages/SimulationStudio-Base.package/SimulationContext.class/instance/activateReturn.value..st diff --git a/packages/SimulationStudio-Base.package/SimulationContext.class/instance/activateMethod.withArgs.receiver..st b/packages/SimulationStudio-Base.package/SimulationContext.class/instance/activateMethod.withArgs.receiver..st new file mode 100644 index 0000000..aa49b2d --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulationContext.class/instance/activateMethod.withArgs.receiver..st @@ -0,0 +1,4 @@ +as yet unclassified +activateMethod: newMethod withArgs: args receiver: rcvr + + ^ self customize: (super activateMethod: newMethod withArgs: args receiver: rcvr) \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulationContext.class/instance/activateReturn.value..st b/packages/SimulationStudio-Base.package/SimulationContext.class/instance/activateReturn.value..st new file mode 100644 index 0000000..c081564 --- /dev/null +++ b/packages/SimulationStudio-Base.package/SimulationContext.class/instance/activateReturn.value..st @@ -0,0 +1,4 @@ +as yet unclassified +activateReturn: aContext value: value + + ^ self customize: (super activateReturn: aContext value: value) \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulationContext.class/instance/step.st b/packages/SimulationStudio-Base.package/SimulationContext.class/instance/step.st index 11e6ad7..0a5fab2 100644 --- a/packages/SimulationStudio-Base.package/SimulationContext.class/instance/step.st +++ b/packages/SimulationStudio-Base.package/SimulationContext.class/instance/step.st @@ -1,4 +1,5 @@ system simulation step + self flag: #todo. "This is our last resort only - preferably, we should identify all places where new contexts are generated (e.g., during block activation) and convert them there already!" ^ self customize: super step \ No newline at end of file diff --git a/packages/SimulationStudio-Base.package/SimulationContext.class/methodProperties.json b/packages/SimulationStudio-Base.package/SimulationContext.class/methodProperties.json index 9f503c9..7414bbf 100644 --- a/packages/SimulationStudio-Base.package/SimulationContext.class/methodProperties.json +++ b/packages/SimulationStudio-Base.package/SimulationContext.class/methodProperties.json @@ -11,6 +11,8 @@ "runSimulated:" : "ct 12/28/2020 15:05", "runSimulated:contextAtEachStep:" : "ct 12/28/2020 16:39" }, "instance" : { + "activateMethod:withArgs:receiver:" : "ct 11/12/2021 21:05", + "activateReturn:value:" : "ct 11/12/2021 21:05", "at:" : "ct 12/28/2020 19:14", "at:put:" : "ct 12/28/2020 19:14", "basicAt:" : "ct 12/28/2020 19:14", @@ -34,5 +36,5 @@ "shouldNotImplement:" : "ct 12/28/2020 15:29", "size" : "ct 12/28/2020 19:14", "stackp:" : "ct 12/28/2020 19:13", - "step" : "ct 3/14/2021 15:21", + "step" : "ct 11/13/2021 19:45", "tryNamedPrimitiveIn:for:withArgs:" : "ct 3/6/2021 12:18" } }