blob: 132ed3e7b9ece2d87290cbe29c89072391898b20 [file] [log] [blame]
package com.googlecode.prolog_cafe.exceptions;
import com.googlecode.prolog_cafe.lang.IntegerTerm;
import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
import com.googlecode.prolog_cafe.lang.Operation;
import com.googlecode.prolog_cafe.lang.StructureTerm;
import com.googlecode.prolog_cafe.lang.SymbolTerm;
import com.googlecode.prolog_cafe.lang.Term;
/**
* 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 {
private static final long serialVersionUID = 1L;
/** A functor symbol of <code>domain_error/4</code>. */
public static final SymbolTerm DOMAIN_ERROR = SymbolTerm.intern("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(Operation _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>.
*/
@Override
public Term getMessageTerm() {
Term[] args = {
new JavaObjectTerm(goal),
new IntegerTerm(argNo),
SymbolTerm.create(domain),
culprit};
return new StructureTerm(DOMAIN_ERROR, args);
}
/** Returns a string representation of this <code>IllegalDomainException</code>. */
@Override
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;
}
}