vendor tsgo
This commit is contained in:
37
tools/tsgo/internal/ast/functionflags.go
Normal file
37
tools/tsgo/internal/ast/functionflags.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package ast
|
||||
|
||||
type FunctionFlags uint32
|
||||
|
||||
const (
|
||||
FunctionFlagsNormal FunctionFlags = 0
|
||||
FunctionFlagsGenerator FunctionFlags = 1 << 0
|
||||
FunctionFlagsAsync FunctionFlags = 1 << 1
|
||||
FunctionFlagsInvalid FunctionFlags = 1 << 2
|
||||
FunctionFlagsAsyncGenerator FunctionFlags = FunctionFlagsAsync | FunctionFlagsGenerator
|
||||
)
|
||||
|
||||
func GetFunctionFlags(node *Node) FunctionFlags {
|
||||
if node == nil {
|
||||
return FunctionFlagsInvalid
|
||||
}
|
||||
data := node.BodyData()
|
||||
if data == nil {
|
||||
return FunctionFlagsInvalid
|
||||
}
|
||||
flags := FunctionFlagsNormal
|
||||
switch node.Kind {
|
||||
case KindFunctionDeclaration, KindFunctionExpression, KindMethodDeclaration:
|
||||
if data.AsteriskToken != nil {
|
||||
flags |= FunctionFlagsGenerator
|
||||
}
|
||||
fallthrough
|
||||
case KindArrowFunction:
|
||||
if HasSyntacticModifier(node, ModifierFlagsAsync) {
|
||||
flags |= FunctionFlagsAsync
|
||||
}
|
||||
}
|
||||
if data.Body == nil {
|
||||
flags |= FunctionFlagsInvalid
|
||||
}
|
||||
return flags
|
||||
}
|
||||
Reference in New Issue
Block a user