py: Fix bugs with debugging output.
show_bc now decodes the prelude correctly. Moved WRITE_FILE stuff from runtime.c to emitglue.c. Addresses issue #385.
This commit is contained in:
parent
182c31a208
commit
440f041525
@ -1,6 +1,6 @@
|
||||
// This code glues the code emitters to the runtime.
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "misc.h"
|
||||
@ -10,6 +10,7 @@
|
||||
#include "runtime0.h"
|
||||
#include "runtime.h"
|
||||
#include "emitglue.h"
|
||||
#include "bc.h"
|
||||
|
||||
#if 0 // print debugging info
|
||||
#define DEBUG_PRINT (1)
|
||||
@ -51,13 +52,27 @@ STATIC machine_uint_t unique_codes_alloc = 0;
|
||||
STATIC mp_code_t *unique_codes = NULL;
|
||||
STATIC uint next_unique_code_id;
|
||||
|
||||
#ifdef WRITE_CODE
|
||||
FILE *fp_write_code = NULL;
|
||||
#endif
|
||||
|
||||
void mp_emit_glue_init(void) {
|
||||
next_unique_code_id = 0;
|
||||
unique_codes_alloc = 0;
|
||||
unique_codes = NULL;
|
||||
|
||||
#ifdef WRITE_CODE
|
||||
fp_write_code = fopen("out-code", "wb");
|
||||
#endif
|
||||
}
|
||||
|
||||
void mp_emit_glue_deinit(void) {
|
||||
#ifdef WRITE_CODE
|
||||
if (fp_write_code != NULL) {
|
||||
fclose(fp_write_code);
|
||||
}
|
||||
#endif
|
||||
|
||||
m_del(mp_code_t, unique_codes, unique_codes_alloc);
|
||||
}
|
||||
|
||||
|
14
py/runtime.c
14
py/runtime.c
@ -20,7 +20,6 @@
|
||||
|
||||
#if 0 // print debugging info
|
||||
#define DEBUG_PRINT (1)
|
||||
#define WRITE_CODE (1)
|
||||
#define DEBUG_printf DEBUG_printf
|
||||
#define DEBUG_OP_printf(...) DEBUG_printf(__VA_ARGS__)
|
||||
#else // don't print debugging info
|
||||
@ -33,10 +32,6 @@ STATIC mp_map_t *map_locals;
|
||||
STATIC mp_map_t *map_globals;
|
||||
STATIC mp_map_t map_builtins;
|
||||
|
||||
#ifdef WRITE_CODE
|
||||
FILE *fp_write_code = NULL;
|
||||
#endif
|
||||
|
||||
// a good optimising compiler will inline this if necessary
|
||||
STATIC void mp_map_add_qstr(mp_map_t *map, qstr qstr, mp_obj_t value) {
|
||||
mp_map_lookup(map, MP_OBJ_NEW_QSTR(qstr), MP_MAP_LOOKUP_ADD_IF_NOT_FOUND)->value = value;
|
||||
@ -68,18 +63,9 @@ void rt_init(void) {
|
||||
// for efficiency, left to platform-specific startup code
|
||||
//sys_path = mp_obj_new_list(0, NULL);
|
||||
//rt_store_attr(m_sys, MP_QSTR_path, sys_path);
|
||||
|
||||
#ifdef WRITE_CODE
|
||||
fp_write_code = fopen("out-code", "wb");
|
||||
#endif
|
||||
}
|
||||
|
||||
void rt_deinit(void) {
|
||||
#ifdef WRITE_CODE
|
||||
if (fp_write_code != NULL) {
|
||||
fclose(fp_write_code);
|
||||
}
|
||||
#endif
|
||||
mp_map_free(map_globals);
|
||||
mp_map_deinit(&map_builtins);
|
||||
mp_module_deinit();
|
||||
|
11
py/showbc.c
11
py/showbc.c
@ -30,7 +30,16 @@ void mp_byte_code_print(const byte *ip, int len) {
|
||||
machine_uint_t code_info_size = ip[0] | (ip[1] << 8) | (ip[2] << 16) | (ip[3] << 24);
|
||||
ip += code_info_size;
|
||||
|
||||
// decode prelude
|
||||
// bytecode prelude: state size and exception stack size; 16 bit uints
|
||||
{
|
||||
uint n_state = ip[0] | (ip[1] << 8);
|
||||
uint n_exc_stack = ip[2] | (ip[3] << 8);
|
||||
ip += 4;
|
||||
printf("(N_STATE %u)\n", n_state);
|
||||
printf("(N_EXC_STACK %u)\n", n_exc_stack);
|
||||
}
|
||||
|
||||
// bytecode prelude: initialise closed over variables
|
||||
{
|
||||
uint n_local = *ip++;
|
||||
printf("(NUM_LOCAL %u)\n", n_local);
|
||||
|
Loading…
Reference in New Issue
Block a user