204 lines
5.2 KiB
Plaintext
204 lines
5.2 KiB
Plaintext
# Single const declarations without types
|
|
|
|
const zero = 0
|
|
const one, two = 1, 2
|
|
const three, four, five = 3, 4, 5
|
|
|
|
==>
|
|
|
|
SourceFile(
|
|
ConstDecl(const,ConstSpec(DefName,Number)),
|
|
ConstDecl(const,ConstSpec(DefName,DefName,Number,Number)),
|
|
ConstDecl(const,ConstSpec(DefName,DefName,DefName,Number,Number,Number)))
|
|
|
|
# Single const declarations with types
|
|
|
|
const zero int = 0
|
|
const one, two uint64 = 1, 2
|
|
|
|
==>
|
|
|
|
SourceFile(
|
|
ConstDecl(const,ConstSpec(DefName,TypeName,Number)),
|
|
ConstDecl(const,ConstSpec(DefName,DefName,TypeName,Number,Number)))
|
|
|
|
# Grouped const declarations
|
|
|
|
const (
|
|
zero = 0
|
|
one = 1
|
|
)
|
|
|
|
==>
|
|
|
|
SourceFile(ConstDecl(const,SpecList(ConstSpec(DefName,Number),ConstSpec(DefName,Number))))
|
|
|
|
# Const declarations with implicit values
|
|
|
|
const (
|
|
zero = iota
|
|
one
|
|
two
|
|
)
|
|
|
|
==>
|
|
|
|
SourceFile(ConstDecl(const,SpecList(ConstSpec(DefName,VariableName),ConstSpec(DefName),ConstSpec(DefName))))
|
|
|
|
# Var declarations without types
|
|
|
|
var zero = 0
|
|
var one, two = 1, 2
|
|
var three, four, five = 3, 4, 5
|
|
|
|
==>
|
|
|
|
SourceFile(
|
|
VarDecl(var,VarSpec(DefName,Number)),
|
|
VarDecl(var,VarSpec(DefName,DefName,Number,Number)),
|
|
VarDecl(var,VarSpec(DefName,DefName,DefName,Number,Number,Number)))
|
|
|
|
# Var declarations with types
|
|
|
|
var zero int = 0
|
|
var one, two uint64 = 1, 2
|
|
|
|
==>
|
|
|
|
SourceFile(
|
|
VarDecl(var,VarSpec(DefName,TypeName,Number)),
|
|
VarDecl(var,VarSpec(DefName,DefName,TypeName,Number,Number)))
|
|
|
|
# Var declarations with no expressions
|
|
|
|
var zero int
|
|
var one, two uint64
|
|
|
|
==>
|
|
|
|
SourceFile(
|
|
VarDecl(var,VarSpec(DefName,TypeName)),
|
|
VarDecl(var,VarSpec(DefName,DefName,TypeName)))
|
|
|
|
# Grouped var declarations
|
|
|
|
var (
|
|
zero = 0
|
|
one = 1
|
|
)
|
|
|
|
==>
|
|
|
|
SourceFile(VarDecl(var,SpecList(VarSpec(DefName,Number),VarSpec(DefName,Number))))
|
|
|
|
# Function declarations
|
|
|
|
func f1() {}
|
|
func f2(a File, b, c, d Thing) int {}
|
|
func f2() (File, Thing) {}
|
|
func f2() (result int, err error) {}
|
|
func f(x ... int, y ... int)
|
|
func g1[T, U any, V interface{}, W Foo[Bar[T]]](a Foo[T]) {}
|
|
func g2(a foo.bar[int]) {}
|
|
func f[A int|string, B ~int, C ~int|~string]()
|
|
func f2(a File, b, c, d Thing) int {}
|
|
|
|
==>
|
|
|
|
SourceFile(
|
|
FunctionDecl(func,DefName,Parameters,Block),
|
|
FunctionDecl(func,DefName,Parameters(
|
|
Parameter(DefName,TypeName),
|
|
Parameter(DefName,DefName,DefName,TypeName)
|
|
),TypeName,Block),
|
|
FunctionDecl(func,DefName,Parameters,Parameters(Parameter(TypeName),Parameter(TypeName)),Block),
|
|
FunctionDecl(func,DefName,Parameters,Parameters(
|
|
Parameter(DefName,TypeName),
|
|
Parameter(DefName,TypeName)
|
|
),Block),
|
|
FunctionDecl(func,DefName,Parameters(Parameter(DefName,TypeName),Parameter(DefName,TypeName))),
|
|
FunctionDecl(func,DefName,TypeParams(
|
|
TypeParam(TypeName,TypeName,TypeName),
|
|
TypeParam(TypeName,InterfaceType(interface,InterfaceBody)),
|
|
TypeParam(TypeName,ParameterizedType(TypeName,TypeArgs(ParameterizedType(TypeName,TypeArgs(TypeName)))))
|
|
),Parameters(Parameter(DefName,ParameterizedType(TypeName,TypeArgs(TypeName)))),Block),
|
|
FunctionDecl(func,DefName,Parameters(
|
|
Parameter(DefName,ParameterizedType(QualifiedType(VariableName,TypeName),TypeArgs(TypeName)))
|
|
),Block),
|
|
FunctionDecl(func,DefName,TypeParams(
|
|
TypeParam(TypeName,TypeElem(TypeName,LogicOp,TypeName)),
|
|
TypeParam(TypeName,UnderlyingType(TypeName)),
|
|
TypeParam(TypeName,TypeElem(UnderlyingType(TypeName),LogicOp,UnderlyingType(TypeName)))
|
|
),Parameters),
|
|
FunctionDecl(func,DefName,Parameters(
|
|
Parameter(DefName,TypeName),
|
|
Parameter(DefName,DefName,DefName,TypeName)
|
|
),TypeName,Block))
|
|
|
|
# Single-line function declarations
|
|
|
|
func f1() { a() }
|
|
func f2() { a(); b() }
|
|
func f3() { a(); b(); }
|
|
|
|
==>
|
|
|
|
SourceFile(
|
|
FunctionDecl(func,DefName,Parameters,Block(
|
|
ExprStatement(CallExpr(VariableName,Arguments)))),
|
|
FunctionDecl(func,DefName,Parameters,Block(
|
|
ExprStatement(CallExpr(VariableName,Arguments)),
|
|
ExprStatement(CallExpr(VariableName,Arguments)))),
|
|
FunctionDecl(func,DefName,Parameters,Block(
|
|
ExprStatement(CallExpr(VariableName,Arguments)),
|
|
ExprStatement(CallExpr(VariableName,Arguments)))))
|
|
|
|
# Variadic function declarations
|
|
|
|
func f1(a ...*int) {}
|
|
func f2(a int, b ...int) {}
|
|
func f3(...bool) {}
|
|
|
|
==>
|
|
|
|
SourceFile(
|
|
FunctionDecl(func,DefName,Parameters(
|
|
Parameter(DefName,"...",PointerType(TypeName))
|
|
),Block),
|
|
FunctionDecl(func,DefName,Parameters(
|
|
Parameter(DefName,TypeName),
|
|
Parameter(DefName,"...",TypeName)
|
|
),Block),
|
|
FunctionDecl(func,DefName,Parameters(Parameter("...",TypeName)),Block))
|
|
|
|
# Method declarations
|
|
|
|
func (self Person) Equals(other Person) bool {}
|
|
func (v *Value) ObjxMap(optionalDefault ...(Map)) Map {}
|
|
func (p *T1) M1()
|
|
|
|
==>
|
|
|
|
SourceFile(
|
|
MethodDecl(func,Parameters(Parameter(DefName,TypeName)),FieldName,
|
|
Parameters(Parameter(DefName,TypeName)),TypeName,Block),
|
|
MethodDecl(func,Parameters(Parameter(DefName,PointerType(TypeName))),FieldName,
|
|
Parameters(Parameter(DefName,"...",ParenthesizedType(TypeName))),TypeName,Block),
|
|
MethodDecl(func,Parameters(Parameter(DefName,PointerType(TypeName))),FieldName,Parameters))
|
|
|
|
# Type declarations
|
|
|
|
type a b
|
|
type (
|
|
a b
|
|
c d
|
|
)
|
|
type a = d[e]
|
|
|
|
==>
|
|
|
|
SourceFile(
|
|
TypeDecl(type,TypeSpec(DefName,TypeName)),
|
|
TypeDecl(type,SpecList(TypeSpec(DefName,TypeName),TypeSpec(DefName,TypeName))),
|
|
TypeDecl(type,TypeSpec(DefName,ParameterizedType(TypeName,TypeArgs(TypeName)))))
|