Skip to content

Commit faccb01

Browse files
committed
three modes
1 parent 44e73e3 commit faccb01

File tree

6 files changed

+143
-194
lines changed

6 files changed

+143
-194
lines changed

prolog/metta_lang/metta_compiler.pl

Lines changed: 25 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,10 @@
7474
:- ensure_loaded(metta_space).
7575
:- ensure_loaded(metta_compiler_print).
7676
:- dynamic(transpiler_clause_store/9).
77-
:- multifile(transpiler_predicate_store/7).
7877
:- dynamic(transpiler_predicate_store/7).
79-
:- dynamic(transpiler_predicate_nary_store/9).
80-
:- discontiguous transpiler_predicate_nary_store/9.
81-
:- multifile(compile_flow_control/8).
78+
:- discontiguous(compile_flow_control/8).
79+
:- ensure_loaded(metta_compiler_lib).
80+
:- ensure_loaded(metta_compiler_lib_stdlib).
8281

8382
non_arg_violation(_,_,_).
8483

@@ -92,26 +91,6 @@
9291
:- dynamic(metta_compiled_predicate/3).
9392
:- multifile(metta_compiled_predicate/3).
9493

95-
setup_mi_me(FnName,LenArgs,_InternalTypeArgs,_InternalTypeResult) :-
96-
sum_list(LenArgs,LenArgsTotal),
97-
LenArgsTotalPlus1 is LenArgsTotal+1,
98-
findall(Atom0, (between(1, LenArgsTotalPlus1, I0) ,Atom0='$VAR'(I0)), AtomList0),
99-
create_prefixed_name('mc_',LenArgs,FnName,FnNameWPrefix),
100-
Hc =.. [FnNameWPrefix|AtomList0],
101-
create_prefixed_name('mi_',LenArgs,FnName,FnNameWMiPrefix),
102-
Hi =.. [FnNameWMiPrefix|AtomList0],
103-
create_prefixed_name('me_',LenArgs,FnName,FnNameWMePrefix),
104-
He =.. [FnNameWMePrefix|AtomList0],
105-
Bi =.. [ci,true,[],true,Goal],
106-
compiler_assertz(Hi:-((Goal=Hc),Bi)),
107-
compiler_assertz(He:-Hc).
108-
109-
setup_library_call(Source,FnName,LenArgs,MettaTypeArgs,MettaTypeResult,InternalTypeArgs,InternalTypeResult) :-
110-
(transpiler_predicate_store(_,FnName,LenArgs,_,_,_,_) -> true ;
111-
compiler_assertz(transpiler_predicate_store(Source,FnName,LenArgs,MettaTypeArgs,MettaTypeResult,InternalTypeArgs,InternalTypeResult)),
112-
setup_mi_me(FnName,LenArgs,InternalTypeArgs,InternalTypeResult)
113-
).
114-
11594

11695
% =======================================
11796
% TODO move non flybase specific code between here and the compiler
@@ -262,19 +241,6 @@
262241
partial_combine_lists(L1,L2,Lcomb,L1a,L2a).
263242
partial_combine_lists(L1,L2,[],L1,L2).
264243

265-
ci(_,_,_,G):-call(G).
266-
267-
create_prefixed_name(Prefix,LenArgs,FnName,String) :-
268-
%(sub_string(FnName, 0, _, _, "f") -> break ; true),
269-
length(LenArgs,L),
270-
append([Prefix,L|LenArgs],[FnName],Parts),
271-
atomic_list_concat(Parts,'_',String).
272-
273-
create_mc_name(LenArgs,FnName,String) :-
274-
length(LenArgs,L),
275-
append(['mc_',L|LenArgs],[FnName],Parts),
276-
atomic_list_concat(Parts,'_',String).
277-
278244
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
279245
%%%%%%%%%%%%%%%%% Evaluation (!)
280246
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -354,10 +320,14 @@
354320
% new, insert clause
355321
current_compiler_context(CompCtx), % where expected to be stored (builtin,user,etc)
356322
compiler_assertz(transpiler_predicate_store(CompCtx,FnName,LenArgs,todo,todo,FinalLazyArgsAdj,FinalLazyRetAdj)),
357-
%recompile_from_depends(FnName,LenArgs),
358-
setup_mi_me(FnName,LenArgs,FinalLazyArgsAdj,FinalLazyRetAdj)
323+
recompile_from_depends(FnName,LenArgs)
359324
).
360325

