Skip to content

Commit 4c0be3c

Browse files
authored
Merge pull request #159 from skogsbaer/types-and-functions-on-stack
Visualize types and functions on stack
2 parents 58a7bcb + 5c528f3 commit 4c0be3c

File tree

6 files changed

+132
-336
lines changed

6 files changed

+132
-336
lines changed

pytrace-generator/main.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def eprint(*args, **kwargs):
1616
print(*args, file=sys.stderr, **kwargs)
1717

1818
type_name_regex = re.compile("<class '(?:__main__\\.)?(.*)'>")
19+
function_str_regex = re.compile(r"^(<function .+) at .+>")
1920
import_regex = re.compile(r"^(?:[^'\"]+\s)?import[\s*]")
2021

2122
# Frame objects:
@@ -26,10 +27,11 @@ def eprint(*args, **kwargs):
2627
float: "float",
2728
bool: "bool",
2829
str: "str",
29-
type(None): "none"
30+
type(None): "none",
31+
type: "type",
32+
types.FunctionType: "function"
3033
}
3134
HEAP_TYPES = {
32-
type: "type",
3335
list: "list",
3436
tuple: "tuple",
3537
dict: "dict",
@@ -112,6 +114,18 @@ def format(self):
112114
"type": self.type_str,
113115
"value": self.value
114116
}
117+
if type(d["value"]) == type:
118+
type_name = str(d["value"])
119+
search_result = type_name_regex.search(type_name)
120+
if search_result is not None:
121+
type_name = f"<class '{search_result.group(1)}'>"
122+
d["value"] = type_name
123+
elif inspect.isfunction(d["value"]):
124+
function_desc = str(d["value"])
125+
search_result = function_str_regex.search(function_desc)
126+
if search_result is not None:
127+
function_desc = f"{search_result.group(1)}>"
128+
d["value"] = function_desc
115129
if self.variable_name is not None:
116130
d["name"] = self.variable_name
117131
return d
@@ -200,11 +214,6 @@ def store(self, address, value):
200214
stored_value[key_id] = prim_value
201215
if prim_value.is_ref():
202216
inner_values.append(v)
203-
elif value_type == type:
204-
stored_value = str(value)
205-
search_result = type_name_regex.search(stored_value)
206-
if search_result is not None:
207-
stored_value = f"<class '{search_result.group(1)}'>"
208217
elif inspect.isgenerator(value):
209218
stored_value = {}
210219
else:

pytrace-generator/test/test-cases/divideByZero.py.json

Lines changed: 33 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,14 @@
1919
"frameName": "<module>",
2020
"locals": [
2121
{
22-
"type": "ref",
23-
"value": 0,
22+
"type": "function",
23+
"value": "<function bar>",
2424
"name": "bar"
2525
}
2626
]
2727
}
2828
],
29-
"heap": {
30-
"0": {
31-
"type": "instance",
32-
"value": {},
33-
"name": "function"
34-
}
35-
},
29+
"heap": {},
3630
"stdout": ""
3731
},
3832
{
@@ -43,20 +37,14 @@
4337
"frameName": "<module>",
4438
"locals": [
4539
{
46-
"type": "ref",
47-
"value": 0,
40+
"type": "function",
41+
"value": "<function bar>",
4842
"name": "bar"
4943
}
5044
]
5145
}
5246
],
53-
"heap": {
54-
"0": {
55-
"type": "instance",
56-
"value": {},
57-
"name": "function"
58-
}
59-
},
47+
"heap": {},
6048
"stdout": ""
6149
},
6250
{
@@ -67,8 +55,8 @@
6755
"frameName": "<module>",
6856
"locals": [
6957
{
70-
"type": "ref",
71-
"value": 0,
58+
"type": "function",
59+
"value": "<function bar>",
7260
"name": "bar"
7361
}
7462
]
@@ -84,13 +72,7 @@
8472
]
8573
}
8674
],
87-
"heap": {
88-
"0": {
89-
"type": "instance",
90-
"value": {},
91-
"name": "function"
92-
}
93-
},
75+
"heap": {},
9476
"stdout": ""
9577
},
9678
{
@@ -101,8 +83,8 @@
10183
"frameName": "<module>",
10284
"locals": [
10385
{
104-
"type": "ref",
105-
"value": 0,
86+
"type": "function",
87+
"value": "<function bar>",
10688
"name": "bar"
10789
}
10890
]
@@ -118,13 +100,7 @@
118100
]
119101
}
120102
],
121-
"heap": {
122-
"0": {
123-
"type": "instance",
124-
"value": {},
125-
"name": "function"
126-
}
127-
},
103+
"heap": {},
128104
"stdout": ""
129105
},
130106
{
@@ -135,8 +111,8 @@
135111
"frameName": "<module>",
136112
"locals": [
137113
{
138-
"type": "ref",
139-
"value": 0,
114+
"type": "function",
115+
"value": "<function bar>",
140116
"name": "bar"
141117
}
142118
]
@@ -162,13 +138,7 @@
162138
]
163139
}
164140
],
165-
"heap": {
166-
"0": {
167-
"type": "instance",
168-
"value": {},
169-
"name": "function"
170-
}
171-
},
141+
"heap": {},
172142
"stdout": ""
173143
},
174144
{
@@ -179,8 +149,8 @@
179149
"frameName": "<module>",
180150
"locals": [
181151
{
182-
"type": "ref",
183-
"value": 0,
152+
"type": "function",
153+
"value": "<function bar>",
184154
"name": "bar"
185155
}
186156
]
@@ -206,13 +176,7 @@
206176
]
207177
}
208178
],
209-
"heap": {
210-
"0": {
211-
"type": "instance",
212-
"value": {},
213-
"name": "function"
214-
}
215-
},
179+
"heap": {},
216180
"stdout": ""
217181
},
218182
{
@@ -223,8 +187,8 @@
223187
"frameName": "<module>",
224188
"locals": [
225189
{
226-
"type": "ref",
227-
"value": 0,
190+
"type": "function",
191+
"value": "<function bar>",
228192
"name": "bar"
229193
}
230194
]
@@ -260,13 +224,7 @@
260224
]
261225
}
262226
],
263-
"heap": {
264-
"0": {
265-
"type": "instance",
266-
"value": {},
267-
"name": "function"
268-
}
269-
},
227+
"heap": {},
270228
"stdout": ""
271229
},
272230
{
@@ -277,8 +235,8 @@
277235
"frameName": "<module>",
278236
"locals": [
279237
{
280-
"type": "ref",
281-
"value": 0,
238+
"type": "function",
239+
"value": "<function bar>",
282240
"name": "bar"
283241
}
284242
]
@@ -314,13 +272,7 @@
314272
]
315273
}
316274
],
317-
"heap": {
318-
"0": {
319-
"type": "instance",
320-
"value": {},
321-
"name": "function"
322-
}
323-
},
275+
"heap": {},
324276
"stdout": ""
325277
},
326278
{
@@ -331,20 +283,14 @@
331283
"frameName": "<module>",
332284
"locals": [
333285
{
334-
"type": "ref",
335-
"value": 0,
286+
"type": "function",
287+
"value": "<function bar>",
336288
"name": "bar"
337289
}
338290
]
339291
}
340292
],
341-
"heap": {
342-
"0": {
343-
"type": "instance",
344-
"value": {},
345-
"name": "function"
346-
}
347-
},
293+
"heap": {},
348294
"stdout": ""
349295
},
350296
{
@@ -355,20 +301,14 @@
355301
"frameName": "<module>",
356302
"locals": [
357303
{
358-
"type": "ref",
359-
"value": 0,
304+
"type": "function",
305+
"value": "<function bar>",
360306
"name": "bar"
361307
}
362308
]
363309
}
364310
],
365-
"heap": {
366-
"0": {
367-
"type": "instance",
368-
"value": {},
369-
"name": "function"
370-
}
371-
},
311+
"heap": {},
372312
"stdout": ""
373313
},
374314
{
@@ -379,20 +319,14 @@
379319
"frameName": "<module>",
380320
"locals": [
381321
{
382-
"type": "ref",
383-
"value": 0,
322+
"type": "function",
323+
"value": "<function bar>",
384324
"name": "bar"
385325
}
386326
]
387327
}
388328
],
389-
"heap": {
390-
"0": {
391-
"type": "instance",
392-
"value": {},
393-
"name": "function"
394-
}
395-
},
329+
"heap": {},
396330
"stdout": ""
397331
}
398332
]

0 commit comments

Comments
 (0)