mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Merge branch 'master' of git-server:jerry
This commit is contained in:
commit
e76f690a25
@ -36,114 +36,114 @@ OPCODE;
|
||||
typedef ecma_completion_value_t (*opfunc)(OPCODE, struct __int_data *);
|
||||
|
||||
#define OP_CALLS_AND_ARGS(op) \
|
||||
op(call_0) \
|
||||
op(call_1) \
|
||||
op(call_n) \
|
||||
op(construct_0) \
|
||||
op(construct_1) \
|
||||
op(construct_n) \
|
||||
op(func_decl_0) \
|
||||
op(func_decl_1) \
|
||||
op(func_decl_2) \
|
||||
op(func_decl_n) \
|
||||
op(func_expr_0) \
|
||||
op(func_expr_1) \
|
||||
op(func_expr_n) \
|
||||
op(varg_1_end) \
|
||||
op(varg_2_end) \
|
||||
op(varg_3) \
|
||||
op(varg_3_end) \
|
||||
op(exitval) \
|
||||
op(retval) \
|
||||
op(ret)
|
||||
op (call_0) \
|
||||
op (call_1) \
|
||||
op (call_n) \
|
||||
op (construct_0) \
|
||||
op (construct_1) \
|
||||
op (construct_n) \
|
||||
op (func_decl_0) \
|
||||
op (func_decl_1) \
|
||||
op (func_decl_2) \
|
||||
op (func_decl_n) \
|
||||
op (func_expr_0) \
|
||||
op (func_expr_1) \
|
||||
op (func_expr_n) \
|
||||
op (varg_1_end) \
|
||||
op (varg_2_end) \
|
||||
op (varg_3) \
|
||||
op (varg_3_end) \
|
||||
op (exitval) \
|
||||
op (retval) \
|
||||
op (ret)
|
||||
|
||||
#define OP_INITS(op) \
|
||||
op(array_0) \
|
||||
op(array_1) \
|
||||
op(array_2) \
|
||||
op(array_n) \
|
||||
op(prop) \
|
||||
op(prop_access) \
|
||||
op(prop_get_decl) \
|
||||
op(prop_set_decl) \
|
||||
op(obj_0) \
|
||||
op(obj_1) \
|
||||
op(obj_2) \
|
||||
op(obj_n) \
|
||||
op(this) \
|
||||
op(delete) \
|
||||
op(typeof) \
|
||||
op(with) \
|
||||
op(end_with)
|
||||
op (array_0) \
|
||||
op (array_1) \
|
||||
op (array_2) \
|
||||
op (array_n) \
|
||||
op (prop) \
|
||||
op (prop_access) \
|
||||
op (prop_get_decl) \
|
||||
op (prop_set_decl) \
|
||||
op (obj_0) \
|
||||
op (obj_1) \
|
||||
op (obj_2) \
|
||||
op (obj_n) \
|
||||
op (this) \
|
||||
op (delete) \
|
||||
op (typeof) \
|
||||
op (with) \
|
||||
op (end_with)
|
||||
|
||||
#define OP_ASSIGNMENTS(op) \
|
||||
op(assignment)
|
||||
op (assignment)
|
||||
|
||||
#define OP_B_SHIFTS(op) \
|
||||
op(b_shift_left) \
|
||||
op(b_shift_right) \
|
||||
op(b_shift_uright)
|
||||
op (b_shift_left) \
|
||||
op (b_shift_right) \
|
||||
op (b_shift_uright)
|
||||
|
||||
#define OP_B_BITWISE(op) \
|
||||
op(b_and) \
|
||||
op(b_or) \
|
||||
op(b_xor) \
|
||||
op(b_not)
|
||||
op (b_and) \
|
||||
op (b_or) \
|
||||
op (b_xor) \
|
||||
op (b_not)
|
||||
|
||||
#define OP_B_LOGICAL(op) \
|
||||
op(logical_and) \
|
||||
op(logical_or) \
|
||||
op(logical_not)
|
||||
op (logical_and) \
|
||||
op (logical_or) \
|
||||
op (logical_not)
|
||||
|
||||
#define OP_EQUALITY(op) \
|
||||
op(equal_value) \
|
||||
op(not_equal_value) \
|
||||
op(equal_value_type) \
|
||||
op(not_equal_value_type)
|
||||
op (equal_value) \
|
||||
op (not_equal_value) \
|
||||
op (equal_value_type) \
|
||||
op (not_equal_value_type)
|
||||
|
||||
#define OP_RELATIONAL(op) \
|
||||
op(less_than) \
|
||||
op(greater_than) \
|
||||
op(less_or_equal_than) \
|
||||
op(greater_or_equal_than) \
|
||||
op(instanceof) \
|
||||
op(in)
|
||||
op (less_than) \
|
||||
op (greater_than) \
|
||||
op (less_or_equal_than) \
|
||||
op (greater_or_equal_than) \
|
||||
op (instanceof) \
|
||||
op (in)
|
||||
|
||||
#define OP_ARITHMETIC(op) \
|
||||
op(post_incr) \
|
||||
op(post_decr) \
|
||||
op(pre_incr) \
|
||||
op(pre_decr) \
|
||||
op(addition) \
|
||||
op(substraction) \
|
||||
op(division) \
|
||||
op(multiplication) \
|
||||
op(remainder)
|
||||
op (post_incr) \
|
||||
op (post_decr) \
|
||||
op (pre_incr) \
|
||||
op (pre_decr) \
|
||||
op (addition) \
|
||||
op (substraction) \
|
||||
op (division) \
|
||||
op (multiplication) \
|
||||
op (remainder)
|
||||
|
||||
#define OP_UNCONDITIONAL_JUMPS(op) \
|
||||
op(jmp) \
|
||||
op(jmp_up) \
|
||||
op(jmp_down) \
|
||||
op(nop)
|
||||
op (jmp) \
|
||||
op (jmp_up) \
|
||||
op (jmp_down) \
|
||||
op (nop)
|
||||
|
||||
#define OP_UNARY_OPS(op) \
|
||||
op(is_true_jmp) \
|
||||
op(is_false_jmp)
|
||||
op (is_true_jmp) \
|
||||
op (is_false_jmp)
|
||||
|
||||
#define OP_LIST(op) \
|
||||
OP_CALLS_AND_ARGS(op) \
|
||||
OP_INITS(op) \
|
||||
OP_ASSIGNMENTS(op) \
|
||||
OP_B_LOGICAL(op) \
|
||||
OP_B_BITWISE(op) \
|
||||
OP_B_SHIFTS(op) \
|
||||
OP_EQUALITY(op) \
|
||||
OP_RELATIONAL(op) \
|
||||
OP_ARITHMETIC(op) \
|
||||
OP_UNCONDITIONAL_JUMPS(op) \
|
||||
OP_UNARY_OPS(op) \
|
||||
op(var_decl) \
|
||||
op(reg_var_decl)
|
||||
OP_CALLS_AND_ARGS (op) \
|
||||
OP_INITS (op) \
|
||||
OP_ASSIGNMENTS (op) \
|
||||
OP_B_LOGICAL (op) \
|
||||
OP_B_BITWISE (op) \
|
||||
OP_B_SHIFTS (op) \
|
||||
OP_EQUALITY (op) \
|
||||
OP_RELATIONAL (op) \
|
||||
OP_ARITHMETIC (op) \
|
||||
OP_UNCONDITIONAL_JUMPS (op) \
|
||||
OP_UNARY_OPS (op) \
|
||||
op (var_decl) \
|
||||
op (reg_var_decl)
|
||||
|
||||
#include "opcode-structures.h"
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -62,9 +62,9 @@ typedef uint8_t keyword;
|
||||
/* Type of tokens. */
|
||||
typedef uint8_t token_type;
|
||||
|
||||
#define TOK_EOF 0 // End of file
|
||||
#define TOK_NAME 1 // Identifier
|
||||
#define TOK_KEYWORD 2 // Keyword
|
||||
#define TOK_EOF 0 // End of file
|
||||
#define TOK_NAME 1 // Identifier
|
||||
#define TOK_KEYWORD 2 // Keyword
|
||||
#define TOK_INT 3
|
||||
#define TOK_FLOAT 4
|
||||
|
||||
@ -72,84 +72,84 @@ typedef uint8_t token_type;
|
||||
#define TOK_BOOL 6
|
||||
#define TOK_NEWLINE 7
|
||||
#define TOK_STRING 8
|
||||
#define TOK_OPEN_BRACE 9 // {
|
||||
#define TOK_OPEN_BRACE 9 // {
|
||||
|
||||
#define TOK_CLOSE_BRACE 10 // }
|
||||
#define TOK_OPEN_PAREN 11 // (
|
||||
#define TOK_CLOSE_PAREN 12 // )
|
||||
#define TOK_OPEN_SQUARE 13 // [
|
||||
#define TOK_CLOSE_SQUARE 14 // [
|
||||
#define TOK_CLOSE_BRACE 10 // }
|
||||
#define TOK_OPEN_PAREN 11 // (
|
||||
#define TOK_CLOSE_PAREN 12 // )
|
||||
#define TOK_OPEN_SQUARE 13 // [
|
||||
#define TOK_CLOSE_SQUARE 14 // [
|
||||
|
||||
#define TOK_DOT 15 // .
|
||||
#define TOK_SEMICOLON 16 // ;
|
||||
#define TOK_COMMA 17 // ,
|
||||
#define TOK_LESS 18 // <
|
||||
#define TOK_GREATER 19 // >
|
||||
#define TOK_DOT 15 // .
|
||||
#define TOK_SEMICOLON 16 // ;
|
||||
#define TOK_COMMA 17 // ,
|
||||
#define TOK_LESS 18 // <
|
||||
#define TOK_GREATER 19 // >
|
||||
|
||||
#define TOK_LESS_EQ 20 // <=
|
||||
#define TOK_GREATER_EQ 21 // <=
|
||||
#define TOK_DOUBLE_EQ 22 // ==
|
||||
#define TOK_NOT_EQ 23 // !=
|
||||
#define TOK_TRIPLE_EQ 24 // ===
|
||||
#define TOK_LESS_EQ 20 // <=
|
||||
#define TOK_GREATER_EQ 21 // <=
|
||||
#define TOK_DOUBLE_EQ 22 // ==
|
||||
#define TOK_NOT_EQ 23 // !=
|
||||
#define TOK_TRIPLE_EQ 24 // ===
|
||||
|
||||
#define TOK_NOT_DOUBLE_EQ 25 // !==
|
||||
#define TOK_PLUS 26 // +
|
||||
#define TOK_MINUS 27 // -
|
||||
#define TOK_MULT 28 // *
|
||||
#define TOK_MOD 29 // %
|
||||
#define TOK_NOT_DOUBLE_EQ 25 // !==
|
||||
#define TOK_PLUS 26 // +
|
||||
#define TOK_MINUS 27 // -
|
||||
#define TOK_MULT 28 // *
|
||||
#define TOK_MOD 29 // %
|
||||
|
||||
#define TOK_DOUBLE_PLUS 30 // ++
|
||||
#define TOK_DOUBLE_MINUS 31 // --
|
||||
#define TOK_LSHIFT 32 // <<
|
||||
#define TOK_RSHIFT 33 // >>
|
||||
#define TOK_RSHIFT_EX 34 // >>>
|
||||
#define TOK_DOUBLE_PLUS 30 // ++
|
||||
#define TOK_DOUBLE_MINUS 31 // --
|
||||
#define TOK_LSHIFT 32 // <<
|
||||
#define TOK_RSHIFT 33 // >>
|
||||
#define TOK_RSHIFT_EX 34 // >>>
|
||||
|
||||
#define TOK_AND 35 // &
|
||||
#define TOK_OR 36 // |
|
||||
#define TOK_XOR 37 // ^
|
||||
#define TOK_NOT 38 // !
|
||||
#define TOK_COMPL 39 // ~
|
||||
#define TOK_AND 35 // &
|
||||
#define TOK_OR 36 // |
|
||||
#define TOK_XOR 37 // ^
|
||||
#define TOK_NOT 38 // !
|
||||
#define TOK_COMPL 39 // ~
|
||||
|
||||
#define TOK_DOUBLE_AND 40 // &&
|
||||
#define TOK_DOUBLE_OR 41 // ||
|
||||
#define TOK_QUERY 42 // ?
|
||||
#define TOK_COLON 43 // :
|
||||
#define TOK_EQ 44 // =
|
||||
#define TOK_DOUBLE_AND 40 // &&
|
||||
#define TOK_DOUBLE_OR 41 // ||
|
||||
#define TOK_QUERY 42 // ?
|
||||
#define TOK_COLON 43 // :
|
||||
#define TOK_EQ 44 // =
|
||||
|
||||
#define TOK_PLUS_EQ 45 // +=
|
||||
#define TOK_MINUS_EQ 46 // -=
|
||||
#define TOK_MULT_EQ 47 // *=
|
||||
#define TOK_MOD_EQ 48 // %=
|
||||
#define TOK_LSHIFT_EQ 49 // <<=
|
||||
#define TOK_PLUS_EQ 45 // +=
|
||||
#define TOK_MINUS_EQ 46 // -=
|
||||
#define TOK_MULT_EQ 47 // *=
|
||||
#define TOK_MOD_EQ 48 // %=
|
||||
#define TOK_LSHIFT_EQ 49 // <<=
|
||||
|
||||
#define TOK_RSHIFT_EQ 50 // >>=
|
||||
#define TOK_RSHIFT_EX_EQ 51 // >>>=
|
||||
#define TOK_AND_EQ 52 // &=
|
||||
#define TOK_OR_EQ 53 // |=
|
||||
#define TOK_XOR_EQ 54 // ^=
|
||||
#define TOK_RSHIFT_EQ 50 // >>=
|
||||
#define TOK_RSHIFT_EX_EQ 51 // >>>=
|
||||
#define TOK_AND_EQ 52 // &=
|
||||
#define TOK_OR_EQ 53 // |=
|
||||
#define TOK_XOR_EQ 54 // ^=
|
||||
|
||||
#define TOK_DIV 55 // /
|
||||
#define TOK_DIV_EQ 56 // /=
|
||||
#define TOK_DIV 55 // /
|
||||
#define TOK_DIV_EQ 56 // /=
|
||||
#define TOK_EMPTY 57
|
||||
|
||||
|
||||
/* Represents the contents of a token. */
|
||||
typedef struct
|
||||
typedef struct
|
||||
{
|
||||
token_type type;
|
||||
|
||||
union
|
||||
{
|
||||
keyword kw;
|
||||
uint8_t uid;
|
||||
}
|
||||
{
|
||||
keyword kw;
|
||||
uint8_t uid;
|
||||
}
|
||||
data;
|
||||
} __packed
|
||||
token;
|
||||
|
||||
void lexer_init(const char *, size_t, bool);
|
||||
void lexer_init (const char *, size_t, bool);
|
||||
void lexer_free (void);
|
||||
void lexer_run_first_pass( void);
|
||||
void lexer_run_first_pass (void);
|
||||
token lexer_next_token (void);
|
||||
void lexer_save_token (token);
|
||||
void lexer_dump_buffer_state (void);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
35
tests/jerry/N.for.js
Normal file
35
tests/jerry/N.for.js
Normal file
@ -0,0 +1,35 @@
|
||||
// Copyright 2014 Samsung Electronics Co., Ltd.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
var i = 0;
|
||||
for (; i < 100; i++) {}
|
||||
assert (i == 100);
|
||||
|
||||
for (var j = 0; j < 100; j++) {}
|
||||
assert (i == 100);
|
||||
|
||||
// for (i = 0;;) {
|
||||
// if (i == 100) {
|
||||
// // break;
|
||||
// // assert (0);
|
||||
// }
|
||||
// i++;
|
||||
// }
|
||||
assert (i == 100);
|
||||
|
||||
for (i = 0; i < 10; i++) {
|
||||
for (j = 0; j < 10; j++) {}
|
||||
}
|
||||
assert (i == 100);
|
||||
assert (j == 100);
|
||||
Loading…
x
Reference in New Issue
Block a user