diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-aggregateerror-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-aggregateerror-prototype.c
index 84956daffd..2ff1101696 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-aggregateerror-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-aggregateerror-prototype.c
@@ -34,4 +34,27 @@
 #define BUILTIN_UNDERSCORED_ID  aggregate_error_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_aggregate_error_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                      * routine identifier */
+                                                         ecma_value_t this_arg, /**< 'this' argument value */
+                                                         const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                                 *   passed
+                                                                                                 * to routine */
+                                                         uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_aggregate_error_prototype_dispatch_routine */
+
 #endif /* JERRY_ESNEXT */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-aggregateerror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-aggregateerror.c
index e1c2561817..244c15fbdb 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-aggregateerror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-aggregateerror.c
@@ -104,6 +104,27 @@ ecma_builtin_aggregate_error_dispatch_construct (const ecma_value_t *arguments_l
   return result;
 } /* ecma_builtin_aggregate_error_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_aggregate_error_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                               ecma_value_t this_arg, /**< 'this' argument value */
+                                               const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                       *   passed to routine */
+                                               uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_aggregate_error_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-array-iterator-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-array-iterator-prototype.c
index 3c0c49bdba..f72eee447f 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-array-iterator-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-array-iterator-prototype.c
@@ -24,11 +24,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype-unscopables.c b/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype-unscopables.c
index 2caad899a1..5bafcf1242 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype-unscopables.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype-unscopables.c
@@ -25,4 +25,27 @@
 #define BUILTIN_UNDERSCORED_ID  array_prototype_unscopables
 #include "ecma-builtin-internal-routines-template.inc.h"
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_array_prototype_unscopables_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                        * routine identifier */
+                                                           ecma_value_t this_arg, /**< 'this' argument value */
+                                                           const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                                   * passed
+                                                                                                   * to routine */
+                                                           uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_array_prototype_unscopables_dispatch_routine */
+
 #endif /* JERRY_ESNEXT */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c
index 211d5f1764..49152e8488 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c
@@ -35,11 +35,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-array.c b/jerry-core/ecma/builtin-objects/ecma-builtin-array.c
index 59abb4481b..fa459df75f 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-array.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-array.c
@@ -34,11 +34,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.c
index d1aee322b9..2ebff6925b 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.c
@@ -32,6 +32,16 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
+/**
+ * List of built-in routine identifiers.
+ */
+enum
+{
+  ECMA_ARRAYBUFFER_PROTOTYPE_ROUTINE_START = 0,
+  ECMA_ARRAYBUFFER_PROTOTYPE_SLICE,
+  ECMA_ARRAYBUFFER_PROTOTYPE_BYTELENGTH_GETTER,
+};
+
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-arraybuffer-prototype.inc.h"
 #define BUILTIN_UNDERSCORED_ID  arraybuffer_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
@@ -107,6 +117,38 @@ ecma_builtin_arraybuffer_prototype_object_slice (ecma_value_t this_arg, /**< thi
   return ecma_builtin_arraybuffer_slice (this_arg, argument_list_p, arguments_number);
 } /* ecma_builtin_arraybuffer_prototype_object_slice */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_arraybuffer_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                  *routine
+                                                                                  *identifier */
+                                                     ecma_value_t this_arg, /**< 'this' argument value */
+                                                     const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                             *   passed to routine */
+                                                     uint32_t arguments_number) /**< length of arguments' list */
+{
+  switch (builtin_routine_id)
+  {
+    case ECMA_ARRAYBUFFER_PROTOTYPE_SLICE:
+    {
+      return ecma_builtin_arraybuffer_prototype_object_slice (this_arg, arguments_list_p, arguments_number);
+    }
+    case ECMA_ARRAYBUFFER_PROTOTYPE_BYTELENGTH_GETTER:
+    {
+      return ecma_builtin_arraybuffer_prototype_bytelength_getter (this_arg);
+    }
+    default:
+    {
+      JERRY_UNREACHABLE ();
+    }
+  }
+} /* ecma_builtin_arraybuffer_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.inc.h
index 80463446f2..52b9db202a 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer-prototype.inc.h
@@ -28,7 +28,7 @@ OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, ECMA_BUILTIN_ID_ARRAYBUFFER, ECMA_PR
 
 /* Readonly accessor properties */
 ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_BYTE_LENGTH_UL,
-                    ecma_builtin_arraybuffer_prototype_bytelength_getter,
+                    ECMA_ARRAYBUFFER_PROTOTYPE_BYTELENGTH_GETTER,
                     ECMA_PROPERTY_FLAG_CONFIGURABLE)
 
 /* ECMA-262 v6, 24.1.4.4 */
@@ -36,7 +36,7 @@ STRING_VALUE (LIT_GLOBAL_SYMBOL_TO_STRING_TAG, LIT_MAGIC_STRING_ARRAY_BUFFER_UL,
 
 /* Routine properties:
  *  (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
-ROUTINE (LIT_MAGIC_STRING_SLICE, ecma_builtin_arraybuffer_prototype_object_slice, NON_FIXED, 2)
+ROUTINE (LIT_MAGIC_STRING_SLICE, ECMA_ARRAYBUFFER_PROTOTYPE_SLICE, NON_FIXED, 2)
 
 #endif /* JERRY_BUILTIN_TYPEDARRAY */
 
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer.c b/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer.c
index 1ad9d9bfe4..ff140c4443 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer.c
@@ -29,6 +29,16 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
+/**
+ * List of built-in routine identifiers.
+ */
+enum
+{
+  ECMA_ARRAYBUFFER_ROUTINE_START = 0,
+  ECMA_ARRAYBUFFER_OBJECT_IS_VIEW,
+  ECMA_ARRAYBUFFER_SPECIES_GET,
+};
+
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-arraybuffer.inc.h"
 #define BUILTIN_UNDERSCORED_ID  arraybuffer
 #include "ecma-builtin-internal-routines-template.inc.h"
@@ -94,16 +104,36 @@ ecma_builtin_arraybuffer_dispatch_construct (const ecma_value_t *arguments_list_
 } /* ecma_builtin_arraybuffer_dispatch_construct */
 
 /**
- * 24.1.3.3 get ArrayBuffer [ @@species ] accessor
+ * Dispatcher of the built-in's routines
  *
- * @return ecma_value
- *         returned value must be freed with ecma_free_value
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
  */
 ecma_value_t
-ecma_builtin_arraybuffer_species_get (ecma_value_t this_value) /**< This Value */
+ecma_builtin_arraybuffer_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                           ecma_value_t this_arg, /**< 'this' argument value */
+                                           const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                   *   passed to routine */
+                                           uint32_t arguments_number) /**< length of arguments' list */
 {
-  return ecma_copy_value (this_value);
-} /* ecma_builtin_arraybuffer_species_get */
+  JERRY_UNUSED (arguments_number);
+
+  switch (builtin_routine_id)
+  {
+    case ECMA_ARRAYBUFFER_OBJECT_IS_VIEW:
+    {
+      return ecma_builtin_arraybuffer_object_is_view (this_arg, arguments_list_p[0]);
+    }
+    case ECMA_ARRAYBUFFER_SPECIES_GET:
+    {
+      return ecma_copy_value (this_arg);
+    }
+    default:
+    {
+      JERRY_UNREACHABLE ();
+    }
+  }
+} /* ecma_builtin_arraybuffer_dispatch_routine */
 
 /**
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer.inc.h
index 6fe1a93681..4024fec5ba 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer.inc.h
@@ -37,10 +37,10 @@ STRING_VALUE (LIT_MAGIC_STRING_NAME, LIT_MAGIC_STRING_ARRAY_BUFFER_UL, ECMA_PROP
  *  (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
 
 /* ES2015 24.1.3.1 */
-ROUTINE (LIT_MAGIC_STRING_IS_VIEW_UL, ecma_builtin_arraybuffer_object_is_view, 1, 1)
+ROUTINE (LIT_MAGIC_STRING_IS_VIEW_UL, ECMA_ARRAYBUFFER_OBJECT_IS_VIEW, 1, 1)
 
 /* ES2015 24.1.3.3 */
-ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_SPECIES, ecma_builtin_arraybuffer_species_get, ECMA_PROPERTY_FLAG_CONFIGURABLE)
+ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_SPECIES, ECMA_ARRAYBUFFER_SPECIES_GET, ECMA_PROPERTY_FLAG_CONFIGURABLE)
 
 #endif /* JERRY_BUILTIN_TYPEDARRAY */
 
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-async-function-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-async-function-prototype.c
index 150bb95321..a9d5076f20 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-async-function-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-async-function-prototype.c
@@ -34,6 +34,28 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_async_function_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                     * routine identifier */
+                                                        ecma_value_t this_arg, /**< 'this' argument value */
+                                                        const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                                *   passed to routine */
+                                                        uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_async_function_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-async-function.c b/jerry-core/ecma/builtin-objects/ecma-builtin-async-function.c
index 115af43c37..6ca3d1272d 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-async-function.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-async-function.c
@@ -63,6 +63,27 @@ ecma_builtin_async_function_dispatch_construct (const ecma_value_t *arguments_li
   return ecma_builtin_async_function_dispatch_call (arguments_list_p, arguments_list_len);
 } /* ecma_builtin_async_function_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_async_function_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                              ecma_value_t this_arg, /**< 'this' argument value */
+                                              const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                      *   passed to routine */
+                                              uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_async_function_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator-function.c b/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator-function.c
index ad2fcd67d8..dbd323fa05 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator-function.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator-function.c
@@ -65,6 +65,28 @@ ecma_builtin_async_generator_function_dispatch_construct (const ecma_value_t *ar
   return ecma_builtin_async_generator_function_dispatch_call (arguments_list_p, arguments_list_len);
 } /* ecma_builtin_async_generator_function_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_async_generator_function_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                     * routine identifier */
+                                                        ecma_value_t this_arg, /**< 'this' argument value */
+                                                        const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                                *   passed to routine */
+                                                        uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_async_generator_function_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator-prototype.c
index 0d710f26ed..dbe98b1e84 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator-prototype.c
@@ -31,11 +31,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator.c b/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator.c
index 2f5651b11f..697ce262af 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-async-generator.c
@@ -34,6 +34,27 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_async_generator_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                               ecma_value_t this_arg, /**< 'this' argument value */
+                                               const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                       *   passed to routine */
+                                               uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_async_generator_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-async-iterator-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-async-iterator-prototype.c
index ec65c76575..f5c1028ba8 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-async-iterator-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-async-iterator-prototype.c
@@ -22,11 +22,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-bigint-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-bigint-prototype.c
index 3c32e7245f..684d716e06 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-bigint-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-bigint-prototype.c
@@ -21,11 +21,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-bigint.c b/jerry-core/ecma/builtin-objects/ecma-builtin-bigint.c
index 1c7e9f0cc8..8083c3915d 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-bigint.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-bigint.c
@@ -71,6 +71,27 @@ ecma_builtin_bigint_dispatch_construct (const ecma_value_t *arguments_list_p, /*
   return ecma_raise_type_error (ECMA_ERR_MSG ("BigInt function is not a constructor"));
 } /* ecma_builtin_bigint_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_bigint_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                      ecma_value_t this_arg, /**< 'this' argument value */
+                                      const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                              *   passed to routine */
+                                      uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_bigint_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-boolean-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-boolean-prototype.c
index cd175dd4cf..89a1d673d9 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-boolean-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-boolean-prototype.c
@@ -30,11 +30,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-boolean.c b/jerry-core/ecma/builtin-objects/ecma-builtin-boolean.c
index 603d6104be..75d19821bc 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-boolean.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-boolean.c
@@ -90,6 +90,27 @@ ecma_builtin_boolean_dispatch_construct (const ecma_value_t *arguments_list_p, /
   }
 } /* ecma_builtin_boolean_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_boolean_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                       ecma_value_t this_arg, /**< 'this' argument value */
+                                       const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                               *   passed to routine */
+                                       uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_boolean_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.c
index edebf7b73c..6926328f33 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.c
@@ -27,11 +27,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-dataview.c b/jerry-core/ecma/builtin-objects/ecma-builtin-dataview.c
index 6e86c6dc29..ceecd9ad1a 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-dataview.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-dataview.c
@@ -62,6 +62,27 @@ ecma_builtin_dataview_dispatch_construct (const ecma_value_t *arguments_list_p,
   return ecma_op_dataview_create (arguments_list_p, arguments_list_len);
 } /* ecma_builtin_dataview_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_dataview_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                        ecma_value_t this_arg, /**< 'this' argument value */
+                                        const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                *   passed to routine */
+                                        uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_dataview_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-date-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-date-prototype.c
index 2a3120bc06..f1894cffd2 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-date-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-date-prototype.c
@@ -30,11 +30,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * Checks whether the function uses UTC time zone.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-date.c b/jerry-core/ecma/builtin-objects/ecma-builtin-date.c
index cad9534c8f..8d8fe51a48 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-date.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-date.c
@@ -32,11 +32,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-error-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-error-prototype.c
index 861d822668..debdda8568 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-error-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-error-prototype.c
@@ -30,11 +30,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-error.c b/jerry-core/ecma/builtin-objects/ecma-builtin-error.c
index 1f8deddaf6..8cfe4c4c33 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-error.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-error.c
@@ -90,6 +90,27 @@ ecma_builtin_error_dispatch_construct (const ecma_value_t *arguments_list_p, /**
 #endif /* JERRY_ESNEXT */
 } /* ecma_builtin_error_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_error_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                     ecma_value_t this_arg, /**< 'this' argument value */
+                                     const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                             *   passed to routine */
+                                     uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_error_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror-prototype.c
index 3758803326..897112a0ab 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror-prototype.c
@@ -34,4 +34,25 @@
 #define BUILTIN_UNDERSCORED_ID  eval_error_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_eval_error_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                                    ecma_value_t this_arg, /**< 'this' argument value */
+                                                    const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                            *   passed to routine */
+                                                    uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_eval_error_prototype_dispatch_routine */
+
 #endif /* JERRY_BUILTIN_ERRORS */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror.c
index 3804420d96..9192457ba2 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror.c
@@ -92,6 +92,27 @@ ecma_builtin_eval_error_dispatch_construct (const ecma_value_t *arguments_list_p
 #endif /* JERRY_ESNEXT */
 } /* ecma_builtin_eval_error_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_eval_error_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                          ecma_value_t this_arg, /**< 'this' argument value */
+                                          const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                  *   passed to routine */
+                                          uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_eval_error_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.c
index 44e303473b..a4ac6b2da8 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.c
@@ -33,11 +33,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-function.c b/jerry-core/ecma/builtin-objects/ecma-builtin-function.c
index 7c8e1dfde3..e6c40586c4 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-function.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-function.c
@@ -70,6 +70,27 @@ ecma_builtin_function_dispatch_construct (const ecma_value_t *arguments_list_p,
   return ecma_op_create_dynamic_function (arguments_list_p, arguments_list_len, ECMA_PARSE_NO_OPTS);
 } /* ecma_builtin_function_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_function_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                        ecma_value_t this_arg, /**< 'this' argument value */
+                                        const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                *   passed to routine */
+                                        uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_function_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-generator-function.c b/jerry-core/ecma/builtin-objects/ecma-builtin-generator-function.c
index 14907dd17a..abc8c09818 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-generator-function.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-generator-function.c
@@ -63,6 +63,27 @@ ecma_builtin_generator_function_dispatch_construct (const ecma_value_t *argument
   return ecma_builtin_generator_function_dispatch_call (arguments_list_p, arguments_list_len);
 } /* ecma_builtin_generator_function_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_generator_function_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                                  ecma_value_t this_arg, /**< 'this' argument value */
+                                                  const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                          *   passed to routine */
+                                                  uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_generator_function_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-generator-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-generator-prototype.c
index 815e939304..6d6fddf985 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-generator-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-generator-prototype.c
@@ -29,11 +29,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-generator.c b/jerry-core/ecma/builtin-objects/ecma-builtin-generator.c
index 29045609c4..604e650324 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-generator.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-generator.c
@@ -34,6 +34,27 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_generator_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                         ecma_value_t this_arg, /**< 'this' argument value */
+                                         const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                 *   passed to routine */
+                                         uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_generator_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-global.c b/jerry-core/ecma/builtin-objects/ecma-builtin-global.c
index f02303848e..dc0aff58d1 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-global.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-global.c
@@ -34,11 +34,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-internal-routines-template.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-internal-routines-template.inc.h
index be175c23a8..3b5215c613 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-internal-routines-template.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-internal-routines-template.inc.h
@@ -30,83 +30,10 @@
 #define PROPERTY_DESCRIPTOR_LIST_NAME PASTE (PASTE (ecma_builtin_, BUILTIN_UNDERSCORED_ID), _property_descriptor_list)
 #define DISPATCH_ROUTINE_ROUTINE_NAME PASTE (PASTE (ecma_builtin_, BUILTIN_UNDERSCORED_ID), _dispatch_routine)
 
