#include "Cmm.h"

stg_cloneMyStackzh () {
    gcptr stgStack;
    gcptr clonedStack;

    stgStack = StgTSO_stackobj(CurrentTSO);
    StgStack_sp(stgStack) = Sp;

    ("ptr" clonedStack) = ccall cloneStack(MyCapability() "ptr", stgStack "ptr");

    return (clonedStack);
}

stg_sendCloneStackMessagezh (gcptr threadId, gcptr mVarStablePtr) {
    ccall sendCloneStackMessage(threadId "ptr", mVarStablePtr "ptr");

    return ();
}

stg_decodeStackzh (gcptr stgStack) {
    gcptr stackEntries;
    ("ptr" stackEntries) = ccall decodeClonedStack(MyCapability() "ptr", stgStack "ptr");

    return (stackEntries);
}