Create function variables using the data produced by the pre-scanner. (#3199)
The pre-scanner now is able to track all variable declarations and produces a compressed stream which store this data for each function and catch block. When a function or catch block is parsed, this information is decoded and the appropriate variables are created. Furthermore a stack scope is created which contains the currently available local variables and their register or literal index. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
@@ -52,22 +52,30 @@
|
||||
#define PARSER_MAXIMUM_STRING_LENGTH PARSER_MAXIMUM_STRING_LIMIT
|
||||
#endif /* !PARSER_MAXIMUM_STRING_LENGTH */
|
||||
|
||||
/**
|
||||
* Maximum number of literals.
|
||||
* Limit: 32767. Recommended: 510, 32767
|
||||
*/
|
||||
#ifndef PARSER_MAXIMUM_NUMBER_OF_LITERALS
|
||||
#define PARSER_MAXIMUM_NUMBER_OF_LITERALS 32767
|
||||
#endif /* !PARSER_MAXIMUM_NUMBER_OF_LITERALS */
|
||||
|
||||
/**
|
||||
* Maximum number of registers.
|
||||
* Limit: PARSER_MAXIMUM_NUMBER_OF_LITERALS
|
||||
* Limit: min: 256, max: PARSER_MAXIMUM_NUMBER_OF_LITERALS / 2
|
||||
*/
|
||||
#ifndef PARSER_MAXIMUM_NUMBER_OF_REGISTERS
|
||||
#define PARSER_MAXIMUM_NUMBER_OF_REGISTERS 256
|
||||
#endif /* !PARSER_MAXIMUM_NUMBER_OF_REGISTERS */
|
||||
|
||||
/**
|
||||
* Maximum number of literals.
|
||||
* Limit: 32767 - PARSER_MAXIMUM_NUMBER_OF_REGISTERS. Recommended: 32767 - PARSER_MAXIMUM_NUMBER_OF_REGISTERS.
|
||||
*/
|
||||
#ifndef PARSER_MAXIMUM_NUMBER_OF_LITERALS
|
||||
#define PARSER_MAXIMUM_NUMBER_OF_LITERALS (32767 - PARSER_MAXIMUM_NUMBER_OF_REGISTERS)
|
||||
#endif /* !PARSER_MAXIMUM_NUMBER_OF_LITERALS */
|
||||
|
||||
/**
|
||||
* Maximum depth of scope stack.
|
||||
* Limit: 32767. Recommended: 32767
|
||||
*/
|
||||
#ifndef PARSER_MAXIMUM_DEPTH_OF_SCOPE_STACK
|
||||
#define PARSER_MAXIMUM_DEPTH_OF_SCOPE_STACK 32767
|
||||
#endif /* !PARSER_MAXIMUM_DEPTH_OF_SCOPE_STACK */
|
||||
|
||||
/**
|
||||
* Maximum code size.
|
||||
* Limit: 16777215. Recommended: 65535, 16777215.
|
||||
@@ -95,13 +103,19 @@
|
||||
#error "Maximum identifier length is not within range."
|
||||
#endif /* (PARSER_MAXIMUM_IDENT_LENGTH < 1) || (PARSER_MAXIMUM_IDENT_LENGTH > PARSER_MAXIMUM_STRING_LENGTH) */
|
||||
|
||||
#if (PARSER_MAXIMUM_NUMBER_OF_LITERALS < 1) || (PARSER_MAXIMUM_NUMBER_OF_LITERALS > 32767)
|
||||
#if ((PARSER_MAXIMUM_NUMBER_OF_LITERALS < 1) \
|
||||
|| (PARSER_MAXIMUM_NUMBER_OF_LITERALS + PARSER_MAXIMUM_NUMBER_OF_REGISTERS > 32767))
|
||||
#error "Maximum number of literals is not within range."
|
||||
#endif /* (PARSER_MAXIMUM_NUMBER_OF_LITERALS < 1) || (PARSER_MAXIMUM_NUMBER_OF_LITERALS > 32767) */
|
||||
#endif /* ((PARSER_MAXIMUM_NUMBER_OF_LITERALS < 1) \
|
||||
|| (PARSER_MAXIMUM_NUMBER_OF_LITERALS > 32767)) */
|
||||
|
||||
#if (PARSER_MAXIMUM_NUMBER_OF_REGISTERS > PARSER_MAXIMUM_NUMBER_OF_LITERALS)
|
||||
#if (PARSER_MAXIMUM_DEPTH_OF_SCOPE_STACK < 1) || (PARSER_MAXIMUM_DEPTH_OF_SCOPE_STACK > 32767)
|
||||
#error "Maximum depth of scope stack is not within range."
|
||||
#endif /* (PARSER_MAXIMUM_DEPTH_OF_SCOPE_STACK < 1) || (PARSER_MAXIMUM_DEPTH_OF_SCOPE_STACK > 32767) */
|
||||
|
||||
#if ((PARSER_MAXIMUM_NUMBER_OF_REGISTERS * 2) > PARSER_MAXIMUM_NUMBER_OF_LITERALS)
|
||||
#error "Maximum number of registers is not within range."
|
||||
#endif /* (PARSER_MAXIMUM_NUMBER_OF_REGISTERS > PARSER_MAXIMUM_NUMBER_OF_LITERALS) */
|
||||
#endif /* ((PARSER_MAXIMUM_NUMBER_OF_REGISTERS * 2) > PARSER_MAXIMUM_NUMBER_OF_LITERALS) */
|
||||
|
||||
#if (PARSER_MAXIMUM_CODE_SIZE < 4096) || (PARSER_MAXIMUM_CODE_SIZE > 16777215)
|
||||
#error "Maximum code size is not within range."
|
||||
|
||||
Reference in New Issue
Block a user