I got JSAL almost 100% functional, I can push and pop values, execute JS code (even ES6 stuff like arrow functions!), call JS functions, define native calls, etc. Once I finish working all the kinks out I'll replace all the Duktape calls with their JSAL equivalents and see if everything blows up in my face
static intjs_foo(int num_args, bool is_ctor){ const char* str; int num; printf("foo() called with %d args\n", num_args); str = jsal_require_string(1); num = jsal_require_int(2); printf("%s %d\n", str, num); return 0;}
jsal_init();jsal_push_global_object();jsal_push_function(js_foo, "foo", 0);jsal_set_named_property(-2, "foo");jsal_pop(1);jsal_push_eval("foo('pigs!', '812');");jsal_uninit();
foo() called with 2 argsJSAL exception thrown from unguarded C code!-> TypeError: '812' is not a number
One feature of Duktape that I can't figure out how to replicate is being able to store "hidden" properties on an object which can be accessed from native code but not in JS. I've seen a few mentions of "internal properties" in the CC documentation, but haven't found any APIs to work with them...
After spending pretty much all day working on it, I'm so close to having Cell working with CC I can feel it. There are a few weird errors being thrown that make no sense, I suspect my stack handling in JSAL is buggy. For example `require()` fails with an error "can't set __esModule on undefined or null". But the fact I got that far means it successfully gets through parsing the Cellscript and is trying to run it. This is awesome!
C:\src\spectacles-i>cell -rdCell X.X.X Sphere packaging compiler (x64)the JavaScript-powered build engine for Sphere(c) 2015-2017 Fat Cerberussetting up Cellscript environment...evaluating 'Cellscript.mjs'... W: no existing files match 'lib/*.js'building targets... transpiling '@/scripts/battleAI/headlessHorse.js'... transpiling '@/scripts/battleAI/robertII-2.js'... transpiling '@/scripts/battleAI/robertII.js'... transpiling '@/scripts/battleEngine/battle.js'... transpiling '@/scripts/battleEngine/battleActor.js'... transpiling '@/scripts/battleEngine/battleAI.js'... transpiling '@/scripts/battleEngine/battleHUD.js'... transpiling '@/scripts/battleEngine/battleScreen.js'... transpiling '@/scripts/battleEngine/battleUnit.js'... transpiling '@/scripts/battleEngine/fieldCondition.js'... transpiling '@/scripts/battleEngine/item.js'... transpiling '@/scripts/battleEngine/moveMenu.js'... transpiling '@/scripts/battleEngine/mpPool.js'... transpiling '@/scripts/battleEngine/skill.js'... transpiling '@/scripts/battleEngine/spriteImage.js'... transpiling '@/scripts/battleEngine/stat.js'... transpiling '@/scripts/battleEngine/statusEffect.js'... transpiling '@/scripts/battleEngine/targetMenu.js'... transpiling '@/scripts/battleEngine/weapon.js'... transpiling '@/scripts/gameDef/animations.js'... transpiling '@/scripts/gameDef/battles.js'... transpiling '@/scripts/gameDef/characters.js'... transpiling '@/scripts/gameDef/conditions.js'... transpiling '@/scripts/gameDef/game.js'... transpiling '@/scripts/gameDef/items.js'... transpiling '@/scripts/gameDef/maps.js'... transpiling '@/scripts/gameDef/math.js'... transpiling '@/scripts/gameDef/moveEffects.js'... transpiling '@/scripts/gameDef/skills.js'... transpiling '@/scripts/gameDef/stats.js'... transpiling '@/scripts/gameDef/statuses.js'... transpiling '@/scripts/gameDef/weapons.js'... transpiling '@/scripts/gameOverScreen.js'... transpiling '@/scripts/main.js'... transpiling '@/scripts/maps/main.js'... transpiling '@/scripts/maps/Portentia.js'... transpiling '@/scripts/maps/Testville.js'... transpiling '@/scripts/menuStrip.js'... transpiling '@/scripts/party.js'... transpiling '@/scripts/scenelets.js'... transpiling '@/scripts/session.js'... transpiling '@/scripts/testCases/brucesStory.js'... transpiling '@/scripts/testHarness.js'... transpiling '@/scripts/titleScreen.js'... transpiling '@/scripts/battleEngine/ui.js'... transpiling '@/scripts/inGameClock.js'... installing '@/images/battleBackground.png'... installing '@/images/gameOverScreen.png'... installing '@/images/splashScreen.png'... installing '@/images/titleCard.png'... installing '@/images/titleScreen.png'... installing '@/maps/main.rmp'... installing '@/maps/Portentia.rmp'... installing '@/maps/Testville.rmp'... installing '@/maps/Portentia.rts'... installing '@/maps/TestvilleTiles.rts'... installing '@/music/basicInstinct.ogg'... installing '@/music/gameOver.ogg'... installing '@/music/manorBoss.ogg'... installing '@/music/nightmareBattle.ogg'... installing '@/music/thePromise.ogg'... installing '@/music/chartreuse.mp3'... installing '@/spritesets/battlers/Amanda.rss'... installing '@/spritesets/battlers/Bruce.rss'... installing '@/spritesets/battlers/Elysia.rss'... installing '@/spritesets/battlers/H. Horse.rss'... installing '@/spritesets/battlers/Justin.rss'... installing '@/spritesets/battlers/Katelyn.rss'... installing '@/spritesets/battlers/Lauren.rss'... installing '@/spritesets/battlers/Lumisquirrel.rss'... installing '@/spritesets/battlers/maggie.rss'... installing '@/spritesets/battlers/maggie_hippo.rss'... installing '@/spritesets/battlers/Robert.rss'... installing '@/spritesets/battlers/Scott T.rss'... installing '@/spritesets/battlers/Scott.rss'... installing '@/spritesets/battlers/Victor.rss'... installing '@/spritesets/battlers/Xemnas.rss'... installing '@/spritesets/invisible.rss'... installing '@/sounds/munch.wav'... installing '@/icon.png'...cleaning up old build artifacts...writing Sphere manifest files...writing source map...0 error(s), 1 warning(s).