//! > Test basic reference type
//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: false)
//! > cairo_code
fn f(x: &u32, y: &&u32, z: &&&u32) {}
//! > top_level_kind
ExprUnary
//! > ignored_kinds
//! > expected_diagnostics
//! > expected_tree
└── Top level kind: ExprUnary
├── op (kind: TokenAnd): '&'
└── expr (kind: ExprPath)
├── dollar (kind: OptionTerminalDollarEmpty) []
└── segments (kind: ExprPathInner)
└── item #0 (kind: PathSegmentSimple)
└── ident (kind: TokenIdentifier): 'u32'
└── Top level kind: ExprUnary
├── op (kind: TokenAnd): '&'
└── expr (kind: ExprUnary)
├── op (kind: TokenAnd): '&'
└── expr (kind: ExprPath)
├── dollar (kind: OptionTerminalDollarEmpty) []
└── segments (kind: ExprPathInner)
└── item #0 (kind: PathSegmentSimple)
└── ident (kind: TokenIdentifier): 'u32'
└── Top level kind: ExprUnary
├── op (kind: TokenAnd): '&'
└── expr (kind: ExprUnary)
├── op (kind: TokenAnd): '&'
└── expr (kind: ExprUnary)
├── op (kind: TokenAnd): '&'
└── expr (kind: ExprPath)
├── dollar (kind: OptionTerminalDollarEmpty) []
└── segments (kind: ExprPathInner)
└── item #0 (kind: PathSegmentSimple)
└── ident (kind: TokenIdentifier): 'u32'
//! > ==========================================================================
//! > Test reference of snapshot vs snapshot of reference
//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: false)
//! > cairo_code
fn f(x: &@u32, y: @&u32) {}
//! > top_level_kind
ParamList
//! > ignored_kinds
//! > expected_diagnostics
//! > expected_tree
└── Top level kind: ParamList
├── item #0 (kind: Param)
│ ├── modifiers (kind: ModifierList) []
│ ├── name (kind: TokenIdentifier): 'x'
│ └── type_clause (kind: TypeClause)
│ ├── colon (kind: TokenColon): ':'
│ └── ty (kind: ExprUnary)
│ ├── op (kind: TokenAnd): '&'
│ └── expr (kind: ExprUnary)
│ ├── op (kind: TokenAt): '@'
│ └── expr (kind: ExprPath)
│ ├── dollar (kind: OptionTerminalDollarEmpty) []
│ └── segments (kind: ExprPathInner)
│ └── item #0 (kind: PathSegmentSimple)
│ └── ident (kind: TokenIdentifier): 'u32'
├── separator #0 (kind: TokenComma): ','
└── item #1 (kind: Param)
├── modifiers (kind: ModifierList) []
├── name (kind: TokenIdentifier): 'y'
└── type_clause (kind: TypeClause)
├── colon (kind: TokenColon): ':'
└── ty (kind: ExprUnary)
├── op (kind: TokenAt): '@'
└── expr (kind: ExprUnary)
├── op (kind: TokenAnd): '&'
└── expr (kind: ExprPath)
├── dollar (kind: OptionTerminalDollarEmpty) []
└── segments (kind: ExprPathInner)
└── item #0 (kind: PathSegmentSimple)
└── ident (kind: TokenIdentifier): 'u32'
//! > ==========================================================================
//! > Test reference inside generics
//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: false)
//! > cairo_code
fn f() -> Option<&u64> {}
//! > top_level_kind
ExprUnary
//! > ignored_kinds
//! > expected_diagnostics
//! > expected_tree
└── Top level kind: ExprUnary
├── op (kind: TokenAnd): '&'
└── expr (kind: ExprPath)
├── dollar (kind: OptionTerminalDollarEmpty) []
└── segments (kind: ExprPathInner)
└── item #0 (kind: PathSegmentSimple)
└── ident (kind: TokenIdentifier): 'u64'
//! > ==========================================================================
//! > Test double reference with literal &&5_u32
//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: false)
//! > cairo_code
fn f() {
let x = &1_u32;
let y = &&2_u32;
let z = &&&3_u32;
}
//! > top_level_kind
ExprUnary
//! > ignored_kinds
//! > expected_diagnostics
//! > expected_tree
└── Top level kind: ExprUnary
├── op (kind: TokenAnd): '&'
└── expr (kind: TokenLiteralNumber): '1_u32'
└── Top level kind: ExprUnary
├── op (kind: TokenAnd): '&'
└── expr (kind: ExprUnary)
├── op (kind: TokenAnd): '&'
└── expr (kind: TokenLiteralNumber): '2_u32'
└── Top level kind: ExprUnary
├── op (kind: TokenAnd): '&'
└── expr (kind: ExprUnary)
├── op (kind: TokenAnd): '&'
└── expr (kind: ExprUnary)
├── op (kind: TokenAnd): '&'
└── expr (kind: TokenLiteralNumber): '3_u32'