diff options
author | Shawn O. Pearce <sop@google.com> | 2011-06-03 10:16:07 -0700 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2011-06-03 10:16:07 -0700 |
commit | 894e99be8cf139c591ba66036e2c11a3e755642a (patch) | |
tree | da8de3d8e74961fb1ac51f4f3d3a7112e981344e | |
parent | cc644979af3c5fb79a1075c160b129470fb19052 (diff) | |
download | prolog-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.pl | 9 |
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). |