user@elli:~/GD$ pwd user@elli:~/GD$ ls -ltra total 52 -rw-r--r-- 1 user user 1710 Aug 29 21:39 mvp.js -rw-r--r-- 1 user user 5516 Aug 29 22:37 GlobalHandleLedger.js -rw-r--r-- 1 user user 3896 Aug 29 22:55 stringManager.js -rw-r--r-- 1 user user 943 Aug 29 22:55 day1.js drwxr-sr-x 18 user user 4096 Aug 29 22:57 .. -rw-r--r-- 1 user user 4656 Aug 29 22:58 phase2.txt -rw-r--r-- 1 user user 8461 Aug 29 23:01 LPCVirtualMachine.js drwxr-sr-x 2 user user 4096 Aug 29 23:02 . -rw-r--r-- 1 user user 2479 Aug 29 23:02 day2.js user@elli:~/GD$ node day2.js Cloned object OID: 0 R0 after execution: 85 R1 after execution: 0 State arena var[1]: 85 user@elli:~/GD$ This confirms that the store and load correctly move tagged pointers between registers and the object's state. 4. Integration with the Execution Context (CTX) In Phase 3, we will move current_oid and registers into a CTX struct to support green threads. For now, this single-threaded approach is sufficient for MVP. 5. Next Steps Milestone 2.3 Implement the full LOAD_VAR and STORE_VAR with reference counting for strings/arrays (not required for MVP but important for robustness). Phase 3 Introduce the Execution Context (CTX) and the scheduler. With this, you have successfully completed Milestone 2.1 and 2.2 the object model is now fully functional. You can now instantiate objects and manipulate their global variables via bytecode.