aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2011-06-03 10:16:07 -0700
committerShawn O. Pearce <sop@google.com>2011-06-03 10:16:07 -0700
commit894e99be8cf139c591ba66036e2c11a3e755642a (patch)
treeda8de3d8e74961fb1ac51f4f3d3a7112e981344e
parentcc644979af3c5fb79a1075c160b129470fb19052 (diff)
downloadprolog-cafe-894e99be8cf139c591ba66036e2c11a3e755642a.tar.gz
Remember import statements during consult/1
This allows the $meta_call logic to later try to use these imports to resolve a predicate in a different package than the definition of the predicate. Unfortunately this is a tricky thing to implement as Prolog Cafe relies on javac to resolve imported predicates.
-rw-r--r--src/builtin/builtins.pl9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/builtin/builtins.pl b/src/builtin/builtins.pl
index 139529d..d97985c 100644
--- a/src/builtin/builtins.pl
+++ b/src/builtin/builtins.pl
@@ -1983,6 +1983,7 @@ synchronized(Object, Goal) :-
:- dynamic '$current_spypoint'/3.
:- dynamic '$leap_flag'/1.
:- dynamic '$consulted_file'/1.
+:- dynamic '$consulted_import'/2.
:- dynamic '$consulted_package'/1.
:- dynamic '$consulted_predicate'/3.
@@ -2083,6 +2084,7 @@ consult(File) :- atom(File), !, '$consult'(File).
'$consult_init'(File) :-
retractall('$consulted_file'(_)),
retractall('$consulted_package'(_)),
+ retractall('$consulted_import'(File, _)),
retract('$consulted_predicate'(P,PI,File)),
abolish(P:PI),
fail.
@@ -2093,14 +2095,13 @@ consult(File) :- atom(File), !, '$consult'(File).
'$consult_clause'(end_of_file ) :- !.
'$consult_clause'((:- module(P,_)) ) :- !, '$assert_consulted_package'(P).
'$consult_clause'((:- package P) ) :- !, '$assert_consulted_package'(P).
-'$consult_clause'((:- import _) ) :- !.
+'$consult_clause'((:- import P) ) :- !, '$assert_consulted_import'(P).
'$consult_clause'((:- dynamic _) ) :- !.
'$consult_clause'((:- public _) ) :- !.
'$consult_clause'((:- meta_predicate _)) :- !.
'$consult_clause'((:- mode _) ) :- !.
'$consult_clause'((:- multifile _) ) :- !.
'$consult_clause'((:- block _) ) :- !.
-%'$consult_clause'((:- G) ) :- !, clause('$consulted_package'(P), _), call(P:G).
'$consult_clause'((:- G) ) :- !, clause('$consulted_package'(P), _), once(P:G).
'$consult_clause'(Clause0) :-
'$consult_preprocess'(Clause0, Clause),
@@ -2113,6 +2114,10 @@ consult(File) :- atom(File), !, '$consult'(File).
retractall('$consulted_package'(_)),
assertz('$consulted_package'(P)).
+'$assert_consulted_import'(P) :-
+ clause('$consulted_file'(File), _),
+ assertz('$consulted_import'(File, P)).
+
'$consult_preprocess'(Clause0, Clause) :-
expand_term(Clause0, Clause).