py: Update compiler/parser to align with latest changes on master, v1.8.

This commit is contained in:
Damien George 2017-08-13 21:32:08 +10:00
parent b084ab966e
commit be2387885b
2 changed files with 20 additions and 15 deletions

View File

@ -37,6 +37,10 @@
#if MICROPY_ENABLE_COMPILER
#if MICROPY_PY_ASYNC_AWAIT
#error "async/await syntax not implemented with this parser/compiler"
#endif
// TODO need to mangle __attr names
typedef enum {
@ -304,7 +308,7 @@ STATIC const byte *c_if_cond(compiler_t *comp, const byte *p, bool jump_if, int
typedef enum { ASSIGN_STORE, ASSIGN_AUG_LOAD, ASSIGN_AUG_STORE } assign_kind_t;
STATIC void c_assign(compiler_t *comp, const byte *p, assign_kind_t kind);
STATIC void c_assign_power(compiler_t *comp, const byte *p_orig, assign_kind_t assign_kind) {
STATIC void c_assign_atom_expr(compiler_t *comp, const byte *p_orig, assign_kind_t assign_kind) {
const byte *ptop;
const byte *p0 = pt_rule_extract_top(p_orig, &ptop);
@ -320,7 +324,7 @@ STATIC void c_assign_power(compiler_t *comp, const byte *p_orig, assign_kind_t a
return;
}
if (pt_is_rule(p1, PN_power_trailers)) {
if (pt_is_rule(p1, PN_atom_expr_trailers)) {
const byte *p1top;
p1 = pt_rule_extract_top(p1, &p1top);
for (;;) {
@ -432,9 +436,9 @@ STATIC void c_assign(compiler_t *comp, const byte *p, assign_kind_t assign_kind)
compile_syntax_error(comp, p, "can't assign to literal");
} else {
switch (pt_rule_extract_rule_id(p)) {
case PN_power:
case PN_atom_expr_normal:
// lhs is an index or attribute
c_assign_power(comp, p, assign_kind);
c_assign_atom_expr(comp, p, assign_kind);
break;
case PN_testlist_star_expr:
@ -867,13 +871,13 @@ STATIC void c_del_stmt(compiler_t *comp, const byte *p) {
qstr id;
pt_extract_id(p, &id);
compile_delete_id(comp, id);
} else if (pt_is_rule(p, PN_power)) {
} else if (pt_is_rule(p, PN_atom_expr_normal)) {
const byte *ptop;
const byte *p0 = pt_rule_extract_top(p, &ptop);
const byte *p1 = compile_node(comp, p0); // base of the power node
if (pt_is_rule(p1, PN_power_trailers)) {
if (pt_is_rule(p1, PN_atom_expr_trailers)) {
const byte *p1top;
p1 = pt_rule_extract_top(p1, &p1top);
for (;;) {
@ -1466,7 +1470,7 @@ STATIC void compile_for_stmt(compiler_t *comp, const byte *p, const byte *ptop)
// this is actually slower, but uses no heap memory
// for viper it will be much, much faster
if (/*comp->scope_cur->emit_options == MP_EMIT_OPT_VIPER &&*/ pt_is_any_id(p)
&& pt_is_rule(pt_next(p), PN_power)) {
&& pt_is_rule(pt_next(p), PN_atom_expr_normal)) {
const byte *p_it_top;
const byte *p_it0 = pt_rule_extract_top(pt_next(p), &p_it_top);
if (!pt_is_id(p_it0, MP_QSTR_range)) {
@ -2072,15 +2076,16 @@ STATIC void compile_factor_2(compiler_t *comp, const byte *p, const byte *ptop)
}
}
STATIC void compile_power(compiler_t *comp, const byte *p, const byte *ptop) {
STATIC void compile_atom_expr_normal(compiler_t *comp, const byte *p, const byte *ptop) {
// this is to handle special super() call
comp->func_arg_is_super = pt_is_id(p, MP_QSTR_super);
compile_generic_all_nodes(comp, p, ptop);
}
if (pt_num_nodes(p, ptop) == 3) {
EMIT_ARG(binary_op, MP_BINARY_OP_POWER);
}
STATIC void compile_power(compiler_t *comp, const byte *p, const byte *ptop) {
compile_generic_all_nodes(comp, p, ptop); // 2 nodes, arguments of power
EMIT_ARG(binary_op, MP_BINARY_OP_POWER);
}
// if p_arglist==NULL then there are no arguments
@ -2189,7 +2194,7 @@ STATIC void compile_trailer_paren_helper(compiler_t *comp, const byte *p_arglist
}
}
STATIC void compile_power_trailers(compiler_t *comp, const byte *p, const byte *ptop) {
STATIC void compile_atom_expr_trailers(compiler_t *comp, const byte *p, const byte *ptop) {
while (p != ptop) {
const byte *p_next = pt_next(p);
if (p_next != ptop && pt_is_rule(p, PN_trailer_period) && pt_is_rule(p_next, PN_trailer_paren)) {
@ -3028,7 +3033,7 @@ STATIC void compile_scope_inline_asm(compiler_t *comp, scope_t *scope, pass_kind
// check structure of parse node
const byte *p_expr_top;
const byte *p_expr = pt_rule_extract_top(p, &p_expr_top);
if (!pt_is_rule(p_expr, PN_power)) {
if (!pt_is_rule(p_expr, PN_atom_expr_normal)) {
goto not_an_instruction;
}
if (pt_next(p_expr) != p_expr_top) {

View File

@ -71,10 +71,10 @@ enum {
RULE_maximum_number_of,
};
#define ident (RULE_ACT_ALLOW_IDENT)
#define blank (RULE_ACT_ADD_BLANK)
#define or(n) (RULE_ACT_OR | n)
#define and(n) (RULE_ACT_AND | n)
#define and_ident(n) (RULE_ACT_AND | n | RULE_ACT_ALLOW_IDENT)
#define and_blank(n) (RULE_ACT_AND | n | RULE_ACT_ADD_BLANK)
#define one_or_more (RULE_ACT_LIST | 2)
#define list (RULE_ACT_LIST | 1)
#define list_with_end (RULE_ACT_LIST | 3)