mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-12-12 04:34:43 +04:00
[FL-3893] JS modules (#3841)
* feat: backport js_gpio from unleashed * feat: backport js_keyboard, TextInputModel::minimum_length from unleashed * fix: api version inconsistency * style: js_gpio * build: fix submodule ._ . * refactor: js_gpio * docs: type declarations for gpio * feat: gpio interrupts * fix: js_gpio freeing, resetting and minor stylistic changes * style: js_gpio * style: mlib array, fixme's * feat: js_gpio adc * feat: js_event_loop * docs: js_event_loop * feat: js_event_loop subscription cancellation * feat: js_event_loop + js_gpio integration * fix: js_event_loop memory leak * feat: stop event loop on back button * test: js: basic, math, event_loop * feat: js_event_loop queue * feat: js linkage to previously loaded plugins * build: fix ci errors * feat: js module ordered teardown * feat: js_gui_defer_free * feat: basic hourglass view * style: JS ASS (Argument Schema for Scripts) * fix: js_event_loop mem leaks and lifetime problems * fix: crashing test and pvs false positives * feat: mjs custom obj destructors, gui submenu view * refactor: yank js_gui_defer_free (yuck) * refactor: maybe_unsubscribe * empty_screen, docs, typing fix-ups * docs: navigation event & demo * feat: submenu setHeader * feat: text_input * feat: text_box * docs: text_box availability * ci: silence irrelevant pvs low priority warning * style: use furistring * style: _get_at -> _safe_get * fix: built-in module name assignment * feat: js_dialog; refactor, optimize: js_gui * docs: js_gui * ci: silence pvs warning: Memory allocation is infallible * style: fix storage spelling * feat: foreign pointer signature checks * feat: js_storage * docs: js_storage * fix: my unit test was breaking other tests ;_; * ci: fix ci? * Make doxygen happy * docs: flipper, math, notification, global * style: review suggestions * style: review fixups * fix: badusb demo script * docs: badusb * ci: add nofl * ci: make linter happy * Bump api version Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include "mjs_primitive.h"
|
||||
#include "mjs_string.h"
|
||||
#include "mjs_util.h"
|
||||
#include "furi.h"
|
||||
|
||||
#include "common/mg_str.h"
|
||||
|
||||
@@ -20,6 +21,19 @@ MJS_PRIVATE mjs_val_t mjs_object_to_value(struct mjs_object* o) {
|
||||
}
|
||||
}
|
||||
|
||||
MJS_PRIVATE void mjs_obj_destructor(struct mjs* mjs, void* cell) {
|
||||
struct mjs_object* obj = cell;
|
||||
mjs_val_t obj_val = mjs_object_to_value(obj);
|
||||
|
||||
struct mjs_property* destructor = mjs_get_own_property(
|
||||
mjs, obj_val, MJS_DESTRUCTOR_PROP_NAME, strlen(MJS_DESTRUCTOR_PROP_NAME));
|
||||
if(!destructor) return;
|
||||
if(!mjs_is_foreign(destructor->value)) return;
|
||||
|
||||
mjs_custom_obj_destructor_t destructor_fn = mjs_get_ptr(mjs, destructor->value);
|
||||
if(destructor_fn) destructor_fn(mjs, obj_val);
|
||||
}
|
||||
|
||||
MJS_PRIVATE struct mjs_object* get_object_struct(mjs_val_t v) {
|
||||
struct mjs_object* ret = NULL;
|
||||
if(mjs_is_null(v)) {
|
||||
@@ -293,7 +307,8 @@ mjs_val_t
|
||||
* start from the end so the constructed object more closely resembles
|
||||
* the definition.
|
||||
*/
|
||||
while(def->name != NULL) def++;
|
||||
while(def->name != NULL)
|
||||
def++;
|
||||
for(def--; def >= defs; def--) {
|
||||
mjs_val_t v = MJS_UNDEFINED;
|
||||
const char* ptr = (const char*)base + def->offset;
|
||||
|
||||
Reference in New Issue
Block a user