diff options
Diffstat (limited to 'builtins.c')
-rw-r--r-- | builtins.c | 27 |
1 files changed, 10 insertions, 17 deletions
@@ -38,7 +38,7 @@ BuiltinProto(builtinis); BuiltinProto(builtincatch); BuiltinProto(builtinthrow); BuiltinProto(builtinsetprologflag); -BuiltinProto(builtincurrentprologflag); +BuiltinProto(builtincurrentprologflags); BuiltinProto(builtinopen); BuiltinProto(builtinclose); BuiltinProto(builtincurrentinput); @@ -125,10 +125,10 @@ findbuiltin(Term *goal) return builtincatch; if(Match(L"throw", 1)) return builtinthrow; - if(Match(L"set_prolog_flag", 2)) + if(Match(L"$set_prolog_flag", 2)) return builtinsetprologflag; - if(Match(L"current_prolog_flag", 2)) - return builtincurrentprologflag; + if(Match(L"current_prolog_flags", 1)) + return builtincurrentprologflags; if(Match(L"open", 4)) return builtinopen; if(Match(L"close", 2)) @@ -605,12 +605,13 @@ builtinthrow(Term *goal, Binding **bindings, Module *module) } int -builtincurrentprologflag(Term *goal, Binding **bindings, Module *module) +builtincurrentprologflags(Term *goal, Binding **bindings, Module *module) { - USED(goal); - USED(bindings); USED(module); - return 0; + Term *flagsandvals = goal->children; + Term *list = getallflags(); + Term *realflagsandvals = mklist(list); + return unify(flagsandvals, realflagsandvals, bindings); } int @@ -621,15 +622,7 @@ builtinsetprologflag(Term *goal, Binding **bindings, Module *module) Term *key = goal->children; Term *value = key->next; - if(key->tag == VariableTerm || value->tag == VariableTerm) - Throw(instantiationerror()); - - if(key->tag != AtomTerm) - Throw(typeerror(L"atom", key)); - - Term *error = setflag(key->text, value); - if(error) - Throw(error); + setflag(key->text, value); return 1; } |