roc/test/snapshots/match_expr/nested_list_scoping.md
2025-11-19 12:29:55 -05:00

2.8 KiB

META

description=Match expression with nested list patterns testing variable scoping
type=expr

SOURCE

match nestedList {
    [[x], [y]] => x + y
    [[x, y]] => x - y  
    [x, [y]] => x * y
}

EXPECTED

UNDEFINED VARIABLE - nested_list_scoping.md:1:7:1:17

PROBLEMS

UNDEFINED VARIABLE Nothing is named nestedList in this scope. Is there an import or exposing missing up-top?

nested_list_scoping.md:1:7:1:17:

match nestedList {
  ^^^^^^^^^^

TOKENS

KwMatch,LowerIdent,OpenCurly,
OpenSquare,OpenSquare,LowerIdent,CloseSquare,Comma,OpenSquare,LowerIdent,CloseSquare,CloseSquare,OpFatArrow,LowerIdent,OpPlus,LowerIdent,
OpenSquare,OpenSquare,LowerIdent,Comma,LowerIdent,CloseSquare,CloseSquare,OpFatArrow,LowerIdent,OpBinaryMinus,LowerIdent,
OpenSquare,LowerIdent,Comma,OpenSquare,LowerIdent,CloseSquare,CloseSquare,OpFatArrow,LowerIdent,OpStar,LowerIdent,
CloseCurly,
EndOfFile,

PARSE

(e-match
	(e-ident (raw "nestedList"))
	(branches
		(branch
			(p-list
				(p-list
					(p-ident (raw "x")))
				(p-list
					(p-ident (raw "y"))))
			(e-binop (op "+")
				(e-ident (raw "x"))
				(e-ident (raw "y"))))
		(branch
			(p-list
				(p-list
					(p-ident (raw "x"))
					(p-ident (raw "y"))))
			(e-binop (op "-")
				(e-ident (raw "x"))
				(e-ident (raw "y"))))
		(branch
			(p-list
				(p-ident (raw "x"))
				(p-list
					(p-ident (raw "y"))))
			(e-binop (op "*")
				(e-ident (raw "x"))
				(e-ident (raw "y"))))))

FORMATTED

match nestedList {
	[[x], [y]] => x + y
	[[x, y]] => x - y
	[x, [y]] => x * y
}

CANONICALIZE

(e-match
	(match
		(cond
			(e-runtime-error (tag "ident_not_in_scope")))
		(branches
			(branch
				(patterns
					(pattern (degenerate false)
						(p-list
							(patterns
								(p-list
									(patterns
										(p-assign (ident "x"))))
								(p-list
									(patterns
										(p-assign (ident "y"))))))))
				(value
					(e-binop (op "add")
						(e-lookup-local
							(p-assign (ident "x")))
						(e-lookup-local
							(p-assign (ident "y"))))))
			(branch
				(patterns
					(pattern (degenerate false)
						(p-list
							(patterns
								(p-list
									(patterns
										(p-assign (ident "x"))
										(p-assign (ident "y"))))))))
				(value
					(e-binop (op "sub")
						(e-lookup-local
							(p-assign (ident "x")))
						(e-lookup-local
							(p-assign (ident "y"))))))
			(branch
				(patterns
					(pattern (degenerate false)
						(p-list
							(patterns
								(p-assign (ident "x"))
								(p-list
									(patterns
										(p-assign (ident "y"))))))))
				(value
					(e-binop (op "mul")
						(e-lookup-local
							(p-assign (ident "x")))
						(e-lookup-local
							(p-assign (ident "y")))))))))

TYPES

(expr (type "List(...)"))