Files
ask262/engine262/src/static-semantics/IsFunctionDefinition.mts
T

16 lines
887 B
TypeScript

import type { ParseNode } from '../parser/ParseNode.mts';
export type FunctionDeclaration = ParseNode.FunctionExpression | ParseNode.GeneratorExpression | ParseNode.AsyncFunctionExpression | ParseNode.AsyncGeneratorExpression | ParseNode.ClassExpression | ParseNode.ArrowFunction | ParseNode.AsyncArrowFunction | ParseNode.ParenthesizedExpression & { readonly Expression: FunctionDeclaration };
export function IsFunctionDefinition(node: ParseNode): node is FunctionDeclaration {
if (node.type === 'ParenthesizedExpression') {
return IsFunctionDefinition(node.Expression);
}
return node.type === 'FunctionExpression'
|| node.type === 'GeneratorExpression'
|| node.type === 'AsyncGeneratorExpression'
|| node.type === 'AsyncFunctionExpression'
|| node.type === 'ClassExpression'
|| node.type === 'ArrowFunction'
|| node.type === 'AsyncArrowFunction';
}