Changeset 4412 for trunk/compiler
- Timestamp:
- 07/31/08 02:54:42 (5 months ago)
- Files:
-
- 1 modified
-
trunk/compiler/logtalk.pl (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/compiler/logtalk.pl
r4411 r4412 201 201 :- dynamic('$lgt_pp_uses_'/1). % '$lgt_pp_uses_'(Obj) 202 202 :- dynamic('$lgt_pp_uses_'/3). % '$lgt_pp_uses_'(Obj, Predicate, Alias) 203 :- dynamic('$lgt_pp_use_module_'/3). % '$lgt_pp_use_module_'(Module, Predicate, Alias) 203 204 :- dynamic('$lgt_pp_calls_'/1). % '$lgt_pp_calls_'(Entity) 204 205 :- dynamic('$lgt_pp_info_'/1). % '$lgt_pp_info_'(List) … … 1826 1827 \+ '$lgt_current_flag_'(Flag, _). 1827 1828 1828 current_logtalk_flag(version, version(2, 3 2, 2)).1829 current_logtalk_flag(version, version(2, 33, 0)). 1829 1830 1830 1831 … … 4833 4834 retractall('$lgt_pp_uses_'(_)), 4834 4835 retractall('$lgt_pp_uses_'(_, _, _)), 4836 retractall('$lgt_pp_use_module_'(_, _, _)), 4835 4837 retractall('$lgt_pp_calls_'(_)), 4836 4838 retractall('$lgt_pp_info_'(_)), … … 5445 5447 5446 5448 5449 '$lgt_tr_directive'(use_module, [Module, _], _, _) :- 5450 var(Module), 5451 throw(instantiation_error). 5452 5453 '$lgt_tr_directive'(uses, [Module, _], _, _) :- 5454 \+ callable(Module), 5455 throw(type_error(module_identifier, Module)). 5456 5447 5457 '$lgt_tr_directive'(use_module, [Module, Preds], Input, Output) :- % module directive 5448 5458 ( atom(Module) -> … … 5450 5460 ; arg(1, Module, Name) 5451 5461 ), 5452 '$lgt_tr_directive'(uses, [Name, Preds], Input, Output). 5462 ( '$lgt_pp_module_'(_) -> % we're compiling a module 5463 '$lgt_tr_directive'(uses, [Name, Preds], Input, Output) % as an object 5464 ; '$lgt_tr_use_module_preds'(Preds, Name) 5465 ). 5453 5466 5454 5467 … … 5896 5909 ; throw(domain_error(arity_mismatch(Original, Alias))) 5897 5910 ), 5898 ( \+ '$lgt_pp_uses_'(_, _, TAlias) -> 5911 ( \+ '$lgt_pp_uses_'(_, _, TAlias), 5912 \+ '$lgt_pp_use_module_'(_, _, TAlias) -> 5899 5913 TOriginal =.. [_| Args], TAlias =.. [_| Args], % unify args of TOriginal and TAlias 5900 5914 assertz('$lgt_pp_uses_'(Obj, TOriginal, TAlias)) … … 5903 5917 ), 5904 5918 '$lgt_tr_uses_preds'(Preds, Obj). 5919 5920 5921 5922 % '$lgt_tr_use_module_preds'(+list, +module_identifier) 5923 % 5924 % auxiliary predicate for translating use_module/2 directives in objects or categories 5925 5926 '$lgt_tr_use_module_preds'([], _). 5927 5928 '$lgt_tr_use_module_preds'([Pred| Preds], Module) :- 5929 ( nonvar(Pred) -> 5930 true 5931 ; throw(instantiation_error) 5932 ), 5933 ( Pred = (Original::Alias) -> 5934 true 5935 ; (Original, Alias) = (Pred, Pred) 5936 ), 5937 ( (nonvar(Original), nonvar(Alias)) -> 5938 true 5939 ; throw(instantiation_error) 5940 ), 5941 ( '$lgt_valid_pred_ind'(Original, OFunctor, OArity) -> 5942 functor(TOriginal, OFunctor, OArity) 5943 ; throw(type_error(predicate_indicator, Original)) 5944 ), 5945 ( '$lgt_valid_pred_ind'(Alias, AFunctor, AArity) -> 5946 functor(TAlias, AFunctor, AArity) 5947 ; throw(type_error(predicate_indicator, Alias)) 5948 ), 5949 ( OArity =:= AArity -> 5950 true 5951 ; throw(domain_error(arity_mismatch(Original, Alias))) 5952 ), 5953 ( \+ '$lgt_pp_uses_'(_, _, TAlias), 5954 \+ '$lgt_pp_use_module_'(_, _, TAlias) -> 5955 TOriginal =.. [_| Args], TAlias =.. [_| Args], % unify args of TOriginal and TAlias 5956 assertz('$lgt_pp_use_module_'(Module, TOriginal, TAlias)) 5957 ; functor(TAlias, Functor, Arity), 5958 throw(permission_error(modify, uses_module_predicate, Functor/Arity)) 5959 ), 5960 '$lgt_tr_use_module_preds'(Preds, Module). 5905 5961 5906 5962 … … 6423 6479 functor(Alias, Functor, Arity), 6424 6480 throw(permission_error(modify, uses_object_predicate, Functor/Arity)). 6481 6482 6483 % conflict with a predicate specified in a use_module/2 directive 6484 6485 '$lgt_tr_head'(Alias, _, _, _) :- 6486 '$lgt_pp_use_module_'(_, _, Alias), 6487 functor(Alias, Functor, Arity), 6488 throw(permission_error(modify, uses_module_predicate, Functor/Arity)). 6425 6489 6426 6490 … … 7313 7377 !, 7314 7378 '$lgt_tr_body'(Obj::Pred, TPred, DPred, Ctx). 7379 7380 7381 % predicates specified in use_module/2 directives 7382 7383 '$lgt_tr_body'(Alias, ':'(Module, Pred), ':'(Module, Pred), _) :- 7384 '$lgt_pp_use_module_'(Module, Pred, Alias), 7385 !. 7315 7386 7316 7387 … … 7346 7417 7347 7418 7348 % Logtalk and Prolog built-in (meta-)predicates7419 % remember non-portable predicate calls 7349 7420 7350 7421 '$lgt_tr_body'(Pred, _, _, _) :- … … 7358 7429 assertz('$lgt_non_portable_call_'(Functor, Arity)), 7359 7430 fail. 7431 7432 7433 % Logtalk and Prolog built-in (meta-)predicates 7360 7434 7361 7435 '$lgt_tr_body'(Pred, TPred, DPred, Ctx) :- … … 10396 10470 functor(Pred, Functor, Arity), 10397 10471 \+ '$lgt_pp_redefined_built_in_'(Pred, _, _, _, _). 10472 10473 '$lgt_non_portable_call'(':'(Module, Functor/Arity)) :- 10474 '$lgt_pp_use_module_'(Module, Pred, _), 10475 functor(Pred, Functor, Arity). 10398 10476 10399 10477
