x = 0
for _ in range(n):
d = {}
- d["Spam"] = 1 # Guarded...
+ d["Spam"] = 1 # unguarded!
x += d["Spam"] # ...unguarded!
return x
self.assertEqual(res, TIER2_THRESHOLD)
self.assertIsNotNone(ex)
uops = get_opnames(ex)
- self.assertEqual(uops.count("_GUARD_NOS_DICT"), 1)
+ self.assertEqual(uops.count("_GUARD_NOS_DICT"), 0)
self.assertEqual(uops.count("_STORE_SUBSCR_DICT"), 1)
self.assertEqual(uops.count("_BINARY_OP_SUBSCR_DICT"), 1)
x = 0
for _ in range(n):
l = [0]
- l[0] = 1 # Guarded...
+ l[0] = 1 # unguarded!
[a] = l # ...unguarded!
b = l[0] # ...unguarded!
if l: # ...unguarded!
self.assertEqual(res, 2 * TIER2_THRESHOLD)
self.assertIsNotNone(ex)
uops = get_opnames(ex)
- self.assertEqual(uops.count("_GUARD_NOS_LIST"), 1)
+ self.assertEqual(uops.count("_GUARD_NOS_LIST"), 0)
self.assertEqual(uops.count("_STORE_SUBSCR_LIST_INT"), 1)
self.assertEqual(uops.count("_GUARD_TOS_LIST"), 0)
self.assertEqual(uops.count("_UNPACK_SEQUENCE_LIST"), 1)
--- /dev/null
+Use ``sym_new_type`` instead of ``sym_new_not_null`` for _BUILD_LIST,
+_BUILD_SET, _BUILD_MAP
tup = sym_new_tuple(ctx, oparg, values);
}
+ op(_BUILD_LIST, (values[oparg] -- list)) {
+ list = sym_new_type(ctx, &PyList_Type);
+ }
+
+ op(_BUILD_SLICE, (values[oparg] -- slice)) {
+ slice = sym_new_type(ctx, &PySlice_Type);
+ }
+
+ op(_BUILD_MAP, (values[oparg*2] -- map)) {
+ map = sym_new_type(ctx, &PyDict_Type);
+ }
+
op(_UNPACK_SEQUENCE_TWO_TUPLE, (seq -- val1, val0)) {
val0 = sym_tuple_getitem(ctx, seq, 0);
val1 = sym_tuple_getitem(ctx, seq, 1);
case _BUILD_LIST: {
JitOptSymbol *list;
- list = sym_new_not_null(ctx);
+ list = sym_new_type(ctx, &PyList_Type);
stack_pointer[-oparg] = list;
stack_pointer += 1 - oparg;
assert(WITHIN_STACK_BOUNDS());
case _BUILD_MAP: {
JitOptSymbol *map;
- map = sym_new_not_null(ctx);
+ map = sym_new_type(ctx, &PyDict_Type);
stack_pointer[-oparg*2] = map;
stack_pointer += 1 - oparg*2;
assert(WITHIN_STACK_BOUNDS());
case _BUILD_SLICE: {
JitOptSymbol *slice;
- slice = sym_new_not_null(ctx);
+ slice = sym_new_type(ctx, &PySlice_Type);
stack_pointer[-oparg] = slice;
stack_pointer += 1 - oparg;
assert(WITHIN_STACK_BOUNDS());