Files
RustAst/examples/object_records.myc
T
Brummel ee89d2330d feat: Add comments to AST nodes
This commit introduces support for comments within the AST nodes.
Comments are now parsed by the lexer and stored within the `Token`
struct.
These comments are then propagated through various compiler phases,
including
the `Node` struct, ensuring they are preserved in the Abstract Syntax
Tree.
This change enhances the AST's ability to retain source code
information,
which can be valuable for debugging and analysis.
2026-03-25 18:36:53 +01:00

55 lines
1.6 KiB
Plaintext

;; Benchmark: 1.2us
;; Benchmark-Repeat: 1731
;; Output: [150 130 "Insufficient funds" 130]
; ---------------------------------------------------------
; Object-Oriented Records Example
; ---------------------------------------------------------
; This showcase treats a record as an object by storing
; closures that capture private state.
(do
; A factory function (Constructor) for a BankAccount object
(def make-account (fn [initial-balance]
(do
; 'balance' is a captured parameter, acting as private state
(def balance initial-balance)
{
; Method: Get current balance
:balance (fn [] balance)
; Method: Deposit money
:deposit (fn [amount]
(assign balance (+ balance amount)))
; Method: Withdraw money with validation
:withdraw (fn [amount]
(if (>= balance amount)
(assign balance (- balance amount))
"Insufficient funds"))
}
)))
; 1. Create an instance
(def my-acc (make-account 100))
; 2. Call 'deposit' method
; Note the double parens: (.deposit my-acc) gets the function, then we call it
; balance is now 150
(def b1 ((.deposit my-acc) 50))
; 3. Call 'withdraw' method
; balance is now 130
(def b2 ((.withdraw my-acc) 20))
; 4. Call 'withdraw' with invalid amount
(def error-msg ((.withdraw my-acc) 1000))
; 5. Call 'balance' getter
(def final-balance ((.balance my-acc)))
; Return summary of operations
[b1 b2 error-msg final-balance]
)