diff options
Diffstat (limited to 'builtins.c')
-rw-r--r-- | builtins.c | 24 |
1 files changed, 24 insertions, 0 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 |