@@ -136,7 +136,8 @@ class BooleanKWargs(TypedDict):
136
136
IntegerKWargs , FloatKWargs , StringKWargs , BytesKWargs , BooleanKWargs
137
137
]
138
138
IRTypeName : TypeAlias = Literal ["integer" , "string" , "boolean" , "float" , "bytes" ]
139
- InvalidAt : TypeAlias = Tuple [IRTypeName , IRKWargsType ]
139
+ # ir_type, kwargs, forced
140
+ InvalidAt : TypeAlias = Tuple [IRTypeName , IRKWargsType , Optional [IRType ]]
140
141
141
142
142
143
class ExtraInformation :
@@ -2084,7 +2085,7 @@ def draw_integer(
2084
2085
)
2085
2086
2086
2087
if self .ir_tree_nodes is not None and observe :
2087
- node = self ._pop_ir_tree_node ("integer" , kwargs )
2088
+ node = self ._pop_ir_tree_node ("integer" , kwargs , forced = forced )
2088
2089
if forced is None :
2089
2090
assert isinstance (node .value , int )
2090
2091
forced = node .value
@@ -2141,7 +2142,7 @@ def draw_float(
2141
2142
)
2142
2143
2143
2144
if self .ir_tree_nodes is not None and observe :
2144
- node = self ._pop_ir_tree_node ("float" , kwargs )
2145
+ node = self ._pop_ir_tree_node ("float" , kwargs , forced = forced )
2145
2146
if forced is None :
2146
2147
assert isinstance (node .value , float )
2147
2148
forced = node .value
@@ -2183,7 +2184,7 @@ def draw_string(
2183
2184
},
2184
2185
)
2185
2186
if self .ir_tree_nodes is not None and observe :
2186
- node = self ._pop_ir_tree_node ("string" , kwargs )
2187
+ node = self ._pop_ir_tree_node ("string" , kwargs , forced = forced )
2187
2188
if forced is None :
2188
2189
assert isinstance (node .value , str )
2189
2190
forced = node .value
@@ -2219,7 +2220,7 @@ def draw_bytes(
2219
2220
kwargs : BytesKWargs = self ._pooled_kwargs ("bytes" , {"size" : size })
2220
2221
2221
2222
if self .ir_tree_nodes is not None and observe :
2222
- node = self ._pop_ir_tree_node ("bytes" , kwargs )
2223
+ node = self ._pop_ir_tree_node ("bytes" , kwargs , forced = forced )
2223
2224
if forced is None :
2224
2225
assert isinstance (node .value , bytes )
2225
2226
forced = node .value
@@ -2261,7 +2262,7 @@ def draw_boolean(
2261
2262
kwargs : BooleanKWargs = self ._pooled_kwargs ("boolean" , {"p" : p })
2262
2263
2263
2264
if self .ir_tree_nodes is not None and observe :
2264
- node = self ._pop_ir_tree_node ("boolean" , kwargs )
2265
+ node = self ._pop_ir_tree_node ("boolean" , kwargs , forced = forced )
2265
2266
if forced is None :
2266
2267
assert isinstance (node .value , bool )
2267
2268
forced = node .value
@@ -2302,7 +2303,9 @@ def _pooled_kwargs(self, ir_type, kwargs):
2302
2303
POOLED_KWARGS_CACHE [key ] = kwargs
2303
2304
return kwargs
2304
2305
2305
- def _pop_ir_tree_node (self , ir_type : IRTypeName , kwargs : IRKWargsType ) -> IRNode :
2306
+ def _pop_ir_tree_node (
2307
+ self , ir_type : IRTypeName , kwargs : IRKWargsType , * , forced : Optional [IRType ]
2308
+ ) -> IRNode :
2306
2309
assert self .ir_tree_nodes is not None
2307
2310
2308
2311
if self ._node_index == len (self .ir_tree_nodes ):
@@ -2321,7 +2324,7 @@ def _pop_ir_tree_node(self, ir_type: IRTypeName, kwargs: IRKWargsType) -> IRNode
2321
2324
# (in fact, it is possible that giving up early here results in more time
2322
2325
# for useful shrinks to run).
2323
2326
if node .ir_type != ir_type :
2324
- invalid_at = (ir_type , kwargs )
2327
+ invalid_at = (ir_type , kwargs , forced )
2325
2328
self .invalid_at = invalid_at
2326
2329
self .observer .mark_invalid (invalid_at )
2327
2330
self .mark_invalid (f"(internal) want a { ir_type } but have a { node .ir_type } " )
@@ -2330,7 +2333,7 @@ def _pop_ir_tree_node(self, ir_type: IRTypeName, kwargs: IRKWargsType) -> IRNode
2330
2333
# that is allowed by the expected kwargs, then we can coerce this node
2331
2334
# into an aligned one by using its value. It's unclear how useful this is.
2332
2335
if not ir_value_permitted (node .value , node .ir_type , kwargs ):
2333
- invalid_at = (ir_type , kwargs )
2336
+ invalid_at = (ir_type , kwargs , forced )
2334
2337
self .invalid_at = invalid_at
2335
2338
self .observer .mark_invalid (invalid_at )
2336
2339
self .mark_invalid (f"(internal) got a { ir_type } but outside the valid range" )
0 commit comments