| Index: src/messages.js
 | 
| diff --git a/src/messages.js b/src/messages.js
 | 
| index d813df9da6e26d035c02b4c72f5b7a4c2fc4baab..ab71936725a0daf88b106a682d3aa93202ca7d09 100644
 | 
| --- a/src/messages.js
 | 
| +++ b/src/messages.js
 | 
| @@ -61,18 +61,21 @@ function FormatString(format, message) {
 | 
|  
 | 
|  
 | 
|  // To check if something is a native error we need to check the
 | 
| -// concrete native error types. It is not enough to check "obj
 | 
| -// instanceof $Error" because user code can replace
 | 
| -// NativeError.prototype.__proto__. User code cannot replace
 | 
| -// NativeError.prototype though and therefore this is a safe test.
 | 
| +// concrete native error types. It is not sufficient to use instanceof
 | 
| +// since it possible to create an object that has Error.prototype on
 | 
| +// its prototype chain. This is the case for DOMException for example.
 | 
|  function IsNativeErrorObject(obj) {
 | 
| -  return (obj instanceof $Error) ||
 | 
| -      (obj instanceof $EvalError) ||
 | 
| -      (obj instanceof $RangeError) ||
 | 
| -      (obj instanceof $ReferenceError) ||
 | 
| -      (obj instanceof $SyntaxError) ||
 | 
| -      (obj instanceof $TypeError) ||
 | 
| -      (obj instanceof $URIError);
 | 
| +  switch (%_ClassOf(obj)) {
 | 
| +    case 'Error':
 | 
| +    case 'EvalError':
 | 
| +    case 'RangeError':
 | 
| +    case 'ReferenceError':
 | 
| +    case 'SyntaxError':
 | 
| +    case 'TypeError':
 | 
| +    case 'URIError':
 | 
| +      return true;
 | 
| +  }
 | 
| +  return false;
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |