Skip to content

Commit 0415d74

Browse files
mmatyasyichoi
authored andcommitted
Reduce code duplication in the TypedArray implementations (#2319)
This patch was done in cooperation with Tamás Kéri. JerryScript-DCO-1.0-Signed-off-by: Mátyás Mustoha [email protected]
1 parent 27dcfa5 commit 0415d74

30 files changed

+448
-528
lines changed

jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float32array-prototype.inc.h

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,10 @@
1717
* Float32Array prototype description
1818
*/
1919

20-
#include "ecma-builtin-helpers-macro-defines.inc.h"
21-
2220
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
2321

24-
/* ES2015 22.2.3.4 */
25-
OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR,
26-
ECMA_BUILTIN_ID_FLOAT32ARRAY,
27-
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
28-
29-
/* ES2015 22.2.6.1 */
30-
NUMBER_VALUE (LIT_MAGIC_STRING_BYTES_PER_ELEMENT_U,
31-
4,
32-
ECMA_PROPERTY_FIXED)
22+
#define TYPEDARRAY_BYTES_PER_ELEMENT 4
23+
#define TYPEDARRAY_BUILTIN_ID ECMA_BUILTIN_ID_FLOAT32ARRAY
24+
#include "ecma-builtin-typedarray-prototype-template.inc.h"
3325

3426
#endif /* !CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN */
35-
36-
#include "ecma-builtin-helpers-macro-undefs.inc.h"

jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float32array.c

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
#define BUILTIN_UNDERSCORED_ID float32array
3131
#include "ecma-builtin-internal-routines-template.inc.h"
3232

33+
#include "ecma-builtin-typedarray-helpers.h"
34+
3335
/** \addtogroup ecma ECMA
3436
* @{
3537
*
@@ -63,18 +65,8 @@ ecma_value_t
6365
ecma_builtin_float32array_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */
6466
ecma_length_t arguments_list_len) /**< number of arguments */
6567
{
66-
JERRY_ASSERT (arguments_list_len == 0 || arguments_list_p != NULL);
67-
68-
ecma_object_t *prototype_obj_p = ecma_builtin_get (ECMA_BUILTIN_ID_FLOAT32ARRAY_PROTOTYPE);
69-
ecma_value_t val = ecma_op_create_typedarray (arguments_list_p,
70-
arguments_list_len,
71-
prototype_obj_p,
72-
2,
73-
LIT_MAGIC_STRING_FLOAT32_ARRAY_UL);
74-
75-
ecma_deref_object (prototype_obj_p);
76-
77-
return val;
68+
return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len,
69+
ECMA_BUILTIN_ID_FLOAT32ARRAY);
7870
} /* ecma_builtin_float32array_dispatch_construct */
7971

8072
/**

jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float32array.inc.h

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,35 +17,11 @@
1717
* Float32Array description
1818
*/
1919

20-
#include "ecma-builtin-helpers-macro-defines.inc.h"
21-
2220
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
2321

24-
/* ES2015 22.2.5 */
25-
NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
26-
3,
27-
ECMA_PROPERTY_FIXED)
28-
29-
/* ES2015 22.2.5.1 */
30-
NUMBER_VALUE (LIT_MAGIC_STRING_BYTES_PER_ELEMENT_U,
31-
4,
32-
ECMA_PROPERTY_FIXED)
33-
34-
/* ES2015 22.2.5 */
35-
NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
36-
3,
37-
ECMA_PROPERTY_FIXED)
38-
39-
/* ES2015 22.2.5 */
40-
STRING_VALUE (LIT_MAGIC_STRING_NAME,
41-
LIT_MAGIC_STRING_FLOAT32_ARRAY_UL,
42-
ECMA_PROPERTY_FIXED)
43-
44-
/* ES2015 22.2.5.2 */
45-
OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
46-
ECMA_BUILTIN_ID_FLOAT32ARRAY_PROTOTYPE,
47-
ECMA_PROPERTY_FIXED)
22+
#define TYPEDARRAY_BYTES_PER_ELEMENT 4
23+
#define TYPEDARRAY_MAGIC_STRING_ID LIT_MAGIC_STRING_FLOAT32_ARRAY_UL
24+
#define TYPEDARRAY_BUILTIN_ID ECMA_BUILTIN_ID_FLOAT32ARRAY_PROTOTYPE
25+
#include "ecma-builtin-typedarray-template.inc.h"
4826

4927
#endif /* !CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN */
50-
51-
#include "ecma-builtin-helpers-macro-undefs.inc.h"

jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float64array-prototype.inc.h

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,12 @@
1717
* Float64Array prototype description
1818
*/
1919

