MIRROR: javascript for ๐Ÿœ's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

add token stream support for coroutine state management

+23 -1
+3
include/sugar.h
··· 45 45 int for_let_stack_len; 46 46 int for_let_stack_cap; 47 47 UT_array *scope_stack; 48 + void *token_stream; 49 + int token_stream_pos; 50 + const char *token_stream_code; 48 51 } coroutine_t; 49 52 50 53 typedef struct {
+1 -1
src/ant.c
··· 3738 3738 3739 3739 jsoff_t scan = pos + 5; 3740 3740 while (scan < end && ( 3741 - code[scan] == ' ' || 3741 + code[scan] == ' ' || 3742 3742 code[scan] == '\t' || 3743 3743 code[scan] == '\n' || 3744 3744 code[scan] == '\r'
+19
src/sugar.c
··· 84 84 coro->for_let_stack_cap = tmp_cap; 85 85 } 86 86 87 + static void token_stream_swap_with_coro(struct js *js, coroutine_t *coro) { 88 + void *tmp_stream = js->token_stream; 89 + int tmp_pos = js->token_stream_pos; 90 + const char *tmp_code = js->token_stream_code; 91 + 92 + js->token_stream = coro->token_stream; 93 + js->token_stream_pos = coro->token_stream_pos; 94 + js->token_stream_code = coro->token_stream_code; 95 + 96 + coro->token_stream = tmp_stream; 97 + coro->token_stream_pos = tmp_pos; 98 + coro->token_stream_code = tmp_code; 99 + } 100 + 87 101 coro_saved_state_t coro_enter(struct js *js, coroutine_t *coro) { 88 102 extern UT_array *global_scope_stack; 89 103 coro_saved_state_t saved = { js->scope, global_scope_stack }; 90 104 js->scope = coro->scope; 91 105 global_scope_stack = coro->scope_stack; 92 106 for_let_swap_with_coro(js, coro); 107 + token_stream_swap_with_coro(js, coro); 93 108 return saved; 94 109 } 95 110 ··· 100 115 js->scope = saved.scope; 101 116 global_scope_stack = saved.scope_stack; 102 117 for_let_swap_with_coro(js, coro); 118 + token_stream_swap_with_coro(js, coro); 103 119 } 104 120 105 121 static size_t calculate_coro_stack_size(void) { ··· 212 228 .for_let_stack = NULL, 213 229 .for_let_stack_len = 0, 214 230 .for_let_stack_cap = 0, 231 + .token_stream = NULL, 232 + .token_stream_pos = 0, 233 + .token_stream_code = NULL, 215 234 }; 216 235 217 236 if (nargs > 0) {