summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Mikkelsen <peter@pmikkelsen.com>2021-07-18 18:22:05 +0000
committerPeter Mikkelsen <peter@pmikkelsen.com>2021-07-18 18:22:05 +0000
commitdaadb2b174846cda95e51e0c4c94bcb748da4a69 (patch)
tree5cca963b24754af9fdfd9dde95c0286cfa225df3
parent18ae80eac7b678d71b13710b978a03863c7e3fd2 (diff)
Load extra arguments as module files
-rw-r--r--builtins.c24
-rw-r--r--repl.pl8
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([]).