Starting test recording the current state of the parser
In the next commit, I'll introduce changes to the parser bringing consistent handling of all type modifiers (ref, ptr, var, static and type). The goal of this commit is to record precisely what is going to be changed (i.e. by allowing you to look at the diff). To preserve the diff, please don't squash upon merging.
This commit is contained in:
parent
7ab1aafc6b
commit
8633b1b309
1 changed files with 481 additions and 0 deletions
481
tests/parser/ttypemodifiers.nim
Normal file
481
tests/parser/ttypemodifiers.nim
Normal file
|
|
@ -0,0 +1,481 @@
|
|||
discard """
|
||||
nimout: '''
|
||||
StmtList
|
||||
TypeSection
|
||||
TypeDef
|
||||
Ident "BarePtr"
|
||||
Empty
|
||||
PtrTy
|
||||
TypeDef
|
||||
Ident "GenericPtr"
|
||||
Empty
|
||||
PtrTy
|
||||
Bracket
|
||||
Ident "int"
|
||||
TypeDef
|
||||
Ident "PrefixPtr"
|
||||
Empty
|
||||
PtrTy
|
||||
Ident "int"
|
||||
TypeDef
|
||||
Ident "PtrTuple"
|
||||
Empty
|
||||
PtrTy
|
||||
Par
|
||||
Ident "int"
|
||||
Ident "string"
|
||||
TypeDef
|
||||
Ident "BareRef"
|
||||
Empty
|
||||
RefTy
|
||||
TypeDef
|
||||
Ident "GenericRef"
|
||||
Empty
|
||||
RefTy
|
||||
Bracket
|
||||
Ident "int"
|
||||
TypeDef
|
||||
Ident "RefTupleCl"
|
||||
Empty
|
||||
RefTy
|
||||
TupleTy
|
||||
TypeDef
|
||||
Ident "RefTupleType"
|
||||
Empty
|
||||
RefTy
|
||||
Par
|
||||
Ident "int"
|
||||
Ident "string"
|
||||
TypeDef
|
||||
Ident "RefTupleVars"
|
||||
Empty
|
||||
RefTy
|
||||
Par
|
||||
Ident "a"
|
||||
Ident "b"
|
||||
TypeDef
|
||||
Ident "GenericStatic"
|
||||
Empty
|
||||
StaticTy
|
||||
Ident "int"
|
||||
TypeDef
|
||||
Ident "PrefixStatic"
|
||||
Empty
|
||||
StaticExpr
|
||||
Ident "int"
|
||||
TypeDef
|
||||
Ident "StaticTupleCl"
|
||||
Empty
|
||||
StaticExpr
|
||||
TupleClassTy
|
||||
TypeDef
|
||||
Ident "StaticTuple"
|
||||
Empty
|
||||
StaticExpr
|
||||
Par
|
||||
Ident "int"
|
||||
Ident "string"
|
||||
TypeDef
|
||||
Ident "BareType"
|
||||
Empty
|
||||
Ident "type"
|
||||
TypeDef
|
||||
Ident "GenericType"
|
||||
Empty
|
||||
BracketExpr
|
||||
Ident "type"
|
||||
Ident "float"
|
||||
TypeDef
|
||||
Ident "TypeTupleGen"
|
||||
Empty
|
||||
BracketExpr
|
||||
Ident "type"
|
||||
TupleClassTy
|
||||
TypeDef
|
||||
Ident "TypeInstance"
|
||||
Empty
|
||||
Command
|
||||
Ident "type"
|
||||
BracketExpr
|
||||
Ident "Foo"
|
||||
RefTy
|
||||
TypeDef
|
||||
Ident "bareTypeDesc"
|
||||
Empty
|
||||
Ident "typedesc"
|
||||
TypeDef
|
||||
Ident "TypeOfVar"
|
||||
Empty
|
||||
Call
|
||||
Ident "type"
|
||||
Ident "a"
|
||||
TypeDef
|
||||
Ident "TypeOfTuple1"
|
||||
Empty
|
||||
Call
|
||||
Ident "type"
|
||||
Ident "a"
|
||||
TypeDef
|
||||
Ident "TypeOfTuple2"
|
||||
Empty
|
||||
Call
|
||||
Ident "type"
|
||||
Ident "a"
|
||||
Ident "b"
|
||||
TypeDef
|
||||
Ident "GenericTypedesc"
|
||||
Empty
|
||||
BracketExpr
|
||||
Ident "typedesc"
|
||||
Ident "int"
|
||||
TypeDef
|
||||
Ident "T"
|
||||
Empty
|
||||
Ident "type"
|
||||
ProcDef
|
||||
Ident "foo"
|
||||
Empty
|
||||
Empty
|
||||
FormalParams
|
||||
Ident "type"
|
||||
IdentDefs
|
||||
Ident "bareType"
|
||||
Ident "type"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "genType"
|
||||
BracketExpr
|
||||
Ident "type"
|
||||
Ident "int"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "typeInt"
|
||||
Command
|
||||
Ident "type"
|
||||
Ident "int"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "typeIntAlt"
|
||||
Call
|
||||
Ident "type"
|
||||
Ident "int"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "typeOfVar"
|
||||
Call
|
||||
Ident "type"
|
||||
Ident "a"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "typeDotType"
|
||||
DotExpr
|
||||
Ident "foo"
|
||||
Ident "type"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "genStatic"
|
||||
StaticTy
|
||||
Ident "int"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "staticInt"
|
||||
StaticExpr
|
||||
Ident "int"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "staticVal1"
|
||||
StaticExpr
|
||||
IntLit 10
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "staticVal2"
|
||||
StaticExpr
|
||||
Par
|
||||
StrLit "str"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "staticVal3"
|
||||
StaticExpr
|
||||
StrLit "str"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "staticDotVal"
|
||||
DotExpr
|
||||
IntLit 10
|
||||
Ident "static"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "bareRef"
|
||||
RefTy
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "refTuple1"
|
||||
RefTy
|
||||
Par
|
||||
Ident "int"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "refTuple1A"
|
||||
RefTy
|
||||
TupleConstr
|
||||
Ident "int"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "refTuple2"
|
||||
RefTy
|
||||
Par
|
||||
Ident "int"
|
||||
Ident "string"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "genRef"
|
||||
RefTy
|
||||
Bracket
|
||||
Ident "int"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "refInt"
|
||||
RefTy
|
||||
Ident "int"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "refCall"
|
||||
RefTy
|
||||
Par
|
||||
Ident "a"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "macroCall1"
|
||||
Command
|
||||
Ident "foo"
|
||||
Ident "bar"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "macroCall2"
|
||||
Call
|
||||
Ident "foo"
|
||||
Ident "bar"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "macroCall3"
|
||||
Call
|
||||
DotExpr
|
||||
Ident "foo"
|
||||
Ident "bar"
|
||||
Ident "baz"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "macroCall4"
|
||||
Call
|
||||
BracketExpr
|
||||
Ident "foo"
|
||||
Ident "bar"
|
||||
Ident "baz"
|
||||
Empty
|
||||
IdentDefs
|
||||
Ident "macroCall5"
|
||||
Command
|
||||
Ident "foo"
|
||||
Command
|
||||
Ident "bar"
|
||||
Ident "baz"
|
||||
IntLit 10
|
||||
Empty
|
||||
Empty
|
||||
StmtList
|
||||
Asgn
|
||||
Ident "staticTen"
|
||||
StaticExpr
|
||||
IntLit 10
|
||||
Asgn
|
||||
Ident "staticA"
|
||||
StaticExpr
|
||||
Par
|
||||
Ident "a"
|
||||
Asgn
|
||||
Ident "staticAspace"
|
||||
StaticExpr
|
||||
Par
|
||||
Ident "a"
|
||||
Asgn
|
||||
Ident "staticAtuple"
|
||||
StaticExpr
|
||||
TupleConstr
|
||||
Ident "a"
|
||||
Asgn
|
||||
Ident "staticTuple"
|
||||
StaticExpr
|
||||
Par
|
||||
Ident "a"
|
||||
Ident "b"
|
||||
Asgn
|
||||
Ident "staticTypeTuple"
|
||||
StaticExpr
|
||||
Par
|
||||
Ident "int"
|
||||
Ident "string"
|
||||
Asgn
|
||||
Ident "staticCall"
|
||||
StaticExpr
|
||||
Call
|
||||
Ident "foo"
|
||||
IntLit 1
|
||||
Asgn
|
||||
Ident "staticStrCall"
|
||||
StaticExpr
|
||||
CallStrLit
|
||||
Ident "foo"
|
||||
RStrLit "x"
|
||||
Asgn
|
||||
Ident "staticChainCall"
|
||||
StaticExpr
|
||||
Command
|
||||
Ident "foo"
|
||||
Ident "bar"
|
||||
Asgn
|
||||
Ident "typeTen"
|
||||
Command
|
||||
Ident "type"
|
||||
IntLit 10
|
||||
Asgn
|
||||
Ident "typeA"
|
||||
Call
|
||||
Ident "type"
|
||||
Ident "a"
|
||||
Asgn
|
||||
Ident "typeCall"
|
||||
Command
|
||||
Ident "type"
|
||||
Call
|
||||
Ident "foo"
|
||||
IntLit 1
|
||||
Asgn
|
||||
Ident "typeStrCall"
|
||||
Command
|
||||
Ident "type"
|
||||
CallStrLit
|
||||
Ident "foo"
|
||||
RStrLit "x"
|
||||
Asgn
|
||||
Ident "typeChainCall"
|
||||
Command
|
||||
Ident "type"
|
||||
Command
|
||||
Ident "foo"
|
||||
Ident "bar"
|
||||
Asgn
|
||||
Ident "normalChainCall"
|
||||
Command
|
||||
Ident "foo"
|
||||
Command
|
||||
Ident "bar"
|
||||
Ident "baz"
|
||||
Asgn
|
||||
Ident "normalTupleCall2"
|
||||
Call
|
||||
Ident "foo"
|
||||
Ident "a"
|
||||
Ident "b"
|
||||
StaticStmt
|
||||
StmtList
|
||||
Ident "singleStaticStmt"
|
||||
StaticStmt
|
||||
StmtList
|
||||
Ident "staticStmtList1"
|
||||
Ident "staticStmtList2"
|
||||
'''
|
||||
"""
|
||||
|
||||
import macros
|
||||
|
||||
dumpTree:
|
||||
type
|
||||
BarePtr = ptr
|
||||
GenericPtr = ptr[int]
|
||||
PrefixPtr = ptr int
|
||||
PtrTuple = ptr (int, string)
|
||||
BareRef = ref
|
||||
GenericRef = ref[int]
|
||||
RefTupleCl = ref tuple
|
||||
RefTupleType = ref (int, string)
|
||||
RefTupleVars = ref (a, b)
|
||||
# BareStatic = static # Error: invalid indentation
|
||||
GenericStatic = static[int]
|
||||
PrefixStatic = static int
|
||||
StaticTupleCl = static tuple
|
||||
StaticTuple = static (int, string)
|
||||
BareType = type
|
||||
GenericType = type[float]
|
||||
TypeTupleGen = type[tuple]
|
||||
# TypeTupleCl = type tuple # Error: invalid indentation
|
||||
TypeInstance = type Foo[ref]
|
||||
bareTypeDesc = typedesc
|
||||
TypeOfVar = type(a)
|
||||
# TypeOfVarAlt= type (a) # Error: invalid indentation
|
||||
TypeOfTuple1 = type(a,)
|
||||
TypeOfTuple2 = type(a,b)
|
||||
# TypeOfTuple1A = type (a,) # Error: invalid indentation
|
||||
# TypeOfTuple2A = type (a,b) # Error: invalid indentation
|
||||
# TypeTuple = type (int, string) # Error: invalid indentation
|
||||
GenericTypedesc = typedesc[int]
|
||||
T = type
|
||||
|
||||
proc foo(
|
||||
bareType : type,
|
||||
genType : type[int],
|
||||
typeInt : type int,
|
||||
typeIntAlt : type(int),
|
||||
typeOfVar : type(a),
|
||||
typeDotType : foo.type,
|
||||
# typeTupleCl : type tuple, # Error: ')' expected
|
||||
# bareStatic : static, # Error: expression expected, but found ','
|
||||
genStatic : static[int],
|
||||
staticInt : static int,
|
||||
staticVal1 : static 10,
|
||||
staticVal2 : static("str"),
|
||||
staticVal3 : static "str",
|
||||
# staticVal4 : static"str", # Error: expression expected, but found 'str'
|
||||
staticDotVal : 10.static,
|
||||
bareRef : ref,
|
||||
refTuple1 : ref (int),
|
||||
refTuple1A : ref (int,),
|
||||
refTuple2 : ref (int,string),
|
||||
genRef : ref[int],
|
||||
refInt : ref int,
|
||||
refCall : ref(a),
|
||||
macroCall1 : foo bar,
|
||||
macroCall2 : foo(bar),
|
||||
macroCall3 : foo.bar(baz),
|
||||
macroCall4 : foo[bar](baz),
|
||||
macroCall5 : foo bar baz = 10
|
||||
): type =
|
||||
staticTen = static 10
|
||||
staticA = static(a)
|
||||
staticAspace = static (a)
|
||||
staticAtuple = static (a,)
|
||||
staticTuple = static (a,b)
|
||||
staticTypeTuple = static (int,string)
|
||||
staticCall = static foo(1)
|
||||
staticStrCall = static foo"x"
|
||||
staticChainCall = static foo bar
|
||||
|
||||
typeTen = type 10
|
||||
typeA = type(a)
|
||||
# typeAspace = type (a) # Error: invalid indentation
|
||||
# typeAtuple = type (a,) # Error: invalid indentation
|
||||
# typeTuple = type (a,b) # Error: invalid indentation
|
||||
# typeTypeTuple = type (int,string) # Error: invalid indentation
|
||||
typeCall = type foo(1)
|
||||
typeStrCall = type foo"x"
|
||||
typeChainCall = type foo bar
|
||||
|
||||
normalChainCall = foo bar baz
|
||||
# normalTupleCall1 = foo(a,) # Error: invalid indentation
|
||||
normalTupleCall2 = foo(a,b)
|
||||
# normalTupleCall3 = foo (a,b) # Error: invalid indentation
|
||||
|
||||
static: singleStaticStmt
|
||||
static:
|
||||
staticStmtList1
|
||||
staticStmtList2
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue