from Node import error


SYNTAX_NODE_SERIALIZATION_CODES = {
    # 0 is 'Token'. Needs to be defined manually
    # 1 is 'Unknown'. Needs to be defined manually
    'UnknownDecl': 2,
    'TypealiasDecl': 3,
    'AssociatedtypeDecl': 4,
    'IfConfigDecl': 5,
    'PoundErrorDecl': 6,
    'PoundWarningDecl': 7,
    'PoundSourceLocation': 8,
    'ClassDecl': 9,
    'StructDecl': 10,
    'ProtocolDecl': 11,
    'ExtensionDecl': 12,
    'FunctionDecl': 13,
    'InitializerDecl': 14,
    'DeinitializerDecl': 15,
    'SubscriptDecl': 16,
    'ImportDecl': 17,
    'AccessorDecl': 18,
    'VariableDecl': 19,
    'EnumCaseDecl': 20,
    'EnumDecl': 21,
    'OperatorDecl': 22,
    'PrecedenceGroupDecl': 23,
    'UnknownExpr': 24,
    'InOutExpr': 25,
    'PoundColumnExpr': 26,
    'TryExpr': 27,
    'IdentifierExpr': 28,
    'SuperRefExpr': 29,
    'NilLiteralExpr': 30,
    'DiscardAssignmentExpr': 31,
    'AssignmentExpr': 32,
    'SequenceExpr': 33,
    'PoundLineExpr': 34,
    'PoundFileExpr': 35,
    'PoundFunctionExpr': 36,
    'PoundDsohandleExpr': 37,
    'SymbolicReferenceExpr': 38,
    'PrefixOperatorExpr': 39,
    'BinaryOperatorExpr': 40,
    'ArrowExpr': 41,
    'FloatLiteralExpr': 42,
    'TupleExpr': 43,
    'ArrayExpr': 44,
    'DictionaryExpr': 45,
    'ImplicitMemberExpr': 46,
    'IntegerLiteralExpr': 47,
    'StringLiteralExpr': 48,
    'BooleanLiteralExpr': 49,
    'TernaryExpr': 50,
    'MemberAccessExpr': 51,
    'DotSelfExpr': 52,
    'IsExpr': 53,
    'AsExpr': 54,
    'TypeExpr': 55,
    'ClosureExpr': 56,
    'UnresolvedPatternExpr': 57,
    'FunctionCallExpr': 58,
    'SubscriptExpr': 59,
    'OptionalChainingExpr': 60,
    'ForcedValueExpr': 61,
    'PostfixUnaryExpr': 62,
    'SpecializeExpr': 63,
    'StringInterpolationExpr': 64,
    'KeyPathExpr': 65,
    'KeyPathBaseExpr': 66,
    'ObjcKeyPathExpr': 67,
    'ObjcSelectorExpr': 68,
    'EditorPlaceholderExpr': 69,
    'ObjectLiteralExpr': 70,
    'UnknownStmt': 71,
    'ContinueStmt': 72,
    'WhileStmt': 73,
    'DeferStmt': 74,
    'ExpressionStmt': 75,
    'RepeatWhileStmt': 76,
    'GuardStmt': 77,
    'ForInStmt': 78,
    'SwitchStmt': 79,
    'DoStmt': 80,
    'ReturnStmt': 81,
    'FallthroughStmt': 82,
    'BreakStmt': 83,
    'DeclarationStmt': 84,
    'ThrowStmt': 85,
    'IfStmt': 86,
    'Decl': 87,
    'Expr': 88,
    'Stmt': 89,
    'Type': 90,
    'Pattern': 91,
    'CodeBlockItem': 92,
    'CodeBlock': 93,
    'DeclNameArgument': 94,
    'DeclNameArguments': 95,
    'FunctionCallArgument': 96,
    'TupleElement': 97,
    'ArrayElement': 98,
    'DictionaryElement': 99,
    'ClosureCaptureItem': 100,
    'ClosureCaptureSignature': 101,
    'ClosureParam': 102,
    'ClosureSignature': 103,
    'StringSegment': 104,
    'ExpressionSegment': 105,
    'ObjcNamePiece': 106,
    'TypeInitializerClause': 107,
    'ParameterClause': 108,
    'ReturnClause': 109,
    'FunctionSignature': 110,
    'IfConfigClause': 111,
    'PoundSourceLocationArgs': 112,
    'DeclModifier': 113,
    'InheritedType': 114,
    'TypeInheritanceClause': 115,
    'MemberDeclBlock': 116,
    'MemberDeclListItem': 117,
    'SourceFile': 118,
    'InitializerClause': 119,
    'FunctionParameter': 120,
    'AccessLevelModifier': 121,
    'AccessPathComponent': 122,
    'AccessorParameter': 123,
    'AccessorBlock': 124,
    'PatternBinding': 125,
    'EnumCaseElement': 126,
    'InfixOperatorGroup': 127,
    'PrecedenceGroupRelation': 128,
    'PrecedenceGroupNameElement': 129,
    'PrecedenceGroupAssignment': 130,
    'PrecedenceGroupAssociativity': 131,
    'Attribute': 132,
    'LabeledSpecializeEntry': 133,
    'ImplementsAttributeArguments': 134,
    'ObjCSelectorPiece': 135,
    'WhereClause': 136,
    'ConditionElement': 137,
    'AvailabilityCondition': 138,
    'MatchingPatternCondition': 139,
    'OptionalBindingCondition': 140,
    'ElseIfContinuation': 141,
    'ElseBlock': 142,
    'SwitchCase': 143,
    'SwitchDefaultLabel': 144,
    'CaseItem': 145,
    'SwitchCaseLabel': 146,
    'CatchClause': 147,
    'GenericWhereClause': 148,
    'SameTypeRequirement': 149,
    'GenericParameter': 150,
    'GenericParameterClause': 151,
    'ConformanceRequirement': 152,
    'CompositionTypeElement': 153,
    'TupleTypeElement': 154,
    'GenericArgument': 155,
    'GenericArgumentClause': 156,
    'TypeAnnotation': 157,
    'TuplePatternElement': 158,
    'AvailabilityArgument': 159,
    'AvailabilityLabeledArgument': 160,
    'AvailabilityVersionRestriction': 161,
    'VersionTuple': 162,
    'CodeBlockItemList': 163,
    'FunctionCallArgumentList': 164,
    'TupleElementList': 165,
    'ArrayElementList': 166,
    'DictionaryElementList': 167,
    'StringInterpolationSegments': 168,
    'DeclNameArgumentList': 169,
    'ExprList': 170,
    'ClosureCaptureItemList': 171,
    'ClosureParamList': 172,
    'ObjcName': 173,
    'FunctionParameterList': 174,
    'IfConfigClauseList': 175,
    'InheritedTypeList': 176,
    'MemberDeclList': 177,
    'ModifierList': 178,
    'AccessPath': 179,
    'AccessorList': 180,
    'PatternBindingList': 181,
    'EnumCaseElementList': 182,
    'PrecedenceGroupAttributeList': 183,
    'PrecedenceGroupNameList': 184,
    'TokenList': 185,
    'NonEmptyTokenList': 186,
    'AttributeList': 187,
    'SpecializeAttributeSpecList': 188,
    'ObjCSelector': 189,
    'SwitchCaseList': 190,
    'CatchClauseList': 191,
    'CaseItemList': 192,
    'ConditionElementList': 193,
    'GenericRequirementList': 194,
    'GenericParameterList': 195,
    'CompositionTypeElementList': 196,
    'TupleTypeElementList': 197,
    'GenericArgumentList': 198,
    'TuplePatternElementList': 199,
    'AvailabilitySpecList': 200,
    'UnknownPattern': 201,
    'EnumCasePattern': 202,
    'IsTypePattern': 203,
    'OptionalPattern': 204,
    'IdentifierPattern': 205,
    'AsTypePattern': 206,
    'TuplePattern': 207,
    'WildcardPattern': 208,
    'ExpressionPattern': 209,
    'ValueBindingPattern': 210,
    'UnknownType': 211,
    'SimpleTypeIdentifier': 212,
    'MemberTypeIdentifier': 213,
    'ClassRestrictionType': 214,
    'ArrayType': 215,
    'DictionaryType': 216,
    'MetatypeType': 217,
    'OptionalType': 218,
    'ImplicitlyUnwrappedOptionalType': 219,
    'CompositionType': 220,
    'TupleType': 221,
    'FunctionType': 222,
    'AttributedType': 223,
    'YieldStmt': 224,
}


def verify_syntax_node_serialization_codes(nodes, serialization_codes):
    # Verify that all nodes have serialization codes
    for node in nodes:
        if not node.is_base() and node.syntax_kind not in serialization_codes:
            error('Node %s has no serialization code' % node.syntax_kind)

    # Verify that no serialization code is used twice
    used_codes = set()
    for serialization_code in serialization_codes.values():
        if serialization_code in used_codes:
            error("Serialization code %d used twice" % serialization_code)
        used_codes.add(serialization_code)
