<?php namespace Sieve; require_once('SieveToken.php'); use Exception; class SieveException extends Exception { protected $token_; public function __construct(SieveToken $token, $arg) { $message = 'undefined sieve exception'; $this->token_ = $token; if (is_string($arg)) { $message = $arg; } else { if (is_array($arg)) { $type = SieveToken::typeString(array_shift($arg)); foreach($arg as $t) { $type .= ' or '. SieveToken::typeString($t); } } else { $type = SieveToken::typeString($arg); } $tokenType = SieveToken::typeString($token->type); $message = "$tokenType where $type expected near ". $token->text; } parent::__construct('line '. $token->line .": $message"); } public function getLineNo() { return $this->token_->line; } }