1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
  
36
  
37
  
38
  
39
  
40
  
41
  
42
  
43
  
44
  
45
  
46
  
47
  
48
  
49
  
50
  
#pike __REAL_VERSION__ 
 
class StdErr 
{ 
   constant is_generic_error=1; 
   constant is_irc_error=1; 
 
   string name; 
   array(mixed) __backtrace; 
 
   void create(string _name) 
   { 
      name=_name; 
      __backtrace=backtrace(); 
      while (!__backtrace[-1][0]|| 
             __backtrace[-1][0][sizeof(__backtrace[-1][0])-11..] 
             == "/Error.pmod") 
         __backtrace=__backtrace[..<1]; 
   } 
 
   mixed `[](mixed z) 
   { 
      switch (z) 
      { 
         case 0: return "Protocols.IRC:  "+name+"\n"; 
         case 1: return __backtrace; 
      } 
      return ::`[](z); 
   } 
} 
 
class Connection 
{ 
   inherit StdErr; 
 
   constant is_irc_connection_error=1; 
 
   int errno; 
 
   void create(string desc,int _errno) 
   { 
      ::create(desc+" ("+strerror(errno=_errno)+")"); 
   } 
} 
 
void connection(mixed ...args) { throw(Connection(@args)); } 
void internal(string format,mixed ...args) 
   { throw(StdErr(sprintf(format+" (internal error)",@args))); }