326+
create_mc_name(LenArgs,FnName,String) :-
327+
length(LenArgs,L),
328+
append(['mc_',L|LenArgs],[FnName],Parts),
329+
atomic_list_concat(Parts,'_',String).
330+
361331
current_compiler_context(CompCtx):- option_value(compiler_context,CompCtx),!.
362332
current_compiler_context(user).
363333

@@ -387,7 +357,7 @@
387357
recompile_from_depends(FnName,LenArgs) :-
388358
transpiler_debug(2,(format_e("recompile_from_depends ~w/~w\n",[FnName,LenArgs]))),
389359
%LenArgs is LenArgsPlus1-1,
390-
%create_prefixed_name('mc_',LenArgs,,FnName,FnNameWPrefix),
360+
%create_mc_name(LenArgs,,FnName,FnNameWPrefix),
391361
%findall(Atom0, (between(1, LenArgsPlus1, I0) ,Atom0='$VAR'(I0)), AtomList0),
392362
%H @.. [FnNameWPrefix|AtomList0],
393363
%transpiler_debug(2,format_e("Retracting stub: ~q\n",[H]) ; true),
@@ -422,12 +392,8 @@
422392
%format_e("recompile_from_depends_child ~w/~w\n",[Fn,Arity]),flush_output(user_output),
423393
ArityP1 is Arity+1,
424394
%retract(transpiler_predicate_store(_,Fn,Arity,_,_,_,_)),
425-
create_prefixed_name('mc_',Arity,Fn,FnWPrefix),
395+
create_mc_name(Arity,Fn,FnWPrefix),
426396
abolish(FnWPrefix/ArityP1),
427-
create_prefixed_name('mc_',Arity,Fn,FnWMiPrefix),
428-
abolish(FnWMiPrefix/ArityP1),
429-
create_prefixed_name('mc_',Arity,Fn,FnWMePrefix),
430-
abolish(FnWMePrefix/ArityP1),
431397
% retract(transpiler_stub_created(Fn,Arity)),
432398
% create an ordered list of integers to make sure to do them in order
433399
findall(ClauseIDt,transpiler_clause_store(Fn,Arity,ClauseIDt,_,_,_,_,_,_),ClauseIdList),
@@ -444,7 +410,7 @@
444410

445411
extract_info_and_remove_transpiler_clause_store(Fn,Arity,ClauseIDt,Head-Body) :-
446412
transpiler_clause_store(Fn,Arity,ClauseIDt,_,_,_,_,Head,Body),
447-
format_e("Extracted clause: ~w:~w:-~w\n",[Fn,Head,Body]),
413+
%format_e("Extracted clause: ~w:-~w\n",[Head,Body]),
448414
retract(transpiler_clause_store(Fn,Arity,ClauseIDt,_,_,_,_,_,_)).
449415

450416
% !(compile-for-assert (plus1 $x) (+ 1 $x) )
@@ -464,7 +430,7 @@
464430
subst_varnames(HeadIsIn+AsBodyFnIn,HeadIs+AsBodyFn),
465431
%leash(-all),trace,
466432
get_curried_name_structure(HeadIs,FnName,Args,LenArgs),
467-
create_prefixed_name('mc_',LenArgs,FnName,FnNameWPrefix),
433+
create_mc_name(LenArgs,FnName,FnNameWPrefix),
468434
%ensure_callee_site(Space,FnName,LenArgs),
469435
remove_stub(Space,FnName,LenArgs),
470436
sum_list(LenArgs,LenArgsTotal),
@@ -474,16 +440,9 @@
474440
(transpiler_stub_created(FnName,LenArgs) ->
475441
retract(transpiler_stub_created(FnName,LenArgs)),
476442
findall(Atom0, (between(1, LenArgsTotalPlus1, I0) ,Atom0='$VAR'(I0)), AtomList0),
477-
%create_prefixed_name('mc_',LenArgs,FnName,FnNameWPrefix),
478443
H @.. [FnNameWPrefix|AtomList0],
479444
transpiler_debug(2,format_e("Retracting stub: ~q\n",[H]) ; true),
480-
retractall(H),
481-
create_prefixed_name('mi_',LenArgs,FnName,FnNameWMiPrefix),
482-
H1 @.. [FnNameWMiPrefix|AtomList0],
483-
retractall(H1),
484-
create_prefixed_name('me_',LenArgs,FnName,FnNameWMePrefix),
485-
H2 @.. [FnNameWMePrefix|AtomList0],
486-
retractall(H2)
445+
retractall(H)
487446
; true),
488447

