// Copyright 2016 The Emscripten Authors.  All rights reserved.
// Emscripten is available under two separate licenses, the MIT license and the
// University of Illinois/NCSA Open Source License.  Both these licenses can be
// found in the LICENSE file.

#include <stdio.h>
#include <string.h>
#include <emscripten.h>

void __attribute__((noinline)) InteropString(char *staticBuffer)
{
  char *string = (char*)EM_ASM_INT({
    var str = "hello, this is a string! ";
#if ONE_BIG_STRING
    // double it until it is bigger than the stack
    for (var i = 0; i < 15; ++i) {
      str = str + str;
    }
    allocate(intArrayFromString(str), ALLOC_STACK);
#else
    // allocate as many times as we need to overflow
    for (var i = 0; i < 1024 * 1024; i++) {
      allocate(intArrayFromString(str), ALLOC_STACK);
    }
    abort("we should never get here!");
#endif
  });
}

int main()
{
  // Make C side consume a large portion of the stack, before bumping the rest with C++<->JS interop.
  char staticBuffer[512288] = {};
  InteropString(staticBuffer);
  int stringLength = strlen(staticBuffer);
  printf("Got string: %s\n", staticBuffer);
  printf("Received a string of length %d.\n", stringLength);
}
