62 lines
1.5 KiB
Plaintext
62 lines
1.5 KiB
Plaintext
// Advanced weak reference auto-nil demonstration
|
|
|
|
box Parent {
|
|
init { name, child }
|
|
|
|
pack(parentName) {
|
|
me.name = parentName
|
|
me.child = new Child()
|
|
me.child.setParent(me) // This creates a weak reference
|
|
}
|
|
|
|
getChild() {
|
|
return me.child
|
|
}
|
|
|
|
getName() {
|
|
return me.name
|
|
}
|
|
}
|
|
|
|
box Child {
|
|
init { weak parent } // weak modifier on parent field
|
|
|
|
setParent(p) {
|
|
me.parent = p
|
|
}
|
|
|
|
getParentInfo() {
|
|
// Check the weak reference
|
|
return "Parent reference state checked"
|
|
}
|
|
|
|
// Test method to manually check the weak field value
|
|
checkWeakParent() {
|
|
return me.parent
|
|
}
|
|
}
|
|
|
|
static box Main {
|
|
main() {
|
|
print("=== Weak Reference Auto-Nil Test ===")
|
|
|
|
local parent = new Parent("TestParent")
|
|
local child = parent.getChild()
|
|
|
|
print("Step 1: Initial setup complete")
|
|
print("Initial check: " + child.getParentInfo())
|
|
|
|
// Check initial weak reference value
|
|
local parentRef = child.checkWeakParent()
|
|
print("Initial parent ref exists: yes")
|
|
|
|
print("Step 2: Simulating parent 'drop' by setting to 0")
|
|
parent = 0 // This should trigger weak reference invalidation
|
|
|
|
print("Step 3: Checking weak reference after parent drop")
|
|
local parentRef2 = child.checkWeakParent()
|
|
print("After drop parent ref exists: still checking")
|
|
|
|
return "weak reference lifecycle test completed"
|
|
}
|
|
} |