From daadb2b174846cda95e51e0c4c94bcb748da4a69 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Sun, 18 Jul 2021 18:22:05 +0000 Subject: Load extra arguments as module files --- builtins.c | 24 ++++++++++++++++++++++++ repl.pl | 8 +++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/builtins.c b/builtins.c index d723e7c..b33bc49 100644 --- a/builtins.c +++ b/builtins.c @@ -62,6 +62,7 @@ BuiltinProto(builtinputchar); BuiltinProto(builtincharcode); BuiltinProto(builtinchoicestacksize); BuiltinProto(builtincollectgarbage); +BuiltinProto(builtinloadmodulefromfile); int compareterms(Term *, Term *); @@ -175,6 +176,8 @@ findbuiltin(Term *goal) return builtinchoicestacksize; if(Match(L"$collect_garbage", 0)) return builtincollectgarbage; + if(Match(L"$load_module_from_file", 1)) + return builtinloadmodulefromfile; return nil; } @@ -1421,4 +1424,25 @@ builtincollectgarbage(Term *goal, Binding **bindings, Module *module) if(amount != 0 & flagdebug) print("Collected %lld bytes of garbage\n", amount); return 1; +} + +int +builtinloadmodulefromfile(Term *goal, Binding **bindings, Module *module) +{ + USED(bindings); + USED(module); + Term *file = goal->children; + + if(file->tag == VariableTerm) + Throw(instantiationerror()); + if(file->tag != AtomTerm) + Throw(typeerror(L"atom", file)); + + char *filestr = smprint("%S", file->text); + Module *m = parsemodule(filestr); + free(filestr); + if(m) + return 1; + else + return 0; } \ No newline at end of file diff --git a/repl.pl b/repl.pl index a936535..8ecf286 100644 --- a/repl.pl +++ b/repl.pl @@ -12,9 +12,11 @@ repl([ProgName|Args]) :- handle_arg('-d') :- set_prolog_flag(debug, on). handle_arg(Arg) :- - write('Unhandled command line argument: '), - writeq(Arg), - nl. + ( '$load_module_from_file'(Arg) + -> write('Loaded module from file: ') + ; write('Failed to load module from file: ') + ), + write(Arg), nl. handle_args([Arg|Rest]) :- handle_arg(Arg), !, handle_args(Rest). handle_args([]). -- cgit v1.2.3