20-
#include "ecma-builtin-helpers-macro-defines.inc.h"
21-
2220
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
2321
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
2422

25-
/* ES2015 22.2.3.4 */
26-
OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR,
27-
ECMA_BUILTIN_ID_FLOAT64ARRAY,
28-
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
29-
30-
/* ES2015 22.2.6.1 */
31-
NUMBER_VALUE (LIT_MAGIC_STRING_BYTES_PER_ELEMENT_U,
32-
8,
33-
ECMA_PROPERTY_FIXED)
23+
#define TYPEDARRAY_BYTES_PER_ELEMENT 8
24+
#define TYPEDARRAY_BUILTIN_ID ECMA_BUILTIN_ID_FLOAT64ARRAY
25+
#include "ecma-builtin-typedarray-prototype-template.inc.h"
3426

3527
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */
3628
#endif /* !CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN */
37-
38-
#include "ecma-builtin-helpers-macro-undefs.inc.h"

jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float64array.c

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
#define BUILTIN_UNDERSCORED_ID float64array
3232
#include "ecma-builtin-internal-routines-template.inc.h"
3333

34+
#include "ecma-builtin-typedarray-helpers.h"
35+
3436
/** \addtogroup ecma ECMA
3537
* @{
3638
*
@@ -64,18 +66,8 @@ ecma_value_t
6466
ecma_builtin_float64array_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */
6567
ecma_length_t arguments_list_len) /**< number of arguments */
6668
{
67-
JERRY_ASSERT (arguments_list_len == 0 || arguments_list_p != NULL);
68-
69-
ecma_object_t *prototype_obj_p = ecma_builtin_get (ECMA_BUILTIN_ID_FLOAT64ARRAY_PROTOTYPE);
70-
ecma_value_t val = ecma_op_create_typedarray (arguments_list_p,
71-
arguments_list_len,
72-
prototype_obj_p,
73-
3,
74-
LIT_MAGIC_STRING_FLOAT64_ARRAY_UL);
75-
76-
ecma_deref_object (prototype_obj_p);
77-
78-
return val;
69+
return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len,
70+
ECMA_BUILTIN_ID_FLOAT64ARRAY);
7971
} /* ecma_builtin_float64array_dispatch_construct */
8072

8173
/**

jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float64array.inc.h

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,13 @@
1717
* Float64Array description
1818
*/
1919

20-
#include "ecma-builtin-helpers-macro-defines.inc.h"
21-
2220
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
2321
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
2422

25-
/* ES2015 22.2.5 */
26-
NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
27-
3,
28-
ECMA_PROPERTY_FIXED)
29-
30-
/* ES2015 22.2.5.1 */
31-
NUMBER_VALUE (LIT_MAGIC_STRING_BYTES_PER_ELEMENT_U,
32-
8,
33-
ECMA_PROPERTY_FIXED)
34-
35-
/* ES2015 22.2.5 */
36-
NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
37-
3,
38-
ECMA_PROPERTY_FIXED)
39-
40-
/* ES2015 22.2.5 */
41-
STRING_VALUE (LIT_MAGIC_STRING_NAME,
42-
LIT_MAGIC_STRING_FLOAT64_ARRAY_UL,
43-
ECMA_PROPERTY_FIXED)
44-
45-
/* ES2015 22.2.5.2 */
46-
OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
47-
ECMA_BUILTIN_ID_FLOAT64ARRAY_PROTOTYPE,
48-
ECMA_PROPERTY_FIXED)
23+
#define TYPEDARRAY_BYTES_PER_ELEMENT 8
24+
#define TYPEDARRAY_MAGIC_STRING_ID LIT_MAGIC_STRING_FLOAT64_ARRAY_UL
25+
#define TYPEDARRAY_BUILTIN_ID ECMA_BUILTIN_ID_FLOAT64ARRAY_PROTOTYPE
26+
#include "ecma-builtin-typedarray-template.inc.h"
4927

5028
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */
5129
#endif /* !CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN */
52-
53-
#include "ecma-builtin-helpers-macro-undefs.inc.h"

jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int16array-prototype.inc.h

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,10 @@
1717
* Int16Array prototype description
1818
*/
1919

20-
#include "ecma-builtin-helpers-macro-defines.inc.h"
21-
2220
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
2321

24-
/* ES2015 22.2.3.4 */
25-
OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR,
26-
ECMA_BUILTIN_ID_INT16ARRAY,
27-
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
28-
29-
/* ES2015 22.2.6.1 */
30-
NUMBER_VALUE (LIT_MAGIC_STRING_BYTES_PER_ELEMENT_U,
31-
2,
32-
ECMA_PROPERTY_FIXED)
22+
#define TYPEDARRAY_BYTES_PER_ELEMENT 2
23+
#define TYPEDARRAY_BUILTIN_ID ECMA_BUILTIN_ID_INT16ARRAY
24+
#include "ecma-builtin-typedarray-prototype-template.inc.h"
3325