-#ifndef BUILTIN_CUSTOM_DISPATCH
-
-#define ROUTINE_ARG(n)             , ecma_value_t arg##n
-#define ROUTINE_ARG_LIST_0         ecma_value_t this_arg
-#define ROUTINE_ARG_LIST_1         ROUTINE_ARG_LIST_0 ROUTINE_ARG (1)
-#define ROUTINE_ARG_LIST_2         ROUTINE_ARG_LIST_1 ROUTINE_ARG (2)
-#define ROUTINE_ARG_LIST_3         ROUTINE_ARG_LIST_2 ROUTINE_ARG (3)
-#define ROUTINE_ARG_LIST_NON_FIXED ROUTINE_ARG_LIST_0, const ecma_value_t *arguments_list_p, uint32_t arguments_list_len
-#define ROUTINE(name, c_function_name, args_number, length_prop_value) \
-  static ecma_value_t c_function_name (ROUTINE_ARG_LIST_##args_number);
-#define ROUTINE_CONFIGURABLE_ONLY(name, c_function_name, args_number, length_prop_value) \
-  static ecma_value_t c_function_name (ROUTINE_ARG_LIST_##args_number);
-#define ROUTINE_WITH_FLAGS(name, c_function_name, args_number, length_prop_value, flags) \
-  static ecma_value_t c_function_name (ROUTINE_ARG_LIST_##args_number);
-#define ACCESSOR_READ_WRITE(name, c_getter_func_name, c_setter_func_name, prop_attributes) \
-  static ecma_value_t c_getter_func_name (ROUTINE_ARG_LIST_0);                             \
-  static ecma_value_t c_setter_func_name (ROUTINE_ARG_LIST_1);
-#define ACCESSOR_READ_ONLY(name, c_getter_func_name, prop_attributes) \
-  static ecma_value_t c_getter_func_name (ROUTINE_ARG_LIST_0);
-#include BUILTIN_INC_HEADER_NAME
-#undef ROUTINE_ARG_LIST_NON_FIXED
-#undef ROUTINE_ARG_LIST_3
-#undef ROUTINE_ARG_LIST_2
-#undef ROUTINE_ARG_LIST_1
-#undef ROUTINE_ARG_LIST_0
-#undef ROUTINE_ARG
-
-/**
- * List of built-in routine identifiers.
- */
-enum
-{
-  PASTE (ECMA_ROUTINE_START_, BUILTIN_UNDERSCORED_ID) = 0,
-#define ROUTINE(name, c_function_name, args_number, length_prop_value) ECMA_ROUTINE_##name##c_function_name,
-#define ROUTINE_CONFIGURABLE_ONLY(name, c_function_name, args_number, length_prop_value) \
-  ECMA_ROUTINE_##name##c_function_name,
-#define ROUTINE_WITH_FLAGS(name, c_function_name, args_number, length_prop_value, flags) \
-  ECMA_ROUTINE_##name##c_function_name,
-#define ACCESSOR_READ_WRITE(name, c_getter_func_name, c_setter_func_name, prop_attributes) \
-  ECMA_ACCESSOR_##name##c_getter_func_name, ECMA_ACCESSOR_##name##c_setter_func_name,
-#define ACCESSOR_READ_ONLY(name, c_getter_func_name, prop_attributes) ECMA_ACCESSOR_##name##c_getter_func_name,
-#include BUILTIN_INC_HEADER_NAME
-};
-
-#endif /* !BUILTIN_CUSTOM_DISPATCH */
-
 /**
  * Built-in property list of the built-in object.
  */
 const ecma_builtin_property_descriptor_t PROPERTY_DESCRIPTOR_LIST_NAME[] = {
-#ifndef BUILTIN_CUSTOM_DISPATCH
-#define ROUTINE(name, c_function_name, args_number, length_prop_value) \
-  { name,                                                              \
-    ECMA_BUILTIN_PROPERTY_ROUTINE,                                     \
-    ECMA_PROPERTY_BUILT_IN_CONFIGURABLE_WRITABLE,                      \
-    ECMA_ROUTINE_VALUE (ECMA_ROUTINE_##name##c_function_name, length_prop_value) },
-#define ROUTINE_CONFIGURABLE_ONLY(name, c_function_name, args_number, length_prop_value) \
-  { name,                                                                                \
-    ECMA_BUILTIN_PROPERTY_ROUTINE,                                                       \
-    ECMA_PROPERTY_BUILT_IN_CONFIGURABLE,                                                 \
-    ECMA_ROUTINE_VALUE (ECMA_ROUTINE_##name##c_function_name, length_prop_value) },
-#define ROUTINE_WITH_FLAGS(name, c_function_name, args_number, length_prop_value, prop_attributes) \
-  { name,                                                                                          \
-    ECMA_BUILTIN_PROPERTY_ROUTINE,                                                                 \
-    (prop_attributes) | ECMA_PROPERTY_FLAG_BUILT_IN,                                               \
-    ECMA_ROUTINE_VALUE (ECMA_ROUTINE_##name##c_function_name, length_prop_value) },
-#define ACCESSOR_READ_ONLY(name, c_getter_func_name, prop_attributes) \
-  { name,                                                             \
-    ECMA_BUILTIN_PROPERTY_ACCESSOR_READ_ONLY,                         \
-    (prop_attributes) | ECMA_PROPERTY_FLAG_BUILT_IN,                  \
-    ECMA_ACCESSOR_##name##c_getter_func_name },
-#define ACCESSOR_READ_WRITE(name, c_getter_func_name, c_setter_func_name, prop_attributes) \
-  { name,                                                                                  \
-    ECMA_BUILTIN_PROPERTY_ACCESSOR_READ_WRITE,                                             \
-    (prop_attributes) | ECMA_PROPERTY_FLAG_BUILT_IN,                                       \
-    ECMA_ACCESSOR_READ_WRITE (ECMA_ACCESSOR_##name##c_getter_func_name, ECMA_ACCESSOR_##name##c_setter_func_name) },
-#else /* BUILTIN_CUSTOM_DISPATCH */
 #define ROUTINE(name, c_function_name, args_number, length_prop_value) \
   { name,                                                              \
     ECMA_BUILTIN_PROPERTY_ROUTINE,                                     \
@@ -132,7 +59,6 @@ const ecma_builtin_property_descriptor_t PROPERTY_DESCRIPTOR_LIST_NAME[] = {
     ECMA_BUILTIN_PROPERTY_ACCESSOR_READ_WRITE,                                             \
     (prop_attributes) | ECMA_PROPERTY_FLAG_BUILT_IN,                                       \
     ECMA_ACCESSOR_READ_WRITE (c_getter_func_name, c_setter_func_name) },
-#endif /* !BUILTIN_CUSTOM_DISPATCH */
 #define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) \
   { name, ECMA_BUILTIN_PROPERTY_OBJECT, (prop_attributes) | ECMA_PROPERTY_FLAG_BUILT_IN, obj_builtin_id },
 #define SIMPLE_VALUE(name, simple_value, prop_attributes) \
@@ -155,85 +81,7 @@ const ecma_builtin_property_descriptor_t PROPERTY_DESCRIPTOR_LIST_NAME[] = {
   { LIT_MAGIC_STRING__COUNT, ECMA_BUILTIN_PROPERTY_END, 0, 0 }
 };
 
-#ifndef BUILTIN_CUSTOM_DISPATCH
-
-/**
- * Dispatcher of the built-in's routines
- *
- * @return ecma value
- *         Returned value must be freed with ecma_free_value.
- */
-ecma_value_t
-DISPATCH_ROUTINE_ROUTINE_NAME (uint8_t builtin_routine_id, /**< built-in wide routine
-                                                                identifier */
-                               ecma_value_t this_arg_value, /**< 'this' argument
-                                                                 value */
-                               const ecma_value_t arguments_list[], /**< list of arguments
-                                                                         passed to routine */
-                               uint32_t arguments_number) /**< length of
-                                                           *   arguments' list */
-{
-  /* the arguments may be unused for some built-ins */
-  JERRY_UNUSED (this_arg_value);
-  JERRY_UNUSED (arguments_list);
-  JERRY_UNUSED (arguments_number);
-
-  switch (builtin_routine_id)
-  {
-#define ROUTINE_ARG(n) (arguments_list[n - 1])
-#define ROUTINE_ARG_LIST_0
-#define ROUTINE_ARG_LIST_1         , ROUTINE_ARG (1)
-#define ROUTINE_ARG_LIST_2         ROUTINE_ARG_LIST_1, ROUTINE_ARG (2)
-#define ROUTINE_ARG_LIST_3         ROUTINE_ARG_LIST_2, ROUTINE_ARG (3)
-#define ROUTINE_ARG_LIST_NON_FIXED , arguments_list, arguments_number
-#define ROUTINE(name, c_function_name, args_number, length_prop_value)      \
-  case ECMA_ROUTINE_##name##c_function_name:                                \
-  {                                                                         \
-    return c_function_name (this_arg_value ROUTINE_ARG_LIST_##args_number); \
-  }
-#define ROUTINE_CONFIGURABLE_ONLY(name, c_function_name, args_number, length_prop_value) \
-  case ECMA_ROUTINE_##name##c_function_name:                                             \
-  {                                                                                      \
-    return c_function_name (this_arg_value ROUTINE_ARG_LIST_##args_number);              \
-  }
-#define ROUTINE_WITH_FLAGS(name, c_function_name, args_number, length_prop_value, flags) \
-  case ECMA_ROUTINE_##name##c_function_name:                                             \
-  {                                                                                      \
-    return c_function_name (this_arg_value ROUTINE_ARG_LIST_##args_number);              \
-  }
-#define ACCESSOR_READ_WRITE(name, c_getter_func_name, c_setter_func_name, prop_attributes) \
-  case ECMA_ACCESSOR_##name##c_getter_func_name:                                           \
-  {                                                                                        \
-    return c_getter_func_name (this_arg_value);                                            \
-  }                                                                                        \
-  case ECMA_ACCESSOR_##name##c_setter_func_name:                                           \
-  {                                                                                        \
-    return c_setter_func_name (this_arg_value ROUTINE_ARG_LIST_1);                         \
-  }
-#define ACCESSOR_READ_ONLY(name, c_getter_func_name, prop_attributes) \
-  case ECMA_ACCESSOR_##name##c_getter_func_name:                      \
-  {                                                                   \
-    return c_getter_func_name (this_arg_value);                       \
-  }
-#include BUILTIN_INC_HEADER_NAME
-#undef ROUTINE_ARG
-#undef ROUTINE_ARG_LIST_0
-#undef ROUTINE_ARG_LIST_1
-#undef ROUTINE_ARG_LIST_2
-#undef ROUTINE_ARG_LIST_3
-#undef ROUTINE_ARG_LIST_NON_FIXED
-
-    default:
-    {
-      JERRY_UNREACHABLE ();
-    }
-  }
-} /* DISPATCH_ROUTINE_ROUTINE_NAME */
-
-#endif /* !BUILTIN_CUSTOM_DISPATCH */
-
 #undef BUILTIN_INC_HEADER_NAME
-#undef BUILTIN_CUSTOM_DISPATCH
 #undef BUILTIN_UNDERSCORED_ID
 #undef DISPATCH_ROUTINE_ROUTINE_NAME
 #undef ECMA_BUILTIN_PROPERTY_NAME_INDEX
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-intrinsic.c b/jerry-core/ecma/builtin-objects/ecma-builtin-intrinsic.c
index fc11a6be4b..f62978b159 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-intrinsic.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-intrinsic.c
@@ -30,11 +30,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-iterator-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-iterator-prototype.c
index 1bcc916633..50191769a4 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-iterator-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-iterator-prototype.c
@@ -22,11 +22,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-json.c b/jerry-core/ecma/builtin-objects/ecma-builtin-json.c
index ef2a7dbd00..e4a2c1b8d1 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-json.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-json.c
@@ -36,11 +36,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-map-iterator-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-map-iterator-prototype.c
index 9471a450af..f296db7173 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-map-iterator-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-map-iterator-prototype.c
@@ -22,11 +22,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-map-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-map-prototype.c
index d7a10cc9d4..532aeeed95 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-map-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-map-prototype.c
@@ -20,10 +20,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-map-prototype.inc.h"
 #define BUILTIN_UNDERSCORED_ID  map_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-map.c b/jerry-core/ecma/builtin-objects/ecma-builtin-map.c
index f79cccd5ec..853bf95fe5 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-map.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-map.c
@@ -22,6 +22,15 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
+/**
+ * List of built-in routine identifiers.
+ */
+enum
+{
+  ECMA_BUILTIN_MAP_ROUTINE_START = 0,
+  ECMA_BUILTIN_MAP_SPECES_GET,
+};
+
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-map.inc.h"
 #define BUILTIN_UNDERSCORED_ID  map
 #include "ecma-builtin-internal-routines-template.inc.h"
@@ -66,16 +75,33 @@ ecma_builtin_map_dispatch_construct (const ecma_value_t *arguments_list_p, /**<
 } /* ecma_builtin_map_dispatch_construct */
 
 /**
- * 23.1.2.2 get Map [ @@species ] accessor
+ * Dispatcher of the built-in's routines
  *
- * @return ecma_value
- *         returned value must be freed with ecma_free_value
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
  */
 ecma_value_t
-ecma_builtin_map_species_get (ecma_value_t this_value) /**< This Value */
+ecma_builtin_map_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                   ecma_value_t this_arg, /**< 'this' argument value */
+                                   const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                           *   passed to routine */
+                                   uint32_t arguments_number) /**< length of arguments' list */
 {
-  return ecma_copy_value (this_value);
-} /* ecma_builtin_map_species_get */
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+
+  switch (builtin_routine_id)
+  {
+    case ECMA_BUILTIN_MAP_SPECES_GET:
+    {
+      return ecma_copy_value (this_arg);
+    }
+    default:
+    {
+      JERRY_UNREACHABLE ();
+    }
+  }
+} /* ecma_builtin_map_dispatch_routine */
 
 /**
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-map.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-map.inc.h
index e1ff9c0075..c05e99b95d 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-map.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-map.inc.h
@@ -37,7 +37,7 @@ STRING_VALUE (LIT_MAGIC_STRING_NAME, LIT_MAGIC_STRING_MAP_UL, ECMA_PROPERTY_FLAG
 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, ECMA_BUILTIN_ID_MAP_PROTOTYPE, ECMA_PROPERTY_FIXED)
 
 /* ECMA-262 v6, 23.1.2.2 */
-ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_SPECIES, ecma_builtin_map_species_get, ECMA_PROPERTY_FLAG_CONFIGURABLE)
+ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_SPECIES, ECMA_BUILTIN_MAP_SPECES_GET, ECMA_PROPERTY_FLAG_CONFIGURABLE)
 
 #endif /* JERRY_BUILTIN_CONTAINER */
 
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-math.c b/jerry-core/ecma/builtin-objects/ecma-builtin-math.c
index a9e737ecf5..a6930b2237 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-math.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-math.c
@@ -38,11 +38,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.c
index 6b2bdd5293..8ac9d34aa7 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.c
@@ -34,11 +34,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-number.c b/jerry-core/ecma/builtin-objects/ecma-builtin-number.c
index 6626368c0c..0639b6ce1e 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-number.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-number.c
@@ -34,10 +34,6 @@
 #include "ecma-builtins-internal.h"
 
 #if JERRY_ESNEXT
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
 
 /**
  * List of built-in routine identifiers.
@@ -239,8 +235,30 @@ ecma_builtin_number_dispatch_routine (uint8_t builtin_routine_id, /**< built-in
   }
 } /* ecma_builtin_number_dispatch_routine */
 
-#endif /* JERRY_ESNEXT */
+#else /* !JERRY_ESNEXT */
+
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_number_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                      ecma_value_t this_arg, /**< 'this' argument value */
+                                      const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                              *   passed to routine */
+                                      uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
 
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_number_dispatch_routine */
+
+#endif /* JERRY_ESNEXT */
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-object-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-object-prototype.c
index 7bdf27daad..147fdc7ae9 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-object-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-object-prototype.c
@@ -32,11 +32,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-object.c b/jerry-core/ecma/builtin-objects/ecma-builtin-object.c
index 6f7da09998..bdc4058d79 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-object.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-object.c
@@ -39,11 +39,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-promise-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-promise-prototype.c
index 252512d679..9cd46725ac 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-promise-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-promise-prototype.c
@@ -21,11 +21,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c b/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c
index 4de450bf83..8e9ff83b2d 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c
@@ -32,11 +32,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-proxy.c b/jerry-core/ecma/builtin-objects/ecma-builtin-proxy.c
index 1fe6ac2384..8fd762ff27 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-proxy.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-proxy.c
@@ -27,11 +27,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror-prototype.c
index f72ac2c220..21cd8aa48d 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror-prototype.c
@@ -34,4 +34,26 @@
 #define BUILTIN_UNDERSCORED_ID  range_error_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_range_error_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                  * routine identifier */
+                                                     ecma_value_t this_arg, /**< 'this' argument value */
+                                                     const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                             *   passed to routine */
+                                                     uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_range_error_prototype_dispatch_routine */
+
 #endif /* JERRY_BUILTIN_ERRORS */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror.c
index 83ae4feb98..6d96c5affa 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror.c
@@ -92,6 +92,27 @@ ecma_builtin_range_error_dispatch_construct (const ecma_value_t *arguments_list_
 #endif /* JERRY_ESNEXT */
 } /* ecma_builtin_range_error_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_range_error_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                           ecma_value_t this_arg, /**< 'this' argument value */
+                                           const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                   *   passed to routine */
+                                           uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_range_error_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror-prototype.c
index 5212d6bfe9..e93410e51a 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror-prototype.c
@@ -34,4 +34,26 @@
 #define BUILTIN_UNDERSCORED_ID  reference_error_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_reference_error_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                      * routine identifier */
+                                                         ecma_value_t this_arg, /**< 'this' argument value */
+                                                         const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                                 * passed to routine */
+                                                         uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_reference_error_prototype_dispatch_routine */
+
 #endif /* JERRY_BUILTIN_ERRORS */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror.c
index 5c983555c5..54eabfdc85 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror.c
@@ -92,6 +92,27 @@ ecma_builtin_reference_error_dispatch_construct (const ecma_value_t *arguments_l
 #endif /* JERRY_ESNEXT */
 } /* ecma_builtin_reference_error_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_reference_error_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                               ecma_value_t this_arg, /**< 'this' argument value */
+                                               const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                       *   passed to routine */
+                                               uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_reference_error_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-reflect.c b/jerry-core/ecma/builtin-objects/ecma-builtin-reflect.c
index 32c32dc719..d6aac638e5 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-reflect.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-reflect.c
@@ -31,11 +31,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.c
index 12b3b08ec5..f4815b2c76 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.c
@@ -36,11 +36,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-string-iterator-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-string-iterator-prototype.c
index d2d0d56ece..ed676dee6c 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-string-iterator-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-string-iterator-prototype.c
@@ -25,6 +25,15 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
+/**
+ * List of built-in routine identifiers.
+ */
+enum
+{
+  ECMA_REGEXP_STRING_ITERATOR_PROTOTYPE_ROUTINE_START = 0,
+  ECMA_REGEXP_STRING_ITERATOR_PROTOTYPE_OBJECT_NEXT,
+};
+
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-regexp-string-iterator-prototype.inc.h"
 #define BUILTIN_UNDERSCORED_ID  regexp_string_iterator_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
@@ -179,6 +188,39 @@ ecma_builtin_regexp_string_iterator_prototype_object_next (ecma_value_t this_val
   return result;
 } /* ecma_builtin_regexp_string_iterator_prototype_object_next */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_regexp_string_iterator_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                             *routine identifier */
+                                                                ecma_value_t this_arg, /**< 'this' argument value */
+                                                                const ecma_value_t arguments_list_p[], /**< list of
+                                                                                                        * arguments
+                                                                                                        * passed to
+                                                                                                        * routine */
+                                                                uint32_t arguments_number) /**< length of
+                                                                                            * arguments' list */
+{
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+
+  switch (builtin_routine_id)
+  {
+    case ECMA_REGEXP_STRING_ITERATOR_PROTOTYPE_OBJECT_NEXT:
+    {
+      return ecma_builtin_regexp_string_iterator_prototype_object_next (this_arg);
+    }
+    default:
+    {
+      JERRY_UNREACHABLE ();
+    }
+  }
+} /* ecma_builtin_regexp_string_iterator_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-string-iterator-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-string-iterator-prototype.inc.h
index d2eebddb7b..83631d82ed 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-string-iterator-prototype.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-string-iterator-prototype.inc.h
@@ -27,7 +27,7 @@ STRING_VALUE (LIT_GLOBAL_SYMBOL_TO_STRING_TAG,
 
 /* Routine properties:
  *  (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
-ROUTINE (LIT_MAGIC_STRING_NEXT, ecma_builtin_regexp_string_iterator_prototype_object_next, 0, 0)
+ROUTINE (LIT_MAGIC_STRING_NEXT, ECMA_REGEXP_STRING_ITERATOR_PROTOTYPE_OBJECT_NEXT, 0, 0)
 
 #endif /* JERRY_ESNEXT */
 
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.c b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.c
index e999042940..8cc0599aa4 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.c
@@ -29,6 +29,15 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
+/**
+ * List of built-in routine identifiers.
+ */
+enum
+{
+  ECMA_BUILTIN_REGEXP_ROUTINE_START = 0,
+  ECMA_BUILTIN_REGEXP_SPECES_GET,
+};
+
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-regexp.inc.h"
 #define BUILTIN_UNDERSCORED_ID  regexp
 #include "ecma-builtin-internal-routines-template.inc.h"
@@ -216,19 +225,34 @@ ecma_builtin_regexp_dispatch_construct (const ecma_value_t *arguments_list_p, /*
   return ecma_builtin_regexp_dispatch_helper (arguments_list_p, arguments_list_len);
 } /* ecma_builtin_regexp_dispatch_construct */
 
-#if JERRY_ESNEXT
 /**
- * 21.2.4.2 get RegExp [ @@species ] accessor
+ * Dispatcher of the built-in's routines
  *
- * @return ecma_value
- *         returned value must be freed with ecma_free_value
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
  */
 ecma_value_t
-ecma_builtin_regexp_species_get (ecma_value_t this_value) /**< This Value */
+ecma_builtin_regexp_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                      ecma_value_t this_arg, /**< 'this' argument value */
+                                      const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                              *   passed to routine */
+                                      uint32_t arguments_number) /**< length of arguments' list */
 {
-  return ecma_copy_value (this_value);
-} /* ecma_builtin_regexp_species_get */
-#endif /* JERRY_ESNEXT */
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+
+  switch (builtin_routine_id)
+  {
+    case ECMA_BUILTIN_REGEXP_SPECES_GET:
+    {
+      return ecma_copy_value (this_arg);
+    }
+    default:
+    {
+      JERRY_UNREACHABLE ();
+    }
+  }
+} /* ecma_builtin_regexp_dispatch_routine */
 
 /**
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.inc.h
index 882e42caf8..309f4c8760 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.inc.h
@@ -30,7 +30,7 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, ECMA_BUILTIN_ID_REGEXP_PROTOTYPE, ECMA
 STRING_VALUE (LIT_MAGIC_STRING_NAME, LIT_MAGIC_STRING_REGEXP_UL, ECMA_PROPERTY_FLAG_CONFIGURABLE)
 
 /* ECMA-262 v6, 21.2.4.2 */
-ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_SPECIES, ecma_builtin_regexp_species_get, ECMA_PROPERTY_FLAG_CONFIGURABLE)
+ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_SPECIES, ECMA_BUILTIN_REGEXP_SPECES_GET, ECMA_PROPERTY_FLAG_CONFIGURABLE)
 #endif /* JERRY_ESNEXT */
 
 #endif /* JERRY_BUILTIN_REGEXP */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-set-iterator-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-set-iterator-prototype.c
index e435626b46..c4738fcffb 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-set-iterator-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-set-iterator-prototype.c
@@ -22,11 +22,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-set-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-set-prototype.c
index 8ff2687cdb..71a9d8fe31 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-set-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-set-prototype.c
@@ -20,10 +20,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-set-prototype.inc.h"
 #define BUILTIN_UNDERSCORED_ID  set_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-set.c b/jerry-core/ecma/builtin-objects/ecma-builtin-set.c
index 8210cc94f5..02206b6228 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-set.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-set.c
@@ -22,6 +22,15 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
+/**
+ * List of built-in routine identifiers.
+ */
+enum
+{
+  ECMA_BUILTIN_SET_ROUTINE_START = 0,
+  ECMA_BUILTIN_SET_SPECIES_GET,
+};
+
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-set.inc.h"
 #define BUILTIN_UNDERSCORED_ID  set
 #include "ecma-builtin-internal-routines-template.inc.h"
@@ -66,16 +75,33 @@ ecma_builtin_set_dispatch_construct (const ecma_value_t *arguments_list_p, /**<
 } /* ecma_builtin_set_dispatch_construct */
 
 /**
- * 23.2.2.2 get Set [ @@species ] accessor
+ * Dispatcher of the built-in's routines
  *
- * @return ecma_value
- *         returned value must be freed with ecma_free_value
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
  */
 ecma_value_t
-ecma_builtin_set_species_get (ecma_value_t this_value) /**< This Value */
+ecma_builtin_set_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                   ecma_value_t this_arg, /**< 'this' argument value */
+                                   const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                           *   passed to routine */
+                                   uint32_t arguments_number) /**< length of arguments' list */
 {
-  return ecma_copy_value (this_value);
-} /* ecma_builtin_set_species_get */
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+
+  switch (builtin_routine_id)
+  {
+    case ECMA_BUILTIN_SET_SPECIES_GET:
+    {
+      return ecma_copy_value (this_arg);
+    }
+    default:
+    {
+      JERRY_UNREACHABLE ();
+    }
+  }
+} /* ecma_builtin_set_dispatch_routine */
 
 /**
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-set.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-set.inc.h
index 559b4ccb69..de5e0007b3 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-set.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-set.inc.h
@@ -37,7 +37,7 @@ STRING_VALUE (LIT_MAGIC_STRING_NAME, LIT_MAGIC_STRING_SET_UL, ECMA_PROPERTY_FLAG
 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, ECMA_BUILTIN_ID_SET_PROTOTYPE, ECMA_PROPERTY_FIXED)
 
 /* ECMA-262 v6, 23.2.2.2 */
-ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_SPECIES, ecma_builtin_set_species_get, ECMA_PROPERTY_FLAG_CONFIGURABLE)
+ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_SPECIES, ECMA_BUILTIN_SET_SPECIES_GET, ECMA_PROPERTY_FLAG_CONFIGURABLE)
 
 #endif /* JERRY_BUILTIN_CONTAINER */
 
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer-prototype.c
index dc6fc22f17..a8f49f23c9 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer-prototype.c
@@ -33,6 +33,16 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
+/**
+ * List of built-in routine identifiers.
+ */
+enum
+{
+  ECMA_BUILTIN_SHARED_ARRYBUFFER_PROTOTYPE_ROUTINE_START = 0,
+  ECMA_BUILTIN_SHARED_ARRYBUFFER_PROTOTYPE_BYTELENGTH_GETTER,
+  ECMA_BUILTIN_SHARED_ARRYBUFFER_PROTOTYPE_OBJECT_SLICE,
+};
+
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-shared-arraybuffer-prototype.inc.h"
 #define BUILTIN_UNDERSCORED_ID  shared_arraybuffer_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
@@ -104,6 +114,42 @@ ecma_builtin_shared_arraybuffer_prototype_object_slice (ecma_value_t this_arg, /
   return ecma_builtin_arraybuffer_slice (this_arg, argument_list_p, arguments_number);
 } /* ecma_builtin_shared_arraybuffer_prototype_object_slice */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_shared_arraybuffer_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                         *routine identifier */
+                                                            ecma_value_t this_arg, /**< 'this' argument value */
+                                                            const ecma_value_t arguments_list_p[], /**< list of
+                                                                                                    * arguments
+                                                                                                    * passed to
+                                                                                                    *  routine */
+                                                            uint32_t arguments_number) /**< length of
+                                                                                        * arguments' list */
+{
+  JERRY_UNUSED (arguments_number);
+
+  switch (builtin_routine_id)
+  {
+    case ECMA_BUILTIN_SHARED_ARRYBUFFER_PROTOTYPE_BYTELENGTH_GETTER:
+    {
+      return ecma_builtin_shared_arraybuffer_prototype_bytelength_getter (this_arg);
+    }
+    case ECMA_BUILTIN_SHARED_ARRYBUFFER_PROTOTYPE_OBJECT_SLICE:
+    {
+      return ecma_builtin_shared_arraybuffer_prototype_object_slice (this_arg, arguments_list_p, arguments_number);
+    }
+    default:
+    {
+      JERRY_UNREACHABLE ();
+    }
+  }
+} /* ecma_builtin_shared_arraybuffer_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer-prototype.inc.h
index c7b0b9eb06..196282073f 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer-prototype.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer-prototype.inc.h
@@ -28,7 +28,7 @@ OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, ECMA_BUILTIN_ID_SHARED_ARRAYBUFFER,
 
 /* Readonly accessor properties */
 ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_BYTE_LENGTH_UL,
-                    ecma_builtin_shared_arraybuffer_prototype_bytelength_getter,
+                    ECMA_BUILTIN_SHARED_ARRYBUFFER_PROTOTYPE_BYTELENGTH_GETTER,
                     ECMA_PROPERTY_FLAG_CONFIGURABLE)
 
 /* ECMA-262 v11, 24.2.4.4 */
@@ -36,7 +36,7 @@ STRING_VALUE (LIT_GLOBAL_SYMBOL_TO_STRING_TAG, LIT_MAGIC_STRING_SHARED_ARRAY_BUF
 
 /* Routine properties:
  *  (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
-ROUTINE (LIT_MAGIC_STRING_SLICE, ecma_builtin_shared_arraybuffer_prototype_object_slice, NON_FIXED, 2)
+ROUTINE (LIT_MAGIC_STRING_SLICE, ECMA_BUILTIN_SHARED_ARRYBUFFER_PROTOTYPE_OBJECT_SLICE, NON_FIXED, 2)
 
 #endif /* JERRY_BUILTIN_SHAREDARRAYBUFFER */
 
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer.c b/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer.c
index 473287ec49..e49626aee2 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer.c
@@ -29,6 +29,15 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
+/**
+ * List of built-in routine identifiers.
+ */
+enum
+{
+  ECMA_BUILTIN_SHARED_ARRYBUFFER_ROUTINE_START = 0,
+  ECMA_BUILTIN_SHARED_ARRYBUFFER_SPECIES_GET,
+};
+
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-shared-arraybuffer.inc.h"
 #define BUILTIN_UNDERSCORED_ID  shared_arraybuffer
 #include "ecma-builtin-internal-routines-template.inc.h"
@@ -76,16 +85,33 @@ ecma_builtin_shared_arraybuffer_dispatch_construct (const ecma_value_t *argument
 } /* ecma_builtin_shared_arraybuffer_dispatch_construct */
 
 /**
- * 24.2.3.2 get SharedArrayBuffer [ @@species ] accessor
+ * Dispatcher of the built-in's routines
  *
- * @return ecma_value
- *         returned value must be freed with ecma_free_value
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
  */
 ecma_value_t
-ecma_builtin_shared_arraybuffer_species_get (ecma_value_t this_value) /**< This Value */
+ecma_builtin_shared_arraybuffer_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                                  ecma_value_t this_arg, /**< 'this' argument value */
+                                                  const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                          *   passed to routine */
+                                                  uint32_t arguments_number) /**< length of arguments' list */
 {
-  return ecma_copy_value (this_value);
-} /* ecma_builtin_shared_arraybuffer_species_get */
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+
+  switch (builtin_routine_id)
+  {
+    case ECMA_BUILTIN_SHARED_ARRYBUFFER_SPECIES_GET:
+    {
+      return ecma_copy_value (this_arg);
+    }
+    default:
+    {
+      JERRY_UNREACHABLE ();
+    }
+  }
+} /* ecma_builtin_shared_arraybuffer_dispatch_routine */
 
 /**
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer.inc.h
index 8a7c73a7f4..becbe3e004 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-shared-arraybuffer.inc.h
@@ -38,7 +38,7 @@ STRING_VALUE (LIT_MAGIC_STRING_NAME, LIT_MAGIC_STRING_SHARED_ARRAY_BUFFER_UL, EC
 
 /* ES11 24.1.3.3 */
 ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_SPECIES,
-                    ecma_builtin_shared_arraybuffer_species_get,
+                    ECMA_BUILTIN_SHARED_ARRYBUFFER_SPECIES_GET,
                     ECMA_PROPERTY_FLAG_CONFIGURABLE)
 
 #endif /* JERRY_BUILTIN_SHAREDARRAYBUFFER */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-string-iterator-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-string-iterator-prototype.c
index a939a8886a..26be28039a 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-string-iterator-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-string-iterator-prototype.c
@@ -22,11 +22,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.c
index dafde43ed7..d60e144964 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.c
@@ -43,11 +43,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-string.c b/jerry-core/ecma/builtin-objects/ecma-builtin-string.c
index 206889ba56..71fb393a56 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-string.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-string.c
@@ -34,11 +34,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-symbol-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-symbol-prototype.c
index c508148b1d..96a3fa37ac 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-symbol-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-symbol-prototype.c
@@ -30,11 +30,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-symbol.c b/jerry-core/ecma/builtin-objects/ecma-builtin-symbol.c
index 646a4daa86..217a428458 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-symbol.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-symbol.c
@@ -32,6 +32,16 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
+/**
+ * List of built-in routine identifiers.
+ */
+enum
+{
+  ECMA_BUILTIN_SYMBOL_ROUTINE_START = 0,
+  ECMA_BUILTIN_SYMBOL_FOR,
+  ECMA_BUILTIN_SYMBOL_KEY_FOR,
+};
+
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-symbol.inc.h"
 #define BUILTIN_UNDERSCORED_ID  symbol
 #include "ecma-builtin-internal-routines-template.inc.h"
@@ -248,6 +258,39 @@ ecma_builtin_symbol_key_for (ecma_value_t this_arg, /**< this argument */
   return ecma_builtin_symbol_for_helper (symbol);
 } /* ecma_builtin_symbol_key_for */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_symbol_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                      ecma_value_t this_arg, /**< 'this' argument value */
+                                      const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                              *   passed to routine */
+                                      uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+
+  switch (builtin_routine_id)
+  {
+    case ECMA_BUILTIN_SYMBOL_KEY_FOR:
+    {
+      return ecma_builtin_symbol_key_for (this_arg, arguments_list_p[0]);
+    }
+    case ECMA_BUILTIN_SYMBOL_FOR:
+    {
+      return ecma_builtin_symbol_for (this_arg, arguments_list_p[0]);
+    }
+    default:
+    {
+      JERRY_UNREACHABLE ();
+    }
+  }
+} /* ecma_builtin_symbol_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-symbol.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-symbol.inc.h
index 1d34b3a41f..b72bffe361 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-symbol.inc.h
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-symbol.inc.h
@@ -76,8 +76,8 @@ SYMBOL_VALUE (LIT_MAGIC_STRING_MATCH_ALL, LIT_GLOBAL_SYMBOL_MATCH_ALL)
 
 /* Routine properties:
  *  (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
-ROUTINE (LIT_MAGIC_STRING_FOR, ecma_builtin_symbol_for, 1, 1)
-ROUTINE (LIT_MAGIC_STRING_KEY_FOR, ecma_builtin_symbol_key_for, 1, 1)
+ROUTINE (LIT_MAGIC_STRING_FOR, ECMA_BUILTIN_SYMBOL_FOR, 1, 1)
+ROUTINE (LIT_MAGIC_STRING_KEY_FOR, ECMA_BUILTIN_SYMBOL_KEY_FOR, 1, 1)
 
 #endif /* JERRY_ESNEXT */
 
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror-prototype.c
index 2e5e7b8c61..1eb4e9d54a 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror-prototype.c
@@ -34,4 +34,26 @@
 #define BUILTIN_UNDERSCORED_ID  syntax_error_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_syntax_error_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                   * routine identifier */
+                                                      ecma_value_t this_arg, /**< 'this' argument value */
+                                                      const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                              *   passed to routine */
+                                                      uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_syntax_error_prototype_dispatch_routine */
+
 #endif /* JERRY_BUILTIN_ERRORS */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror.c
index 6227ef600b..a49b63b787 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror.c
@@ -92,6 +92,27 @@ ecma_builtin_syntax_error_dispatch_construct (const ecma_value_t *arguments_list
 #endif /* JERRY_ESNEXT */
 } /* ecma_builtin_syntax_error_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_syntax_error_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                            ecma_value_t this_arg, /**< 'this' argument value */
+                                            const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                    *   passed to routine */
+                                            uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_syntax_error_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-type-error-thrower.c b/jerry-core/ecma/builtin-objects/ecma-builtin-type-error-thrower.c
index 3e2f9df37b..ca9ac43973 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-type-error-thrower.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-type-error-thrower.c
@@ -76,6 +76,27 @@ ecma_builtin_type_error_thrower_dispatch_construct (const ecma_value_t *argument
   return ecma_builtin_type_error_thrower_dispatch_call (arguments_list_p, arguments_list_len);
 } /* ecma_builtin_type_error_thrower_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_type_error_thrower_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                                  ecma_value_t this_arg, /**< 'this' argument value */
+                                                  const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                          *   passed to routine */
+                                                  uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_type_error_thrower_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror-prototype.c
index 9e9971a1b8..3e04fd1f9a 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror-prototype.c
@@ -34,4 +34,25 @@
 #define BUILTIN_UNDERSCORED_ID  type_error_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_type_error_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                                    ecma_value_t this_arg, /**< 'this' argument value */
+                                                    const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                            *   passed to routine */
+                                                    uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_type_error_prototype_dispatch_routine */
+
 #endif /* JERRY_BUILTIN_ERRORS */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror.c
index a16fce508d..c14fb2fee5 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror.c
@@ -92,6 +92,27 @@ ecma_builtin_type_error_dispatch_construct (const ecma_value_t *arguments_list_p
 #endif /* JERRY_ESNEXT */
 } /* ecma_builtin_type_error_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_type_error_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                          ecma_value_t this_arg, /**< 'this' argument value */
+                                          const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                  *   passed to routine */
+                                          uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_type_error_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-urierror-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-urierror-prototype.c
index 26acbaba73..ab20f94048 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-urierror-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-urierror-prototype.c
@@ -34,4 +34,25 @@
 #define BUILTIN_UNDERSCORED_ID  uri_error_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_uri_error_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                                   ecma_value_t this_arg, /**< 'this' argument value */
+                                                   const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                           *   passed to routine */
+                                                   uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_uri_error_prototype_dispatch_routine */
+
 #endif /* JERRY_BUILTIN_ERRORS */
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-urierror.c b/jerry-core/ecma/builtin-objects/ecma-builtin-urierror.c
index 52d7a2b6ca..330d856ec4 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-urierror.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-urierror.c
@@ -92,6 +92,27 @@ ecma_builtin_uri_error_dispatch_construct (const ecma_value_t *arguments_list_p,
 #endif /* JERRY_ESNEXT */
 } /* ecma_builtin_uri_error_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_uri_error_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                         ecma_value_t this_arg, /**< 'this' argument value */
+                                         const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                 *   passed to routine */
+                                         uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_uri_error_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-weakmap-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-weakmap-prototype.c
index 2a8d6768f2..dcee6b6d2e 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-weakmap-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-weakmap-prototype.c
@@ -20,10 +20,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-weakmap-prototype.inc.h"
 #define BUILTIN_UNDERSCORED_ID  weakmap_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-weakmap.c b/jerry-core/ecma/builtin-objects/ecma-builtin-weakmap.c
index 76dcfedf36..098a80f820 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-weakmap.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-weakmap.c
@@ -65,6 +65,27 @@ ecma_builtin_weakmap_dispatch_construct (const ecma_value_t *arguments_list_p, /
                                    ECMA_BUILTIN_ID_WEAKMAP_PROTOTYPE);
 } /* ecma_builtin_weakmap_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_weakmap_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                       ecma_value_t this_arg, /**< 'this' argument value */
+                                       const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                               *   passed to routine */
+                                       uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_weakmap_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-weakref-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-weakref-prototype.c
index be72d0665b..4fff330064 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-weakref-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-weakref-prototype.c
@@ -21,11 +21,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
@@ -35,9 +30,6 @@ enum
   ECMA_BUILTIN_WEAKREF_PROTOTYPE_OBJECT_DEREF
 };
 
-/**
- * This object has a custom dispatch function.
- */
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-weakref-prototype.inc.h"
 #define BUILTIN_UNDERSCORED_ID  weakref_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-weakref.c b/jerry-core/ecma/builtin-objects/ecma-builtin-weakref.c
index 286c76e8fa..0f994a8b8e 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-weakref.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-weakref.c
@@ -87,6 +87,27 @@ ecma_builtin_weakref_dispatch_construct (const ecma_value_t *arguments_list_p, /
   return ecma_make_object_value (object_p);
 } /* ecma_builtin_weakref_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_weakref_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                       ecma_value_t this_arg, /**< 'this' argument value */
+                                       const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                               *   passed to routine */
+                                       uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_weakref_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-weakset-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-weakset-prototype.c
index 370c5047b0..2077188811 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-weakset-prototype.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-weakset-prototype.c
@@ -20,10 +20,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-weakset-prototype.inc.h"
 #define BUILTIN_UNDERSCORED_ID  weakset_prototype
 #include "ecma-builtin-internal-routines-template.inc.h"
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-weakset.c b/jerry-core/ecma/builtin-objects/ecma-builtin-weakset.c
index 1bd04ec463..cd39ed44b9 100644
--- a/jerry-core/ecma/builtin-objects/ecma-builtin-weakset.c
+++ b/jerry-core/ecma/builtin-objects/ecma-builtin-weakset.c
@@ -65,6 +65,26 @@ ecma_builtin_weakset_dispatch_construct (const ecma_value_t *arguments_list_p, /
                                    ECMA_BUILTIN_ID_WEAKSET_PROTOTYPE);
 } /* ecma_builtin_weakset_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_weakset_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                       ecma_value_t this_arg, /**< 'this' argument value */
