diff options
| author | 2023-03-23 18:13:11 +0000 | |
|---|---|---|
| committer | 2023-03-23 18:13:11 +0000 | |
| commit | 22674528dae5a7bf8d1385aad0d59c34d2ffd185 (patch) | |
| tree | 933a1697087015cdb100631a3c835d79940c7e6c /creole.c | |
| parent | cloop has 64 bit values (diff) | |
modify reader
Diffstat (limited to 'creole.c')
| -rw-r--r-- | creole.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -338,6 +338,7 @@ int creole_encode(creole_word i, unsigned encode_to, unsigned high_bits, struct ins { unsigned char *start; unsigned char *datapt; + size_t dataptlen; enum creole_opcode opcode; creole_word w[CREOLE_MAX_ARG]; creole_word w_flags[CREOLE_MAX_ARG]; @@ -404,10 +405,12 @@ parse_line(struct creole_env *env, struct ins *ins, struct creole_reader *r) if (ins->opcode == CREOLE_DB) { ins->datapt = r->p; + ins->dataptlen = 0; do { if (!creole_decode(r, &w)) return CREOLE_ARG_READ_ERROR; } while (w.len != 1); + ins->dataptlen = r->p - ins->datapt - 1; if (w.word != 0) return CREOLE_LAST_READ_ERROR; return CREOLE_COMPILE_OK; @@ -430,7 +433,8 @@ add_to_env(struct creole_env *env, struct ins *ins) { switch (ins->opcode) { case CREOLE_DB: - env->dats[ins->w[0]] = ins->datapt; + env->dats[ins->w[0]].p = ins->datapt; + env->dats[ins->w[0]].left = ins->dataptlen; break; default: ; @@ -570,7 +574,8 @@ enum creole_run_ret creole_step(struct creole_env *env, creole_word *sc) switch (ins.opcode) { case CREOLE_DB: - env->dats[ins.w[0]] = ins.datapt; + env->dats[ins->w[0]].p = ins->datapt; + env->dats[ins->w[0]].left = ins->dataptlen; break; case CREOLE_PUSH: check(read_val(env, &ins, 0, &a1)); |
