repo_description: Staging repo for development of native port of TypeScript
code: 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
  }
  