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.

migrate to ptr.h

+53 -15
+53 -15
src/modules/server.c
··· 11 11 12 12 #include "ant.h" 13 13 #include "internal.h" 14 + #include "ptr.h" 14 15 15 16 #include "gc/modules.h" 16 17 #include "net/listener.h" ··· 83 84 84 85 static inline void server_request_retain(server_request_t *req) { 85 86 if (req) req->refs++; 87 + } 88 + 89 + static inline server_request_t *server_current_request(ant_t *js) { 90 + return (server_request_t *)js_get_native_ptr(js->current_func); 91 + } 92 + 93 + static inline server_runtime_t *server_current_runtime(ant_t *js) { 94 + return (server_runtime_t *)js_get_native_ptr(js->current_func); 95 + } 96 + 97 + static ant_value_t server_mkreqfun( 98 + ant_t *js, 99 + ant_value_t (*fn)(ant_t *, ant_value_t *, int), 100 + server_request_t *req 101 + ) { 102 + ant_value_t func = js_heavy_mkfun(js, fn, js_mkundef()); 103 + js_set_native_ptr(func, req); 104 + return func; 105 + } 106 + 107 + static ant_value_t server_mkruntimefun( 108 + ant_t *js, 109 + ant_value_t (*fn)(ant_t *, ant_value_t *, int), 110 + server_runtime_t *server 111 + ) { 112 + ant_value_t func = js_heavy_mkfun(js, fn, js_mkundef()); 113 + js_set_native_ptr(func, server); 114 + return func; 86 115 } 87 116 88 117 static ant_value_t server_exception_reason(ant_t *js, ant_value_t value) { ··· 345 374 } 346 375 347 376 static ant_value_t server_on_response_reject(ant_t *js, ant_value_t *args, int nargs) { 348 - server_request_t *req = (server_request_t *)(uintptr_t)(size_t)js_getnum(js_get_slot(js->current_func, SLOT_DATA)); 377 + server_request_t *req = server_current_request(js); 349 378 ant_value_t reason = (nargs > 0) ? args[0] : js_mkundef(); 350 379 const char *msg = NULL; 351 380 ··· 362 391 } 363 392 364 393 static ant_value_t server_on_response_fulfill(ant_t *js, ant_value_t *args, int nargs) { 365 - server_request_t *req = (server_request_t *)(uintptr_t)(size_t)js_getnum(js_get_slot(js->current_func, SLOT_DATA)); 394 + server_request_t *req = server_current_request(js); 366 395 ant_value_t value = (nargs > 0) ? args[0] : js_mkundef(); 367 396 368 397 if (!req) return js_mkundef(); ··· 390 419 } 391 420 392 421 if (vtype(result) == T_PROMISE) { 393 - ant_value_t fulfill = js_heavy_mkfun(js, server_on_response_fulfill, ANT_PTR(req)); 394 - ant_value_t reject = js_heavy_mkfun(js, server_on_response_reject, ANT_PTR(req)); 422 + ant_value_t fulfill = server_mkreqfun(js, server_on_response_fulfill, req); 423 + ant_value_t reject = server_mkreqfun(js, server_on_response_reject, req); 395 424 ant_value_t then_result = 0; 396 425 397 426 req->response_promise = result; ··· 410 439 } 411 440 412 441 static ant_value_t server_stream_read_reject(ant_t *js, ant_value_t *args, int nargs) { 413 - server_request_t *req = (server_request_t *)(uintptr_t)(size_t)js_getnum(js_get_slot(js->current_func, SLOT_DATA)); 442 + server_request_t *req = server_current_request(js); 414 443 (void)args; 415 444 (void)nargs; 416 445 ··· 422 451 } 423 452 424 453 static ant_value_t server_stream_read_fulfill(ant_t *js, ant_value_t *args, int nargs) { 425 - server_request_t *req = (server_request_t *)(uintptr_t)(size_t)js_getnum(js_get_slot(js->current_func, SLOT_DATA)); 454 + server_request_t *req = server_current_request(js); 426 455 ant_value_t result = (nargs > 0) ? args[0] : js_mkundef(); 456 + 427 457 ant_value_t done = 0; 428 458 ant_value_t value = 0; 459 + 429 460 const uint8_t *chunk = NULL; 430 461 size_t chunk_len = 0; 462 + 431 463 ant_http1_buffer_t buf; 432 464 char *out = NULL; 433 465 size_t out_len = 0; ··· 478 510 479 511 static void server_start_stream_read(server_request_t *req) { 480 512 ant_t *js = req->server->js; 513 + 481 514 ant_value_t next_p = 0; 482 515 ant_value_t fulfill = 0; 483 516 ant_value_t reject = 0; ··· 488 521 489 522 next_p = rs_default_reader_read(js, req->response_reader); 490 523 req->response_read_promise = next_p; 491 - fulfill = js_heavy_mkfun(js, server_stream_read_fulfill, ANT_PTR(req)); 492 - reject = js_heavy_mkfun(js, server_stream_read_reject, ANT_PTR(req)); 524 + fulfill = server_mkreqfun(js, server_stream_read_fulfill, req); 525 + reject = server_mkreqfun(js, server_stream_read_reject, req); 493 526 494 527 server_request_retain(req); 495 528 then_result = js_promise_then(js, next_p, fulfill, reject); ··· 545 578 } 546 579 547 580 static ant_value_t server_request_ip(ant_t *js, ant_value_t *args, int nargs) { 548 - server_runtime_t *server = (server_runtime_t *)(uintptr_t)(size_t)js_getnum(js_get_slot(js->current_func, SLOT_DATA)); 581 + server_runtime_t *server = server_current_runtime(js); 549 582 server_request_t *req = NULL; 550 583 ant_value_t out = 0; 551 584 ··· 560 593 } 561 594 562 595 static ant_value_t server_timeout(ant_t *js, ant_value_t *args, int nargs) { 563 - server_runtime_t *server = (server_runtime_t *)(uintptr_t)(size_t)js_getnum(js_get_slot(js->current_func, SLOT_DATA)); 596 + server_runtime_t *server = server_current_runtime(js); 564 597 server_request_t *req = NULL; 565 598 int timeout = 0; 566 599 ··· 574 607 } 575 608 576 609 static ant_value_t server_stop(ant_t *js, ant_value_t *args, int nargs) { 577 - server_runtime_t *server = (server_runtime_t *)(uintptr_t)(size_t)js_getnum(js_get_slot(js->current_func, SLOT_DATA)); 610 + server_runtime_t *server = server_current_runtime(js); 578 611 stop_waiter_t *waiter = NULL; 579 612 ant_value_t promise = js_mkpromise(js); 580 613 bool force = (nargs > 0 && js_truthy(js, args[0])); ··· 815 848 callbacks.on_conn_close = server_on_conn_close; 816 849 callbacks.on_listener_close = server_on_listener_close; 817 850 818 - rc = ant_listener_listen_tcp(&server->listener, server->loop, server->hostname, server->port, 128, server->idle_timeout_secs, &callbacks, server); 851 + rc = ant_listener_listen_tcp( 852 + &server->listener, server->loop, 853 + server->hostname, server->port, 854 + 128, server->idle_timeout_secs, &callbacks, server 855 + ); 856 + 819 857 if (rc != 0) { 820 858 free(server->hostname); 821 859 free(server); ··· 828 866 uv_signal_start(&server->sigterm_handle, server_signal_cb, SIGTERM); 829 867 830 868 server->server_ctx = js_mkobj(js); 831 - js_set(js, server->server_ctx, "requestIP", js_heavy_mkfun(js, server_request_ip, ANT_PTR(server))); 832 - js_set(js, server->server_ctx, "timeout", js_heavy_mkfun(js, server_timeout, ANT_PTR(server))); 833 - js_set(js, server->server_ctx, "stop", js_heavy_mkfun(js, server_stop, ANT_PTR(server))); 869 + js_set(js, server->server_ctx, "requestIP", server_mkruntimefun(js, server_request_ip, server)); 870 + js_set(js, server->server_ctx, "timeout", server_mkruntimefun(js, server_timeout, server)); 871 + js_set(js, server->server_ctx, "stop", server_mkruntimefun(js, server_stop, server)); 834 872 835 873 g_server = server; 836 874 return js_mkundef();