roc/test/snapshots/expr/record_updater_basic.md
2025-11-23 01:22:01 -05:00

1.7 KiB

META

description=Basic record updater with field override
type=snippet

SOURCE

person = { name: "Alice", age: 30 }
updated = { ..person, age: 31 }

EXPECTED

NIL

PROBLEMS

NIL

TOKENS

LowerIdent,OpAssign,OpenCurly,LowerIdent,OpColon,StringStart,StringPart,StringEnd,Comma,LowerIdent,OpColon,Int,CloseCurly,
LowerIdent,OpAssign,OpenCurly,DoubleDot,LowerIdent,Comma,LowerIdent,OpColon,Int,CloseCurly,
EndOfFile,

PARSE

(file
	(type-module)
	(statements
		(s-decl
			(p-ident (raw "person"))
			(e-record
				(field (field "name")
					(e-string
						(e-string-part (raw "Alice"))))
				(field (field "age")
					(e-int (raw "30")))))
		(s-decl
			(p-ident (raw "updated"))
			(e-record
				(ext
					(e-ident (raw "person")))
				(field (field "age")
					(e-int (raw "31")))))))

FORMATTED

NO CHANGE

CANONICALIZE

(can-ir
	(d-let
		(p-assign (ident "person"))
		(e-record
			(fields
				(field (name "name")
					(e-string
						(e-literal (string "Alice"))))
				(field (name "age")
					(e-num (value "30"))))))
	(d-let
		(p-assign (ident "updated"))
		(e-record
			(ext
				(e-lookup-local
					(p-assign (ident "person"))))
			(fields
				(field (name "age")
					(e-num (value "31")))))))

TYPES

(inferred-types
	(defs
		(patt (type "{ age: a, name: Str } where [a.from_numeral : Numeral -> Try(a, [InvalidNumeral(Str)])]"))
		(patt (type "{ age: a, name: Str } where [a.from_numeral : Numeral -> Try(a, [InvalidNumeral(Str)])]")))
	(expressions
		(expr (type "{ age: a, name: Str } where [a.from_numeral : Numeral -> Try(a, [InvalidNumeral(Str)])]"))
		(expr (type "{ age: a, name: Str } where [a.from_numeral : Numeral -> Try(a, [InvalidNumeral(Str)])]"))))