489448
%AsFunction = HeadIs,
@@ -544,7 +503,7 @@
544503
%(var(HResult) -> (Result = HResult, HHead = Head) ;
545504
% funct_with_result_is_nth_of_pred(HeadIs,AsFunction, Result, _Nth, Head)),
546505

547-
HeadAST=[assign,HResult,[hcall(FnName,LenArgs),Args2]],
506+
HeadAST=[assign,HResult,[fcall(FnName,LenArgs),Args2]],
548507
(transpiler_trace(FnName) -> Prefix=[[native(trace)]] ; Prefix=[]),
549508
append([Prefix|Code],CodeAppend),
550509
append(CodeAppend,FullCode,FullCode2),
@@ -1028,7 +987,7 @@
1028987
;
1029988
(transpiler_enable_interpreter_calls ->
1030989
% create a stub to call the interpreter
1031-
(create_prefixed_name('mc_',LenArgs,Fn,Fp),
990+
(create_mc_name(LenArgs,Fn,Fp),
1032991
(current_predicate(Fp/LenArgs) -> true ;
1033992
LenArgs1 is LenArgs+1,
1034993
findall(Atom0, (between(1, LenArgs1, I0) ,Atom0='$VAR'(I0)), AtomList0),
@@ -1115,8 +1074,7 @@
11151074
maplist(lazy_impedance_match, LazyResultParts, EvalArgs, RetResultsParts, ConvertedParts, RetResultsPartsN, ConvertedNParts, RetResults, Converteds),
11161075
append(Converteds,Converteds2),
11171076
%append(RetResults,[RetResult],RetResults2),
1118-
% BEER this is where to change the call to another function
1119-
create_prefixed_name('mc_',LenArgs,'',Prefix),
1077+
create_mc_name(LenArgs,'',Prefix),
11201078
invert_curried_structure(Fn,LenArgs,RetResults,RecurriedList),
11211079
append(Converteds2,[[transpiler_apply,Prefix,Fn,RecurriedList,RetResult,RetResultsParts, RetResultsPartsN, LazyResultParts,ConvertedParts, ConvertedNParts]],Converted),
11221080
assign_or_direct_var_only(Converteds2,RetResultN,list(RecurriedList),ConvertedN).
@@ -1305,30 +1263,7 @@
13051263
maybe_lazy_list(Caller,F,1,Args00,Args0),
13061264
%label_arg_types(F,1,Args0),
13071265
maplist(ast_to_prolog_aux(Caller,DontStub),Args0,Args1),
1308-
create_prefixed_name('mi_',LenArgs,F,Fp),
1309-
%label_arg_types(F,0,[A|Args1]),
1310-
%LenArgs1 is LenArgs+1,
1311-
append(Args1,[A],Args2),
1312-
R ~.. [f(FIn),Fp|Args2],
1313-
(Caller=caller(CallerInt,CallerSz),(CallerInt-CallerSz)\=(F-LenArgs),\+ transpiler_depends_on(CallerInt,CallerSz,F,LenArgs) ->
1314-
compiler_assertz(transpiler_depends_on(CallerInt,CallerSz,F,LenArgs)),
1315-
transpiler_debug(2,format_e("Asserting: transpiler_depends_on(~q,~q,~q,~q)\n",[CallerInt,CallerSz,F,LenArgs]))
1316-
; true)
1317-
%sum_list(LenArgs,LenArgsTotal),
1318-
%LenArgsTotalPlus1 is LenArgsTotal+1,
1319-
%((current_predicate(Fp/LenArgsTotalPlus1);member(F/LenArgs,DontStub)) ->
1320-
% true
1321-
%; check_supporting_predicates('&self',F/LenArgs))
1322-
%notice_callee(Caller,F/LenArgs)
1323-
)).
1324-
ast_to_prolog_aux(Caller,DontStub,[assign,A,[hcall(FIn,LenArgs),ArgsIn]],R) :- (fullvar(A); \+ compound(A)),callable(FIn),!,
1325-
must_det_lls((
1326-
FIn @.. [F|Pre], % allow compound natives
1327-
append(Pre,ArgsIn,Args00),
1328-
maybe_lazy_list(Caller,F,1,Args00,Args0),
1329-
%label_arg_types(F,1,Args0),
1330-
maplist(ast_to_prolog_aux(Caller,DontStub),Args0,Args1),
1331-
create_prefixed_name('mc_',LenArgs,F,Fp),
1266+
create_mc_name(LenArgs,F,Fp),
13321267
%label_arg_types(F,0,[A|Args1]),
13331268
%LenArgs1 is LenArgs+1,
13341269
append(Args1,[A],Args2),
@@ -1348,7 +1283,7 @@
13481283
must_det_lls((
13491284
maybe_lazy_list(Caller,F,1,ArgsIn,Args0),
13501285
maplist(ast_to_prolog_aux(Caller,DontStub),Args0,Args1),
1351-
create_prefixed_name('mc_',LenArgs,F,Fp),
1286+
create_mc_name(LenArgs,F,Fp),
13521287
append(Args1,[A],Args2),
13531288
R0 =..[Fp,XX],
13541289
R1=..[apply_fn,XX,Args2],
@@ -1364,7 +1299,7 @@
13641299
%label_arg_types(FIn,1,Args0),
13651300
maplist(ast_to_prolog_aux(Caller,DontStub),Args0,Args1),
13661301
append(LenArgsRest,LenArgs,LenArgsAll),
1367-
create_prefixed_name('mc_',LenArgsAll,FIn,Fp),
1302+
create_mc_name(LenArgsAll,FIn,Fp),
13681303
%label_arg_types(FIn,0,[A|Args1]),
13691304
%LenArgs1 is LenArgs+1,
13701305
R0 ~.. [xxx(4),Fp|Args1],
@@ -1411,7 +1346,7 @@
14111346
% label_arg_types(F,1,Args0),
14121347
% maplist(ast_to_prolog_aux(Caller,DontStub),Args0,Args1),
14131348
% length(Args0,LenArgs),
1414-
% create_prefixed_name('mc_',LenArgs,F,Fp),
1349+
% create_mc_name(LenArgs,F,Fp),
14151350
% label_arg_types(F,0,[A|Args1]),
14161351
% %LenArgs1 is LenArgs+1,
14171352
% append(Args1,[A],Args2),
@@ -2246,6 +2181,8 @@
22462181
compiler_data(metta_atom/2).
22472182
compiler_data(metta_type/3).
22482183
compiler_data(metta_defn/3).
2184+
%compiler_data(metta_atom_asserted/2).
2185+
22492186
%compiler_data(metta_file_buffer/7).
22502187

22512188
ensure_callee_site(Space,Fn,Arity):- check_supporting_predicates(Space,Fn/Arity),!.
@@ -2668,7 +2605,7 @@
26682605

26692606
check_supporting_predicates(Space,F/A) :- % already exists
26702607
%trace,
2671-
create_prefixed_name('mc_',A,F,Fp),
2608+
create_mc_name(A,F,Fp),
26722609
with_mutex_maybe(transpiler_mutex_lock,
26732610
(sum_list(A,ATot),ATot1 is ATot+1,
26742611
(current_predicate(Fp/ATot1) -> true ;
@@ -4134,3 +4071,4 @@
41344071

41354072

41364073

4074+

0 commit comments

Comments
 (0)