// Phase 1 step 1.14 (PLAN-FFI.md): `#objc_call` inside an
// `inline if OS == .ios { ... }` arm cross-compiles cleanly to
// Android. The comptime gate must strip the arm BEFORE the
// `objc_msg_send` lowering runs, otherwise emit_llvm would
// produce calls to `@objc_msgSend` / `@sel_registerName` that
// don't exist in Bionic + libGLESv3 / linker would fail.
//
// On macOS the iOS arm is also stripped (we're not iOS) so the
// runtime test just prints "host stripped both", proving the
// `inline if OS == { case }` form works around `#objc_call`
// sites the same way it does elsewhere.

#import "modules/std.sx";
#import "modules/compiler.sx";

// Empty stub class — Android cross-compile requires a `#jni_main`
// declaration to satisfy the entry-point check. This file is testing
// `inline if OS` gating around `#objc_call`, not Activity wiring.
SxObjcOsGateStub :: #jni_main #jni_class("co/swipelab/sxobjcosgate/SxObjcOsGateStub") { }

main :: () -> s32 {
    inline if OS == {
        case .ios: {
            // Stripped on macOS + Android. Compiled on iOS / ios-sim.
            #objc_call(void)(null, "init");
            print("ios path\n");
        }
        case .android: {
            // Stripped on macOS + iOS. Compiled on Android.
            // Nothing #objc_call-shaped here — just text — so we
            // exercise the gate symmetrically across targets.
            print("android path\n");
        }
        else: {
            print("host stripped both\n");
        }
    }
    0;
}