3426
#endif /* !CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN */
35-
36-
#include "ecma-builtin-helpers-macro-undefs.inc.h"

jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int16array.c

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
#define BUILTIN_UNDERSCORED_ID int16array
3131
#include "ecma-builtin-internal-routines-template.inc.h"
3232

33+
#include "ecma-builtin-typedarray-helpers.h"
34+
3335
/** \addtogroup ecma ECMA
3436
* @{
3537
*
@@ -63,18 +65,8 @@ ecma_value_t
6365
ecma_builtin_int16array_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */
6466
ecma_length_t arguments_list_len) /**< number of arguments */
6567
{
66-
JERRY_ASSERT (arguments_list_len == 0 || arguments_list_p != NULL);
67-
68-
ecma_object_t *prototype_obj_p = ecma_builtin_get (ECMA_BUILTIN_ID_INT16ARRAY_PROTOTYPE);
69-
ecma_value_t val = ecma_op_create_typedarray (arguments_list_p,
70-
arguments_list_len,
71-
prototype_obj_p,
72-
1,
73-
LIT_MAGIC_STRING_INT16_ARRAY_UL);
74-
75-
ecma_deref_object (prototype_obj_p);
76-
77-
return val;
68+
return ecma_typedarray_helper_dispatch_construct (arguments_list_p, arguments_list_len,
69+
ECMA_BUILTIN_ID_INT16ARRAY);
7870
} /* ecma_builtin_int16array_dispatch_construct */
7971

8072
/**

jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int16array.inc.h

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,35 +17,11 @@
1717
* Int16Array description
1818
*/
1919

20-
#include "ecma-builtin-helpers-macro-defines.inc.h"
21-
2220
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
2321

24-
/* ES2015 22.2.5 */
25-
NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
26-
3,
27-
ECMA_PROPERTY_FIXED)
28-
29-
/* ES2015 22.2.5.1 */
30-
NUMBER_VALUE (LIT_MAGIC_STRING_BYTES_PER_ELEMENT_U,
31-
2,
32-
ECMA_PROPERTY_FIXED)
33-
34-
/* ES2015 22.2.5 */
35-
NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
36-
3,
37-
ECMA_PROPERTY_FIXED)
38-
39-
/* ES2015 22.2.5 */
40-
STRING_VALUE (LIT_MAGIC_STRING_NAME,
41-
LIT_MAGIC_STRING_INT16_ARRAY_UL,
42-
ECMA_PROPERTY_FIXED)
43-
44-
/* ES2015 22.2.5.2 */
45-
OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
46-
ECMA_BUILTIN_ID_INT16ARRAY_PROTOTYPE,
47-
ECMA_PROPERTY_FIXED)
22+
#define TYPEDARRAY_BYTES_PER_ELEMENT 2
23+
#define TYPEDARRAY_MAGIC_STRING_ID LIT_MAGIC_STRING_INT16_ARRAY_UL
24+
#define TYPEDARRAY_BUILTIN_ID ECMA_BUILTIN_ID_INT16ARRAY_PROTOTYPE
25+
#include "ecma-builtin-typedarray-template.inc.h"
4826

4927
#endif /* !CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN */
50-
51-
#include "ecma-builtin-helpers-macro-undefs.inc.h"

jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-int32array-prototype.inc.h

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,10 @@
1717
* Int32Array prototype description
1818
*/
1919

20-
#include "ecma-builtin-helpers-macro-defines.inc.h"
21-
2220
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
2321

24-
/* ES2015 22.2.3.4 */
25-
OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR,
26-
ECMA_BUILTIN_ID_INT32ARRAY,
27-
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
28-
29-
/* ES2015 22.2.6.1 */
30-
NUMBER_VALUE (LIT_MAGIC_STRING_BYTES_PER_ELEMENT_U,
31-
4,
32-
ECMA_PROPERTY_FIXED)
22+
#define TYPEDARRAY_BYTES_PER_ELEMENT 4
23+
#define TYPEDARRAY_BUILTIN_ID ECMA_BUILTIN_ID_INT32ARRAY
24+
#include "ecma-builtin-typedarray-prototype-template.inc.h"
3325

3426
#endif /* !CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN */
35-
36-
#include "ecma-builtin-helpers-macro-undefs.inc.h"

0 commit comments

Comments
 (0)