diff options
author | Adrian Thurston <thurston@colm.net> | 2020-12-22 15:24:51 -0800 |
---|---|---|
committer | Adrian Thurston <thurston@colm.net> | 2020-12-23 08:25:28 -0800 |
commit | b8827e38f676a9eb45a1120ecd0b0d7d7e454e57 (patch) | |
tree | cfc30685ca51a7b98b8c90fe9d49b9d8408310af /src/bytecode.c | |
parent | e2408c401b3f82742f7b7c03ff1ef5f461081e22 (diff) | |
download | colm-b8827e38f676a9eb45a1120ecd0b0d7d7e454e57.tar.gz |
added with_ignore(tree) iterator
This is identical to the basic tree iterator, except it visits ignore tokens.
This makes it possible to rewrite comments, albeit, primitively. Constructors
for tokens don't work right. Though we can set the data field.
The following code can be used to turn comments into newlines:
for I1: comment in with_ignore(Flux) {
I1.data = "\n"
}
Diffstat (limited to 'src/bytecode.c')
-rw-r--r-- | src/bytecode.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/bytecode.c b/src/bytecode.c index 39aee070..f9a90d4f 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -2155,7 +2155,19 @@ again: debug( prg, REALM_BYTECODE, "IN_TRITER_ADVANCE\n" ); tree_iter_t *iter = (tree_iter_t*) vm_get_plocal(exec, field); - tree_t *res = tree_iter_advance( prg, &sp, iter ); + tree_t *res = tree_iter_advance( prg, &sp, iter, false ); + //colm_tree_upref( prg, res ); + vm_push_tree( res ); + break; + } + case IN_TRITER_WIG_ADVANCE: { + short field; + read_half( field ); + + debug( prg, REALM_BYTECODE, "IN_TRITER_WIG_ADVANCE\n" ); + + tree_iter_t *iter = (tree_iter_t*) vm_get_plocal(exec, field); + tree_t *res = tree_iter_advance( prg, &sp, iter, true ); //colm_tree_upref( prg, res ); vm_push_tree( res ); break; |