++ typeableClassNames
++ [ -- Type constructors (synonyms especially)
ioTyConName, ioDataConName,
- runIOName,
+ runMainIOName,
orderingTyConName,
rationalTyConName,
ratioDataConName,
\begin{code}
-rootMainName = varQual rOOT_MAIN FSLIT("main") rootMainKey
-runIOName = varQual pREL_TOP_HANDLER FSLIT("runIO") runMainKey
+rootMainName = varQual rOOT_MAIN FSLIT("main") rootMainKey
+runMainIOName = varQual pREL_TOP_HANDLER FSLIT("runMainIO") runMainKey
orderingTyConName = tcQual pREL_BASE FSLIT("Ordering") orderingTyConKey
nlHsApp, nlHsVar, pprLHsBinds )
import RdrHsSyn ( findSplice )
-import PrelNames ( runIOName, rootMainName, mAIN,
+import PrelNames ( runMainIOName, rootMainName, mAIN,
main_RDR_Unqual )
import RdrName ( RdrName, mkRdrUnqual, emptyGlobalRdrEnv,
plusGlobalRdrEnv )
Nothing -> do { complain_no_main
; return tcg_env } ;
Just main_name -> do
- { let { rhs = nlHsApp (nlHsVar runIOName) (nlHsVar main_name) }
- -- :Main.main :: IO () = runIO main
+ { let { rhs = nlHsApp (nlHsVar runMainIOName) (nlHsVar main_name) }
+ -- :Main.main :: IO () = runMainIO main
; (main_expr, ty) <- setSrcSpan (srcLocSpan (getSrcLoc main_name)) $
tcInferRho rhs
/* start timing the shutdown */
stat_startExit();
-#if !defined(GRAN)
- /* Finalize any remaining weak pointers */
- finalizeWeakPointersNow();
-#endif
-
/* stop all running tasks */
exitScheduler();
StgWeak *weak_ptr_list;
/*
- * finalizeWeakPointersNow() is called just before the system is shut
- * down. It runs the finalizer for each weak pointer still in the
- * system.
- *
- * Careful here - rts_evalIO might cause a garbage collection, which
- * might change weak_ptr_list. Must re-load weak_ptr_list each time
- * around the loop.
- */
-
-void
-finalizeWeakPointersNow(void)
-{
- StgWeak *w;
-
- rts_lock();
- while ((w = weak_ptr_list)) {
- weak_ptr_list = w->link;
- if (w->header.info != &stg_DEAD_WEAK_info) {
- SET_HDR(w, &stg_DEAD_WEAK_info, w->header.prof.ccs);
- IF_DEBUG(weak,debugBelch("Finalising weak pointer at %p -> %p\n", w, w->key));
- if (w->finalizer != &stg_NO_FINALIZER_closure) {
- rts_evalLazyIO(w->finalizer,NULL);
- rts_unlock();
- rts_lock();
- }
- }
- }
- rts_unlock();
-}
-
-/*
* scheduleFinalizers() is called on the list of weak pointers found
* to be dead after a garbage collection. It overwrites each object
* with DEAD_WEAK, and creates a new thread to run the pending finalizers.
/* -----------------------------------------------------------------------------
*
- * (c) The GHC Team, 1998-2004
+ * (c) The GHC Team, 1998-2005
*
* Weak pointers / finalizers
*
#ifndef WEAK_H
#define WEAK_H
-void finalizeWeakPointersNow(void);
void scheduleFinalizers(StgWeak *w);
void markWeakList(void);