module js_to_cpp { // This struct encompasses all of the basic types, so that they // may be sent from C++ to JS and back for validation. struct EchoArgs { int64 si64; int32 si32; int16 si16; int8 si8; uint64 ui64; uint32 ui32; uint16 ui16; uint8 ui8; float float_val; float float_inf; float float_nan; double double_val; double double_inf; double double_nan; string? name; string[]? string_array; handle? message_handle; handle? data_handle; }; struct EchoArgsList { EchoArgsList? next; EchoArgs? item; }; // Note: For messages which control test flow, pick numbers that are unlikely // to be hit as a result of our deliberate corruption of response messages. interface CppSide { // Sent for all tests to notify that the JS side is now ready. StartTest@88888888(); // Indicates end for echo, bit-flip, and back-pointer tests. TestFinished@99999999(); // Responses from specific tests. PingResponse(); EchoResponse(EchoArgsList list); BitFlipResponse(EchoArgsList arg); BackPointerResponse(EchoArgsList arg); }; [Client=CppSide] interface JsSide { Ping(); Echo(int32 numIterations, EchoArgs arg); BitFlip(EchoArgs arg); BackPointer(EchoArgs arg); }; }