Files
hakorune/docs/examples
Moe Charm 55777a0735 feat: Implement field visibility (public/private) system
## Major Features Added

### Field Visibility System
- Added `private { ... }` and `public { ... }` blocks in box declarations
- Default visibility is now handled explicitly (fields must be in either block)
- Visibility checks enforced at both interpreter and VM levels

### Parser Enhancements
- Extended AST with public_fields and private_fields vectors
- Added parsing for visibility blocks in box definitions
- Maintained backward compatibility with existing `init { ... }` syntax

### Interpreter Implementation
- Added visibility checks in field access (get_field/set_field)
- External access to private fields now throws appropriate errors
- Internal access (within methods) always allowed

### VM Implementation
- Extended VM with object_class tracking for visibility checks
- RefGet/RefSet instructions now enforce field visibility
- Fixed nested box declaration collection (boxes defined inside methods)

### Test Examples Added
- docs/examples/visibility_ok.nyash - demonstrates correct usage
- docs/examples/visibility_error.nyash - tests private field access errors

## Technical Details

### Error Messages
- Interpreter: "Field 'X' is private in Y"
- VM: Same error message for consistency

### Current Limitations
- All RefGet/RefSet treated as external access in VM (internal flag future work)
- Legacy `init { ... }` fields treated as having unspecified visibility

## Test Results
 Interpreter: Both test cases pass correctly
 VM: Both test cases pass correctly after nested declaration fix

This implements the foundation for proper encapsulation in Nyash,
following the "explicit is better than implicit" philosophy.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-21 03:08:13 +09:00
..

Examples: Plugin BoxRef Return (v2.2)

  • File: plugin_boxref_return.nyash
  • Purpose: Demonstrates a plugin method returning a Box (BoxRef/Handle), and passing Box as an argument.

How to run (after full build):

  • Ensure nyash.toml includes FileBox with methods:
    • copyFrom = { method_id = 7, args = [ { kind = "box", category = "plugin" } ] }
    • cloneSelf = { method_id = 8 }
  • Build the plugin: cd plugins/nyash-filebox-plugin && cargo build --release
  • Run the example: ./target/release/nyash docs/examples/plugin_boxref_return.nyash

Expected behavior:

  • Creates two FileBox instances (f, g), writes to f, copies content to g via copyFrom, then closes both.