Skip to content

Commit ab35ade

Browse files
committed
Implements dynamic inst var access to enable probes in super class methods for subclass examples. Closes #136
1 parent 5d50859 commit ab35ade

File tree

14 files changed

+63
-7
lines changed

14 files changed

+63
-7
lines changed

packages/Babylonian-Compiler.package/BPReferenceRewriter.class/README.md

Whitespace-only changes.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
as yet unclassified
2+
Reference: aNode with: identifier
3+
4+
^ (argumentNames includes: identifier interval contents asSymbol)
5+
ifTrue: [self value: identifier]
6+
ifFalse: ['(self bpResolveReferenceDynamically: #' , identifier interval contents , ' in: thisContext)']
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
as yet unclassified
2+
blockArgument: aNode with: some and: more and: moree and: evenMore
3+
argumentNames add: aNode interval contents copyWithoutFirst asSymbol.
4+
^ aNode interval contents
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
initialize-release
2+
initialize
3+
4+
super initialize.
5+
argumentNames := Set new.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"class" : {
3+
},
4+
"instance" : {
5+
"Reference:with:" : "pre 1/10/2023 17:50",
6+
"blockArgument:with:and:and:and:" : "pre 1/10/2023 17:51",
7+
"initialize" : "pre 1/10/2023 17:37" } }
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"category" : "Babylonian-Compiler",
3+
"classinstvars" : [
4+
],
5+
"classvars" : [
6+
],
7+
"commentStamp" : "",
8+
"instvars" : [
9+
"argumentNames" ],
10+
"name" : "BPReferenceRewriter",
11+
"pools" : [
12+
],
13+
"super" : "OhmSmalltalkSourceRewriter",
14+
"type" : "normal" }

packages/Babylonian-Core.package/BPProbe.class/instance/instrumentationCallFor..st

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ serialization
22
instrumentationCallFor: actualEnclosedExpressionSource
33

44
^ self hasExpression
5-
ifTrue: [
5+
ifTrue: [ |rewrittenExpression|
6+
rewrittenExpression := self makeReferenceReadsDynamic: self expression.
67
'(self bpTrace: [{1}] through: {2} forProbe: {3} inContext: thisContext)'
7-
format: {actualEnclosedExpressionSource . self expression . self id}]
8+
format: {actualEnclosedExpressionSource . rewrittenExpression . self id}]
89
ifFalse: [
910
'(self bpTrace: [{1}] forProbe: {2} inContext: thisContext)'
1011
format: {actualEnclosedExpressionSource . self id}]
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
serialization
2+
makeReferenceReadsDynamic: expression
3+
4+
| rewriter ast |
5+
rewriter := BPSmalltalkGrammar synthesizedAttribute: BPReferenceRewriter new.
6+
ast := PEGParserBPSmalltalk new
7+
match: expression
8+
startingFrom: #BlockLiteral.
9+
^ rewriter value: ast

packages/Babylonian-Core.package/BPProbe.class/methodProperties.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@
1212
"expression:" : "jb 12/7/2020 18:09",
1313
"hasExpression" : "pre 6/7/2021 16:52",
1414
"hasLabel" : "lu 5/20/2021 15:14",
15-
"instrumentationCallFor:" : "jb 12/3/2020 23:15",
15+
"instrumentationCallFor:" : "pre 1/10/2023 17:33",
1616
"isProbe" : "pre 7/3/2019 11:12",
1717
"isTemporaryProbe" : "pre 9/2/2022 14:40",
1818
"label" : "lu 6/1/2021 21:29",
1919
"label:" : "lu 5/20/2021 15:07",
20+
"makeReferenceReadsDynamic:" : "pre 1/10/2023 17:41",
2021
"probeId" : "pre 9/21/2020 17:13",
2122
"probeId:" : "jb 12/7/2020 18:09",
2223
"probeTypeTag" : "pre 9/2/2022 15:02",
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
*Babylonian-Core
2+
bpResolveReferenceDynamically: aSymbol in: aContext
3+
4+
(aContext tempNames includes: aSymbol) ifTrue: [
5+
^ aContext namedTempAt: (aContext tempNames indexOf: aSymbol)].
6+
(self class instVarNames includes: aSymbol) ifTrue: [
7+
^ self instVarNamed: aSymbol].
8+
^ (KeyNotFound key: aSymbol) signal

0 commit comments

Comments
 (0)