fixed 2 bugs

This commit is contained in:
IonutParau 2026-02-05 11:44:24 +01:00
parent e5095f4624
commit 4a2a60990b
2 changed files with 30 additions and 5 deletions

View File

@ -27,6 +27,24 @@ static nn_Exit sandbox_handler(nn_ComponentRequest *req) {
return NN_OK; return NN_OK;
} }
static nn_Exit sandbox_arch(nn_ArchitectureRequest *req) {
nn_Computer *c = req->computer;
switch(req->action) {
case NN_ARCH_INIT:
return NN_OK;
case NN_ARCH_DEINIT:
return NN_OK;
case NN_ARCH_FREEMEM:
req->freeMemory = 0;
return NN_OK;
case NN_ARCH_TICK:
nn_pushstring(c, "Hello from component call");
nn_call(c, "sandbox", "log");
return NN_OK;
}
return NN_OK;
}
int main() { int main() {
nn_Context ctx; nn_Context ctx;
nn_initContext(&ctx); nn_initContext(&ctx);
@ -34,6 +52,12 @@ int main() {
// create the universe // create the universe
nn_Universe *u = nn_createUniverse(&ctx); nn_Universe *u = nn_createUniverse(&ctx);
nn_Architecture arch = {
.name = "Sandbox test",
.state = NULL,
.handler = sandbox_arch,
};
nn_ComponentMethod sandboxMethods[] = { nn_ComponentMethod sandboxMethods[] = {
{"log", "log(msg: string) - Log to stdout", true}, {"log", "log(msg: string) - Log to stdout", true},
{NULL}, {NULL},
@ -42,10 +66,9 @@ int main() {
nn_Computer *c = nn_createComputer(u, NULL, "computer0", 8 * NN_MiB, 256, 256); nn_Computer *c = nn_createComputer(u, NULL, "computer0", 8 * NN_MiB, 256, 256);
nn_addComponent(c, ctype, "sandbox", -1, NULL); nn_setArchitecture(c, &arch);
nn_pushstring(c, "Hello from component call"); nn_addComponent(c, ctype, "sandbox", -1, NULL);
nn_call(c, "sandbox", "log");
printf("Component added: %s\n", nn_hasComponent(c, "sandbox") ? "TRUE" : "FALSE"); printf("Component added: %s\n", nn_hasComponent(c, "sandbox") ? "TRUE" : "FALSE");
printf("Method active: %s\n", nn_hasMethod(c, "sandbox", "log") ? "TRUE" : "FALSE"); printf("Method active: %s\n", nn_hasMethod(c, "sandbox", "log") ? "TRUE" : "FALSE");

View File

@ -826,7 +826,7 @@ nn_Exit nn_addComponent(nn_Computer *computer, nn_ComponentType *ctype, const ch
computer->components[computer->componentLen++] = c; computer->components[computer->componentLen++] = c;
if(computer->state != NN_BOOTUP) { if(computer->state == NN_RUNNING) {
err = nn_pushstring(computer, "component_added"); err = nn_pushstring(computer, "component_added");
if(err) return err; if(err) return err;
err = nn_pushstring(computer, address); err = nn_pushstring(computer, address);
@ -913,7 +913,7 @@ nn_Exit nn_removeComponent(nn_Computer *computer, const char *address) {
if(c.address == NULL) return NN_EBADSTATE; if(c.address == NULL) return NN_EBADSTATE;
nn_dropComponent(computer, c); nn_dropComponent(computer, c);
if(computer->state != NN_BOOTUP) { if(computer->state == NN_RUNNING) {
nn_Exit err = nn_pushstring(computer, "component_removed"); nn_Exit err = nn_pushstring(computer, "component_removed");
if(err) return err; if(err) return err;
err = nn_pushstring(computer, address); err = nn_pushstring(computer, address);
@ -1254,7 +1254,9 @@ size_t nn_countSignals(nn_Computer *computer) {
} }
nn_Exit nn_pushSignal(nn_Computer *computer, size_t valueCount) { nn_Exit nn_pushSignal(nn_Computer *computer, size_t valueCount) {
if(computer->state != NN_RUNNING) return nn_popn(computer, valueCount);
if(computer->signalCount == NN_MAX_SIGNALS) return NN_ELIMIT; if(computer->signalCount == NN_MAX_SIGNALS) return NN_ELIMIT;
if(computer->stackSize < valueCount) return NN_EBELOWSTACK;
int cost = nn_countValueCost(computer, valueCount); int cost = nn_countValueCost(computer, valueCount);
if(cost == -1) return NN_EBADSTATE; if(cost == -1) return NN_EBADSTATE;