+                                       const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                               *   passed to routine */
+                                       uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_weakset_dispatch_routine */
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-bigint64array-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-bigint64array-prototype.c
index 3b33e03355..14d5133ae0 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-bigint64array-prototype.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-bigint64array-prototype.c
@@ -35,6 +35,29 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_bigint64array_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                    * routine identifier */
+                                                       ecma_value_t this_arg, /**< 'this' argument value */
+                                                       const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                               *   passed
+                                                                                               * to routine */
+                                                       uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_bigint64array_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-bigint64array.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-bigint64array.c
index 1f8b29f6bc..12d224d9e5 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-bigint64array.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-bigint64array.c
@@ -69,6 +69,27 @@ ecma_builtin_bigint64array_dispatch_construct (const ecma_value_t *arguments_lis
   return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len, ECMA_BIGINT64_ARRAY);
 } /* ecma_builtin_bigint64array_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_bigint64array_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                             ecma_value_t this_arg, /**< 'this' argument value */
+                                             const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                     *   passed to routine */
+                                             uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_bigint64array_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-biguint64array-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-biguint64array-prototype.c
index 9844fbd530..85af585e74 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-biguint64array-prototype.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-biguint64array-prototype.c
@@ -35,6 +35,29 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_biguint64array_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                     * routine identifier */
+                                                        ecma_value_t this_arg, /**< 'this' argument value */
+                                                        const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                                *   passed
+                                                                                                * to routine */
+                                                        uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_biguint64array_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-biguint64array.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-biguint64array.c
index 214fa716db..3dd6b6ea45 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-biguint64array.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-biguint64array.c
@@ -69,6 +69,27 @@ ecma_builtin_biguint64array_dispatch_construct (const ecma_value_t *arguments_li
   return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len, ECMA_BIGUINT64_ARRAY);
 } /* ecma_builtin_biguint64array_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_biguint64array_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                              ecma_value_t this_arg, /**< 'this' argument value */
+                                              const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                      *   passed to routine */
+                                              uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_biguint64array_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float32array-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float32array-prototype.c
index 1e6a604102..eaf32afb59 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float32array-prototype.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float32array-prototype.c
@@ -34,6 +34,29 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_float32array_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                   * routine identifier */
+                                                      ecma_value_t this_arg, /**< 'this' argument value */
+                                                      const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                              *   passed
+                                                                                              * to routine */
+                                                      uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_float32array_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float32array.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float32array.c
index b69cc4c046..aa8fd39a8b 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float32array.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float32array.c
@@ -68,6 +68,27 @@ ecma_builtin_float32array_dispatch_construct (const ecma_value_t *arguments_list
   return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len, ECMA_FLOAT32_ARRAY);
 } /* ecma_builtin_float32array_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_float32array_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                            ecma_value_t this_arg, /**< 'this' argument value */
+                                            const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                    *   passed to routine */
+                                            uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_float32array_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float64array-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float64array-prototype.c
index 205d23a785..1a44a6037f 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float64array-prototype.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float64array-prototype.c
@@ -35,6 +35,29 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_float64array_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                   * routine identifier */
+                                                      ecma_value_t this_arg, /**< 'this' argument value */
+                                                      const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                              *   passed
+                                                                                              * to routine */
+                                                      uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_float64array_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float64array.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float64array.c
index 997fb5a7b3..7fc1ae74ed 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float64array.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float64array.c
@@ -69,6 +69,27 @@ ecma_builtin_float64array_dispatch_construct (const ecma_value_t *arguments_list
   return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len, ECMA_FLOAT64_ARRAY);
 } /* ecma_builtin_float64array_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_float64array_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                            ecma_value_t this_arg, /**< 'this' argument value */
