// Code generated by _scripts/generate-encoder.ts. DO NOT EDIT. package encoder import ( "fmt" "github.com/microsoft/typescript-go/internal/ast" ) func getNodeDataType(node *ast.Node) uint32 { switch node.Kind { case ast.KindIdentifier, ast.KindPrivateIdentifier, ast.KindJsxText, ast.KindJSDocText, ast.KindJSDocLink, ast.KindJSDocLinkPlain, ast.KindJSDocLinkCode: return NodeDataTypeString case ast.KindStringLiteral, ast.KindNumericLiteral, ast.KindBigIntLiteral, ast.KindRegularExpressionLiteral, ast.KindNoSubstitutionTemplateLiteral, ast.KindTemplateHead, ast.KindTemplateMiddle, ast.KindTemplateTail, ast.KindSourceFile: return NodeDataTypeExtendedData default: return NodeDataTypeChildren } } func getChildrenPropertyMask(node *ast.Node) uint8 { switch node.Kind { case ast.KindQualifiedName: n := node.AsQualifiedName() return (boolToByte(n.Left != nil) << 0) | (boolToByte(n.Right != nil) << 1) case ast.KindComputedPropertyName: n := node.AsComputedPropertyName() return (boolToByte(n.Expression != nil) << 0) case ast.KindDecorator: n := node.AsDecorator() return (boolToByte(n.Expression != nil) << 0) case ast.KindIfStatement: n := node.AsIfStatement() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.ThenStatement != nil) << 1) | (boolToByte(n.ElseStatement != nil) << 2) case ast.KindDoStatement: n := node.AsDoStatement() return (boolToByte(n.Statement != nil) << 0) | (boolToByte(n.Expression != nil) << 1) case ast.KindWhileStatement: n := node.AsWhileStatement() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.Statement != nil) << 1) case ast.KindForStatement: n := node.AsForStatement() return (boolToByte(n.Initializer != nil) << 0) | (boolToByte(n.Condition != nil) << 1) | (boolToByte(n.Incrementor != nil) << 2) | (boolToByte(n.Statement != nil) << 3) case ast.KindForInStatement, ast.KindForOfStatement: n := node.AsForInOrOfStatement() return (boolToByte(n.AwaitModifier != nil) << 0) | (boolToByte(n.Initializer != nil) << 1) | (boolToByte(n.Expression != nil) << 2) | (boolToByte(n.Statement != nil) << 3) case ast.KindBreakStatement: n := node.AsBreakStatement() return (boolToByte(n.Label != nil) << 0) case ast.KindContinueStatement: n := node.AsContinueStatement() return (boolToByte(n.Label != nil) << 0) case ast.KindReturnStatement: n := node.AsReturnStatement() return (boolToByte(n.Expression != nil) << 0) case ast.KindWithStatement: n := node.AsWithStatement() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.Statement != nil) << 1) case ast.KindSwitchStatement: n := node.AsSwitchStatement() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.CaseBlock != nil) << 1) case ast.KindCaseBlock: n := node.AsCaseBlock() return (boolToByte(n.Clauses != nil) << 0) case ast.KindCaseClause, ast.KindDefaultClause: n := node.AsCaseOrDefaultClause() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.Statements != nil) << 1) case ast.KindThrowStatement: n := node.AsThrowStatement() return (boolToByte(n.Expression != nil) << 0) case ast.KindTryStatement: n := node.AsTryStatement() return (boolToByte(n.TryBlock != nil) << 0) | (boolToByte(n.CatchClause != nil) << 1) | (boolToByte(n.FinallyBlock != nil) << 2) case ast.KindCatchClause: n := node.AsCatchClause() return (boolToByte(n.VariableDeclaration != nil) << 0) | (boolToByte(n.Block != nil) << 1) case ast.KindLabeledStatement: n := node.AsLabeledStatement() return (boolToByte(n.Label != nil) << 0) | (boolToByte(n.Statement != nil) << 1) case ast.KindExpressionStatement: n := node.AsExpressionStatement() return (boolToByte(n.Expression != nil) << 0) case ast.KindBlock: n := node.AsBlock() return (boolToByte(n.Statements != nil) << 0) case ast.KindVariableStatement: n := node.AsVariableStatement() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.DeclarationList != nil) << 1) case ast.KindVariableDeclaration: n := node.AsVariableDeclaration() return (boolToByte(n.Name() != nil) << 0) | (boolToByte(n.ExclamationToken != nil) << 1) | (boolToByte(n.Type != nil) << 2) | (boolToByte(n.Initializer != nil) << 3) case ast.KindVariableDeclarationList: n := node.AsVariableDeclarationList() return (boolToByte(n.Declarations != nil) << 0) case ast.KindObjectBindingPattern, ast.KindArrayBindingPattern: n := node.AsBindingPattern() return (boolToByte(n.Elements != nil) << 0) case ast.KindParameter: n := node.AsParameterDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.DotDotDotToken != nil) << 1) | (boolToByte(n.Name() != nil) << 2) | (boolToByte(n.QuestionToken != nil) << 3) | (boolToByte(n.Type != nil) << 4) | (boolToByte(n.Initializer != nil) << 5) case ast.KindBindingElement: n := node.AsBindingElement() return (boolToByte(n.DotDotDotToken != nil) << 0) | (boolToByte(n.PropertyName != nil) << 1) | (boolToByte(n.Name() != nil) << 2) | (boolToByte(n.Initializer != nil) << 3) case ast.KindMissingDeclaration: n := node.AsMissingDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) case ast.KindFunctionDeclaration: n := node.AsFunctionDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.AsteriskToken != nil) << 1) | (boolToByte(n.Name() != nil) << 2) | (boolToByte(n.TypeParameters != nil) << 3) | (boolToByte(n.Parameters != nil) << 4) | (boolToByte(n.Type != nil) << 5) | (boolToByte(n.Body != nil) << 6) case ast.KindClassDeclaration: n := node.AsClassDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.TypeParameters != nil) << 2) | (boolToByte(n.HeritageClauses != nil) << 3) | (boolToByte(n.Members != nil) << 4) case ast.KindClassExpression: n := node.AsClassExpression() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.TypeParameters != nil) << 2) | (boolToByte(n.HeritageClauses != nil) << 3) | (boolToByte(n.Members != nil) << 4) case ast.KindHeritageClause: n := node.AsHeritageClause() return (boolToByte(n.Types != nil) << 0) case ast.KindInterfaceDeclaration: n := node.AsInterfaceDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.TypeParameters != nil) << 2) | (boolToByte(n.HeritageClauses != nil) << 3) | (boolToByte(n.Members != nil) << 4) case ast.KindTypeAliasDeclaration, ast.KindJSTypeAliasDeclaration: n := node.AsTypeAliasDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.TypeParameters != nil) << 2) | (boolToByte(n.Type != nil) << 3) case ast.KindEnumMember: n := node.AsEnumMember() return (boolToByte(n.Name() != nil) << 0) | (boolToByte(n.Initializer != nil) << 1) case ast.KindEnumDeclaration: n := node.AsEnumDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.Members != nil) << 2) case ast.KindModuleBlock: n := node.AsModuleBlock() return (boolToByte(n.Statements != nil) << 0) case ast.KindImportDeclaration, ast.KindJSImportDeclaration: n := node.AsImportDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.ImportClause != nil) << 1) | (boolToByte(n.ModuleSpecifier != nil) << 2) | (boolToByte(n.Attributes != nil) << 3) case ast.KindExternalModuleReference: n := node.AsExternalModuleReference() return (boolToByte(n.Expression != nil) << 0) case ast.KindNamespaceImport: n := node.AsNamespaceImport() return (boolToByte(n.Name() != nil) << 0) case ast.KindNamedImports: n := node.AsNamedImports() return (boolToByte(n.Elements != nil) << 0) case ast.KindExportAssignment: n := node.AsExportAssignment() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Type != nil) << 1) | (boolToByte(n.Expression != nil) << 2) case ast.KindNamespaceExportDeclaration: n := node.AsNamespaceExportDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) case ast.KindNamespaceExport: n := node.AsNamespaceExport() return (boolToByte(n.Name() != nil) << 0) case ast.KindNamedExports: n := node.AsNamedExports() return (boolToByte(n.Elements != nil) << 0) case ast.KindExportSpecifier: n := node.AsExportSpecifier() return (boolToByte(n.PropertyName != nil) << 0) | (boolToByte(n.Name() != nil) << 1) case ast.KindCallSignature: n := node.AsCallSignatureDeclaration() return (boolToByte(n.TypeParameters != nil) << 0) | (boolToByte(n.Parameters != nil) << 1) | (boolToByte(n.Type != nil) << 2) case ast.KindConstructSignature: n := node.AsConstructSignatureDeclaration() return (boolToByte(n.TypeParameters != nil) << 0) | (boolToByte(n.Parameters != nil) << 1) | (boolToByte(n.Type != nil) << 2) case ast.KindConstructor: n := node.AsConstructorDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.TypeParameters != nil) << 1) | (boolToByte(n.Parameters != nil) << 2) | (boolToByte(n.Type != nil) << 3) | (boolToByte(n.Body != nil) << 4) case ast.KindGetAccessor: n := node.AsGetAccessorDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.TypeParameters != nil) << 2) | (boolToByte(n.Parameters != nil) << 3) | (boolToByte(n.Type != nil) << 4) | (boolToByte(n.Body != nil) << 5) case ast.KindSetAccessor: n := node.AsSetAccessorDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.TypeParameters != nil) << 2) | (boolToByte(n.Parameters != nil) << 3) | (boolToByte(n.Type != nil) << 4) | (boolToByte(n.Body != nil) << 5) case ast.KindIndexSignature: n := node.AsIndexSignatureDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Parameters != nil) << 1) | (boolToByte(n.Type != nil) << 2) case ast.KindMethodSignature: n := node.AsMethodSignatureDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.PostfixToken != nil) << 2) | (boolToByte(n.TypeParameters != nil) << 3) | (boolToByte(n.Parameters != nil) << 4) | (boolToByte(n.Type != nil) << 5) case ast.KindMethodDeclaration: n := node.AsMethodDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.AsteriskToken != nil) << 1) | (boolToByte(n.Name() != nil) << 2) | (boolToByte(n.PostfixToken != nil) << 3) | (boolToByte(n.TypeParameters != nil) << 4) | (boolToByte(n.Parameters != nil) << 5) | (boolToByte(n.Type != nil) << 6) | (boolToByte(n.Body != nil) << 7) case ast.KindPropertySignature: n := node.AsPropertySignatureDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.PostfixToken != nil) << 2) | (boolToByte(n.Type != nil) << 3) | (boolToByte(n.Initializer != nil) << 4) case ast.KindPropertyDeclaration: n := node.AsPropertyDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.PostfixToken != nil) << 2) | (boolToByte(n.Type != nil) << 3) | (boolToByte(n.Initializer != nil) << 4) case ast.KindClassStaticBlockDeclaration: n := node.AsClassStaticBlockDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Body != nil) << 1) case ast.KindBinaryExpression: n := node.AsBinaryExpression() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Left != nil) << 1) | (boolToByte(n.Type != nil) << 2) | (boolToByte(n.OperatorToken != nil) << 3) | (boolToByte(n.Right != nil) << 4) case ast.KindPrefixUnaryExpression: n := node.AsPrefixUnaryExpression() return (boolToByte(n.Operand != nil) << 0) case ast.KindPostfixUnaryExpression: n := node.AsPostfixUnaryExpression() return (boolToByte(n.Operand != nil) << 0) case ast.KindYieldExpression: n := node.AsYieldExpression() return (boolToByte(n.AsteriskToken != nil) << 0) | (boolToByte(n.Expression != nil) << 1) case ast.KindArrowFunction: n := node.AsArrowFunction() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.TypeParameters != nil) << 1) | (boolToByte(n.Parameters != nil) << 2) | (boolToByte(n.Type != nil) << 3) | (boolToByte(n.EqualsGreaterThanToken != nil) << 4) | (boolToByte(n.Body != nil) << 5) case ast.KindFunctionExpression: n := node.AsFunctionExpression() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.AsteriskToken != nil) << 1) | (boolToByte(n.Name() != nil) << 2) | (boolToByte(n.TypeParameters != nil) << 3) | (boolToByte(n.Parameters != nil) << 4) | (boolToByte(n.Type != nil) << 5) | (boolToByte(n.Body != nil) << 6) case ast.KindAsExpression: n := node.AsAsExpression() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.Type != nil) << 1) case ast.KindSatisfiesExpression: n := node.AsSatisfiesExpression() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.Type != nil) << 1) case ast.KindConditionalExpression: n := node.AsConditionalExpression() return (boolToByte(n.Condition != nil) << 0) | (boolToByte(n.QuestionToken != nil) << 1) | (boolToByte(n.WhenTrue != nil) << 2) | (boolToByte(n.ColonToken != nil) << 3) | (boolToByte(n.WhenFalse != nil) << 4) case ast.KindPropertyAccessExpression: n := node.AsPropertyAccessExpression() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.QuestionDotToken != nil) << 1) | (boolToByte(n.Name() != nil) << 2) case ast.KindElementAccessExpression: n := node.AsElementAccessExpression() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.QuestionDotToken != nil) << 1) | (boolToByte(n.ArgumentExpression != nil) << 2) case ast.KindCallExpression: n := node.AsCallExpression() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.QuestionDotToken != nil) << 1) | (boolToByte(n.TypeArguments != nil) << 2) | (boolToByte(n.Arguments != nil) << 3) case ast.KindNewExpression: n := node.AsNewExpression() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.TypeArguments != nil) << 1) | (boolToByte(n.Arguments != nil) << 2) case ast.KindMetaProperty: n := node.AsMetaProperty() return (boolToByte(n.Name() != nil) << 0) case ast.KindNonNullExpression: n := node.AsNonNullExpression() return (boolToByte(n.Expression != nil) << 0) case ast.KindSpreadElement: n := node.AsSpreadElement() return (boolToByte(n.Expression != nil) << 0) case ast.KindTemplateExpression: n := node.AsTemplateExpression() return (boolToByte(n.Head != nil) << 0) | (boolToByte(n.TemplateSpans != nil) << 1) case ast.KindTemplateSpan: n := node.AsTemplateSpan() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.Literal != nil) << 1) case ast.KindTaggedTemplateExpression: n := node.AsTaggedTemplateExpression() return (boolToByte(n.Tag != nil) << 0) | (boolToByte(n.QuestionDotToken != nil) << 1) | (boolToByte(n.TypeArguments != nil) << 2) | (boolToByte(n.Template != nil) << 3) case ast.KindParenthesizedExpression: n := node.AsParenthesizedExpression() return (boolToByte(n.Expression != nil) << 0) case ast.KindArrayLiteralExpression: n := node.AsArrayLiteralExpression() return (boolToByte(n.Elements != nil) << 0) case ast.KindObjectLiteralExpression: n := node.AsObjectLiteralExpression() return (boolToByte(n.Properties != nil) << 0) case ast.KindSpreadAssignment: n := node.AsSpreadAssignment() return (boolToByte(n.Expression != nil) << 0) case ast.KindPropertyAssignment: n := node.AsPropertyAssignment() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.PostfixToken != nil) << 2) | (boolToByte(n.Type != nil) << 3) | (boolToByte(n.Initializer != nil) << 4) case ast.KindShorthandPropertyAssignment: n := node.AsShorthandPropertyAssignment() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.PostfixToken != nil) << 2) | (boolToByte(n.Type != nil) << 3) | (boolToByte(n.EqualsToken != nil) << 4) | (boolToByte(n.ObjectAssignmentInitializer != nil) << 5) case ast.KindDeleteExpression: n := node.AsDeleteExpression() return (boolToByte(n.Expression != nil) << 0) case ast.KindTypeOfExpression: n := node.AsTypeOfExpression() return (boolToByte(n.Expression != nil) << 0) case ast.KindVoidExpression: n := node.AsVoidExpression() return (boolToByte(n.Expression != nil) << 0) case ast.KindAwaitExpression: n := node.AsAwaitExpression() return (boolToByte(n.Expression != nil) << 0) case ast.KindTypeAssertionExpression: n := node.AsTypeAssertion() return (boolToByte(n.Type != nil) << 0) | (boolToByte(n.Expression != nil) << 1) case ast.KindUnionType: n := node.AsUnionTypeNode() return (boolToByte(n.Types != nil) << 0) case ast.KindIntersectionType: n := node.AsIntersectionTypeNode() return (boolToByte(n.Types != nil) << 0) case ast.KindConditionalType: n := node.AsConditionalTypeNode() return (boolToByte(n.CheckType != nil) << 0) | (boolToByte(n.ExtendsType != nil) << 1) | (boolToByte(n.TrueType != nil) << 2) | (boolToByte(n.FalseType != nil) << 3) case ast.KindTypeOperator: n := node.AsTypeOperatorNode() return (boolToByte(n.Type != nil) << 0) case ast.KindInferType: n := node.AsInferTypeNode() return (boolToByte(n.TypeParameter != nil) << 0) case ast.KindArrayType: n := node.AsArrayTypeNode() return (boolToByte(n.ElementType != nil) << 0) case ast.KindIndexedAccessType: n := node.AsIndexedAccessTypeNode() return (boolToByte(n.ObjectType != nil) << 0) | (boolToByte(n.IndexType != nil) << 1) case ast.KindTypeReference: n := node.AsTypeReferenceNode() return (boolToByte(n.TypeName != nil) << 0) | (boolToByte(n.TypeArguments != nil) << 1) case ast.KindExpressionWithTypeArguments: n := node.AsExpressionWithTypeArguments() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.TypeArguments != nil) << 1) case ast.KindLiteralType: n := node.AsLiteralTypeNode() return (boolToByte(n.Literal != nil) << 0) case ast.KindTypePredicate: n := node.AsTypePredicateNode() return (boolToByte(n.AssertsModifier != nil) << 0) | (boolToByte(n.ParameterName != nil) << 1) | (boolToByte(n.Type != nil) << 2) case ast.KindImportAttribute: n := node.AsImportAttribute() return (boolToByte(n.Name() != nil) << 0) | (boolToByte(n.Value != nil) << 1) case ast.KindImportAttributes: n := node.AsImportAttributes() return (boolToByte(n.Attributes != nil) << 0) case ast.KindTypeQuery: n := node.AsTypeQueryNode() return (boolToByte(n.ExprName != nil) << 0) | (boolToByte(n.TypeArguments != nil) << 1) case ast.KindMappedType: n := node.AsMappedTypeNode() return (boolToByte(n.ReadonlyToken != nil) << 0) | (boolToByte(n.TypeParameter != nil) << 1) | (boolToByte(n.NameType != nil) << 2) | (boolToByte(n.QuestionToken != nil) << 3) | (boolToByte(n.Type != nil) << 4) | (boolToByte(n.Members != nil) << 5) case ast.KindTypeLiteral: n := node.AsTypeLiteralNode() return (boolToByte(n.Members != nil) << 0) case ast.KindTupleType: n := node.AsTupleTypeNode() return (boolToByte(n.Elements != nil) << 0) case ast.KindNamedTupleMember: n := node.AsNamedTupleMember() return (boolToByte(n.DotDotDotToken != nil) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.QuestionToken != nil) << 2) | (boolToByte(n.Type != nil) << 3) case ast.KindOptionalType: n := node.AsOptionalTypeNode() return (boolToByte(n.Type != nil) << 0) case ast.KindRestType: n := node.AsRestTypeNode() return (boolToByte(n.Type != nil) << 0) case ast.KindParenthesizedType: n := node.AsParenthesizedTypeNode() return (boolToByte(n.Type != nil) << 0) case ast.KindFunctionType: n := node.AsFunctionTypeNode() return (boolToByte(n.TypeParameters != nil) << 0) | (boolToByte(n.Parameters != nil) << 1) | (boolToByte(n.Type != nil) << 2) case ast.KindConstructorType: n := node.AsConstructorTypeNode() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.TypeParameters != nil) << 1) | (boolToByte(n.Parameters != nil) << 2) | (boolToByte(n.Type != nil) << 3) case ast.KindTemplateLiteralType: n := node.AsTemplateLiteralTypeNode() return (boolToByte(n.Head != nil) << 0) | (boolToByte(n.TemplateSpans != nil) << 1) case ast.KindTemplateLiteralTypeSpan: n := node.AsTemplateLiteralTypeSpan() return (boolToByte(n.Type != nil) << 0) | (boolToByte(n.Literal != nil) << 1) case ast.KindSyntheticExpression: n := node.AsSyntheticExpression() return (boolToByte(n.TupleNameSource != nil) << 0) case ast.KindPartiallyEmittedExpression: n := node.AsPartiallyEmittedExpression() return (boolToByte(n.Expression != nil) << 0) case ast.KindJsxElement: n := node.AsJsxElement() return (boolToByte(n.OpeningElement != nil) << 0) | (boolToByte(n.Children != nil) << 1) | (boolToByte(n.ClosingElement != nil) << 2) case ast.KindJsxAttributes: n := node.AsJsxAttributes() return (boolToByte(n.Properties != nil) << 0) case ast.KindJsxNamespacedName: n := node.AsJsxNamespacedName() return (boolToByte(n.Namespace != nil) << 0) | (boolToByte(n.Name() != nil) << 1) case ast.KindJsxOpeningElement: n := node.AsJsxOpeningElement() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.TypeArguments != nil) << 1) | (boolToByte(n.Attributes != nil) << 2) case ast.KindJsxSelfClosingElement: n := node.AsJsxSelfClosingElement() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.TypeArguments != nil) << 1) | (boolToByte(n.Attributes != nil) << 2) case ast.KindJsxFragment: n := node.AsJsxFragment() return (boolToByte(n.OpeningFragment != nil) << 0) | (boolToByte(n.Children != nil) << 1) | (boolToByte(n.ClosingFragment != nil) << 2) case ast.KindJsxAttribute: n := node.AsJsxAttribute() return (boolToByte(n.Name() != nil) << 0) | (boolToByte(n.Initializer != nil) << 1) case ast.KindJsxSpreadAttribute: n := node.AsJsxSpreadAttribute() return (boolToByte(n.Expression != nil) << 0) case ast.KindJsxClosingElement: n := node.AsJsxClosingElement() return (boolToByte(n.TagName != nil) << 0) case ast.KindJsxExpression: n := node.AsJsxExpression() return (boolToByte(n.DotDotDotToken != nil) << 0) | (boolToByte(n.Expression != nil) << 1) case ast.KindSyntaxList: n := node.AsSyntaxList() return (boolToByte(len(n.Children) > 0) << 0) case ast.KindJSDoc: n := node.AsJSDoc() return (boolToByte(n.Comment != nil) << 0) | (boolToByte(n.Tags != nil) << 1) case ast.KindJSDocTypeExpression: n := node.AsJSDocTypeExpression() return (boolToByte(n.Type != nil) << 0) case ast.KindJSDocNonNullableType: n := node.AsJSDocNonNullableType() return (boolToByte(n.Type != nil) << 0) case ast.KindJSDocNullableType: n := node.AsJSDocNullableType() return (boolToByte(n.Type != nil) << 0) case ast.KindJSDocVariadicType: n := node.AsJSDocVariadicType() return (boolToByte(n.Type != nil) << 0) case ast.KindJSDocOptionalType: n := node.AsJSDocOptionalType() return (boolToByte(n.Type != nil) << 0) case ast.KindJSDocTypeTag: n := node.AsJSDocTypeTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.TypeExpression != nil) << 1) | (boolToByte(n.Comment != nil) << 2) case ast.KindJSDocUnknownTag: n := node.AsJSDocUnknownTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.Comment != nil) << 1) case ast.KindJSDocTemplateTag: n := node.AsJSDocTemplateTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.Constraint != nil) << 1) | (boolToByte(n.TypeParameters != nil) << 2) | (boolToByte(n.Comment != nil) << 3) case ast.KindJSDocReturnTag: n := node.AsJSDocReturnTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.TypeExpression != nil) << 1) | (boolToByte(n.Comment != nil) << 2) case ast.KindJSDocPublicTag: n := node.AsJSDocPublicTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.Comment != nil) << 1) case ast.KindJSDocPrivateTag: n := node.AsJSDocPrivateTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.Comment != nil) << 1) case ast.KindJSDocProtectedTag: n := node.AsJSDocProtectedTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.Comment != nil) << 1) case ast.KindJSDocReadonlyTag: n := node.AsJSDocReadonlyTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.Comment != nil) << 1) case ast.KindJSDocOverrideTag: n := node.AsJSDocOverrideTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.Comment != nil) << 1) case ast.KindJSDocDeprecatedTag: n := node.AsJSDocDeprecatedTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.Comment != nil) << 1) case ast.KindJSDocSeeTag: n := node.AsJSDocSeeTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.NameExpression != nil) << 1) | (boolToByte(n.Comment != nil) << 2) case ast.KindJSDocImplementsTag: n := node.AsJSDocImplementsTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.ClassName != nil) << 1) | (boolToByte(n.Comment != nil) << 2) case ast.KindJSDocAugmentsTag: n := node.AsJSDocAugmentsTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.ClassName != nil) << 1) | (boolToByte(n.Comment != nil) << 2) case ast.KindJSDocSatisfiesTag: n := node.AsJSDocSatisfiesTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.TypeExpression != nil) << 1) | (boolToByte(n.Comment != nil) << 2) case ast.KindJSDocThrowsTag: n := node.AsJSDocThrowsTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.TypeExpression != nil) << 1) | (boolToByte(n.Comment != nil) << 2) case ast.KindJSDocThisTag: n := node.AsJSDocThisTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.TypeExpression != nil) << 1) | (boolToByte(n.Comment != nil) << 2) case ast.KindJSDocImportTag: n := node.AsJSDocImportTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.ImportClause != nil) << 1) | (boolToByte(n.ModuleSpecifier != nil) << 2) | (boolToByte(n.Attributes != nil) << 3) | (boolToByte(n.Comment != nil) << 4) case ast.KindJSDocCallbackTag: n := node.AsJSDocCallbackTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.TypeExpression != nil) << 1) | (boolToByte(n.Name() != nil) << 2) | (boolToByte(n.Comment != nil) << 3) case ast.KindJSDocOverloadTag: n := node.AsJSDocOverloadTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.TypeExpression != nil) << 1) | (boolToByte(n.Comment != nil) << 2) case ast.KindJSDocTypedefTag: n := node.AsJSDocTypedefTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.TypeExpression != nil) << 1) | (boolToByte(n.Name() != nil) << 2) | (boolToByte(n.Comment != nil) << 3) case ast.KindJSDocSignature: n := node.AsJSDocSignature() return (boolToByte(n.TypeParameters != nil) << 0) | (boolToByte(n.Parameters != nil) << 1) | (boolToByte(n.Type != nil) << 2) case ast.KindJSDocNameReference: n := node.AsJSDocNameReference() return (boolToByte(n.Name() != nil) << 0) case ast.KindModuleDeclaration: n := node.AsModuleDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.Body != nil) << 2) case ast.KindImportEqualsDeclaration: n := node.AsImportEqualsDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.ModuleReference != nil) << 2) case ast.KindExportDeclaration: n := node.AsExportDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.ExportClause != nil) << 1) | (boolToByte(n.ModuleSpecifier != nil) << 2) | (boolToByte(n.Attributes != nil) << 3) case ast.KindImportType: n := node.AsImportTypeNode() return (boolToByte(n.Argument != nil) << 0) | (boolToByte(n.Attributes != nil) << 1) | (boolToByte(n.Qualifier != nil) << 2) | (boolToByte(n.TypeArguments != nil) << 3) case ast.KindImportClause: n := node.AsImportClause() return (boolToByte(n.Name() != nil) << 0) | (boolToByte(n.NamedBindings != nil) << 1) case ast.KindImportSpecifier: n := node.AsImportSpecifier() return (boolToByte(n.PropertyName != nil) << 0) | (boolToByte(n.Name() != nil) << 1) case ast.KindJSDocLink: n := node.AsJSDocLink() return (boolToByte(n.Name() != nil) << 0) case ast.KindJSDocLinkPlain: n := node.AsJSDocLinkPlain() return (boolToByte(n.Name() != nil) << 0) case ast.KindJSDocLinkCode: n := node.AsJSDocLinkCode() return (boolToByte(n.Name() != nil) << 0) case ast.KindTypeParameter: n := node.AsTypeParameterDeclaration() return (boolToByte(hasModifiers(n.Modifiers())) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.Constraint != nil) << 2) | (boolToByte(n.Expression != nil) << 3) | (boolToByte(n.DefaultType != nil) << 4) case ast.KindSyntheticReferenceExpression: n := node.AsSyntheticReferenceExpression() return (boolToByte(n.Expression != nil) << 0) | (boolToByte(n.ThisArg != nil) << 1) case ast.KindJSDocTypeLiteral: n := node.AsJSDocTypeLiteral() return (boolToByte(len(n.JSDocPropertyTags) > 0) << 0) case ast.KindJSDocParameterTag, ast.KindJSDocPropertyTag: n := node.AsJSDocParameterOrPropertyTag() return (boolToByte(n.TagName != nil) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.TypeExpression != nil) << 2) | (boolToByte(n.Comment != nil) << 3) default: return 0 } } func getNodeCommonData(node *ast.Node) uint32 { switch node.Kind { case ast.KindBlock: n := node.AsBlock() return uint32(boolToByte(n.MultiLine)) << 24 case ast.KindHeritageClause: n := node.AsHeritageClause() var tokenIdx uint32 switch n.Token { case ast.KindImplementsKeyword: tokenIdx = 1 } return tokenIdx << 24 case ast.KindExportAssignment: n := node.AsExportAssignment() return uint32(boolToByte(n.IsExportEquals)) << 24 case ast.KindExportSpecifier: n := node.AsExportSpecifier() return uint32(boolToByte(n.IsTypeOnly)) << 24 case ast.KindPrefixUnaryExpression: n := node.AsPrefixUnaryExpression() var operatorIdx uint32 switch n.Operator { case ast.KindMinusToken: operatorIdx = 1 case ast.KindTildeToken: operatorIdx = 2 case ast.KindExclamationToken: operatorIdx = 3 case ast.KindPlusPlusToken: operatorIdx = 4 case ast.KindMinusMinusToken: operatorIdx = 5 } return operatorIdx << 24 case ast.KindPostfixUnaryExpression: n := node.AsPostfixUnaryExpression() var operatorIdx uint32 switch n.Operator { case ast.KindMinusMinusToken: operatorIdx = 1 } return operatorIdx << 24 case ast.KindMetaProperty: n := node.AsMetaProperty() var keywordTokenIdx uint32 switch n.KeywordToken { case ast.KindNewKeyword: keywordTokenIdx = 1 } return keywordTokenIdx << 24 case ast.KindArrayLiteralExpression: n := node.AsArrayLiteralExpression() return uint32(boolToByte(n.MultiLine)) << 24 case ast.KindObjectLiteralExpression: n := node.AsObjectLiteralExpression() return uint32(boolToByte(n.MultiLine)) << 24 case ast.KindTypeOperator: n := node.AsTypeOperatorNode() var operatorIdx uint32 switch n.Operator { case ast.KindReadonlyKeyword: operatorIdx = 1 case ast.KindUniqueKeyword: operatorIdx = 2 } return operatorIdx << 24 case ast.KindImportAttributes: n := node.AsImportAttributes() var tokenIdx uint32 switch n.Token { case ast.KindAssertKeyword: tokenIdx = 1 } return uint32(boolToByte(n.MultiLine))<<24 | tokenIdx<<25 case ast.KindSyntheticExpression: return getNodeCommonData_SyntheticExpression(node) case ast.KindJsxText: n := node.AsJsxText() return uint32(boolToByte(n.ContainsOnlyTriviaWhiteSpaces)) << 24 case ast.KindModuleDeclaration: n := node.AsModuleDeclaration() var keywordIdx uint32 switch n.Keyword { case ast.KindNamespaceKeyword: keywordIdx = 1 } return keywordIdx << 24 case ast.KindImportEqualsDeclaration: n := node.AsImportEqualsDeclaration() return uint32(boolToByte(n.IsTypeOnly)) << 24 case ast.KindExportDeclaration: n := node.AsExportDeclaration() return uint32(boolToByte(n.IsTypeOnly)) << 24 case ast.KindImportType: n := node.AsImportTypeNode() return uint32(boolToByte(n.IsTypeOf)) << 24 case ast.KindImportClause: n := node.AsImportClause() var phaseModifierIdx uint32 switch n.PhaseModifier { case ast.KindTypeKeyword: phaseModifierIdx = 1 case ast.KindDeferKeyword: phaseModifierIdx = 2 } return phaseModifierIdx << 24 case ast.KindImportSpecifier: n := node.AsImportSpecifier() return uint32(boolToByte(n.IsTypeOnly)) << 24 case ast.KindJSDocTypeLiteral: n := node.AsJSDocTypeLiteral() return uint32(boolToByte(n.IsArrayType)) << 24 case ast.KindJSDocParameterTag, ast.KindJSDocPropertyTag: n := node.AsJSDocParameterOrPropertyTag() return uint32(boolToByte(n.IsBracketed))<<24 | uint32(boolToByte(n.IsNameFirst))<<25 } return 0 } func recordNodeStrings(node *ast.Node, strs *stringTable) uint32 { switch node.Kind { case ast.KindIdentifier: return strs.add(node.AsIdentifier().Text, node.Kind, node.Pos(), node.End()) case ast.KindPrivateIdentifier: return strs.add(node.AsPrivateIdentifier().Text, node.Kind, node.Pos(), node.End()) case ast.KindJsxText: return strs.add(node.AsJsxText().Text, node.Kind, node.Pos(), node.End()) case ast.KindJSDocText: return strs.add(node.AsJSDocText().Text(), node.Kind, node.Pos(), node.End()) case ast.KindJSDocLink: return strs.add(node.AsJSDocLink().Text(), node.Kind, node.Pos(), node.End()) case ast.KindJSDocLinkPlain: return strs.add(node.AsJSDocLinkPlain().Text(), node.Kind, node.Pos(), node.End()) case ast.KindJSDocLinkCode: return strs.add(node.AsJSDocLinkCode().Text(), node.Kind, node.Pos(), node.End()) default: panic(fmt.Sprintf("Unexpected node kind %v", node.Kind)) } } func recordExtendedData(node *ast.Node, strs *stringTable, positionMap *ast.PositionMap, extendedData *[]byte, structuredData *[]byte) uint32 { offset := uint32(len(*extendedData)) switch node.Kind { case ast.KindStringLiteral: recordExtendedData_StringLiteral(node, strs, positionMap, extendedData, structuredData) case ast.KindNumericLiteral: recordExtendedData_NumericLiteral(node, strs, positionMap, extendedData, structuredData) case ast.KindBigIntLiteral: recordExtendedData_BigIntLiteral(node, strs, positionMap, extendedData, structuredData) case ast.KindRegularExpressionLiteral: recordExtendedData_RegularExpressionLiteral(node, strs, positionMap, extendedData, structuredData) case ast.KindNoSubstitutionTemplateLiteral: recordExtendedData_NoSubstitutionTemplateLiteral(node, strs, positionMap, extendedData, structuredData) case ast.KindTemplateHead: recordExtendedData_TemplateHead(node, strs, positionMap, extendedData, structuredData) case ast.KindTemplateMiddle: recordExtendedData_TemplateMiddle(node, strs, positionMap, extendedData, structuredData) case ast.KindTemplateTail: recordExtendedData_TemplateTail(node, strs, positionMap, extendedData, structuredData) case ast.KindSourceFile: recordExtendedData_SourceFile(node, strs, positionMap, extendedData, structuredData) default: panic(fmt.Sprintf("unknown extended data node kind %v", node.Kind)) } return offset }