Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Shayne Fletcher
Glasgow Haskell Compiler
Commits
61caf48a
Commit
61caf48a
authored
Apr 30, 2007
by
Simon Marlow
Browse files
tidyup comments and fix a few warnings
parent
55a5d8d9
Changes
1
Hide whitespace changes
Inline
Side-by-side
rts/Interpreter.c
View file @
61caf48a
...
...
@@ -786,73 +786,82 @@ run_BCO:
{
int
arg1_brk_array
,
arg2_array_index
,
arg3_freeVars
;
StgArrWords
*
breakPoints
;
int
returning_from_break
;
/
*
are we resuming execution from a breakpoint?
**
if yes, then don't break this time around
*/
int
returning_from_break
;
/
/
are we resuming execution from a breakpoint?
//
if yes, then don't break this time around
StgClosure
*
ioAction
;
// the io action to run at a breakpoint
StgAP_STACK
*
new_aps
;
// a closure to save the top stack frame on the heap
int
i
;
int
size_words
;
arg1_brk_array
=
BCO_NEXT
;
/
* fir
st arg
ument
of break instruction
*/
arg2_array_index
=
BCO_NEXT
;
/
* seco
nd
d
arg
ument
of break instruction
*/
arg3_freeVars
=
BCO_NEXT
;
/
* thi
rd arg
ument
of break instruction
*/
arg1_brk_array
=
BCO_NEXT
;
/
/ 1
st arg of break instruction
arg2_array_index
=
BCO_NEXT
;
/
/ 2
nd arg of break instruction
arg3_freeVars
=
BCO_NEXT
;
/
/ 3
rd arg of break instruction
// check if we are returning from a breakpoint - this info
is stored in
// the flags field of the current TSO
// check if we are returning from a breakpoint - this info
//
is stored in
the flags field of the current TSO
returning_from_break
=
cap
->
r
.
rCurrentTSO
->
flags
&
TSO_STOPPED_ON_BREAKPOINT
;
// if we are returning from a break then skip this section and continue executing
// if we are returning from a break then skip this section
// and continue executing
if
(
!
returning_from_break
)
{
breakPoints
=
(
StgArrWords
*
)
BCO_PTR
(
arg1_brk_array
);
// stop the current thread if either the "stop_next_breakpoint" flag is true
// OR if the breakpoint flag for this particular expression is true
if
(
stop_next_breakpoint
==
rtsTrue
||
breakPoints
->
payload
[
arg2_array_index
]
==
rtsTrue
)
// stop the current thread if either the
// "stop_next_breakpoint" flag is true OR if the
// breakpoint flag for this particular expression is
// true
if
(
stop_next_breakpoint
==
rtsTrue
||
breakPoints
->
payload
[
arg2_array_index
]
==
rtsTrue
)
{
stop_next_breakpoint
=
rtsFalse
;
// make sure we don't automatically stop at the next breakpoint
// allocate memory for a new AP_STACK, enough to store the top stack frame
// plus an stg_apply_interp_info pointer and a pointer to the BCO
// make sure we don't automatically stop at the
// next breakpoint
stop_next_breakpoint
=
rtsFalse
;
// allocate memory for a new AP_STACK, enough to
// store the top stack frame plus an
// stg_apply_interp_info pointer and a pointer to
// the BCO
size_words
=
BCO_BITMAP_SIZE
(
obj
)
+
2
;
new_aps
=
(
StgAP_STACK
*
)
allocate
(
AP_STACK_sizeW
(
size_words
));
SET_HDR
(
new_aps
,
&
stg_AP_STACK_info
,
CCS_SYSTEM
);
new_aps
->
size
=
size_words
;
// we should never enter new_aps->fun, so it is assigned to a dummy value
// ToDo: fixme to something that explodes with an error if you enter it
new_aps
->
fun
=
&
stg_dummy_ret_closure
;
// fill in the payload of the AP_STACK
new_aps
->
payload
[
0
]
=
(
W_
)
&
stg_apply_interp_info
;
new_aps
->
payload
[
1
]
=
(
W_
)
obj
;
new_aps
->
payload
[
0
]
=
(
StgClosure
*
)
&
stg_apply_interp_info
;
new_aps
->
payload
[
1
]
=
(
StgClosure
*
)
obj
;
// copy the contents of the top stack frame into the AP_STACK
for
(
i
=
2
;
i
<
size_words
;
i
++
)
{
new_aps
->
payload
[
i
]
=
(
W_
)
Sp
[
i
-
2
];
new_aps
->
payload
[
i
]
=
(
StgClosure
*
)
Sp
[
i
-
2
];
}
// prepare the stack so that we can call the breakPointIOAction
// and ensure that the stack is in a reasonable state for the GC
// and so that execution of this BCO can continue when we resume
// prepare the stack so that we can call the
// breakPointIOAction and ensure that the stack is
// in a reasonable state for the GC and so that
// execution of this BCO can continue when we resume
ioAction
=
(
StgClosure
*
)
deRefStablePtr
(
breakPointIOAction
);
Sp
-=
7
;
Sp
[
6
]
=
(
W_
)
obj
;
Sp
[
5
]
=
(
W_
)
&
stg_apply_interp_info
;
Sp
[
4
]
=
(
W_
)
new_aps
;
/
*
the AP_STACK
*/
Sp
[
3
]
=
(
W_
)
BCO_PTR
(
arg3_freeVars
);
/
*
the info about local vars of the breakpoint
*/
Sp
[
4
]
=
(
W_
)
new_aps
;
/
/
the AP_STACK
Sp
[
3
]
=
(
W_
)
BCO_PTR
(
arg3_freeVars
);
/
/
the info about local vars of the breakpoint
Sp
[
2
]
=
(
W_
)
&
stg_ap_ppv_info
;
Sp
[
1
]
=
(
W_
)
ioAction
;
/
*
apply the IO action to its two arguments above
*/
Sp
[
0
]
=
(
W_
)
&
stg_enter_info
;
/
*
get ready to run the IO action
*/
Sp
[
1
]
=
(
W_
)
ioAction
;
/
/
apply the IO action to its two arguments above
Sp
[
0
]
=
(
W_
)
&
stg_enter_info
;
/
/
get ready to run the IO action
// set the flag in the TSO to say that we are now stopping at a breakpoint
// so that when we resume we don't stop on the same breakpoint that we already
// stopped at just now
// set the flag in the TSO to say that we are now
// stopping at a breakpoint so that when we resume
// we don't stop on the same breakpoint that we
// already stopped at just now
cap
->
r
.
rCurrentTSO
->
flags
|=
TSO_STOPPED_ON_BREAKPOINT
;
// stop this thread and return to the scheduler - eventually we will come back
// and the IO action on the top of the stack will be executed
// stop this thread and return to the scheduler -
// eventually we will come back and the IO action on
// the top of the stack will be executed
RETURN_TO_SCHEDULER_NO_PAUSE
(
ThreadRunGHC
,
ThreadYielding
);
}
}
...
...
@@ -1381,7 +1390,7 @@ HsStablePtr rts_getApStackVal (HsStablePtr apStackSptr, int offset)
apStack
=
(
StgAP_STACK
*
)
deRefStablePtr
(
apStackSptr
);
payload
=
apStack
->
payload
;
val
=
(
StgClosure
*
)
payload
[
offset
+
2
];
resultSptr
=
getStablePtr
(
val
);
resultSptr
=
getStablePtr
(
(
P_
)
val
);
return
resultSptr
;
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment