// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Categories for instance types.
const CATEGORIES = new Map([
  [
    'user', new Set([
      'CONS_ONE_BYTE_STRING_TYPE',
      'CONS_STRING_TYPE',
      'DESCRIPTOR_ARRAY_TYPE',
      'ELEMENTS_TYPE',
      'EXTERNAL_INTERNALIZED_STRING_TYPE',
      'EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE',
      'EXTERNAL_ONE_BYTE_STRING_TYPE',
      'EXTERNAL_STRING_TYPE',
      'EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE',
      'FIXED_BIGINT64_ARRAY_TYPE',
      'FIXED_BIGUINT64_ARRAY_TYPE',
      'FIXED_DOUBLE_ARRAY_TYPE',
      'FIXED_FLOAT32_ARRAY_TYPE',
      'FIXED_FLOAT64_ARRAY_TYPE',
      'FIXED_INT16_ARRAY_TYPE',
      'FIXED_INT32_ARRAY_TYPE',
      'FIXED_INT8_ARRAY_TYPE',
      'FIXED_UINT16_ARRAY_TYPE',
      'FIXED_UINT32_ARRAY_TYPE',
      'FIXED_UINT8_ARRAY_TYPE',
      'FIXED_UINT8_CLAMPED_ARRAY_TYPE',
      'FUNCTION_CONTEXT_TYPE',
      'GLOBAL_ELEMENTS_TYPE',
      'GLOBAL_PROPERTIES_TYPE',
      'HEAP_NUMBER_TYPE',
      'INTERNALIZED_STRING_TYPE',
      'JS_ARGUMENTS_TYPE',
      'JS_ARRAY_BUFFER_TYPE',
      'JS_ARRAY_TYPE',
      'JS_BOUND_FUNCTION_TYPE',
      'JS_DATE_TYPE',
      'JS_ERROR_TYPE',
      'JS_FAST_ARRAY_KEY_ITERATOR_TYPE',
      'JS_FAST_ARRAY_VALUE_ITERATOR_TYPE',
      'JS_FAST_HOLEY_ARRAY_VALUE_ITERATOR_TYPE',
      'JS_FAST_HOLEY_SMI_ARRAY_VALUE_ITERATOR_TYPE',
      'JS_FAST_SMI_ARRAY_KEY_VALUE_ITERATOR_TYPE',
      'JS_FAST_SMI_ARRAY_VALUE_ITERATOR_TYPE',
      'JS_FUNCTION_TYPE',
      'JS_GENERATOR_OBJECT_TYPE',
      'JS_GENERIC_ARRAY_VALUE_ITERATOR_TYPE',
      'JS_GLOBAL_OBJECT_TYPE',
      'JS_GLOBAL_PROXY_TYPE',
      'JS_MAP_KEY_VALUE_ITERATOR_TYPE',
      'JS_MAP_TYPE',
      'JS_MAP_VALUE_ITERATOR_TYPE',
      'JS_MESSAGE_OBJECT_TYPE',
      'JS_OBJECT_TYPE',
      'JS_PROMISE_TYPE',
      'JS_REGEXP_TYPE',
      'JS_SET_TYPE',
      'JS_SET_VALUE_ITERATOR_TYPE',
      'JS_STRING_ITERATOR_TYPE',
      'JS_TO_WASM_FUNCTION',
      'JS_TYPED_ARRAY_TYPE',
      'JS_VALUE_TYPE',
      'JS_WEAK_MAP_TYPE',
      'MUTABLE_HEAP_NUMBER_TYPE',
      'NATIVE_CONTEXT_TYPE',
      'OBJECT_PROPERTY_DICTIONARY_TYPE',
      'ONE_BYTE_INTERNALIZED_STRING_TYPE',
      'ONE_BYTE_STRING_TYPE',
      'OTHER_CONTEXT_TYPE',
      'PROPERTY_ARRAY_TYPE',
      'SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE',
      'SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE',
      'SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE',
      'SHORT_EXTERNAL_STRING_TYPE',
      'SLICED_ONE_BYTE_STRING_TYPE',
      'SLICED_STRING_TYPE',
      'STRING_EXTERNAL_RESOURCE_ONE_BYTE_TYPE',
      'STRING_EXTERNAL_RESOURCE_TWO_BYTE_TYPE',
      'STRING_TYPE',
      'SYMBOL_TYPE',
      'THIN_ONE_BYTE_STRING_TYPE',
      'THIN_STRING_TYPE',
      'WASM_INSTANCE_TYPE',
      'WASM_MEMORY_TYPE',
      'WASM_MODULE_TYPE',
    ])
  ],
  [
    'system', new Set([
      'ACCESS_CHECK_INFO_TYPE',
      'ACCESSOR_INFO_TYPE',
      'ACCESSOR_PAIR_TYPE',
      'ALLOCATION_MEMENTO_TYPE',
      'ALLOCATION_SITE_TYPE',
      'ARRAY_BOILERPLATE_DESCRIPTION_TYPE',
      'ARRAY_BOILERPLATE_DESCRIPTION_ELEMENTS_TYPE',
      'BOILERPLATE_ELEMENTS_TYPE',
      'BOILERPLATE_PROPERTY_ARRAY_TYPE',
      'BOILERPLATE_PROPERTY_DICTIONARY_TYPE',
      'BYTE_ARRAY_TYPE',
      'CALL_HANDLER_INFO_TYPE',
      'CELL_TYPE',
      'CODE_STUBS_TABLE_TYPE',
      'CONTEXT_EXTENSION_TYPE',
      'ENUM_CACHE_TYPE',
      'ENUM_INDICES_CACHE_TYPE',
      'FOREIGN_TYPE',
      'FUNCTION_TEMPLATE_INFO_ENTRIES_TYPE',
      'FUNCTION_TEMPLATE_INFO_TYPE',
      'INTERCEPTOR_INFO_TYPE',
      'JS_API_OBJECT_TYPE',
      'JS_ARRAY_BOILERPLATE_TYPE',
      'JS_OBJECT_BOILERPLATE_TYPE',
      'JS_SPECIAL_API_OBJECT_TYPE',
      'MAP_TYPE',
      'NUMBER_STRING_CACHE_TYPE',
      'OBJECT_BOILERPLATE_DESCRIPTION_TYPE',
      'OBJECT_TEMPLATE_INFO_TYPE',
      'OBJECT_TO_CODE_TYPE',
      'ODDBALL_TYPE',
      'PROMISE_REACTION_JOB_INFO_TYPE',
      'PROMISE_RESOLVE_THENABLE_JOB_INFO_TYPE',
      'PROPERTY_CELL_TYPE',
      'PROTOTYPE_INFO_TYPE',
      'PROTOTYPE_USERS_TYPE',
      'REGEXP_MULTIPLE_CACHE_TYPE',
      'RETAINED_MAPS_TYPE',
      'SCOPE_INFO_TYPE',
      'SCRIPT_LIST_TYPE',
      'SCRIPT_SHARED_FUNCTION_INFOS_TYPE',
      'SERIALIZED_OBJECTS_TYPE',
      'SINGLE_CHARACTER_STRING_CACHE_TYPE',
      'STACK_FRAME_INFO_TYPE',
      'STRING_SPLIT_CACHE_TYPE',
      'STRING_TABLE_TYPE',
      'TRANSITION_ARRAY_TYPE',
      'WEAK_NEW_SPACE_OBJECT_TO_CODE_TYPE',
    ])
  ],
  [
    'code', new Set([
      'BUILTIN',
      'BYTECODE_ARRAY_CONSTANT_POOL_TYPE',
      'BYTECODE_ARRAY_HANDLER_TABLE_TYPE',
      'BYTECODE_ARRAY_TYPE',
      'BYTECODE_HANDLER',
      'CODE_DATA_CONTAINER_TYPE',
      'DEOPTIMIZATION_DATA_TYPE',
      'EMBEDDED_OBJECT_TYPE',
      'FEEDBACK_CELL_TYPE',
      'FEEDBACK_METADATA_TYPE',
      'FEEDBACK_VECTOR_ENTRY_TYPE',
      'FEEDBACK_VECTOR_HEADER_TYPE',
      'FEEDBACK_VECTOR_SLOT_CALL_TYPE',
      'FEEDBACK_VECTOR_SLOT_CALL_UNUSED_TYPE',
      'FEEDBACK_VECTOR_SLOT_ENUM_TYPE',
      'FEEDBACK_VECTOR_SLOT_LOAD_TYPE',
      'FEEDBACK_VECTOR_SLOT_LOAD_UNUSED_TYPE',
      'FEEDBACK_VECTOR_SLOT_OTHER_TYPE',
      'FEEDBACK_VECTOR_SLOT_STORE_TYPE',
      'FEEDBACK_VECTOR_SLOT_STORE_UNUSED_TYPE',
      'FEEDBACK_VECTOR_TYPE',
      'LOAD_HANDLER_TYPE',
      'NOSCRIPT_SHARED_FUNCTION_INFOS_TYPE',
      'OPTIMIZED_CODE_LITERALS_TYPE',
      'OPTIMIZED_FUNCTION',
      'PRE_PARSED_SCOPE_DATA_TYPE',
      'REGEXP',
      'RELOC_INFO_TYPE',
      'SCRIPT_SOURCE_EXTERNAL_ONE_BYTE_TYPE',
      'SCRIPT_SOURCE_EXTERNAL_TWO_BYTE_TYPE',
      'SCRIPT_SOURCE_EXTERNAL_TYPE',
      'SCRIPT_SOURCE_NON_EXTERNAL_ONE_BYTE_TYPE',
      'SCRIPT_SOURCE_NON_EXTERNAL_TWO_BYTE_TYPE',
      'SCRIPT_TYPE',
      'SHARED_FUNCTION_INFO_TYPE',
      'SOURCE_POSITION_TABLE_TYPE',
      'STORE_HANDLER_TYPE',
      'STUB',
      'UNCOMPILED_DATA_WITHOUT_PRE_PARSED_SCOPE_TYPE',
      'UNCOMPILED_DATA_WITH_PRE_PARSED_SCOPE_TYPE',
      'UNCOMPILED_JS_FUNCTION_TYPE',
      'UNCOMPILED_SHARED_FUNCTION_INFO_TYPE'
    ])
  ],
  ['unclassified', new Set()],
]);

// Maps category to description text that is shown in html.
const CATEGORY_NAMES = new Map([
  ['user', 'JS'],
  ['system', 'Metadata'],
  ['code', 'Code'],
  ['unclassified', 'Unclassified'],
]);
