this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Make placeholder when deleting from module

authored by bernsteinbear.com and committed by

Max Bernstein 0ae5043f 5b9fc63a

+21 -1
+18
runtime/module-builtins-test.cpp
··· 327 327 EXPECT_TRUE(listContains(values, baz_value)); 328 328 } 329 329 330 + TEST_F(ModuleBuiltinsTest, ModuleDelAttrEmptiesValueCell) { 331 + HandleScope scope(thread_); 332 + Str module_name(&scope, runtime_->newStrFromCStr("mymodule")); 333 + Module module(&scope, runtime_->newModule(module_name)); 334 + 335 + Object foo(&scope, Runtime::internStrFromCStr(thread_, "foo")); 336 + Str foo_value(&scope, runtime_->newStrFromCStr("foo_value")); 337 + 338 + moduleAtPut(thread_, module, foo, foo_value); 339 + 340 + Object value_cell(&scope, NoneType::object()); 341 + EXPECT_TRUE(attributeValueCellAt(*module, *foo, &value_cell)); 342 + EXPECT_EQ(ValueCell::cast(*value_cell).value(), *foo_value); 343 + moduleDeleteAttribute(thread_, module, foo); 344 + EXPECT_NE(ValueCell::cast(*value_cell).value(), *foo_value); 345 + EXPECT_TRUE(ValueCell::cast(*value_cell).isPlaceholder()); 346 + } 347 + 330 348 TEST_F(ModuleBuiltinsTest, ModuleGetAttributeReturnsInstanceValue) { 331 349 HandleScope scope(thread_); 332 350 ASSERT_FALSE(runFromCStr(runtime_, "x = 42").isError());
+3 -1
runtime/module-builtins.cpp
··· 153 153 ValueCell value_cell(&scope, *value_cell_obj); 154 154 icInvalidateGlobalVar(thread, value_cell); 155 155 if (value_cell.isPlaceholder()) return Error::notFound(); 156 - return value_cell.value(); 156 + Object previous_value(&scope, value_cell.value()); 157 + value_cell.makePlaceholder(); 158 + return *previous_value; 157 159 } 158 160 159 161 RawObject moduleValues(Thread* thread, const Module& module) {