+                                            const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                    *   passed to routine */
+                                            uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_float64array_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int16array-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int16array-prototype.c
index 1b9c435b0f..fe1da31800 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int16array-prototype.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int16array-prototype.c
@@ -34,6 +34,29 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_int16array_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                 * routine identifier */
+                                                    ecma_value_t this_arg, /**< 'this' argument value */
+                                                    const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                            *   passed
+                                                                                            * to routine */
+                                                    uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_int16array_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int16array.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int16array.c
index 6945114a31..ee8a1a5d76 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int16array.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int16array.c
@@ -68,6 +68,27 @@ ecma_builtin_int16array_dispatch_construct (const ecma_value_t *arguments_list_p
   return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len, ECMA_INT16_ARRAY);
 } /* ecma_builtin_int16array_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_int16array_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                          ecma_value_t this_arg, /**< 'this' argument value */
+                                          const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                  *   passed to routine */
+                                          uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_int16array_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int32array-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int32array-prototype.c
index 36fc847062..885c513220 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int32array-prototype.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int32array-prototype.c
@@ -34,6 +34,29 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_int32array_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                 * routine identifier */
+                                                    ecma_value_t this_arg, /**< 'this' argument value */
+                                                    const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                            *   passed
+                                                                                            * to routine */
+                                                    uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_int32array_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int32array.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int32array.c
index d3d899c1fe..0b9b95894d 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int32array.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int32array.c
@@ -68,6 +68,27 @@ ecma_builtin_int32array_dispatch_construct (const ecma_value_t *arguments_list_p
   return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len, ECMA_INT32_ARRAY);
 } /* ecma_builtin_int32array_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_int32array_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                          ecma_value_t this_arg, /**< 'this' argument value */
