blob: 2d2fd5e30a52af83f1d704ad7a68d8bda79bffe5 [file] [log] [blame]
package jp.ac.kobe_u.cs.prolog.lang;
/**
* Domain error.<br>
* There will be a domain error when the type of an argument
* is correct, but the value is outside the domain for which
* the procedure is defined.
*
* @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
* @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
* @version 1.0
*/
public class IllegalDomainException extends BuiltinException {
/** A functor symbol of <code>domain_error/4</code>. */
public static SymbolTerm DOMAIN_ERROR = SymbolTerm.makeSymbol("domain_error", 4);
/*
domain ::= character_code_list | close_option | flag_value | io_mode |
non_empty_list | not_less_than_zero | operator_priority |
operator_specifier | prolog_flag | read_option | source_sink |
stream | steam_option | stream_or_alias | stream_position |
stream_property | write_option |
hash_or_alias| hash_option | 'arithmetic expression'
*/
/** Holds a string representation of valid domain. */
public String domain;
/** Holds the argument or one of its components which caused the error. */
public Term culprit;
/** Constructs a new <code>IllegalDomainException</code>
* with a valid domain and its culprit. */
public IllegalDomainException(String _domain, Term _culprit) {
domain = _domain;
culprit = _culprit;
}
/** Constructs a new <code>IllegalDomainException</code>
* with the given arguments. */
public IllegalDomainException(Predicate _goal, int _argNo, String _domain, Term _culprit) {
this.goal = _goal;
this.argNo = _argNo;
domain = _domain;
culprit = _culprit;
}
/** Returns a term representation of this <code>IllegalDomainException</code>:
* <code>domain_error(goal,argNo,type,culprit)</code>.
*/
public Term getMessageTerm() {
Term[] args = {
new JavaObjectTerm(goal),
new IntegerTerm(argNo),
SymbolTerm.makeSymbol(domain),
culprit};
return new StructureTerm(DOMAIN_ERROR, args);
}
/** Returns a string representation of this <code>IllegalDomainException</code>. */
public String toString() {
String s = "{DOMAIN ERROR: " + goal.toString();
if (argNo > 0)
s += " - arg " + argNo;
s += ": expected " + domain;
s += ", found " + culprit.toString();
s += "}";
return s;
}
}