summaryrefslogtreecommitdiffstatshomepage
path: root/py/compile.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/compile.c')
-rw-r--r--py/compile.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/py/compile.c b/py/compile.c
index 6a3a669464..8adfcd2a04 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -2507,25 +2507,30 @@ void compile_scope_inline_asm(compiler_t *comp, scope_t *scope, pass_kind_t pass
return;
}
+ if (comp->pass > PASS_1) {
+ EMIT_INLINE_ASM(start_pass, comp->pass, comp->scope_cur);
+ }
+
// get the function definition parse node
assert(PY_PARSE_NODE_IS_STRUCT(scope->pn));
py_parse_node_struct_t *pns = (py_parse_node_struct_t*)scope->pn;
assert(PY_PARSE_NODE_STRUCT_KIND(pns) == PN_funcdef);
- //qstr f_id = PY_PARSE_NODE_LEAF_ARG(pns->nodes[0]); // name
+ //qstr f_id = PY_PARSE_NODE_LEAF_ARG(pns->nodes[0]); // function name
+
+ // parameters are in pns->nodes[1]
+ if (comp->pass == PASS_2) {
+ py_parse_node_t *pn_params;
+ int n_params = list_get(&pns->nodes[1], PN_typedargslist, &pn_params);
+ scope->num_params = EMIT_INLINE_ASM(count_params, n_params, pn_params);
+ }
- scope->num_params = 0;
- assert(PY_PARSE_NODE_IS_NULL(pns->nodes[1])); // arguments
assert(PY_PARSE_NODE_IS_NULL(pns->nodes[2])); // type
py_parse_node_t pn_body = pns->nodes[3]; // body
py_parse_node_t *nodes;
int num = list_get(&pn_body, PN_suite_block_stmts, &nodes);
- if (comp->pass > PASS_1) {
- EMIT_INLINE_ASM(start_pass, comp->pass, comp->scope_cur);
- }
-
if (comp->pass == PASS_3) {
//printf("----\n");
scope_print_info(scope);