1:- module(scasp_source_reference,
2 [ scasp_source_reference_file_line/3, 3 assert_scasp_source_reference/3, 4 scasp_source_reference/3, 5 scasp_dynamic_clause_position/2 6 ]).
12scasp_source_reference_file_line(Ref, File, Line) :-
13 blob(Ref, clause),
14 !,
15 ( clause_file_line(Ref, File, Line)
16 -> true
17 ; File = none, Line = 0
18 ).
19scasp_source_reference_file_line(Ref, File, Line) :-
20 scasp_source_reference(Ref, File, Pos),
21 !,
22 ( File == (-)
23 -> Line = Pos
24 ; stream_position_data(line_count, Pos, Line)
25 ).
26
27clause_file_line(ClauseRef, dynamic, Line) :-
28 scasp_dynamic_clause_position(ClauseRef, Pos),
29 !,
30 stream_position_data(line_count, Pos, Line).
31clause_file_line(ClauseRef, File, Line) :-
32 clause_property(ClauseRef, file(File)),
33 clause_property(ClauseRef, line_count(Line)).
34
35:- dynamic scasp_source_reference/3. 36
37assert_scasp_source_reference(File, Pos, Ref) :-
38 scasp_source_reference(Ref, File, Pos), !.
39assert_scasp_source_reference(File, Pos, Ref) :-
40 ( scasp_source_reference(Ref0, _, _)
41 -> Ref is Ref0 + 1
42 ; Ref is 1
43 ),
44 asserta(scasp_source_reference(Ref, File, Pos)).
52:- thread_local scasp_dynamic_clause_position/2.
s(CASP)
source references*/