🔗 Implement Fundamental Weak Reference Architecture - Phase 2: Auto-Nil Mechanism
Co-authored-by: moe-charm <217100418+moe-charm@users.noreply.github.com>
This commit is contained in:
60
test_working_weak_demo.nyash
Normal file
60
test_working_weak_demo.nyash
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
// Working demonstration of weak reference auto-nil behavior
|
||||||
|
|
||||||
|
box Parent {
|
||||||
|
init { name }
|
||||||
|
|
||||||
|
pack(parentName) {
|
||||||
|
me.name = parentName
|
||||||
|
}
|
||||||
|
|
||||||
|
getName() {
|
||||||
|
return me.name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
box Child {
|
||||||
|
init { weak parent } // weak modifier on parent field
|
||||||
|
|
||||||
|
setParent(p) {
|
||||||
|
me.parent = p
|
||||||
|
}
|
||||||
|
|
||||||
|
getParentInfo() {
|
||||||
|
// This method will use the weak field access system
|
||||||
|
// which automatically returns null if the parent is dropped
|
||||||
|
if me.parent == 0 {
|
||||||
|
return "Parent is null (dropped)"
|
||||||
|
} else {
|
||||||
|
return "Parent exists"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Direct weak field access for testing
|
||||||
|
accessWeakParent() {
|
||||||
|
return me.parent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static box Main {
|
||||||
|
main() {
|
||||||
|
print("=== Weak Reference Auto-Nil Demonstration ===")
|
||||||
|
|
||||||
|
local parent = new Parent("TestParent")
|
||||||
|
local child = new Child()
|
||||||
|
|
||||||
|
print("Step 1: Setting up parent-child relationship")
|
||||||
|
child.setParent(parent)
|
||||||
|
print("After setup: " + child.getParentInfo())
|
||||||
|
|
||||||
|
print("Step 2: Simulating parent 'drop' (set to 0)")
|
||||||
|
parent = 0 // This should trigger weak reference invalidation
|
||||||
|
|
||||||
|
print("Step 3: Checking child's parent reference after drop")
|
||||||
|
print("After drop: " + child.getParentInfo())
|
||||||
|
|
||||||
|
print("Step 4: Direct weak field access test")
|
||||||
|
local directAccess = child.accessWeakParent()
|
||||||
|
|
||||||
|
return "Auto-nil demonstration completed successfully"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user