mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-30 23:23:07 +00:00 
			
		
		
		
	Address #1337 (leet!).
Changes a few scheduling details and adds a 0 byte explicitly to symbols created via gensym.
This commit is contained in:
		| @@ -2031,33 +2031,35 @@ void janet_ev_default_threaded_callback(JanetEVGenericMessage return_value) { | |||||||
|     if (return_value.fiber == NULL) { |     if (return_value.fiber == NULL) { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     switch (return_value.tag) { |     if (janet_fiber_can_resume(return_value.fiber)) { | ||||||
|         default: |         switch (return_value.tag) { | ||||||
|         case JANET_EV_TCTAG_NIL: |             default: | ||||||
|             janet_schedule(return_value.fiber, janet_wrap_nil()); |             case JANET_EV_TCTAG_NIL: | ||||||
|             break; |                 janet_schedule(return_value.fiber, janet_wrap_nil()); | ||||||
|         case JANET_EV_TCTAG_INTEGER: |                 break; | ||||||
|             janet_schedule(return_value.fiber, janet_wrap_integer(return_value.argi)); |             case JANET_EV_TCTAG_INTEGER: | ||||||
|             break; |                 janet_schedule(return_value.fiber, janet_wrap_integer(return_value.argi)); | ||||||
|         case JANET_EV_TCTAG_STRING: |                 break; | ||||||
|         case JANET_EV_TCTAG_STRINGF: |             case JANET_EV_TCTAG_STRING: | ||||||
|             janet_schedule(return_value.fiber, janet_cstringv((const char *) return_value.argp)); |             case JANET_EV_TCTAG_STRINGF: | ||||||
|             if (return_value.tag == JANET_EV_TCTAG_STRINGF) janet_free(return_value.argp); |                 janet_schedule(return_value.fiber, janet_cstringv((const char *) return_value.argp)); | ||||||
|             break; |                 if (return_value.tag == JANET_EV_TCTAG_STRINGF) janet_free(return_value.argp); | ||||||
|         case JANET_EV_TCTAG_KEYWORD: |                 break; | ||||||
|             janet_schedule(return_value.fiber, janet_ckeywordv((const char *) return_value.argp)); |             case JANET_EV_TCTAG_KEYWORD: | ||||||
|             break; |                 janet_schedule(return_value.fiber, janet_ckeywordv((const char *) return_value.argp)); | ||||||
|         case JANET_EV_TCTAG_ERR_STRING: |                 break; | ||||||
|         case JANET_EV_TCTAG_ERR_STRINGF: |             case JANET_EV_TCTAG_ERR_STRING: | ||||||
|             janet_cancel(return_value.fiber, janet_cstringv((const char *) return_value.argp)); |             case JANET_EV_TCTAG_ERR_STRINGF: | ||||||
|             if (return_value.tag == JANET_EV_TCTAG_STRINGF) janet_free(return_value.argp); |                 janet_cancel(return_value.fiber, janet_cstringv((const char *) return_value.argp)); | ||||||
|             break; |                 if (return_value.tag == JANET_EV_TCTAG_STRINGF) janet_free(return_value.argp); | ||||||
|         case JANET_EV_TCTAG_ERR_KEYWORD: |                 break; | ||||||
|             janet_cancel(return_value.fiber, janet_ckeywordv((const char *) return_value.argp)); |             case JANET_EV_TCTAG_ERR_KEYWORD: | ||||||
|             break; |                 janet_cancel(return_value.fiber, janet_ckeywordv((const char *) return_value.argp)); | ||||||
|         case JANET_EV_TCTAG_BOOLEAN: |                 break; | ||||||
|             janet_schedule(return_value.fiber, janet_wrap_boolean(return_value.argi)); |             case JANET_EV_TCTAG_BOOLEAN: | ||||||
|             break; |                 janet_schedule(return_value.fiber, janet_wrap_boolean(return_value.argi)); | ||||||
|  |                 break; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     janet_gcunroot(janet_wrap_fiber(return_value.fiber)); |     janet_gcunroot(janet_wrap_fiber(return_value.fiber)); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -529,7 +529,9 @@ static void janet_proc_wait_cb(JanetEVGenericMessage args) { | |||||||
|             JanetString s = janet_formatc("command failed with non-zero exit code %d", status); |             JanetString s = janet_formatc("command failed with non-zero exit code %d", status); | ||||||
|             janet_cancel(args.fiber, janet_wrap_string(s)); |             janet_cancel(args.fiber, janet_wrap_string(s)); | ||||||
|         } else { |         } else { | ||||||
|             janet_schedule(args.fiber, janet_wrap_integer(status)); |             if (janet_fiber_can_resume(args.fiber)) { | ||||||
|  |                 janet_schedule(args.fiber, janet_wrap_integer(status)); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -233,6 +233,7 @@ const uint8_t *janet_symbol_gen(void) { | |||||||
|     head->length = sizeof(janet_vm.gensym_counter) - 1; |     head->length = sizeof(janet_vm.gensym_counter) - 1; | ||||||
|     head->hash = hash; |     head->hash = hash; | ||||||
|     sym = (uint8_t *)(head->data); |     sym = (uint8_t *)(head->data); | ||||||
|  |     sym[head->length] = 0; | ||||||
|     memcpy(sym, janet_vm.gensym_counter, sizeof(janet_vm.gensym_counter)); |     memcpy(sym, janet_vm.gensym_counter, sizeof(janet_vm.gensym_counter)); | ||||||
|     janet_symcache_put((const uint8_t *)sym, bucket); |     janet_symcache_put((const uint8_t *)sym, bucket); | ||||||
|     return (const uint8_t *)sym; |     return (const uint8_t *)sym; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose