feat: add borrow test example, fix borrow &mut parsing order

- examples/borrow.bux: working borrow expression example
- tests/borrow_test.nim: add 4 new tests for borrow & @[Shared]
- parser.nim: fix borrow parsing order (& before mut)
- Build verified: example compiles and runs
This commit is contained in:
2026-06-07 17:50:27 +03:00
parent 46814b2abc
commit bfe87a8acb
5 changed files with 37 additions and 1 deletions
+7
View File
@@ -449,6 +449,8 @@ proc resolveExprType(ctx: var LowerCtx, expr: Expr): Type =
if last.kind == skExpr:
return ctx.resolveExprType(last.stmtExpr)
return makeVoid()
of ekBorrow:
return ctx.resolveExprType(expr.exprBorrowOperand)
else: return makeUnknown()
proc extractGenericStructInfo(ctx: LowerCtx, te: TypeExpr): tuple[baseName: string, typeArgs: seq[TypeExpr]] =
@@ -896,6 +898,11 @@ proc lowerExpr(ctx: var LowerCtx, expr: Expr): HirNode =
let lowered = ctx.lowerExpr(expr.exprAwaitOperand)
return hirCall("bux_async_await", @[lowered], makePointer(makeVoid()), loc)
of ekBorrow:
# borrow &mut expr — lowered to the operand directly (borrow is a no-op in HIR)
# The borrow checker validates before lowering
return ctx.lowerExpr(expr.exprBorrowOperand)
else:
return HirNode(kind: hLit, litToken: Token(kind: tkIntLiteral, text: "0", loc: loc),
typ: makeVoid(), loc: loc)