diff options
-rw-r--r-- | builtins.c | 24 | ||||
-rw-r--r-- | repl.pl | 8 |
2 files changed, 29 insertions, 3 deletions
@@ -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 @@ -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([]). |