Cleanup a bit.
This commit is contained in:
+1
-12
@@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
const platformNames = {
|
const platformNames = {
|
||||||
[System.PLATFORM_LINUX]: 'Linux',
|
[System.PLATFORM_LINUX]: 'Linux',
|
||||||
[System.PLATFORM_KNULLI]: 'Knulli',
|
[System.PLATFORM_KNULLI]: 'Knulli',
|
||||||
@@ -8,13 +6,4 @@ const platformNames = {
|
|||||||
[System.PLATFORM_WII]: 'Wii',
|
[System.PLATFORM_WII]: 'Wii',
|
||||||
};
|
};
|
||||||
|
|
||||||
Console.print('Platform: ' + (platformNames[System.platform] || 'Unknown'));
|
Console.print('Platform: ' + (platformNames[System.platform] || 'Unknown'));
|
||||||
|
|
||||||
async function testRequireAsync() {
|
|
||||||
Console.print('Loading testscene.js...');
|
|
||||||
const scene = await requireAsync('testscene.js');
|
|
||||||
Console.print('Loaded!');
|
|
||||||
Console.print(scene.test());
|
|
||||||
}
|
|
||||||
|
|
||||||
testRequireAsync();
|
|
||||||
+14
-2
@@ -22,8 +22,20 @@ errorret_t inputInit(void) {
|
|||||||
INPUT.actions[i].action = (inputaction_t)i;
|
INPUT.actions[i].action = (inputaction_t)i;
|
||||||
INPUT.actions[i].lastValue = 0.0f;
|
INPUT.actions[i].lastValue = 0.0f;
|
||||||
INPUT.actions[i].currentValue = 0.0f;
|
INPUT.actions[i].currentValue = 0.0f;
|
||||||
eventInit(&INPUT.actions[i].onPressed, INPUT.actions[i].onPressedCallbacks, INPUT.actions[i].onPressedUsers, 4);
|
|
||||||
eventInit(&INPUT.actions[i].onReleased, INPUT.actions[i].onReleasedCallbacks, INPUT.actions[i].onReleasedUsers, 4);
|
eventInit(
|
||||||
|
&INPUT.actions[i].onPressed,
|
||||||
|
INPUT.actions[i].onPressedCallbacks,
|
||||||
|
INPUT.actions[i].onPressedUsers,
|
||||||
|
INPUT_ACTION_CALLBACK_COUNT_MAX
|
||||||
|
);
|
||||||
|
|
||||||
|
eventInit(
|
||||||
|
&INPUT.actions[i].onReleased,
|
||||||
|
INPUT.actions[i].onReleasedCallbacks,
|
||||||
|
INPUT.actions[i].onReleasedUsers,
|
||||||
|
INPUT_ACTION_CALLBACK_COUNT_MAX
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef inputInitPlatform
|
#ifdef inputInitPlatform
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
#include "input/inputactiondefs.h"
|
#include "input/inputactiondefs.h"
|
||||||
#include "event/event.h"
|
#include "event/event.h"
|
||||||
|
|
||||||
|
#define INPUT_ACTION_CALLBACK_COUNT_MAX 4
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
inputaction_t action;
|
inputaction_t action;
|
||||||
float_t lastValue;
|
float_t lastValue;
|
||||||
@@ -20,11 +22,11 @@ typedef struct {
|
|||||||
float_t currentDynamicValue;
|
float_t currentDynamicValue;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
eventcallback_t onPressedCallbacks[4];
|
eventcallback_t onPressedCallbacks[INPUT_ACTION_CALLBACK_COUNT_MAX];
|
||||||
void *onPressedUsers[4];
|
void *onPressedUsers[INPUT_ACTION_CALLBACK_COUNT_MAX];
|
||||||
event_t onPressed;
|
event_t onPressed;
|
||||||
eventcallback_t onReleasedCallbacks[4];
|
eventcallback_t onReleasedCallbacks[INPUT_ACTION_CALLBACK_COUNT_MAX];
|
||||||
void *onReleasedUsers[4];
|
void *onReleasedUsers[INPUT_ACTION_CALLBACK_COUNT_MAX];
|
||||||
event_t onReleased;
|
event_t onReleased;
|
||||||
} inputactiondata_t;
|
} inputactiondata_t;
|
||||||
|
|
||||||
|
|||||||
@@ -6,56 +6,58 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "modulerequire.h"
|
#include "modulerequire.h"
|
||||||
#include "asset/asset.h"
|
|
||||||
#include "util/memory.h"
|
#include "util/memory.h"
|
||||||
#include "util/string.h"
|
#include "util/string.h"
|
||||||
#include "assert/assert.h"
|
#include "assert/assert.h"
|
||||||
|
|
||||||
#define MODULE_REQUIRE_ASYNC_MAX 16
|
modulerequireasyncpending_t MODULE_REQUIRE_ASYNC_PENDING[
|
||||||
|
MODULE_REQUIRE_ASYNC_MAX
|
||||||
|
];
|
||||||
|
uint32_t MODULE_REQUIRE_ASYNC_PENDING_COUNT = 0;
|
||||||
|
|
||||||
typedef struct {
|
void moduleRequireAsyncOnLoaded(void *params, void *user) {
|
||||||
assetentry_t *entry;
|
|
||||||
jerry_value_t promise;
|
|
||||||
} modulerequireasyncpending_t;
|
|
||||||
|
|
||||||
static modulerequireasyncpending_t MODULE_REQUIRE_ASYNC_PENDING[MODULE_REQUIRE_ASYNC_MAX];
|
|
||||||
static uint32_t MODULE_REQUIRE_ASYNC_PENDING_COUNT = 0;
|
|
||||||
|
|
||||||
/* Resolves or rejects every promise associated with entry, then unsubscribes. */
|
|
||||||
static void moduleRequireAsyncOnError(void *params, void *user);
|
|
||||||
|
|
||||||
static void moduleRequireAsyncOnLoaded(void *params, void *user) {
|
|
||||||
assetentry_t *entry = (assetentry_t *)params;
|
assetentry_t *entry = (assetentry_t *)params;
|
||||||
(void)user;
|
|
||||||
|
|
||||||
eventUnsubscribe(&entry->onLoaded, moduleRequireAsyncOnLoaded);
|
eventUnsubscribe(&entry->onLoaded, moduleRequireAsyncOnLoaded);
|
||||||
eventUnsubscribe(&entry->onError, moduleRequireAsyncOnError);
|
eventUnsubscribe(&entry->onError, moduleRequireAsyncOnError);
|
||||||
|
|
||||||
jerry_value_t exports = jerry_value_is_undefined(entry->data.script.exports)
|
jerry_value_t exports = (
|
||||||
? jerry_undefined()
|
jerry_value_is_undefined(entry->data.script.exports) ?
|
||||||
: jerry_value_copy(entry->data.script.exports);
|
jerry_undefined() :
|
||||||
|
jerry_value_copy(entry->data.script.exports)
|
||||||
|
);
|
||||||
|
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
while(i < MODULE_REQUIRE_ASYNC_PENDING_COUNT) {
|
while(i < MODULE_REQUIRE_ASYNC_PENDING_COUNT) {
|
||||||
if(MODULE_REQUIRE_ASYNC_PENDING[i].entry != entry) { i++; continue; }
|
if(MODULE_REQUIRE_ASYNC_PENDING[i].entry != entry) {
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
assetUnlockEntry(entry);
|
assetUnlockEntry(entry);
|
||||||
|
|
||||||
jerry_value_t copy = jerry_value_copy(exports);
|
jerry_value_t copy = jerry_value_copy(exports);
|
||||||
jerry_value_t ret = jerry_promise_resolve(MODULE_REQUIRE_ASYNC_PENDING[i].promise, copy);
|
jerry_value_t ret = jerry_promise_resolve(
|
||||||
|
MODULE_REQUIRE_ASYNC_PENDING[i].promise, copy
|
||||||
|
);
|
||||||
jerry_value_free(ret);
|
jerry_value_free(ret);
|
||||||
jerry_value_free(copy);
|
jerry_value_free(copy);
|
||||||
jerry_value_free(MODULE_REQUIRE_ASYNC_PENDING[i].promise);
|
jerry_value_free(MODULE_REQUIRE_ASYNC_PENDING[i].promise);
|
||||||
|
|
||||||
MODULE_REQUIRE_ASYNC_PENDING_COUNT--;
|
MODULE_REQUIRE_ASYNC_PENDING_COUNT--;
|
||||||
|
|
||||||
if(i < MODULE_REQUIRE_ASYNC_PENDING_COUNT) {
|
if(i < MODULE_REQUIRE_ASYNC_PENDING_COUNT) {
|
||||||
MODULE_REQUIRE_ASYNC_PENDING[i] = MODULE_REQUIRE_ASYNC_PENDING[MODULE_REQUIRE_ASYNC_PENDING_COUNT];
|
MODULE_REQUIRE_ASYNC_PENDING[i] = (
|
||||||
|
MODULE_REQUIRE_ASYNC_PENDING[MODULE_REQUIRE_ASYNC_PENDING_COUNT]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
jerry_value_free(exports);
|
jerry_value_free(exports);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void moduleRequireAsyncOnError(void *params, void *user) {
|
void moduleRequireAsyncOnError(void *params, void *user) {
|
||||||
assetentry_t *entry = (assetentry_t *)params;
|
assetentry_t *entry = (assetentry_t *)params;
|
||||||
(void)user;
|
|
||||||
|
|
||||||
eventUnsubscribe(&entry->onLoaded, moduleRequireAsyncOnLoaded);
|
eventUnsubscribe(&entry->onLoaded, moduleRequireAsyncOnLoaded);
|
||||||
eventUnsubscribe(&entry->onError, moduleRequireAsyncOnError);
|
eventUnsubscribe(&entry->onError, moduleRequireAsyncOnError);
|
||||||
@@ -66,14 +68,20 @@ static void moduleRequireAsyncOnError(void *params, void *user) {
|
|||||||
while(i < MODULE_REQUIRE_ASYNC_PENDING_COUNT) {
|
while(i < MODULE_REQUIRE_ASYNC_PENDING_COUNT) {
|
||||||
if(MODULE_REQUIRE_ASYNC_PENDING[i].entry != entry) { i++; continue; }
|
if(MODULE_REQUIRE_ASYNC_PENDING[i].entry != entry) { i++; continue; }
|
||||||
assetUnlockEntry(entry);
|
assetUnlockEntry(entry);
|
||||||
|
|
||||||
jerry_value_t copy = jerry_value_copy(errStr);
|
jerry_value_t copy = jerry_value_copy(errStr);
|
||||||
jerry_value_t ret = jerry_promise_reject(MODULE_REQUIRE_ASYNC_PENDING[i].promise, copy);
|
jerry_value_t ret = jerry_promise_reject(
|
||||||
|
MODULE_REQUIRE_ASYNC_PENDING[i].promise, copy
|
||||||
|
);
|
||||||
jerry_value_free(ret);
|
jerry_value_free(ret);
|
||||||
jerry_value_free(copy);
|
jerry_value_free(copy);
|
||||||
jerry_value_free(MODULE_REQUIRE_ASYNC_PENDING[i].promise);
|
jerry_value_free(MODULE_REQUIRE_ASYNC_PENDING[i].promise);
|
||||||
MODULE_REQUIRE_ASYNC_PENDING_COUNT--;
|
MODULE_REQUIRE_ASYNC_PENDING_COUNT--;
|
||||||
|
|
||||||
if(i < MODULE_REQUIRE_ASYNC_PENDING_COUNT) {
|
if(i < MODULE_REQUIRE_ASYNC_PENDING_COUNT) {
|
||||||
MODULE_REQUIRE_ASYNC_PENDING[i] = MODULE_REQUIRE_ASYNC_PENDING[MODULE_REQUIRE_ASYNC_PENDING_COUNT];
|
MODULE_REQUIRE_ASYNC_PENDING[i] = (
|
||||||
|
MODULE_REQUIRE_ASYNC_PENDING[MODULE_REQUIRE_ASYNC_PENDING_COUNT]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,9 +155,11 @@ jerry_value_t moduleRequireAsyncFunc(
|
|||||||
|
|
||||||
// Already loaded — resolve immediately.
|
// Already loaded — resolve immediately.
|
||||||
if(entry->state == ASSET_ENTRY_STATE_LOADED) {
|
if(entry->state == ASSET_ENTRY_STATE_LOADED) {
|
||||||
jerry_value_t exports = jerry_value_is_undefined(entry->data.script.exports)
|
jerry_value_t exports = (
|
||||||
? jerry_undefined()
|
jerry_value_is_undefined(entry->data.script.exports) ?
|
||||||
: jerry_value_copy(entry->data.script.exports);
|
jerry_undefined() :
|
||||||
|
jerry_value_copy(entry->data.script.exports)
|
||||||
|
);
|
||||||
assetUnlockEntry(entry);
|
assetUnlockEntry(entry);
|
||||||
jerry_value_t ret = jerry_promise_resolve(promise, exports);
|
jerry_value_t ret = jerry_promise_resolve(promise, exports);
|
||||||
jerry_value_free(ret);
|
jerry_value_free(ret);
|
||||||
@@ -170,8 +180,12 @@ jerry_value_t moduleRequireAsyncFunc(
|
|||||||
// Subscribe to entry events only if this is the first pending await for it.
|
// Subscribe to entry events only if this is the first pending await for it.
|
||||||
bool_t subscribed = false;
|
bool_t subscribed = false;
|
||||||
for(uint32_t i = 0; i < MODULE_REQUIRE_ASYNC_PENDING_COUNT; i++) {
|
for(uint32_t i = 0; i < MODULE_REQUIRE_ASYNC_PENDING_COUNT; i++) {
|
||||||
if(MODULE_REQUIRE_ASYNC_PENDING[i].entry == entry) { subscribed = true; break; }
|
if(MODULE_REQUIRE_ASYNC_PENDING[i].entry == entry) {
|
||||||
|
subscribed = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!subscribed) {
|
if(!subscribed) {
|
||||||
if(entry->onLoaded.count >= entry->onLoaded.size) {
|
if(entry->onLoaded.count >= entry->onLoaded.size) {
|
||||||
assetUnlockEntry(entry);
|
assetUnlockEntry(entry);
|
||||||
@@ -187,8 +201,12 @@ jerry_value_t moduleRequireAsyncFunc(
|
|||||||
eventSubscribe(&entry->onError, moduleRequireAsyncOnError, NULL);
|
eventSubscribe(&entry->onError, moduleRequireAsyncOnError, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
MODULE_REQUIRE_ASYNC_PENDING[MODULE_REQUIRE_ASYNC_PENDING_COUNT].entry = entry;
|
MODULE_REQUIRE_ASYNC_PENDING[MODULE_REQUIRE_ASYNC_PENDING_COUNT].entry = (
|
||||||
MODULE_REQUIRE_ASYNC_PENDING[MODULE_REQUIRE_ASYNC_PENDING_COUNT].promise = jerry_value_copy(promise);
|
entry
|
||||||
|
);
|
||||||
|
MODULE_REQUIRE_ASYNC_PENDING[MODULE_REQUIRE_ASYNC_PENDING_COUNT].promise = (
|
||||||
|
jerry_value_copy(promise)
|
||||||
|
);
|
||||||
MODULE_REQUIRE_ASYNC_PENDING_COUNT++;
|
MODULE_REQUIRE_ASYNC_PENDING_COUNT++;
|
||||||
return promise;
|
return promise;
|
||||||
}
|
}
|
||||||
@@ -204,7 +222,10 @@ void moduleRequireDispose(void) {
|
|||||||
assetentry_t *entry = MODULE_REQUIRE_ASYNC_PENDING[i].entry;
|
assetentry_t *entry = MODULE_REQUIRE_ASYNC_PENDING[i].entry;
|
||||||
bool_t alreadyUnsub = false;
|
bool_t alreadyUnsub = false;
|
||||||
for(uint32_t j = 0; j < i; j++) {
|
for(uint32_t j = 0; j < i; j++) {
|
||||||
if(MODULE_REQUIRE_ASYNC_PENDING[j].entry == entry) { alreadyUnsub = true; break; }
|
if(MODULE_REQUIRE_ASYNC_PENDING[j].entry == entry) {
|
||||||
|
alreadyUnsub = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(!alreadyUnsub) {
|
if(!alreadyUnsub) {
|
||||||
eventUnsubscribe(&entry->onLoaded, moduleRequireAsyncOnLoaded);
|
eventUnsubscribe(&entry->onLoaded, moduleRequireAsyncOnLoaded);
|
||||||
|
|||||||
@@ -7,6 +7,64 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "script/module/modulebase.h"
|
#include "script/module/modulebase.h"
|
||||||
|
#include "asset/asset.h"
|
||||||
|
|
||||||
|
#define MODULE_REQUIRE_ASYNC_MAX 16
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
assetentry_t *entry;
|
||||||
|
jerry_value_t promise;
|
||||||
|
} modulerequireasyncpending_t;
|
||||||
|
|
||||||
|
extern modulerequireasyncpending_t MODULE_REQUIRE_ASYNC_PENDING[
|
||||||
|
MODULE_REQUIRE_ASYNC_MAX
|
||||||
|
];
|
||||||
|
|
||||||
|
extern uint32_t MODULE_REQUIRE_ASYNC_PENDING_COUNT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Success loaded callback for async module loading.
|
||||||
|
*
|
||||||
|
* @param params The asset entry that finished loading.
|
||||||
|
* @param user Unused.
|
||||||
|
*/
|
||||||
|
void moduleRequireAsyncOnLoaded(void *params, void *user);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error callback for when an async loaded module fails.
|
||||||
|
*
|
||||||
|
* @param params The asset entry that failed to load.
|
||||||
|
* @param user Unused.
|
||||||
|
*/
|
||||||
|
void moduleRequireAsyncOnError(void *params, void *user);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Synchronous require function exposed to scripts.
|
||||||
|
*
|
||||||
|
* @param callInfo JerryScript call info.
|
||||||
|
* @param args The arguments passed to the function.
|
||||||
|
* @param argc The number of arguments passed.
|
||||||
|
* @return The exports of the required module.
|
||||||
|
*/
|
||||||
|
jerry_value_t moduleRequireFunc(
|
||||||
|
const jerry_call_info_t *callInfo,
|
||||||
|
const jerry_value_t args[],
|
||||||
|
const jerry_length_t argc
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asynchronous require function exposed to scripts.
|
||||||
|
*
|
||||||
|
* @param callInfo JerryScript call info.
|
||||||
|
* @param args The arguments passed to the function.
|
||||||
|
* @param argc The number of arguments passed.
|
||||||
|
* @return A promise that resolves with the exports of the required module.
|
||||||
|
*/
|
||||||
|
jerry_value_t moduleRequireAsyncFunc(
|
||||||
|
const jerry_call_info_t *callInfo,
|
||||||
|
const jerry_value_t args[],
|
||||||
|
const jerry_length_t argc
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the require module.
|
* Initializes the require module.
|
||||||
|
|||||||
Reference in New Issue
Block a user