in src/React.Core/ReactEnvironment.cs [391:441]
public virtual T ExecuteWithBabel<T>(string function, params object[] args)
{
var engine = _engineFactory.GetEngineForCurrentThread();
EnsureBabelLoaded(engine);
#if NET40 || NET45 || NETSTANDARD2_0
try
{
return engine.CallFunctionReturningJson<T>(function, args);
}
catch (Exception)
{
// Assume the exception MAY be an "out of stack space" error. Try running the code
// in a different thread with larger stack. If the same exception occurs, we know
// it wasn't a stack space issue.
T result = default(T);
Exception innerEx = null;
var thread = new Thread(() =>
{
// New engine will be created here (as this is a new thread)
var threadEngine = _engineFactory.GetEngineForCurrentThread();
EnsureBabelLoaded(threadEngine);
try
{
result = threadEngine.CallFunctionReturningJson<T>(function, args);
}
catch (Exception threadEx)
{
// Unhandled exceptions in threads kill the whole process.
// Pass the exception back to the parent thread to rethrow.
innerEx = threadEx;
}
finally
{
_engineFactory.DisposeEngineForCurrentThread();
}
}, LARGE_STACK_SIZE);
thread.Start();
thread.Join();
// Rethrow any exceptions that occured in the thread
if (innerEx != null)
{
throw innerEx;
}
return result;
}
#else
return engine.CallFunctionReturningJson<T>(function, args);
#endif
}