@@ -161,14 +161,14 @@ stackPushRestoreProgramPoint argCount = do
161161buildCallGraph :: StaticOrigin -> Id -> M ()
162162buildCallGraph so hoName = do
163163 progPoint <- gets ssCurrentProgramPoint
164- addInterClosureCallGraphEdge so progPoint $ PP_Closure hoName
165- setProgramPoint $ PP_Closure hoName
164+ addInterClosureCallGraphEdge so progPoint . PP_StgPoint . SP_RhsClosureExpr . binderToStgId $ unId hoName
165+ setProgramPoint $ PP_StgPoint . SP_RhsClosureExpr . binderToStgId $ unId hoName
166166 -- connect call sites to parent closure
167167 currentClosure <- gets ssCurrentClosure
168168 case progPoint of
169169 PP_Global -> pure ()
170170 _ -> case currentClosure of
171- Just cloId -> addIntraClosureCallGraphEdge (PP_Closure cloId) so progPoint
171+ Just cloId -> addIntraClosureCallGraphEdge (PP_StgPoint . SP_RhsClosureExpr . binderToStgId $ unId cloId) so progPoint
172172 _ -> pure ()
173173 -- write whole program path entry
174174 fuel <- gets ssDebugFuel
@@ -242,7 +242,7 @@ builtinStgEval so a@HeapPtr{} = do
242242 -- check breakpoints and region entering
243243 let closureName = binderUniqueName $ unId hoName
244244 markClosure closureName -- HINT: this list can be deleted by a debugger command, so this is not the same as `markExecutedId`
245- Debugger. checkBreakpoint . BkpStgPoint $ SP_RhsClosureExpr hoName
245+ Debugger. checkBreakpoint . BkpStgPoint . SP_RhsClosureExpr . binderToStgId . unId $ hoName
246246 Debugger. checkRegion closureName
247247 GC. checkGC [a] -- HINT: add local env as GC root
248248
@@ -521,18 +521,14 @@ evalStackContinuation result = \case
521521 _ -> error $ " expected a single value: " ++ show result
522522 extendedEnv = addBinderToEnv SO_Scrut resultBinder v localEnv
523523 con <- readHeapCon v
524- case getCutShowItem alts of
525- d@ (Alt AltDefault _ _) : al -> matchFirstCon resultId extendedEnv con $ al ++ [d]
526- _ -> matchFirstCon resultId extendedEnv con $ getCutShowItem alts
524+ matchFirstCon resultId extendedEnv con $ getCutShowItem alts
527525
528526 PrimAlt _r -> do
529527 let lit = case result of
530528 [l] -> l
531529 _ -> error $ " expected a single value: " ++ show result
532530 extendedEnv = addBinderToEnv SO_Scrut resultBinder lit localEnv
533- case getCutShowItem alts of
534- d@ (Alt AltDefault _ _) : al -> matchFirstLit resultId extendedEnv lit $ al ++ [d]
535- _ -> matchFirstLit resultId extendedEnv lit $ getCutShowItem alts
531+ matchFirstLit resultId extendedEnv lit $ getCutShowItem alts
536532
537533 MultiValAlt n -> do -- unboxed tuple
538534 -- NOTE: result binder is not assigned
@@ -545,7 +541,7 @@ evalStackContinuation result = \case
545541 -- unless (length altBinders == length result) $ do
546542 -- stgErrorM $ "evalStackContinuation - MultiValAlt - length mismatch: " ++ show (n, altBinders, result)
547543
548- setProgramPoint $ PP_Alt resultId altCon
544+ setProgramPoint . PP_StgPoint $ SP_AltExpr (binderToStgId resultBinder) 0
549545 evalExpr extendedEnv altRHS
550546
551547 PolyAlt -> do
@@ -558,7 +554,7 @@ evalStackContinuation result = \case
558554 unless (length altBinders == length result) $ do
559555 stgErrorM $ "evalStackContinuation - PolyAlt - length mismatch: " ++ show (altBinders, result)
560556 -}
561- setProgramPoint $ PP_Alt resultId altCon
557+ setProgramPoint . PP_StgPoint $ SP_AltExpr (binderToStgId resultBinder) 0
562558 evalExpr extendedEnv altRHS
563559
564560 s@ (RestoreExMask oldMask blockAsyncEx isInterruptible) -> do
@@ -709,7 +705,7 @@ evalExpr localEnv = \case
709705 Just curClosure <- gets ssCurrentClosure
710706 curClosureAddr <- gets ssCurrentClosureAddr
711707 stackPush (CaseOf curClosureAddr curClosure localEnv (Id scrutineeResult) (CutShow altType) $ CutShow alts)
712- setProgramPoint . PP_Scrutinee $ Id scrutineeResult
708+ setProgramPoint . PP_StgPoint . SP_CaseScrutineeExpr $ binderToStgId scrutineeResult
713709 evalExpr localEnv e
714710
715711 StgOpApp (StgPrimOp op) l t tc -> do
@@ -770,11 +766,16 @@ evalExpr localEnv = \case
770766
771767matchFirstLit :: HasCallStack => Id -> Env -> Atom -> [Alt ] -> M [Atom ]
772768matchFirstLit resultId localEnv a [Alt AltDefault _ rhs] = do
773- setProgramPoint $ PP_Alt resultIdAltDefault
769+ setProgramPoint . PP_StgPoint $ SP_AltExpr (binderToStgId $ unId resultId) 0
774770 evalExpr localEnv rhs
775- matchFirstLit resultId localEnv atom alts = case head $ [a | a@ Alt {.. } <- alts, matchLit atom altCon] ++ (error $ " no lit match" ++ show (resultId, atom, map altCon alts)) of
776- Alt {.. } -> do
777- setProgramPoint $ PP_Alt resultId altCon
771+ matchFirstLit resultId localEnv atom alts
772+ | indexedAlts <- zip [0 .. ] alts
773+ , indexedAltsWithDefault <- case indexedAlts of
774+ d@ (_, Alt AltDefault _ _) : xs -> xs ++ [d]
775+ xs -> xs
776+ = case head $ [a | a@ (_idx, Alt {.. }) <- indexedAltsWithDefault, matchLit atom altCon] ++ (error $ " no lit match" ++ show (resultId, atom, map altCon alts)) of
777+ (idx, Alt {.. }) -> do
778+ setProgramPoint . PP_StgPoint $ SP_AltExpr (binderToStgId $ unId resultId) idx
778779 evalExpr localEnv altRHS
779780
780781matchLit :: HasCallStack => Atom -> AltCon -> Bool
@@ -804,15 +805,20 @@ convertAltLit lit = case lit of
804805 l -> error $ " unsupported: " ++ show l
805806
806807matchFirstCon :: HasCallStack => Id -> Env -> HeapObject -> [Alt ] -> M [Atom ]
807- matchFirstCon resultId localEnv (Con _ (DC dc) args) alts = case [a | a@ Alt {.. } <- alts, matchCon dc altCon] of
808+ matchFirstCon resultId localEnv (Con _ (DC dc) args) alts
809+ | indexedAlts <- zip [0 .. ] alts
810+ , indexedAltsWithDefault <- case indexedAlts of
811+ d@ (_, Alt AltDefault _ _) : xs -> xs ++ [d]
812+ xs -> xs
813+ = case [a | a@ (_idx, Alt {.. }) <- indexedAltsWithDefault, matchCon dc altCon] of
808814 [] -> stgErrorM $ " no matching alts for: " ++ show resultId
809- Alt {.. } : _ -> do
815+ (idx, Alt {.. }) : _ -> do
810816 let extendedEnv = case altCon of
811817 AltDataCon {} -> addManyBindersToEnv SO_AltArg altBinders args localEnv
812818 _ -> localEnv
813819 -- unless (length altBinders == length args) $ do
814820 -- stgErrorM $ "matchFirstCon length mismatch: " ++ show (DC dc, altBinders, args, resultId)
815- setProgramPoint $ PP_Alt resultId altCon
821+ setProgramPoint . PP_StgPoint $ SP_AltExpr (binderToStgId $ unId resultId) idx
816822 evalExpr extendedEnv altRHS
817823
818824matchCon :: HasCallStack => DataCon -> AltCon -> Bool
0 commit comments