+                                          const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                  *   passed to routine */
+                                          uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_int32array_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int8array-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int8array-prototype.c
index 8221f30900..0e349084d7 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int8array-prototype.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int8array-prototype.c
@@ -34,6 +34,29 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_int8array_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                * routine identifier */
+                                                   ecma_value_t this_arg, /**< 'this' argument value */
+                                                   const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                           *   passed
+                                                                                           * to routine */
+                                                   uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_int8array_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int8array.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int8array.c
index 87ea168cc8..53f33fa181 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int8array.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int8array.c
@@ -68,6 +68,27 @@ ecma_builtin_int8array_dispatch_construct (const ecma_value_t *arguments_list_p,
   return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len, ECMA_INT8_ARRAY);
 } /* ecma_builtin_int8array_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_int8array_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                         ecma_value_t this_arg, /**< 'this' argument value */
+                                         const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                 *   passed to routine */
+                                         uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_int8array_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c
index b93c429c56..04f9550eed 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c
@@ -43,11 +43,6 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
-/**
- * This object has a custom dispatch function.
- */
-#define BUILTIN_CUSTOM_DISPATCH
-
 /**
  * List of built-in routine identifiers.
  */
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray.c
index 898492fa84..85e0e1af04 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray.c
@@ -28,6 +28,17 @@
 #define ECMA_BUILTINS_INTERNAL
 #include "ecma-builtins-internal.h"
 
+/**
+ * List of built-in routine identifiers.
+ */
+enum
+{
+  ECMA_BUILTIN_TYPEDARRAY_ROUTINE_START = 0,
+  ECMA_BUILTIN_TYPEDARRAY_OF,
+  ECMA_BUILTIN_TYPEDARRAY_FROM,
+  ECMA_BUILTIN_TYPEDARRAY_SPECIES_GET,
+};
+
 #define BUILTIN_INC_HEADER_NAME "ecma-builtin-typedarray.inc.h"
 #define BUILTIN_UNDERSCORED_ID  typedarray
 #include "ecma-builtin-internal-routines-template.inc.h"
@@ -187,16 +198,38 @@ ecma_builtin_typedarray_dispatch_construct (const ecma_value_t *arguments_list_p
 } /* ecma_builtin_typedarray_dispatch_construct */
 
 /**
- * 22.2.2.4 get %TypedArray% [ @@species ] accessor
+ * Dispatcher of the built-in's routines
  *
- * @return ecma_value
- *         returned value must be freed with ecma_free_value
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
  */
 ecma_value_t
-ecma_builtin_typedarray_species_get (ecma_value_t this_value) /**< This Value */
+ecma_builtin_typedarray_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                          ecma_value_t this_arg, /**< 'this' argument value */
+                                          const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                  *   passed to routine */
+                                          uint32_t arguments_number) /**< length of arguments' list */
 {
-  return ecma_copy_value (this_value);
-} /* ecma_builtin_typedarray_species_get */
+  switch (builtin_routine_id)
+  {
+    case ECMA_BUILTIN_TYPEDARRAY_FROM:
+    {
+      return ecma_builtin_typedarray_from (this_arg, arguments_list_p, arguments_number);
+    }
+    case ECMA_BUILTIN_TYPEDARRAY_OF:
+    {
+      return ecma_builtin_typedarray_of (this_arg, arguments_list_p, arguments_number);
+    }
+    case ECMA_BUILTIN_TYPEDARRAY_SPECIES_GET:
+    {
+      return ecma_copy_value (this_arg);
+    }
+    default:
+    {
+      JERRY_UNREACHABLE ();
+    }
+  }
+} /* ecma_builtin_typedarray_dispatch_routine */
 
 /**
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray.inc.h b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray.inc.h
index bc8ab47db4..6a9f7c6466 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray.inc.h
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray.inc.h
@@ -35,13 +35,13 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, ECMA_BUILTIN_ID_TYPEDARRAY_PROTOTYPE,
  *  (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
 
 /* ES2015 22.2.2.1 */
-ROUTINE (LIT_MAGIC_STRING_FROM, ecma_builtin_typedarray_from, NON_FIXED, 1)
+ROUTINE (LIT_MAGIC_STRING_FROM, ECMA_BUILTIN_TYPEDARRAY_FROM, NON_FIXED, 1)
 
 /* ES2015 22.2.2.2 */
-ROUTINE (LIT_MAGIC_STRING_OF, ecma_builtin_typedarray_of, NON_FIXED, 0)
+ROUTINE (LIT_MAGIC_STRING_OF, ECMA_BUILTIN_TYPEDARRAY_OF, NON_FIXED, 0)
 
 /* ES2015 22.2.2.4 */
-ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_SPECIES, ecma_builtin_typedarray_species_get, ECMA_PROPERTY_FLAG_CONFIGURABLE)
+ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_SPECIES, ECMA_BUILTIN_TYPEDARRAY_SPECIES_GET, ECMA_PROPERTY_FLAG_CONFIGURABLE)
 
 #endif /* JERRY_BUILTIN_TYPEDARRAY */
 
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint16array-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint16array-prototype.c
index 691da4ba87..4066852c95 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint16array-prototype.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint16array-prototype.c
@@ -34,6 +34,29 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_uint16array_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                  * routine identifier */
+                                                     ecma_value_t this_arg, /**< 'this' argument value */
+                                                     const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                             *   passed
+                                                                                             * to routine */
+                                                     uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_uint16array_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint16array.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint16array.c
index db0367ddec..c507f084dc 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint16array.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint16array.c
@@ -68,6 +68,27 @@ ecma_builtin_uint16array_dispatch_construct (const ecma_value_t *arguments_list_
   return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len, ECMA_UINT16_ARRAY);
 } /* ecma_builtin_uint16array_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_uint16array_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                           ecma_value_t this_arg, /**< 'this' argument value */
+                                           const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                   *   passed to routine */
+                                           uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_uint16array_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint32array-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint32array-prototype.c
index 4b5e384220..05d0a00447 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint32array-prototype.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint32array-prototype.c
@@ -34,6 +34,29 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_uint32array_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                  * routine identifier */
+                                                     ecma_value_t this_arg, /**< 'this' argument value */
+                                                     const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                             *   passed
+                                                                                             * to routine */
+                                                     uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_uint32array_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint32array.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint32array.c
index 51abd555fd..717cb1fd9f 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint32array.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint32array.c
@@ -70,6 +70,27 @@ ecma_builtin_uint32array_dispatch_construct (const ecma_value_t *arguments_list_
   return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len, ECMA_UINT32_ARRAY);
 } /* ecma_builtin_uint32array_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_uint32array_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                           ecma_value_t this_arg, /**< 'this' argument value */
+                                           const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                   *   passed to routine */
+                                           uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_uint32array_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8array-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8array-prototype.c
index 8a8edb4a15..4f9cd8e08f 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8array-prototype.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8array-prototype.c
@@ -34,6 +34,29 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_uint8array_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                 * routine identifier */
+                                                    ecma_value_t this_arg, /**< 'this' argument value */
+                                                    const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                            *   passed
+                                                                                            * to routine */
+                                                    uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_uint8array_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8array.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8array.c
index d646611c22..8420401705 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8array.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8array.c
@@ -68,6 +68,27 @@ ecma_builtin_uint8array_dispatch_construct (const ecma_value_t *arguments_list_p
   return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len, ECMA_UINT8_ARRAY);
 } /* ecma_builtin_uint8array_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_uint8array_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                          ecma_value_t this_arg, /**< 'this' argument value */
+                                          const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                  *   passed to routine */
+                                          uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_uint8array_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8clampedarray-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8clampedarray-prototype.c
index 534014b146..d95663e19a 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8clampedarray-prototype.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8clampedarray-prototype.c
@@ -34,6 +34,29 @@
  * @{
  */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_uint8clampedarray_prototype_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide
+                                                                                        * routine identifier */
+                                                           ecma_value_t this_arg, /**< 'this' argument value */
+                                                           const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                                   *   passed
+                                                                                                   * to routine */
+                                                           uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_uint8clampedarray_prototype_dispatch_routine */
+
 /**
  * @}
  * @}
diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8clampedarray.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8clampedarray.c
index f3678f473d..24a235289e 100644
--- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8clampedarray.c
+++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint8clampedarray.c
@@ -70,6 +70,27 @@ ecma_builtin_uint8clampedarray_dispatch_construct (const ecma_value_t *arguments
   return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len, ECMA_UINT8_CLAMPED_ARRAY);
 } /* ecma_builtin_uint8clampedarray_dispatch_construct */
 
+/**
+ * Dispatcher of the built-in's routines
+ *
+ * @return ecma value
+ *         Returned value must be freed with ecma_free_value.
+ */
+ecma_value_t
+ecma_builtin_uint8clampedarray_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wide routine identifier */
+                                                 ecma_value_t this_arg, /**< 'this' argument value */
+                                                 const ecma_value_t arguments_list_p[], /**< list of arguments
+                                                                                         *   passed to routine */
+                                                 uint32_t arguments_number) /**< length of arguments' list */
+{
+  JERRY_UNUSED (this_arg);
+  JERRY_UNUSED (arguments_number);
+  JERRY_UNUSED (arguments_list_p);
+  JERRY_UNUSED (builtin_routine_id);
+
+  JERRY_UNREACHABLE ();
+} /* ecma_builtin_uint8clampedarray_dispatch_routine */
+
 /**
  * @}
  * @}