|
74 | 74 | :- ensure_loaded(metta_space). |
75 | 75 | :- ensure_loaded(metta_compiler_print). |
76 | 76 | :- dynamic(transpiler_clause_store/9). |
77 | | -:- multifile(transpiler_predicate_store/7). |
78 | 77 | :- 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). |
82 | 81 |
|
83 | 82 | non_arg_violation(_,_,_). |
84 | 83 |
|
|
92 | 91 | :- dynamic(metta_compiled_predicate/3). |
93 | 92 | :- multifile(metta_compiled_predicate/3). |
94 | 93 |
|
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 | | - |
115 | 94 |
|
116 | 95 | % ======================================= |
117 | 96 | % TODO move non flybase specific code between here and the compiler |
|
262 | 241 | partial_combine_lists(L1,L2,Lcomb,L1a,L2a). |
263 | 242 | partial_combine_lists(L1,L2,[],L1,L2). |
264 | 243 |
|
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 | | - |
278 | 244 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
279 | 245 | %%%%%%%%%%%%%%%%% Evaluation (!) |
280 | 246 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
354 | 320 | % new, insert clause |
355 | 321 | current_compiler_context(CompCtx), % where expected to be stored (builtin,user,etc) |
356 | 322 | 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) |
359 | 324 | ). |
360 | 325 |
|
| 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 | + |
361 | 331 | current_compiler_context(CompCtx):- option_value(compiler_context,CompCtx),!. |
362 | 332 | current_compiler_context(user). |
363 | 333 |
|
|
387 | 357 | recompile_from_depends(FnName,LenArgs) :- |
388 | 358 | transpiler_debug(2,(format_e("recompile_from_depends ~w/~w\n",[FnName,LenArgs]))), |
389 | 359 | %LenArgs is LenArgsPlus1-1, |
390 | | - %create_prefixed_name('mc_',LenArgs,,FnName,FnNameWPrefix), |
| 360 | + %create_mc_name(LenArgs,,FnName,FnNameWPrefix), |
391 | 361 | %findall(Atom0, (between(1, LenArgsPlus1, I0) ,Atom0='$VAR'(I0)), AtomList0), |
392 | 362 | %H @.. [FnNameWPrefix|AtomList0], |
393 | 363 | %transpiler_debug(2,format_e("Retracting stub: ~q\n",[H]) ; true), |
|
422 | 392 | %format_e("recompile_from_depends_child ~w/~w\n",[Fn,Arity]),flush_output(user_output), |
423 | 393 | ArityP1 is Arity+1, |
424 | 394 | %retract(transpiler_predicate_store(_,Fn,Arity,_,_,_,_)), |
425 | | - create_prefixed_name('mc_',Arity,Fn,FnWPrefix), |
| 395 | + create_mc_name(Arity,Fn,FnWPrefix), |
426 | 396 | 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), |
431 | 397 | % retract(transpiler_stub_created(Fn,Arity)), |
432 | 398 | % create an ordered list of integers to make sure to do them in order |
433 | 399 | findall(ClauseIDt,transpiler_clause_store(Fn,Arity,ClauseIDt,_,_,_,_,_,_),ClauseIdList), |
|
444 | 410 |
|
445 | 411 | extract_info_and_remove_transpiler_clause_store(Fn,Arity,ClauseIDt,Head-Body) :- |
446 | 412 | 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]), |
448 | 414 | retract(transpiler_clause_store(Fn,Arity,ClauseIDt,_,_,_,_,_,_)). |
449 | 415 |
|
450 | 416 | % !(compile-for-assert (plus1 $x) (+ 1 $x) ) |
|
464 | 430 | subst_varnames(HeadIsIn+AsBodyFnIn,HeadIs+AsBodyFn), |
465 | 431 | %leash(-all),trace, |
466 | 432 | get_curried_name_structure(HeadIs,FnName,Args,LenArgs), |
467 | | - create_prefixed_name('mc_',LenArgs,FnName,FnNameWPrefix), |
| 433 | + create_mc_name(LenArgs,FnName,FnNameWPrefix), |
468 | 434 | %ensure_callee_site(Space,FnName,LenArgs), |
469 | 435 | remove_stub(Space,FnName,LenArgs), |
470 | 436 | sum_list(LenArgs,LenArgsTotal), |
|
474 | 440 | (transpiler_stub_created(FnName,LenArgs) -> |
475 | 441 | retract(transpiler_stub_created(FnName,LenArgs)), |
476 | 442 | findall(Atom0, (between(1, LenArgsTotalPlus1, I0) ,Atom0='$VAR'(I0)), AtomList0), |
477 | | - %create_prefixed_name('mc_',LenArgs,FnName,FnNameWPrefix), |
478 | 443 | H @.. [FnNameWPrefix|AtomList0], |
479 | 444 | 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) |
487 | 446 | ; true), |
488 | 447 |
|
489 | 448 | %AsFunction = HeadIs, |
|
544 | 503 | %(var(HResult) -> (Result = HResult, HHead = Head) ; |
545 | 504 | % funct_with_result_is_nth_of_pred(HeadIs,AsFunction, Result, _Nth, Head)), |
546 | 505 |
|
547 | | - HeadAST=[assign,HResult,[hcall(FnName,LenArgs),Args2]], |
| 506 | + HeadAST=[assign,HResult,[fcall(FnName,LenArgs),Args2]], |
548 | 507 | (transpiler_trace(FnName) -> Prefix=[[native(trace)]] ; Prefix=[]), |
549 | 508 | append([Prefix|Code],CodeAppend), |
550 | 509 | append(CodeAppend,FullCode,FullCode2), |
|
1028 | 987 | ; |
1029 | 988 | (transpiler_enable_interpreter_calls -> |
1030 | 989 | % create a stub to call the interpreter |
1031 | | - (create_prefixed_name('mc_',LenArgs,Fn,Fp), |
| 990 | + (create_mc_name(LenArgs,Fn,Fp), |
1032 | 991 | (current_predicate(Fp/LenArgs) -> true ; |
1033 | 992 | LenArgs1 is LenArgs+1, |
1034 | 993 | findall(Atom0, (between(1, LenArgs1, I0) ,Atom0='$VAR'(I0)), AtomList0), |
|
1115 | 1074 | maplist(lazy_impedance_match, LazyResultParts, EvalArgs, RetResultsParts, ConvertedParts, RetResultsPartsN, ConvertedNParts, RetResults, Converteds), |
1116 | 1075 | append(Converteds,Converteds2), |
1117 | 1076 | %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), |
1120 | 1078 | invert_curried_structure(Fn,LenArgs,RetResults,RecurriedList), |
1121 | 1079 | append(Converteds2,[[transpiler_apply,Prefix,Fn,RecurriedList,RetResult,RetResultsParts, RetResultsPartsN, LazyResultParts,ConvertedParts, ConvertedNParts]],Converted), |
1122 | 1080 | assign_or_direct_var_only(Converteds2,RetResultN,list(RecurriedList),ConvertedN). |
|
1305 | 1263 | maybe_lazy_list(Caller,F,1,Args00,Args0), |
1306 | 1264 | %label_arg_types(F,1,Args0), |
1307 | 1265 | 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), |
1332 | 1267 | %label_arg_types(F,0,[A|Args1]), |
1333 | 1268 | %LenArgs1 is LenArgs+1, |
1334 | 1269 | append(Args1,[A],Args2), |
|
1348 | 1283 | must_det_lls(( |
1349 | 1284 | maybe_lazy_list(Caller,F,1,ArgsIn,Args0), |
1350 | 1285 | maplist(ast_to_prolog_aux(Caller,DontStub),Args0,Args1), |
1351 | | - create_prefixed_name('mc_',LenArgs,F,Fp), |
| 1286 | + create_mc_name(LenArgs,F,Fp), |
1352 | 1287 | append(Args1,[A],Args2), |
1353 | 1288 | R0 =..[Fp,XX], |
1354 | 1289 | R1=..[apply_fn,XX,Args2], |
|
1364 | 1299 | %label_arg_types(FIn,1,Args0), |
1365 | 1300 | maplist(ast_to_prolog_aux(Caller,DontStub),Args0,Args1), |
1366 | 1301 | append(LenArgsRest,LenArgs,LenArgsAll), |
1367 | | - create_prefixed_name('mc_',LenArgsAll,FIn,Fp), |
| 1302 | + create_mc_name(LenArgsAll,FIn,Fp), |
1368 | 1303 | %label_arg_types(FIn,0,[A|Args1]), |
1369 | 1304 | %LenArgs1 is LenArgs+1, |
1370 | 1305 | R0 ~.. [xxx(4),Fp|Args1], |
|
1411 | 1346 | % label_arg_types(F,1,Args0), |
1412 | 1347 | % maplist(ast_to_prolog_aux(Caller,DontStub),Args0,Args1), |
1413 | 1348 | % length(Args0,LenArgs), |
1414 | | -% create_prefixed_name('mc_',LenArgs,F,Fp), |
| 1349 | +% create_mc_name(LenArgs,F,Fp), |
1415 | 1350 | % label_arg_types(F,0,[A|Args1]), |
1416 | 1351 | % %LenArgs1 is LenArgs+1, |
1417 | 1352 | % append(Args1,[A],Args2), |
|
2246 | 2181 | compiler_data(metta_atom/2). |
2247 | 2182 | compiler_data(metta_type/3). |
2248 | 2183 | compiler_data(metta_defn/3). |
| 2184 | +%compiler_data(metta_atom_asserted/2). |
| 2185 | + |
2249 | 2186 | %compiler_data(metta_file_buffer/7). |
2250 | 2187 |
|
2251 | 2188 | ensure_callee_site(Space,Fn,Arity):- check_supporting_predicates(Space,Fn/Arity),!. |
|
2668 | 2605 |
|
2669 | 2606 | check_supporting_predicates(Space,F/A) :- % already exists |
2670 | 2607 | %trace, |
2671 | | - create_prefixed_name('mc_',A,F,Fp), |
| 2608 | + create_mc_name(A,F,Fp), |
2672 | 2609 | with_mutex_maybe(transpiler_mutex_lock, |
2673 | 2610 | (sum_list(A,ATot),ATot1 is ATot+1, |
2674 | 2611 | (current_predicate(Fp/ATot1) -> true ; |
|
4134 | 4071 |
|
4135 | 4072 |
|
4136 | 4073 |
|
| 4074 | + |
0 commit comments