1/* Copyright JS Foundation and other contributors, http://js.foundation
2 *
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef JERRYSCRIPT_CONFIG_H
17#define JERRYSCRIPT_CONFIG_H
18
19// @JERRY_BUILD_CFG@
20
21/**
22 * Built-in configurations
23 *
24 * Allowed values for built-in defines:
25 * 0: Disable the given built-in.
26 * 1: Enable the given built-in.
27 */
28/*
29 * By default all built-ins are enabled if they are not defined.
30 */
31#ifndef JERRY_BUILTINS
32# define JERRY_BUILTINS 1
33#endif /* !defined (JERRY_BUILTINS) */
34
35#ifndef JERRY_BUILTIN_ANNEXB
36# define JERRY_BUILTIN_ANNEXB JERRY_BUILTINS
37#endif /* !defined (JERRY_BUILTIN_ANNEXB) */
38
39#ifndef JERRY_BUILTIN_ARRAY
40# define JERRY_BUILTIN_ARRAY JERRY_BUILTINS
41#endif /* !defined (JERRY_BUILTIN_ARRAY) */
42
43#ifndef JERRY_BUILTIN_BOOLEAN
44# define JERRY_BUILTIN_BOOLEAN JERRY_BUILTINS
45#endif /* !defined (JERRY_BUILTIN_BOOLEAN) */
46
47#ifndef JERRY_BUILTIN_DATE
48# define JERRY_BUILTIN_DATE JERRY_BUILTINS
49#endif /* !defined (JERRY_BUILTIN_DATE) */
50
51#ifndef JERRY_BUILTIN_ERRORS
52# define JERRY_BUILTIN_ERRORS JERRY_BUILTINS
53#endif /* !defined (JERRY_BUILTIN_ERRORS) */
54
55#ifndef JERRY_BUILTIN_JSON
56# define JERRY_BUILTIN_JSON JERRY_BUILTINS
57#endif /* !defined (JERRY_BUILTIN_JSON) */
58
59#ifndef JERRY_BUILTIN_MATH
60# define JERRY_BUILTIN_MATH JERRY_BUILTINS
61#endif /* !defined (JERRY_BUILTIN_MATH) */
62
63#ifndef JERRY_BUILTIN_NUMBER
64# define JERRY_BUILTIN_NUMBER JERRY_BUILTINS
65#endif /* !defined (JERRY_BUILTIN_NUMBER) */
66
67#ifndef JERRY_BUILTIN_REGEXP
68# define JERRY_BUILTIN_REGEXP JERRY_BUILTINS
69#endif /* !defined (JERRY_BUILTIN_REGEXP) */
70
71#ifndef JERRY_BUILTIN_STRING
72# define JERRY_BUILTIN_STRING JERRY_BUILTINS
73#endif /* !defined (JERRY_BUILTIN_STRING) */
74
75/**
76 * ES2015+ related features, by default all of them are enabled.
77 */
78#ifndef JERRY_ESNEXT
79# define JERRY_ESNEXT 1
80#endif /* !defined (JERRY_ESNEXT) */
81
82#ifndef JERRY_BUILTIN_BIGINT
83# define JERRY_BUILTIN_BIGINT JERRY_ESNEXT
84#endif /* !defined (JERRY_BUILTIN_BIGINT) */
85
86#ifndef JERRY_BUILTIN_DATAVIEW
87# define JERRY_BUILTIN_DATAVIEW JERRY_ESNEXT
88#endif /* !defined (JERRY_BUILTIN_DATAVIEW) */
89
90#ifndef JERRY_BUILTIN_MAP
91# define JERRY_BUILTIN_MAP JERRY_ESNEXT
92#endif /* !defined (JERRY_BUILTIN_MAP) */
93
94#ifndef JERRY_BUILTIN_PROMISE
95# define JERRY_BUILTIN_PROMISE JERRY_ESNEXT
96#endif /* !defined (JERRY_BUILTIN_PROMISE) */
97
98#ifndef JERRY_BUILTIN_PROXY
99# define JERRY_BUILTIN_PROXY JERRY_ESNEXT
100#endif /* !defined (JERRY_BUILTIN_PROXY) */
101
102#ifndef JERRY_BUILTIN_REALMS
103# define JERRY_BUILTIN_REALMS JERRY_ESNEXT
104#endif /* !defined (JERRY_BUILTIN_REALMS) */
105
106#ifndef JERRY_BUILTIN_REFLECT
107# define JERRY_BUILTIN_REFLECT JERRY_ESNEXT
108#endif /* !defined (JERRY_BUILTIN_REFLECT) */
109
110#ifndef JERRY_BUILTIN_SET
111# define JERRY_BUILTIN_SET JERRY_ESNEXT
112#endif /* !defined (JERRY_BUILTIN_SET) */
113
114#ifndef JERRY_BUILTIN_TYPEDARRAY
115# define JERRY_BUILTIN_TYPEDARRAY JERRY_ESNEXT
116#endif /* !defined (JERRY_BUILTIN_TYPEDARRAY) */
117
118#ifndef JERRY_BUILTIN_WEAKMAP
119# define JERRY_BUILTIN_WEAKMAP JERRY_ESNEXT
120#endif /* !defined (JERRY_BUILTIN_WEAKMAP) */
121
122#ifndef JERRY_BUILTIN_WEAKSET
123# define JERRY_BUILTIN_WEAKSET JERRY_ESNEXT
124#endif /* !defined (JERRY_BUILTIN_WEAKSET) */
125
126#ifndef JERRY_MODULE_SYSTEM
127# define JERRY_MODULE_SYSTEM JERRY_ESNEXT
128#endif /* !defined (JERRY_MODULE_SYSTEM) */
129
130/**
131 * Engine internal and misc configurations.
132 */
133
134/**
135 * Specifies the compressed pointer representation
136 *
137 * Allowed values:
138 * 0: use 16 bit representation
139 * 1: use 32 bit representation
140 *
141 * Default value: 0
142 * For more details see: jmem/jmem.h
143 */
144#ifndef JERRY_CPOINTER_32_BIT
145# define JERRY_CPOINTER_32_BIT 0
146#endif /* !defined (JERRY_CPOINTER_32_BIT) */
147
148/**
149 * Enable/Disable the engine's JavaScript debugger interface
150 *
151 * Allowed values:
152 * 0: Disable the debugger parts.
153 * 1: Enable the debugger.
154 */
155#ifndef JERRY_DEBUGGER
156# define JERRY_DEBUGGER 0
157#endif /* !defined (JERRY_DEBUGGER) */
158
159/**
160 * Enable/Disable built-in error messages for error objects.
161 *
162 * Allowed values:
163 * 0: Disable error messages.
164 * 1: Enable error message.
165 *
166 * Default value: 0
167 */
168#ifndef JERRY_ERROR_MESSAGES
169# define JERRY_ERROR_MESSAGES 0
170#endif /* !defined (JERRY_ERROR_MESSAGES) */
171
172/**
173 * Enable/Disable external context.
174 *
175 * Allowed values:
176 * 0: Disable external context.
177 * 1: Enable external context support.
178 *
179 * Default value: 0
180 */
181#ifndef JERRY_EXTERNAL_CONTEXT
182# define JERRY_EXTERNAL_CONTEXT 0
183#endif /* !defined (JERRY_EXTERNAL_CONTEXT) */
184
185/**
186 * Maximum size of heap in kilobytes
187 *
188 * Default value: 512 KiB
189 */
190#ifndef JERRY_GLOBAL_HEAP_SIZE
191# define JERRY_GLOBAL_HEAP_SIZE (512)
192#endif /* !defined (JERRY_GLOBAL_HEAP_SIZE) */
193
194/**
195 * The allowed heap usage limit until next garbage collection, in bytes.
196 *
197 * If value is 0, the default is 1/32 of JERRY_HEAP_SIZE
198 */
199#ifndef JERRY_GC_LIMIT
200# define JERRY_GC_LIMIT 0
201#endif /* !defined (JERRY_GC_LIMIT) */
202
203/**
204 * Maximum stack usage size in kilobytes
205 *
206 * Note: This feature cannot be used when 'detect_stack_use_after_return=1' ASAN option is enabled.
207 * For more detailed description:
208 * - https://github.com/google/sanitizers/wiki/AddressSanitizerUseAfterReturn#compatibility
209 *
210 * Default value: 0, unlimited
211 */
212#ifndef JERRY_STACK_LIMIT
213# define JERRY_STACK_LIMIT (0)
214#endif /* !defined (JERRY_STACK_LIMIT) */
215
216/**
217 * Maximum depth of recursion during GC mark phase
218 *
219 * Default value: 8
220 */
221#ifndef JERRY_GC_MARK_LIMIT
222# define JERRY_GC_MARK_LIMIT (8)
223#endif /* !defined (JERRY_GC_MARK_LIMIT) */
224
225/**
226 * Enable/Disable property lookup cache.
227 *
228 * Allowed values:
229 * 0: Disable lookup cache.
230 * 1: Enable lookup cache.
231 *
232 * Default value: 1
233 */
234#ifndef JERRY_LCACHE
235# define JERRY_LCACHE 1
236#endif /* !defined (JERRY_LCACHE) */
237
238/**
239 * Enable/Disable line-info management inside the engine.
240 *
241 * Allowed values:
242 * 0: Disable line-info in the engine.
243 * 1: Enable line-info management.
244 *
245 * Default value: 0
246 */
247#ifndef JERRY_LINE_INFO
248# define JERRY_LINE_INFO 0
249#endif /* !defined (JERRY_LINE_INFO) */
250
251/**
252 * Enable/Disable logging inside the engine.
253 *
254 * Allowed values:
255 * 0: Disable internal logging.
256 * 1: Enable internal logging.
257 *
258 * Default value: 0
259 */
260#ifndef JERRY_LOGGING
261# define JERRY_LOGGING 0
262#endif /* !defined (JERRY_LOGGING) */
263
264/**
265 * Enable/Disable gc call before every allocation.
266 *
267 * Allowed values:
268 * 0: Disable gc call before each allocation.
269 * 1: Enable and force gc call before each allocation.
270 *
271 * Default value: 0
272 * Warning!: This is an advanced option and will slow down the engine!
273 * Only enable it for debugging purposes.
274 */
275#ifndef JERRY_MEM_GC_BEFORE_EACH_ALLOC
276# define JERRY_MEM_GC_BEFORE_EACH_ALLOC 0
277#endif /* !defined (JERRY_MEM_GC_BEFORE_EACH_ALLOC) */
278
279/**
280 * Enable/Disable the collection if run-time memory statistics.
281 *
282 * Allowed values:
283 * 0: Disable run-time memory information collection.
284 * 1: Enable run-time memory statistics collection.
285 *
286 * Default value: 0
287 */
288#ifndef JERRY_MEM_STATS
289# define JERRY_MEM_STATS 0
290#endif /* !defined (JERRY_MEM_STATS) */
291
292/**
293 * Use 32-bit/64-bit float for ecma-numbers
294 * This option is for expert use only!
295 *
296 * Allowed values:
297 * 1: use 64-bit floating point number mode
298 * 0: use 32-bit floating point number mode
299 *
300 * Default value: 1
301 */
302#ifndef JERRY_NUMBER_TYPE_FLOAT64
303# define JERRY_NUMBER_TYPE_FLOAT64 1
304#endif /* !defined (JERRY_NUMBER_TYPE_FLOAT64 */
305
306/**
307 * Enable/Disable the JavaScript parser.
308 *
309 * Allowed values:
310 * 0: Disable the JavaScript parser and all related functionallity.
311 * 1: Enable the JavaScript parser.
312 *
313 * Default value: 1
314 */
315#ifndef JERRY_PARSER
316# define JERRY_PARSER 1
317#endif /* !defined (JERRY_PARSER) */
318
319/**
320 * Enable/Disable JerryScript byte code dump functions during parsing.
321 * To dump the JerryScript byte code the engine must be initialized with opcodes
322 * display flag. This option does not influence RegExp byte code dumps.
323 *
324 * Allowed values:
325 * 0: Disable all bytecode dump functions.
326 * 1: Enable bytecode dump functions.
327 *
328 * Default value: 0
329 */
330#ifndef JERRY_PARSER_DUMP_BYTE_CODE
331# define JERRY_PARSER_DUMP_BYTE_CODE 0
332#endif /* defined (JERRY_PARSER_DUMP_BYTE_CODE) */
333
334/**
335 * Enable/Disable ECMA property hashmap.
336 *
337 * Allowed values:
338 * 0: Disable property hasmap.
339 * 1: Enable property hashmap.
340 *
341 * Default value: 1
342 */
343#ifndef JERRY_PROPRETY_HASHMAP
344# define JERRY_PROPRETY_HASHMAP 1
345#endif /* !defined (JERRY_PROPRETY_HASHMAP) */
346
347/**
348 * Enable/Disable byte code dump functions for RegExp objects.
349 * To dump the RegExp byte code the engine must be initialized with
350 * regexp opcodes display flag. This option does not influence the
351 * JerryScript byte code dumps.
352 *
353 * Allowed values:
354 * 0: Disable all bytecode dump functions.
355 * 1: Enable bytecode dump functions.
356 *
357 * Default value: 0
358 */
359#ifndef JERRY_REGEXP_DUMP_BYTE_CODE
360# define JERRY_REGEXP_DUMP_BYTE_CODE 0
361#endif /* !defined (JERRY_REGEXP_DUMP_BYTE_CODE) */
362
363/**
364 * Enables/disables the RegExp strict mode
365 *
366 * Default value: 0
367 */
368#ifndef JERRY_REGEXP_STRICT_MODE
369# define JERRY_REGEXP_STRICT_MODE 0
370#endif /* !defined (JERRY_REGEXP_STRICT_MODE) */
371
372/**
373 * Enable/Disable the snapshot execution functions.
374 *
375 * Allowed values:
376 * 0: Disable snapshot execution.
377 * 1: Enable snapshot execution.
378 *
379 * Default value: 0
380 */
381#ifndef JERRY_SNAPSHOT_EXEC
382# define JERRY_SNAPSHOT_EXEC 0
383#endif /* !defined (JERRY_SNAPSHOT_EXEC) */
384
385/**
386 * Enable/Disable the snapshot save functions.
387 *
388 * Allowed values:
389 * 0: Disable snapshot save functions.
390 * 1: Enable snapshot save functions.
391 */
392#ifndef JERRY_SNAPSHOT_SAVE
393# define JERRY_SNAPSHOT_SAVE 0
394#endif /* !defined (JERRY_SNAPSHOT_SAVE) */
395
396/**
397 * Enable/Disable usage of system allocator.
398 *
399 * Allowed values:
400 * 0: Disable usage of system allocator.
401 * 1: Enable usage of system allocator.
402 *
403 * Default value: 0
404 */
405#ifndef JERRY_SYSTEM_ALLOCATOR
406# define JERRY_SYSTEM_ALLOCATOR 0
407#endif /* !defined (JERRY_SYSTEM_ALLOCATOR) */
408
409/**
410 * Enables/disables the unicode case conversion in the engine.
411 * By default Unicode case conversion is enabled.
412 */
413#ifndef JERRY_UNICODE_CASE_CONVERSION
414# define JERRY_UNICODE_CASE_CONVERSION 1
415#endif /* !defined (JERRY_UNICODE_CASE_CONVERSION) */
416
417/**
418 * Configures if the internal memory allocations are exposed to Valgrind or not.
419 *
420 * Allowed values:
421 * 0: Disable the Valgrind specific memory allocation notifications.
422 * 1: Enable the Valgrind specific allocation notifications.
423 */
424#ifndef JERRY_VALGRIND
425# define JERRY_VALGRIND 0
426#endif /* !defined (JERRY_VALGRIND) */
427
428/**
429 * Enable/Disable the vm execution stop callback function.
430 *
431 * Allowed values:
432 * 0: Disable vm exec stop callbacks.
433 * 1: Enable vm exec stop callback functionality.
434 */
435#ifndef JERRY_VM_EXEC_STOP
436# define JERRY_VM_EXEC_STOP 0
437#endif /* !defined (JERRY_VM_EXEC_STOP) */
438
439/**
440 * Advanced section configurations.
441 */
442
443/**
444 * Allow configuring attributes on a few constant data inside the engine.
445 *
446 * One of the main usages:
447 * Normally compilers store const(ant)s in ROM. Thus saving RAM.
448 * But if your compiler does not support it then the directive below can force it.
449 *
450 * For the moment it is mainly meant for the following targets:
451 * - ESP8266
452 *
453 * Example configuration for moving (some) constatns into a given section:
454 * # define JERRY_ATTR_CONST_DATA __attribute__((section(".rodata.const")))
455 */
456#ifndef JERRY_ATTR_CONST_DATA
457# define JERRY_ATTR_CONST_DATA
458#endif /* !defined (JERRY_ATTR_CONST_DATA) */
459
460/**
461 * The JERRY_ATTR_GLOBAL_HEAP allows adding extra attributes for the Jerry global heap.
462 *
463 * Example on how to move the global heap into it's own section:
464 * #define JERRY_ATTR_GLOBAL_HEAP __attribute__((section(".text.globalheap")))
465 */
466#ifndef JERRY_ATTR_GLOBAL_HEAP
467# define JERRY_ATTR_GLOBAL_HEAP
468#endif /* !defined (JERRY_ATTR_GLOBAL_HEAP) */
469
470/**
471 * Sanity check for macros to see if the values are 0 or 1
472 *
473 * If a new feature is added this should be updated.
474 */
475/**
476 * Check base builtins.
477 */
478#if !defined (JERRY_BUILTIN_ANNEXB) \
479|| ((JERRY_BUILTIN_ANNEXB != 0) && (JERRY_BUILTIN_ANNEXB != 1))
480# error "Invalid value for JERRY_BUILTIN_ANNEXB macro."
481#endif
482#if !defined (JERRY_BUILTIN_ARRAY) \
483|| ((JERRY_BUILTIN_ARRAY != 0) && (JERRY_BUILTIN_ARRAY != 1))
484# error "Invalid value for JERRY_BUILTIN_ARRAY macro."
485#endif
486#if !defined (JERRY_BUILTIN_BOOLEAN) \
487|| ((JERRY_BUILTIN_BOOLEAN != 0) && (JERRY_BUILTIN_BOOLEAN != 1))
488# error "Invalid value for JERRY_BUILTIN_BOOLEAN macro."
489#endif
490#if !defined (JERRY_BUILTIN_DATE) \
491|| ((JERRY_BUILTIN_DATE != 0) && (JERRY_BUILTIN_DATE != 1))
492# error "Invalid value for JERRY_BUILTIN_DATE macro."
493#endif
494#if !defined (JERRY_BUILTIN_ERRORS) \
495|| ((JERRY_BUILTIN_ERRORS != 0) && (JERRY_BUILTIN_ERRORS != 1))
496# error "Invalid value for JERRY_BUILTIN_ERRORS macro."
497#endif
498#if !defined (JERRY_BUILTIN_JSON) \
499|| ((JERRY_BUILTIN_JSON != 0) && (JERRY_BUILTIN_JSON != 1))
500# error "Invalid value for JERRY_BUILTIN_JSON macro."
501#endif
502#if !defined (JERRY_BUILTIN_MATH) \
503|| ((JERRY_BUILTIN_MATH != 0) && (JERRY_BUILTIN_MATH != 1))
504# error "Invalid value for JERRY_BUILTIN_MATH macro."
505#endif
506#if !defined (JERRY_BUILTIN_NUMBER) \
507|| ((JERRY_BUILTIN_NUMBER != 0) && (JERRY_BUILTIN_NUMBER != 1))
508# error "Invalid value for JERRY_BUILTIN_NUMBER macro."
509#endif
510#if !defined (JERRY_BUILTIN_REGEXP) \
511|| ((JERRY_BUILTIN_REGEXP != 0) && (JERRY_BUILTIN_REGEXP != 1))
512# error "Invalid value for JERRY_BUILTIN_REGEXP macro."
513#endif
514#if !defined (JERRY_BUILTIN_STRING) \
515|| ((JERRY_BUILTIN_STRING != 0) && (JERRY_BUILTIN_STRING != 1))
516# error "Invalid value for JERRY_BUILTIN_STRING macro."
517#endif
518#if !defined (JERRY_BUILTINS) \
519|| ((JERRY_BUILTINS != 0) && (JERRY_BUILTINS != 1))
520# error "Invalid value for JERRY_BUILTINS macro."
521#endif
522
523/**
524 * Check ES2015+ features
525 */
526#if !defined (JERRY_ESNEXT) \
527|| ((JERRY_ESNEXT != 0) && (JERRY_ESNEXT != 1))
528# error "Invalid value for JERRY_ESNEXT macro."
529#endif
530#if !defined (JERRY_BUILTIN_REALMS) \
531|| ((JERRY_BUILTIN_REALMS != 0) && (JERRY_BUILTIN_REALMS != 1))
532# error "Invalid value for JERRY_BUILTIN_REALMS macro."
533#endif
534#if !defined (JERRY_BUILTIN_DATAVIEW) \
535|| ((JERRY_BUILTIN_DATAVIEW != 0) && (JERRY_BUILTIN_DATAVIEW != 1))
536# error "Invalid value for JERRY_BUILTIN_DATAVIEW macro."
537#endif
538#if !defined (JERRY_BUILTIN_MAP) \
539|| ((JERRY_BUILTIN_MAP != 0) && (JERRY_BUILTIN_MAP != 1))
540# error "Invalid value for JERRY_BUILTIN_MAP macro."
541#endif
542#if !defined (JERRY_BUILTIN_REFLECT) \
543|| ((JERRY_BUILTIN_REFLECT != 0) && (JERRY_BUILTIN_REFLECT != 1))
544# error "Invalid value for JERRY_BUILTIN_REFLECT macro."
545#endif
546#if !defined (JERRY_BUILTIN_SET) \
547|| ((JERRY_BUILTIN_SET != 0) && (JERRY_BUILTIN_SET != 1))
548# error "Invalid value for JERRY_BUILTIN_SET macro."
549#endif
550#if !defined (JERRY_BUILTIN_WEAKMAP) \
551|| ((JERRY_BUILTIN_WEAKMAP != 0) && (JERRY_BUILTIN_WEAKMAP != 1))
552# error "Invalid value for JERRY_BUILTIN_WEAKMAP macro."
553#endif
554#if !defined (JERRY_BUILTIN_WEAKSET) \
555|| ((JERRY_BUILTIN_WEAKSET != 0) && (JERRY_BUILTIN_WEAKSET != 1))
556# error "Invalid value for JERRY_BUILTIN_WEAKSET macro."
557#endif
558#if !defined (JERRY_BUILTIN_PROMISE) \
559|| ((JERRY_BUILTIN_PROMISE != 0) && (JERRY_BUILTIN_PROMISE != 1))
560# error "Invalid value for JERRY_BUILTIN_PROMISE macro."
561#endif
562#if !defined (JERRY_BUILTIN_PROXY) \
563|| ((JERRY_BUILTIN_PROXY != 0) && (JERRY_BUILTIN_PROXY != 1))
564# error "Invalid value for JERRY_BUILTIN_PROXY macro."
565#endif
566#if !defined (JERRY_BUILTIN_TYPEDARRAY) \
567|| ((JERRY_BUILTIN_TYPEDARRAY != 0) && (JERRY_BUILTIN_TYPEDARRAY != 1))
568# error "Invalid value for JERRY_BUILTIN_TYPEDARRAY macro."
569#endif
570#if !defined (JERRY_BUILTIN_BIGINT) \
571|| ((JERRY_BUILTIN_BIGINT != 0) && (JERRY_BUILTIN_BIGINT != 1))
572# error "Invalid value for JERRY_BUILTIN_BIGINT macro."
573#endif
574#if !defined (JERRY_MODULE_SYSTEM) \
575|| ((JERRY_MODULE_SYSTEM != 0) && (JERRY_MODULE_SYSTEM != 1))
576# error "Invalid value for JERRY_MODULE_SYSTEM macro."
577#endif
578#if (JERRY_ESNEXT == 0) \
579&& ((JERRY_BUILTIN_DATAVIEW == 1) \
580|| (JERRY_BUILTIN_MAP == 1) \
581|| (JERRY_BUILTIN_SET == 1) \
582|| (JERRY_BUILTIN_WEAKMAP == 1) \
583|| (JERRY_BUILTIN_WEAKSET == 1) \
584|| (JERRY_BUILTIN_PROMISE == 1) \
585|| (JERRY_BUILTIN_PROXY == 1) \
586|| (JERRY_BUILTIN_REFLECT == 1) \
587|| (JERRY_BUILTIN_TYPEDARRAY == 1))
588# error "JERRY_ESNEXT should be enabled too to enable JERRY_BUILTIN_xxxxx macro."
589#endif
590#if (JERRY_ESNEXT == 0) && (JERRY_MODULE_SYSTEM == 1)
591# error "JERRY_ESNEXT should be enabled too to enable JERRY_MODULE_SYSTEM macro."
592#endif
593
594/**
595 * Internal options.
596 */
597#if !defined (JERRY_CPOINTER_32_BIT) \
598|| ((JERRY_CPOINTER_32_BIT != 0) && (JERRY_CPOINTER_32_BIT != 1))
599# error "Invalid value for 'JERRY_CPOINTER_32_BIT' macro."
600#endif
601#if !defined (JERRY_DEBUGGER) \
602|| ((JERRY_DEBUGGER != 0) && (JERRY_DEBUGGER != 1))
603# error "Invalid value for 'JERRY_DEBUGGER' macro."
604#endif
605#if !defined (JERRY_ERROR_MESSAGES) \
606|| ((JERRY_ERROR_MESSAGES != 0) && (JERRY_ERROR_MESSAGES != 1))
607# error "Invalid value for 'JERRY_ERROR_MESSAGES' macro."
608#endif
609#if !defined (JERRY_EXTERNAL_CONTEXT) \
610|| ((JERRY_EXTERNAL_CONTEXT != 0) && (JERRY_EXTERNAL_CONTEXT != 1))
611# error "Invalid value for 'JERRY_EXTERNAL_CONTEXT' macro."
612#endif
613#if !defined (JERRY_GLOBAL_HEAP_SIZE) || (JERRY_GLOBAL_HEAP_SIZE <= 0)
614# error "Invalid value for 'JERRY_GLOBAL_HEAP_SIZE' macro."
615#endif
616#if !defined (JERRY_GC_LIMIT) || (JERRY_GC_LIMIT < 0)
617# error "Invalid value for 'JERRY_GC_LIMIT' macro."
618#endif
619#if !defined (JERRY_STACK_LIMIT) || (JERRY_STACK_LIMIT < 0)
620# error "Invalid value for 'JERRY_STACK_LIMIT' macro."
621#endif
622#if !defined (JERRY_GC_MARK_LIMIT) || (JERRY_GC_MARK_LIMIT < 0)
623# error "Invalid value for 'JERRY_GC_MARK_LIMIT' macro."
624#endif
625#if !defined (JERRY_LCACHE) \
626|| ((JERRY_LCACHE != 0) && (JERRY_LCACHE != 1))
627# error "Invalid value for 'JERRY_LCACHE' macro."
628#endif
629#if !defined (JERRY_LINE_INFO) \
630|| ((JERRY_LINE_INFO != 0) && (JERRY_LINE_INFO != 1))
631# error "Invalid value for 'JERRY_LINE_INFO' macro."
632#endif
633#if !defined (JERRY_LOGGING) \
634|| ((JERRY_LOGGING != 0) && (JERRY_LOGGING != 1))
635# error "Invalid value for 'JERRY_LOGGING' macro."
636#endif
637#if !defined (JERRY_MEM_GC_BEFORE_EACH_ALLOC) \
638|| ((JERRY_MEM_GC_BEFORE_EACH_ALLOC != 0) && (JERRY_MEM_GC_BEFORE_EACH_ALLOC != 1))
639# error "Invalid value for 'JERRY_MEM_GC_BEFORE_EACH_ALLOC' macro."
640#endif
641#if !defined (JERRY_MEM_STATS) \
642|| ((JERRY_MEM_STATS != 0) && (JERRY_MEM_STATS != 1))
643# error "Invalid value for 'JERRY_MEM_STATS' macro."
644#endif
645#if !defined (JERRY_NUMBER_TYPE_FLOAT64) \
646|| ((JERRY_NUMBER_TYPE_FLOAT64 != 0) && (JERRY_NUMBER_TYPE_FLOAT64 != 1))
647# error "Invalid value for 'JERRY_NUMBER_TYPE_FLOAT64' macro."
648#endif
649#if !defined (JERRY_PARSER) \
650|| ((JERRY_PARSER != 0) && (JERRY_PARSER != 1))
651# error "Invalid value for 'JERRY_PARSER' macro."
652#endif
653#if !defined (JERRY_PARSER_DUMP_BYTE_CODE) \
654|| ((JERRY_PARSER_DUMP_BYTE_CODE != 0) && (JERRY_PARSER_DUMP_BYTE_CODE != 1))
655# error "Invalid value for 'JERRY_PARSER_DUMP_BYTE_CODE' macro."
656#endif
657#if !defined (JERRY_PROPRETY_HASHMAP) \
658|| ((JERRY_PROPRETY_HASHMAP != 0) && (JERRY_PROPRETY_HASHMAP != 1))
659# error "Invalid value for 'JERRY_PROPRETY_HASHMAP' macro."
660#endif
661#if !defined (JERRY_REGEXP_DUMP_BYTE_CODE) \
662|| ((JERRY_REGEXP_DUMP_BYTE_CODE != 0) && (JERRY_REGEXP_DUMP_BYTE_CODE != 1))
663# error "Invalid value for 'JERRY_REGEXP_DUMP_BYTE_CODE' macro."
664#endif
665#if !defined (JERRY_REGEXP_STRICT_MODE) \
666|| ((JERRY_REGEXP_STRICT_MODE != 0) && (JERRY_REGEXP_STRICT_MODE != 1))
667# error "Invalid value for 'JERRY_REGEXP_STRICT_MODE' macro."
668#endif
669#if !defined (JERRY_SNAPSHOT_EXEC) \
670|| ((JERRY_SNAPSHOT_EXEC != 0) && (JERRY_SNAPSHOT_EXEC != 1))
671# error "Invalid value for 'JERRY_SNAPSHOT_EXEC' macro."
672#endif
673#if !defined (JERRY_SNAPSHOT_SAVE) \
674|| ((JERRY_SNAPSHOT_SAVE != 0) && (JERRY_SNAPSHOT_SAVE != 1))
675# error "Invalid value for 'JERRY_SNAPSHOT_SAVE' macro."
676#endif
677#if !defined (JERRY_SYSTEM_ALLOCATOR) \
678|| ((JERRY_SYSTEM_ALLOCATOR != 0) && (JERRY_SYSTEM_ALLOCATOR != 1))
679# error "Invalid value for 'JERRY_SYSTEM_ALLOCATOR' macro."
680#endif
681#if !defined (JERRY_UNICODE_CASE_CONVERSION) \
682|| ((JERRY_UNICODE_CASE_CONVERSION != 0) && (JERRY_UNICODE_CASE_CONVERSION != 1))
683# error "Invalid value for 'JERRY_UNICODE_CASE_CONVERSION' macro."
684#endif
685#if !defined (JERRY_VALGRIND) \
686|| ((JERRY_VALGRIND != 0) && (JERRY_VALGRIND != 1))
687# error "Invalid value for 'JERRY_VALGRIND' macro."
688#endif
689#if !defined (JERRY_VM_EXEC_STOP) \
690|| ((JERRY_VM_EXEC_STOP != 0) && (JERRY_VM_EXEC_STOP != 1))
691# error "Invalid value for 'JERRY_VM_EXEC_STOP' macro."
692#endif
693
694#define ENABLED(FEATURE) ((FEATURE) == 1)
695#define DISABLED(FEATURE) ((FEATURE) != 1)
696
697/**
698 * Cross component requirements check.
699 */
700/**
701 * The date module can only use the float 64 number types.
702 * Do a check for this.
703 */
704#if ENABLED (JERRY_BUILTIN_DATE) && !ENABLED (JERRY_NUMBER_TYPE_FLOAT64)
705# error "Date does not support float32"
706#endif
707
708/**
709 * Wrap container types into a single guard
710 */
711#if ENABLED (JERRY_BUILTIN_MAP) || ENABLED (JERRY_BUILTIN_SET) \
712|| ENABLED (JERRY_BUILTIN_WEAKMAP) || ENABLED (JERRY_BUILTIN_WEAKSET)
713# define JERRY_BUILTIN_CONTAINER 1
714#else
715# define JERRY_BUILTIN_CONTAINER 0
716#endif
717
718/**
719 * Resource name related types into a single guard
720 */
721#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES) || ENABLED (JERRY_MODULE_SYSTEM)
722# define JERRY_RESOURCE_NAME 1
723#else
724# define JERRY_RESOURCE_NAME 0
725#endif
726
727#endif /* !JERRYSCRIPT_CONFIG_H */
728