Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
c9aa1883
Commit
c9aa1883
authored
Apr 07, 2015
by
Damien George
Browse files
py: Simplify bytecode prelude when encoding closed over variables.
parent
78772ada
Changes
5
Hide whitespace changes
Inline
Side-by-side
py/bc.c
View file @
c9aa1883
...
...
@@ -228,9 +228,10 @@ continue2:;
// bytecode prelude: initialise closed over variables
const
byte
*
ip
=
code_state
->
ip
;
for
(
mp_uint_t
n_local
=
*
ip
++
;
n_local
>
0
;
n_local
--
)
{
mp_uint_t
local_num
=
*
ip
++
;
code_state
->
state
[
n_state
-
1
-
local_num
]
=
mp_obj_new_cell
(
code_state
->
state
[
n_state
-
1
-
local_num
]);
mp_uint_t
local_num
;
while
((
local_num
=
*
ip
++
)
!=
255
)
{
code_state
->
state
[
n_state
-
1
-
local_num
]
=
mp_obj_new_cell
(
code_state
->
state
[
n_state
-
1
-
local_num
]);
}
// now that we skipped over the prelude, set the ip for the VM
...
...
py/emitbc.c
View file @
c9aa1883
...
...
@@ -322,21 +322,14 @@ void mp_emit_bc_start_pass(emit_t *emit, pass_kind_t pass, scope_t *scope) {
}
// bytecode prelude: initialise closed over variables
int
num_cell
=
0
;
for
(
int
i
=
0
;
i
<
scope
->
id_info_len
;
i
++
)
{
id_info_t
*
id
=
&
scope
->
id_info
[
i
];
if
(
id
->
kind
==
ID_INFO_KIND_CELL
)
{
num_cell
+=
1
;
}
}
assert
(
num_cell
<=
255
);
emit_write_bytecode_byte
(
emit
,
num_cell
);
// write number of locals that are cells
for
(
int
i
=
0
;
i
<
scope
->
id_info_len
;
i
++
)
{
id_info_t
*
id
=
&
scope
->
id_info
[
i
];
if
(
id
->
kind
==
ID_INFO_KIND_CELL
)
{
assert
(
id
->
local_num
<
255
);
emit_write_bytecode_byte
(
emit
,
id
->
local_num
);
// write the local which should be converted to a cell
}
}
emit_write_bytecode_byte
(
emit
,
255
);
// end of list sentinel
}
void
mp_emit_bc_end_pass
(
emit_t
*
emit
)
{
...
...
py/showbc.c
View file @
c9aa1883
...
...
@@ -95,10 +95,8 @@ void mp_bytecode_print(const void *descr, mp_uint_t n_total_args, const byte *ip
// bytecode prelude: initialise closed over variables
{
uint
n_local
=
*
ip
++
;
printf
(
"(NUM_LOCAL %u)
\n
"
,
n_local
);
for
(;
n_local
>
0
;
n_local
--
)
{
uint
local_num
=
*
ip
++
;
uint
local_num
;
while
((
local_num
=
*
ip
++
)
!=
255
)
{
printf
(
"(INIT_CELL %u)
\n
"
,
local_num
);
}
len
-=
ip
-
mp_showbc_code_start
;
...
...
tests/cmdline/cmd_showbc.py.exp
View file @
c9aa1883
...
...
@@ -5,7 +5,6 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
arg names:
(N_STATE 3)
(N_EXC_STACK 0)
(NUM_LOCAL 0)
bc=-3 line=1
########
bc=\\d\+ line=134
...
...
@@ -32,7 +31,6 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
arg names:
(N_STATE 25)
(N_EXC_STACK 2)
(NUM_LOCAL 3)
(INIT_CELL 14)
(INIT_CELL 15)
(INIT_CELL 16)
...
...
@@ -304,7 +302,6 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
arg names: a
(N_STATE 5)
(N_EXC_STACK 0)
(NUM_LOCAL 1)
(INIT_CELL 0)
########
bc=\\d\+ line=124
...
...
@@ -323,7 +320,6 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
arg names:
(N_STATE 2)
(N_EXC_STACK 0)
(NUM_LOCAL 0)
bc=-3 line=1
bc=0 line=129
bc=3 line=130
...
...
@@ -348,7 +344,6 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
arg names:
(N_STATE 1)
(N_EXC_STACK 0)
(NUM_LOCAL 0)
bc=-3 line=1
bc=10 line=135
00 LOAD_NAME __name__ (cache=0)
...
...
@@ -364,7 +359,6 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
arg names: c e
(N_STATE 6)
(N_EXC_STACK 0)
(NUM_LOCAL 0)
bc=-\\d\+ line=1
00 LOAD_FAST 2
01 FOR_ITER 17
...
...
@@ -384,7 +378,6 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
arg names: c e
(N_STATE 7)
(N_EXC_STACK 0)
(NUM_LOCAL 0)
bc=-\\d\+ line=1
00 BUILD_LIST 0
02 LOAD_FAST 2
...
...
@@ -403,7 +396,6 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
arg names: c e
(N_STATE 8)
(N_EXC_STACK 0)
(NUM_LOCAL 0)
bc=-\\d\+ line=1
########
00 BUILD_MAP 0
...
...
@@ -424,7 +416,6 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
arg names: x
(N_STATE 4)
(N_EXC_STACK 0)
(NUM_LOCAL 0)
bc=-\\d\+ line=1
########
bc=\\d\+ line=105
...
...
@@ -444,7 +435,6 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
arg names: b a
(N_STATE 4)
(N_EXC_STACK 0)
(NUM_LOCAL 0)
bc=-\\d\+ line=1
########
bc=\\d\+ line=125
...
...
tests/cmdline/cmd_verbose.py.exp
View file @
c9aa1883
...
...
@@ -7,7 +7,6 @@ Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
arg names:
(N_STATE 2)
(N_EXC_STACK 0)
(NUM_LOCAL 0)
bc=-3 line=1
bc=0 line=3
00 LOAD_NAME print (cache=0)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment