Skip to content

Commit

Permalink
Fix js_toplevel weirdness
Browse files Browse the repository at this point in the history
  • Loading branch information
guregu committed Sep 27, 2022
1 parent c1bc806 commit 8d69193
Showing 1 changed file with 15 additions and 20 deletions.
35 changes: 15 additions & 20 deletions library/js_toplevel.pl
Original file line number Diff line number Diff line change
Expand Up @@ -31,48 +31,43 @@
flush_output
)
),
query(Query, Vars, Status, Solution),
write_result(Status, Solution),
catch(
query(Query, Status),
Error,
Status = error
),
write_result(Status, Vars, Error),
flush_output.

write_result(success, Solution0) :-
write_result(success, Solution0, _) :-
solution_json(Solution0, Solution),
once(phrase(json_chars(pairs([
string("result")-string("success"),
string("answer")-Solution
])), JSON)),
maplist(write, JSON), nl.

write_result(failure, _) :-
write_result(failure, _, _) :-
once(phrase(json_chars(pairs([
string("result")-string("failure")
])), JSON)),
maplist(write, JSON), nl.

write_result(error, Error0) :-
write_result(error, _, Error0) :-
term_json(Error0, Error),
once(phrase(json_chars(pairs([
string("result")-string("error"),
string("error")-Error
])), JSON)),
maplist(write, JSON), nl.

query(Query, Vars, Status, Solution) :-
write('\x2\'),
( catch(call(Query), Error, true)
*-> OK = true
; OK = false
query(Query, Status) :-
write('\x2\'), % START OF TEXT
( call(Query)
*-> Status = success
; Status = failure
),
write('\x3\'), % END OF TEXT
query_status(OK, Error, Status),
( nonvar(Error)
-> Solution = Error
; Solution = Vars
).

query_status(_OK, Error, error) :- nonvar(Error), !.
query_status(true, _, success).
query_status(false, _, failure).
write('\x3\'). % END OF TEXT

solution_json(Vars0, pairs(Vars)) :- maplist(var_json, Vars0, Vars).

Expand Down

0 comments on commit 8d69193

Please sign in to comment.