Skip to content

Commit 001cd41

Browse files
committed
Add load from memory in node port.
1 parent 31ba63a commit 001cd41

File tree

1 file changed

+82
-3
lines changed

1 file changed

+82
-3
lines changed

source/ports/node_port/source/node_port.cpp

Lines changed: 82 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -540,9 +540,10 @@ napi_value metacall_node_call(napi_env env, napi_callback_info info)
540540
// this function is the handler of the "metacall_load_from_file"
541541
napi_value metacall_node_load_from_file(napi_env env, napi_callback_info info)
542542
{
543-
size_t argc = 2, result;
543+
const size_t args_size = 2;
544+
size_t argc = args_size, result;
545+
napi_value argv[args_size];
544546
uint32_t length_of_JS_array;
545-
napi_value argv[argc];
546547
char tagBuf[18];
547548
napi_get_cb_info(env, info, &argc, argv, NULL, NULL);
548549
// checks will be done in the JS Wrapper..... SO we believe whatever the JS_Wrapper is passing is valid
@@ -575,6 +576,81 @@ napi_value metacall_node_load_from_file(napi_env env, napi_callback_info info)
575576

576577
/* END-TODO */
577578

579+
/**
580+
* @brief
581+
* Loads a script from string by tag
582+
*
583+
* @param[in] env
584+
* N-API reference to the enviroment
585+
*
586+
* @param[in] info
587+
* Reference to the call information
588+
*
589+
* @return
590+
* TODO: Not implemented yet
591+
*/
592+
napi_value metacall_node_load_from_memory(napi_env env, napi_callback_info info)
593+
{
594+
const size_t args_size = 2;
595+
size_t argc = args_size, tag_length, script_length;
596+
napi_value argv[args_size];
597+
napi_status status;
598+
char * tag, * script;
599+
600+
// Get arguments
601+
status = napi_get_cb_info(env, info, &argc, argv, NULL, NULL);
602+
603+
metacall_node_exception(env, status);
604+
605+
// Get tag length
606+
status = napi_get_value_string_utf8(env, argv[0], NULL, 0, &tag_length);
607+
608+
metacall_node_exception(env, status);
609+
610+
// Allocate tag
611+
tag = static_cast<char *>(malloc(sizeof(char) * (tag_length + 1)));
612+
613+
if (tag == NULL)
614+
{
615+
napi_throw_error(env, NULL, "Metacall could not load from memory, tag allocation failed");
616+
return NULL;
617+
}
618+
619+
// Get tag
620+
status = napi_get_value_string_utf8(env, argv[0], tag, tag_length + 1, &tag_length);
621+
622+
metacall_node_exception(env, status);
623+
624+
// Get script length
625+
status = napi_get_value_string_utf8(env, argv[1], NULL, 0, &script_length);
626+
627+
metacall_node_exception(env, status);
628+
629+
// Allocate script
630+
script = static_cast<char *>(malloc(sizeof(char) * (script_length + 1)));
631+
632+
if (script == NULL)
633+
{
634+
napi_throw_error(env, NULL, "Metacall could not load from memory, script allocation failed");
635+
return NULL;
636+
}
637+
638+
// Get script
639+
status = napi_get_value_string_utf8(env, argv[1], script, script_length + 1, &script_length);
640+
641+
metacall_node_exception(env, status);
642+
643+
// Load script from memory
644+
if (metacall_load_from_memory(tag, script, script_length, NULL) != 0)
645+
{
646+
napi_throw_error(env, NULL, "Metacall could not load from memory");
647+
return NULL;
648+
}
649+
650+
/* TODO: Return value and logs */
651+
return NULL;
652+
}
653+
578654
/* TODO: Add documentation */
579655
napi_value metacall_node_inspect(napi_env env, napi_callback_info)
580656
{
@@ -625,18 +701,21 @@ void metacall_node_exports(napi_env env, napi_value exports)
625701
{
626702
const char function_metacall_str[] = "metacall";
627703
const char function_load_from_file_str[] = "metacall_load_from_file";
704+
const char function_load_from_memory_str[] = "metacall_load_from_memory";
628705
const char function_inspect_str[] = "metacall_inspect";
629706
const char function_logs_str[] = "metacall_logs";
630707

631-
napi_value function_metacall, function_load_from_file, function_inspect, function_logs;
708+
napi_value function_metacall, function_load_from_file, function_load_from_memory, function_inspect, function_logs;
632709

633710
napi_create_function(env, function_metacall_str, sizeof(function_metacall_str) - 1, metacall_node_call, NULL, &function_metacall);
634711
napi_create_function(env, function_load_from_file_str, sizeof(function_load_from_file_str) - 1, metacall_node_load_from_file, NULL, &function_load_from_file);
712+
napi_create_function(env, function_load_from_memory_str, sizeof(function_load_from_memory_str) - 1, metacall_node_load_from_memory, NULL, &function_load_from_memory);
635713
napi_create_function(env, function_inspect_str, sizeof(function_inspect_str) - 1, metacall_node_inspect, NULL, &function_inspect);
636714
napi_create_function(env, function_logs_str, sizeof(function_logs_str) - 1, metacall_node_logs, NULL, &function_logs);
637715

638716
napi_set_named_property(env, exports, function_metacall_str, function_metacall);
639717
napi_set_named_property(env, exports, function_load_from_file_str, function_load_from_file);
718+
napi_set_named_property(env, exports, function_load_from_memory_str, function_load_from_memory);
640719
napi_set_named_property(env, exports, function_inspect_str, function_inspect);
641720
napi_set_named_property(env, exports, function_logs_str, function_logs);
642721
}

0 commit comments

Comments
 (0)