rusty-cpp 0.1.0

A Rust-based static analyzer that applies Rust's ownership and borrowing rules to C++ code
# Reference Borrow Checking Implementation

## Overview
Successfully implemented Rust-like borrow checking for C++ references (const and mutable). The analyzer now enforces the following rules:

## Implemented Rules

### 1. Multiple Immutable Borrows Allowed
Multiple `const` references to the same value are permitted:
```cpp
int value = 42;
const int& ref1 = value;  // OK
const int& ref2 = value;  // OK
const int& ref3 = value;  // OK
```

### 2. Single Mutable Borrow
Only one mutable reference is allowed at a time:
```cpp
int value = 42;
int& mut_ref1 = value;  // OK
int& mut_ref2 = value;  // ERROR: already mutably borrowed
```

### 3. No Mixing Mutable and Immutable Borrows
Cannot have mutable and immutable references simultaneously:
```cpp
int value = 42;
const int& const_ref = value;  // OK
int& mut_ref = value;          // ERROR: already immutably borrowed
```

Or:
```cpp
int value = 42;
int& mut_ref = value;          // OK
const int& const_ref = value;  // ERROR: already mutably borrowed
```

## Technical Implementation

### AST Parsing Enhancement
- Enhanced `ast_visitor.rs` to detect reference variable declarations
- Added support for extracting initialization expressions from `UnexposedExpr` nodes
- Properly determines const-ness of references by checking pointee types

### IR Conversion
- Added `ReferenceBinding` statement type to track reference creation
- Converts reference bindings to `Borrow` IR statements
- Maintains reference type information (const vs mutable)

### Borrow Analysis
- Tracks active borrows for each variable
- Enforces Rust's borrowing rules at compile time
- Provides clear error messages for violations

## Test Coverage
- Unit tests for ownership tracking
- Tests for multiple immutable borrows
- Tests for mutable borrow conflicts
- Tests for mixed reference violations
- Integration tests with real C++ code

## Example Usage
```bash
cargo run -- examples/reference_demo.cpp
```

## Limitations
- Does not yet track borrow lifetimes across scopes
- Does not handle reference parameters in function calls
- Does not track borrows through pointer indirection

## Future Enhancements
- Scope-aware lifetime tracking
- Support for reference parameters
- Tracking borrows through smart pointers
- Integration with move semantics checking