Skip to content

Commit b8e132b

Browse files
authored
Implement @@Getinstance@@ (#206)
1 parent 0198919 commit b8e132b

1 file changed

Lines changed: 18 additions & 0 deletions

File tree

src/vm_builtins.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11884,6 +11884,23 @@ static RValue builtin_CopyStatic(VMContext* ctx, RValue* args, int32_t argCount)
1188411884
VM_copyStatic(ctx, &args[0]);
1188511885
return RValue_makeUndefined();
1188611886
}
11887+
11888+
// @@GetInstance@@(target) - takes an object index and returns the first active instance's ID.
11889+
static RValue builtin_GetInstance(VMContext* ctx, RValue* args, int32_t argCount) {
11890+
if (1 > argCount) return RValue_makeInt32(INSTANCE_NOONE);
11891+
11892+
Runner* runner = ctx->runner;
11893+
int32_t target = RValue_toInt32(args[0]);
11894+
11895+
if (target >= 0 && (uint32_t) target < ctx->dataWin->objt.count) {
11896+
Instance** bucket = runner->instancesByObject[target];
11897+
int32_t bucketCount = (int32_t) arrlen(bucket);
11898+
for (int32_t i = 0; bucketCount > i; i++) {
11899+
if (bucket[i]->active) return RValue_makeInt32((int32_t) bucket[i]->instanceId);
11900+
}
11901+
}
11902+
return RValue_makeInt32(INSTANCE_NOONE);
11903+
}
1188711904
#endif
1188811905

1188911906
// ===[ PATH FUNCTIONS ]===
@@ -14084,6 +14101,7 @@ void VMBuiltins_registerAll(VMContext* ctx) {
1408414101
VM_registerBuiltin(ctx, "@@NewGMLObject@@", builtin_NewGMLObject);
1408514102
VM_registerBuiltin(ctx, "@@CopyStatic@@", builtin_CopyStatic);
1408614103
VM_registerBuiltin(ctx, "@@SetStatic@@", builtin_SetStatic);
14104+
VM_registerBuiltin(ctx, "@@GetInstance@@", builtin_GetInstance);
1408714105
#endif
1408814106

1408914107
// Path

0 commit comments

Comments
 (0)