Skip to content

Commit b5b1f2c

Browse files
committed
py/emitglue: Add mp_raw_code_load_mem to load raw-code from memory.
1 parent f148727 commit b5b1f2c

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

py/emitglue.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,26 @@ mp_raw_code_t *mp_raw_code_load(mp_reader_t *reader) {
324324
return load_raw_code(reader);
325325
}
326326

327+
typedef struct _mp_mem_reader_t {
328+
const byte *cur;
329+
const byte *end;
330+
} mp_mem_reader_t;
331+
332+
STATIC mp_uint_t mp_mem_reader_next_byte(void *br_in) {
333+
mp_mem_reader_t *br = br_in;
334+
if (br->cur < br->end) {
335+
return *br->cur++;
336+
} else {
337+
return (mp_uint_t)-1;
338+
}
339+
}
340+
341+
mp_raw_code_t *mp_raw_code_load_mem(const byte *buf, size_t len) {
342+
mp_mem_reader_t mr = {buf, buf + len};
343+
mp_reader_t reader = {&mr, mp_mem_reader_next_byte};
344+
return mp_raw_code_load(&reader);
345+
}
346+
327347
// here we define mp_raw_code_load_file depending on the port
328348
// TODO abstract this away properly
329349

py/emitglue.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ typedef struct _mp_reader_t {
6262
} mp_reader_t;
6363

6464
mp_raw_code_t *mp_raw_code_load(mp_reader_t *reader);
65+
mp_raw_code_t *mp_raw_code_load_mem(const byte *buf, size_t len);
6566
mp_raw_code_t *mp_raw_code_load_file(const char *filename);
6667
#endif
6768

0 commit comments

Comments
 (0)