package ast import "jinx/pkg/libs/source" type ExprKind int const ( ExprKindBinary ExprKind = iota ExprKindUnary ExprKindCall ExprKindSubscription ExprKindGroup ExprKindFnLit ExprKindArrayLit ExprKindIdent ExprKindIntLit ExprKindFloatLit ExprKindStringLit ExprKindBoolLit ExprKindNullLit ExprKindThis ) type Expr ExprT[any] type ExprT[T any] struct { At source.Loc Kind ExprKind Value T } type ExprBinary struct { Left Expr Op BinOp Right Expr } type ExprUnary struct { Op UnOp Value Expr } type ExprCall struct { Callee Expr Args []Expr } type ExprSubscription struct { Obj Expr Key Expr } type ExprGroup struct { Value Expr } type ExprFnLit struct { Args []IdentNode Body BlockNode } type ExprArrayLit struct { Values []Expr } type ExprIdent struct { Value IdentNode } type ExprIntLit struct { Value uint64 } type ExprFloatLit struct { Value float64 } type ExprStringLit struct { Value string } type ExprBoolLit struct { Value bool } type ExprNullLit struct{} type ExprThis struct{}