blob: e4829321933e6609a3ed090220ead2ede7b0f7b0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
/* -----------------------------------------------------------------------------
*
* (c) The GHC Team, 2005
*
* RTS entry points as mandated by the FFI section of the Haskell report
*
* ---------------------------------------------------------------------------*/
#include "PosixSource.h"
#include "HsFFI.h"
#include "Rts.h"
#include "StablePtr.h"
#include "Task.h"
// hs_init and hs_exit are defined in RtsStartup.c
void
hs_set_argv(int argc, char *argv[])
{
setProgArgv(argc,argv);
}
void
hs_perform_gc(void)
{
/* Hmmm, the FFI spec is a bit vague, but it seems to imply a major GC... */
performMajorGC();
}
// Lock the stable pointer table
void hs_lock_stable_ptr_table (void)
{
stablePtrLock();
}
// Deprecated version of hs_lock_stable_ptr_table
void hs_lock_stable_tables (void)
{
stablePtrLock();
}
// Unlock the stable pointer table
void hs_unlock_stable_ptr_table (void)
{
stablePtrUnlock();
}
// Deprecated version of hs_unlock_stable_ptr_table
void hs_unlock_stable_tables (void)
{
stablePtrUnlock();
}
void
hs_free_stable_ptr(HsStablePtr sp)
{
/* The cast is for clarity only, both HsStablePtr and StgStablePtr are
typedefs for void*. */
freeStablePtr((StgStablePtr)sp);
}
void
hs_free_stable_ptr_unsafe(HsStablePtr sp)
{
/* The cast is for clarity only, both HsStablePtr and StgStablePtr are
typedefs for void*. */
freeStablePtrUnsafe((StgStablePtr)sp);
}
void
hs_free_fun_ptr(HsFunPtr fp)
{
/* I simply *love* all these similar names... */
freeHaskellFunctionPtr(fp);
}
void
hs_thread_done(void)
{
freeMyTask();
}
|