@@ -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"
541541napi_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 */
579655napi_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