Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file removed src/.DS_Store
Binary file not shown.
File renamed without changes.
2 changes: 1 addition & 1 deletion src/BaselineOfSindarin/BaselineOfSindarin.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ BaselineOfSindarin >> baseline: spec [
package: 'Sindarin-Experiments' ].

spec
group: 'default' with: #('Sindarin' 'Sindarin-Tests');
group: 'default' with: #( 'Sindarin' 'Sindarin-Tests');
group: 'experiments' with: #('default' 'Sindarin-Experiments')
]
96 changes: 48 additions & 48 deletions src/Sindarin-Tests/SindarinDebuggerTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -302,12 +302,12 @@ SindarinDebuggerTest >> testChangingPcInTheMiddleOfStatementSkipsTheBeginningOfS
stepOver.
"pc of a := 5"

self assert: (scdbg temporaryNamed: #a) equals: 1.
self assert: (scdbg readVariableNamed: #a) equals: 1.

scdbg pc: newPc.
"It should skip the assignment a:=5 AND skip the beginning of the statement ('3' asInteger)"

self assert: (scdbg temporaryNamed: #a) equals: 1.
self assert: (scdbg readVariableNamed: #a) equals: 1.
self assert: scdbg node equals: newNode.
self assert: scdbg pc equals: newPc.
self deny: scdbg topStack equals: expectedStackTop.
Expand All @@ -331,11 +331,11 @@ SindarinDebuggerTest >> testChangingPcKeepsSameStateAndPushesCorrectElementsOnSt
stepOver;
stepOver.

self assert: (scdbg temporaryNamed: #a) equals: 5.
self assert: (scdbg readVariableNamed: #a) equals: 5.

scdbg pc: newPc.

self assert: (scdbg temporaryNamed: #a) equals: 5.
self assert: (scdbg readVariableNamed: #a) equals: 5.
self assert: scdbg node equals: newNode.
self assert: scdbg pc equals: newPc.
self assert: scdbg topStack equals: expectedStackTop
Expand Down Expand Up @@ -593,12 +593,12 @@ SindarinDebuggerTest >> testMoveToNodeInTheMiddleOfStatementSkipsTheBeginningOfS
stepOver.
"pc of a := 5"

self assert: (scdbg temporaryNamed: #a) equals: 1.
self assert: (scdbg readVariableNamed: #a) equals: 1.

scdbg moveToNode: newNode.
"It should skip the assignment a:=5 AND skip the beginning of the statement ('3' asInteger)"

self assert: (scdbg temporaryNamed: #a) equals: 1.
self assert: (scdbg readVariableNamed: #a) equals: 1.
self assert: scdbg node equals: newNode.
self assert: scdbg pc equals: newPc.
self deny: scdbg topStack equals: expectedStackTop.
Expand All @@ -622,11 +622,11 @@ SindarinDebuggerTest >> testMoveToNodeKeepsSameStateAndPushesCorrectElementsOnSt
stepOver;
stepOver.

self assert: (scdbg temporaryNamed: #a) equals: 5.
self assert: (scdbg readVariableNamed: #a) equals: 5.

scdbg moveToNode: newNode.

self assert: (scdbg temporaryNamed: #a) equals: 5.
self assert: (scdbg readVariableNamed: #a) equals: 5.
self assert: scdbg node equals: newNode.
self assert: scdbg pc equals: newPc.
self assert: scdbg topStack equals: expectedStackTop
Expand Down Expand Up @@ -756,11 +756,11 @@ SindarinDebuggerTest >> testMoveToNodeWhenFromNonInlinedBlockToOuterContext [
aimedPC := sdbg methodNode firstPcForNode: aimedNode.

self assert: aimedPC isNil.
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

sdbg moveToNode: aimedNode.

self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

self assert: sdbg context home identicalTo: oldContext.
self
Expand All @@ -770,7 +770,7 @@ SindarinDebuggerTest >> testMoveToNodeWhenFromNonInlinedBlockToOuterContext [
sdbg stepOver.

"2 is going to be assigned to a"
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.
self assert: sdbg topStack equals: 2.

sdbg moveToNode: methodNode statements third.
Expand All @@ -780,7 +780,7 @@ SindarinDebuggerTest >> testMoveToNodeWhenFromNonInlinedBlockToOuterContext [
"We went back to the home context"
self assert: sdbg context identicalTo: oldContext.
"2 has not been assigned to a"
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.
self assert: sdbg topStack equals: 1
]

Expand All @@ -805,11 +805,11 @@ SindarinDebuggerTest >> testMoveToNodeWhenFromNonInlinedEmbeddedBlockToHomeConte
aimedPC := sdbg methodNode firstPcForNode: aimedNode.

self assert: aimedPC isNil.
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

sdbg moveToNode: aimedNode.

self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

self assert: sdbg context home identicalTo: oldContext.
self
Expand All @@ -819,7 +819,7 @@ SindarinDebuggerTest >> testMoveToNodeWhenFromNonInlinedEmbeddedBlockToHomeConte
sdbg stepOver.

"2 is going to be assigned to a"
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.
self assert: sdbg topStack equals: 2.

sdbg moveToNode: methodNode statements third.
Expand All @@ -829,7 +829,7 @@ SindarinDebuggerTest >> testMoveToNodeWhenFromNonInlinedEmbeddedBlockToHomeConte
"We went back to the home context"
self assert: sdbg context identicalTo: oldContext.
"2 has not been assigned to a"
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.
self assert: sdbg topStack equals: 1
]

Expand All @@ -854,11 +854,11 @@ SindarinDebuggerTest >> testMoveToNodeWhenFromNonInlinedEmbeddedBlockToNodeThatI
aimedPC := sdbg methodNode firstPcForNode: aimedNode.

self assert: aimedPC isNil.
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

sdbg moveToNode: aimedNode.

self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

self assert: sdbg context home identicalTo: oldContext.
self
Expand All @@ -868,7 +868,7 @@ SindarinDebuggerTest >> testMoveToNodeWhenFromNonInlinedEmbeddedBlockToNodeThatI
sdbg stepOver.

"2 is going to be assigned to a"
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.
self assert: sdbg topStack equals: 2.

oldNode := sdbg node.
Expand All @@ -883,7 +883,7 @@ SindarinDebuggerTest >> testMoveToNodeWhenFromNonInlinedEmbeddedBlockToNodeThatI
"We went back to the home context"
self assert: sdbg context identicalTo: oldContext.
"2 has not been assigned to a"
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.
self assert: sdbg topStack equals: 2
]

Expand Down Expand Up @@ -911,11 +911,11 @@ SindarinDebuggerTest >> testMoveToNodeWhenNodeIsInBlockThatCreatesContextAndBloc
aimedPC := sdbg methodNode firstPcForNode: aimedNode.

self assert: aimedPC isNil.
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

sdbg moveToNode: aimedNode.

self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

self assert: sdbg node identicalTo: aimedNode.
self assert: sdbg context sender identicalTo: oldContext.
Expand All @@ -925,7 +925,7 @@ SindarinDebuggerTest >> testMoveToNodeWhenNodeIsInBlockThatCreatesContextAndBloc
stepOver;
stepOver.

self assert: (sdbg temporaryNamed: #a) equals: 2.
self assert: (sdbg readVariableNamed: #a) equals: 2.

"When you perform a stepOver, you quit the block and continue right where you were before moving to caret"
self assert: sdbg node identicalTo: sdbg methodNode statements third value.
Expand Down Expand Up @@ -956,11 +956,11 @@ SindarinDebuggerTest >> testMoveToNodeWhenNodeIsInBlockThatCreatesContextAndBloc
aimedPC := sdbg methodNode firstPcForNode: aimedNode.

self assert: aimedPC isNil.
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

sdbg moveToNode: aimedNode.

self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

self assert: sdbg node identicalTo: aimedNode.
self assert: sdbg context sender identicalTo: oldContext.
Expand All @@ -970,7 +970,7 @@ SindarinDebuggerTest >> testMoveToNodeWhenNodeIsInBlockThatCreatesContextAndBloc
stepOver;
stepOver.

self assert: (sdbg temporaryNamed: #a) equals: 2.
self assert: (sdbg readVariableNamed: #a) equals: 2.

"When you perform a stepOver, you quit the block and continue right where you were before moving to caret"
self assert: sdbg node identicalTo: oldNode value.
Expand All @@ -997,23 +997,23 @@ SindarinDebuggerTest >> testMoveToNodeWhenNodeIsInIfTrueIfFalseBlock [
aimedPC := sdbg methodNode firstPcForNode: aimedNode.

self assert: aimedPC isNotNil.
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

sdbg moveToNode: aimedNode.

self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

self assert: sdbg node identicalTo: aimedNode.
self assert: sdbg pc identicalTo: aimedPC.
self assert: sdbg context identicalTo: oldContext.

sdbg stepOver.

self assert: (sdbg temporaryNamed: #a) equals: 3.
self assert: (sdbg readVariableNamed: #a) equals: 3.

sdbg stepOver.
"When you perform a stepOver, you quit the block and continue just after the ifTrue: message"
self assert: (sdbg temporaryNamed: #a) equals: 4
self assert: (sdbg readVariableNamed: #a) equals: 4
]

{ #category : #tests }
Expand Down Expand Up @@ -1110,11 +1110,11 @@ SindarinDebuggerTest >> testMoveToNodeWhenNodeIsNonInlinedAndEmbeddedInNonInline
aimedPC := sdbg methodNode firstPcForNode: aimedNode.

self assert: aimedPC isNil.
self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

sdbg moveToNode: aimedNode.

self assert: (sdbg temporaryNamed: #a) equals: 1.
self assert: (sdbg readVariableNamed: #a) equals: 1.

self assert: sdbg node identicalTo: aimedNode.
self assert: sdbg context home identicalTo: oldContext.
Expand All @@ -1125,7 +1125,7 @@ SindarinDebuggerTest >> testMoveToNodeWhenNodeIsNonInlinedAndEmbeddedInNonInline
stepOver;
stepOver.

self assert: (sdbg temporaryNamed: #a) equals: 2.
self assert: (sdbg readVariableNamed: #a) equals: 2.

"When you perform a stepOver, you quit the block and continue after the embedded block creation in the embedding block context"
self assert: sdbg methodNode identicalTo: methodNode statements second.
Expand All @@ -1137,7 +1137,7 @@ SindarinDebuggerTest >> testMoveToNodeWhenNodeIsNonInlinedAndEmbeddedInNonInline
stepOver;
stepOver.

self assert: (sdbg temporaryNamed: #a) equals: 2.
self assert: (sdbg readVariableNamed: #a) equals: 2.

"When you perform stepOver again, you quit the embedding block and continue after the embedding block creation in the old context"
self assert: sdbg methodNode identicalTo: methodNode.
Expand Down Expand Up @@ -1357,7 +1357,7 @@ SindarinDebuggerTest >> testSkipThroughNode [
debug: [ self methodWithTwoAssignments ].
dbg step; stepOver; stepOver.
targetExecNode := dbg node.
realValueOfA := (dbg temporaryNamed: #a).
realValueOfA := (dbg readVariableNamed: #a).
dbg stepOver.
nodeAfterSkipThrough := dbg node.
realExecTopStack := dbg topStack.
Expand All @@ -1371,7 +1371,7 @@ SindarinDebuggerTest >> testSkipThroughNode [
self assert: dbg pc equals: realExecPC.
self assert: dbg node identicalTo: nodeAfterSkipThrough.
self assert: realValueOfA equals: 5.
self assert: (dbg temporaryNamed: #a) equals: 1.
self assert: (dbg readVariableNamed: #a) equals: 1.
self assert: realExecTopStack equals: 3.
self assert: dbg topStack equals: '3'
]
Expand All @@ -1385,7 +1385,7 @@ SindarinDebuggerTest >> testSkipToPC [
dbg step; stepOver; stepOver.
realExecPC := dbg pc.
realExecNode := dbg node.
realValueOfA := (dbg temporaryNamed: #a).
realValueOfA := (dbg readVariableNamed: #a).
realExecTopStack := dbg topStack.

dbg := SindarinDebugger
Expand All @@ -1395,7 +1395,7 @@ SindarinDebuggerTest >> testSkipToPC [
self assert: dbg pc equals: realExecPC.
self assert: dbg node equals: realExecNode.
self assert: realValueOfA equals: 5.
self assert: (dbg temporaryNamed: #a) equals: 1.
self assert: (dbg readVariableNamed: #a) equals: 1.
self assert: dbg topStack equals: realExecTopStack
]

Expand Down Expand Up @@ -1450,7 +1450,7 @@ SindarinDebuggerTest >> testSkipUpToIgnoresJumps [
statements first.
aimedPC := sdbg methodNode firstPcForNode: aimedNode.

a := sdbg temporaryNamed: #a.
a := sdbg readVariableNamed: #a.

self assert: a isNil.

Expand All @@ -1465,7 +1465,7 @@ SindarinDebuggerTest >> testSkipUpToIgnoresJumps [
statements first.
aimedPC := sdbg methodNode firstPcForNode: aimedNode.

a := sdbg temporaryNamed: #a.
a := sdbg readVariableNamed: #a.

self assert: a isNil.

Expand All @@ -1479,7 +1479,7 @@ SindarinDebuggerTest >> testSkipUpToIgnoresJumps [
aimedNode := sdbg methodNode statements third.
aimedPC := sdbg methodNode firstPcForNode: aimedNode.

a := sdbg temporaryNamed: #a.
a := sdbg readVariableNamed: #a.

self assert: a isNil.

Expand All @@ -1500,7 +1500,7 @@ SindarinDebuggerTest >> testSkipUpToNode [
dbg step; stepOver; stepOver.
realExecPC := dbg pc.
realExecNode := dbg node.
realValueOfA := (dbg temporaryNamed: #a).
realValueOfA := (dbg readVariableNamed: #a).
realExecTopStack := dbg topStack.

dbg := SindarinDebugger
Expand All @@ -1510,7 +1510,7 @@ SindarinDebuggerTest >> testSkipUpToNode [
self assert: dbg pc equals: realExecPC.
self assert: dbg node identicalTo: realExecNode.
self assert: realValueOfA equals: 5.
self assert: (dbg temporaryNamed: #a) equals: 1.
self assert: (dbg readVariableNamed: #a) equals: 1.
self assert: dbg topStack equals: realExecTopStack
]

Expand Down Expand Up @@ -1546,7 +1546,7 @@ SindarinDebuggerTest >> testSkipUpToNodeInEvaluatedBlock [
stepOver;
stepOver;
stepThrough.
oldValueOfA := dbg temporaryNamed: #a.
oldValueOfA := dbg readVariableNamed: #a.
"after stepping, we stop on b: = 3 + 2 assignment node"
dbg stepOver.

Expand All @@ -1571,12 +1571,12 @@ SindarinDebuggerTest >> testSkipUpToNodeInEvaluatedBlock [
skipUpToNode: realExecNode.
self assert: dbg pc equals: realExecPC.
self assert: dbg node identicalTo: realExecNode.
self assert: (dbg temporaryNamed: #a) equals: oldValueOfA.
self assert: (dbg readVariableNamed: #a) equals: oldValueOfA.
self assert: dbg topStack equals: valueOfBAfterSkipAndStep.

dbg stepOver.
"3 is on the stack so stepping over the assignment should put 3 into b"
self assert: (dbg temporaryNamed: #b) equals: valueOfBAfterSkipAndStep
self assert: (dbg readVariableNamed: #b) equals: valueOfBAfterSkipAndStep
]

{ #category : #'tests - skipping' }
Expand Down Expand Up @@ -1888,9 +1888,9 @@ SindarinDebuggerTest >> testTemporaryNamed [
| dbg |
dbg := SindarinDebugger debug: [ self methodWithOneAssignment ].
dbg step.
self assert: (dbg temporaryNamed: #a) equals: nil.
self assert: (dbg readVariableNamed: #a) equals: nil.
dbg step.
self assert: (dbg temporaryNamed: #a) equals: 5
self assert: (dbg readVariableNamed: #a) equals: 5
]

{ #category : #tests }
Expand Down
10 changes: 10 additions & 0 deletions src/Sindarin/InstructionStream.extension.st
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,13 @@ InstructionStream >> willSendOrReturnOrStoreOrCreateBlock [
^ self willSend or: [
self willReturn or: [ self willStore or: [ self willCreateBlock ] ] ]
]

{ #category : #'*Sindarin' }
InstructionStream >> willStoreButNotPop [
"Answer whether the next bytecode is a store that are not store-pop"

| encoderClass byte |
encoderClass := self method encoderClass.
byte := encoderClass nonExtensionBytecodeAt: pc in: self method.
^ #( 243 244 245 252 ) includes: byte
Comment on lines +46 to +47
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a comment refering to the method that details the bytecode numbers.

]
Loading