Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
   *
   * This Source Code Form is subject to the terms of the Mozilla Public
   * License, v. 2.0. If a copy of the MPL was not distributed with this
   * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  
  
  package org.mozilla.javascript;

The class of error objects ECMA 15.11
 
 final class NativeError extends IdScriptableObject
 {
     static final long serialVersionUID = -5338413581437645187L;
 
     private static final Object ERROR_TAG = "Error";
 
     private RhinoException stackProvider;
 
     static void init(Scriptable scopeboolean sealed)
     {
         NativeError obj = new NativeError();
         ScriptableObject.putProperty(obj"name""Error");
         ScriptableObject.putProperty(obj"message""");
         ScriptableObject.putProperty(obj"fileName""");
         ScriptableObject.putProperty(obj"lineNumber", Integer.valueOf(0));
         obj.exportAsJSClass(scopesealed);
     }
 
     static NativeError make(Context cxScriptable scope,
                             IdFunctionObject ctorObjObject[] args)
     {
         Scriptable proto = (Scriptable)(ctorObj.get("prototype"ctorObj));
 
         NativeError obj = new NativeError();
         obj.setPrototype(proto);
         obj.setParentScope(scope);
 
         int arglen = args.length;
         if (arglen >= 1) {
             ScriptableObject.putProperty(obj"message",
                     ScriptRuntime.toString(args[0]));
             if (arglen >= 2) {
                 ScriptableObject.putProperty(obj"fileName"args[1]);
                 if (arglen >= 3) {
                     int line = ScriptRuntime.toInt32(args[2]);
                     ScriptableObject.putProperty(obj"lineNumber",
                             Integer.valueOf(line));
                 }
             }
         }
         return obj;
     }
 
     @Override
     public String getClassName()
     {
         return "Error";
     }
 
     @Override
     public String toString()
     {
         // According to spec, Error.prototype.toString() may return undefined.
         Object toString =  js_toString(this);
         return toString instanceof String ? (StringtoString : super.toString();
     }
 
     @Override
     protected void initPrototypeId(int id)
     {
         String s;
         int arity;
         switch (id) {
           case arity=1; s="constructor"break;
           case :    arity=0; s="toString";    break;
           case :    arity=0; s="toSource";    break;
           defaultthrow new IllegalArgumentException(String.valueOf(id));
         }
         initPrototypeMethod(idsarity);
     }
 
     @Override
     public Object execIdCall(IdFunctionObject fContext cxScriptable scope,
                              Scriptable thisObjObject[] args)
     {
         if (!f.hasTag()) {
             return super.execIdCall(fcxscopethisObjargs);
         }
         int id = f.methodId();
         switch (id) {
           case :
             return make(cxscopefargs);
 
           case :
            return js_toString(thisObj);
          case :
            return js_toSource(cxscopethisObj);
        }
        throw new IllegalArgumentException(String.valueOf(id));
    }
    public void setStackProvider(RhinoException re) {
        // We go some extra miles to make sure the stack property is only
        // generated on demand, is cached after the first access, and is
        // overwritable like an ordinary property. Hence this setup with
        // the getter and setter below.
        if ( == null) {
             = re;
            try {
                defineProperty("stack"null,
                        NativeError.class.getMethod("getStack"),
                        NativeError.class.getMethod("setStack"Object.class), 0);
            } catch (NoSuchMethodException nsm) {
                // should not happen
                throw new RuntimeException(nsm);
            }
        }
    }
    public Object getStack() {
        Object value =   == null ?
                 : .getScriptStackTrace();
        // We store the stack as local property both to cache it
        // and to make the property writable
        setStack(value);
        return value;
    }
    public void setStack(Object value) {
        if ( != null) {
             = null;
            delete("stack");
        }
        put("stack"thisvalue);
    }
    private static Object js_toString(Scriptable thisObj) {
        Object name = ScriptableObject.getProperty(thisObj"name");
        if (name ==  || name == .) {
            name = "Error";
        } else {
            name = ScriptRuntime.toString(name);
        }
        Object msg = ScriptableObject.getProperty(thisObj"message");
        final Object result;
        if (msg ==  || msg == .) {
            result = .;
        } else {
            result = ((Stringname) + ": " + ScriptRuntime.toString(msg);
        }
        return result;
    }
    private static String js_toSource(Context cxScriptable scope,
                                      Scriptable thisObj)
    {
        // Emulation of SpiderMonkey behavior
        Object name = ScriptableObject.getProperty(thisObj"name");
        Object message = ScriptableObject.getProperty(thisObj"message");
        Object fileName = ScriptableObject.getProperty(thisObj"fileName");
        Object lineNumber = ScriptableObject.getProperty(thisObj"lineNumber");
        StringBuffer sb = new StringBuffer();
        sb.append("(new ");
        if (name == ) {
            name = .;
        }
        sb.append(ScriptRuntime.toString(name));
        sb.append("(");
        if (message != 
            || fileName != 
            || lineNumber != )
        {
            if (message == ) {
                message = "";
            }
            sb.append(ScriptRuntime.uneval(cxscopemessage));
            if (fileName !=  || lineNumber != ) {
                sb.append(", ");
                if (fileName == ) {
                    fileName = "";
                }
                sb.append(ScriptRuntime.uneval(cxscopefileName));
                if (lineNumber != ) {
                    int line = ScriptRuntime.toInt32(lineNumber);
                    if (line != 0) {
                        sb.append(", ");
                        sb.append(ScriptRuntime.toString(line));
                    }
                }
            }
        }
        sb.append("))");
        return sb.toString();
    }
    private static String getString(Scriptable objString id)
    {
        Object value = ScriptableObject.getProperty(objid);
        if (value == return "";
        return ScriptRuntime.toString(value);
    }
    @Override
    protected int findPrototypeId(String s)
    {
        int id;
// #string_id_map#
// #generated# Last update: 2007-05-09 08:15:45 EDT
        L0: { id = 0; String X = nullint c;
            int s_length = s.length();
            if (s_length==8) {
                c=s.charAt(3);
                if (c=='o') { X="toSource";id=; }
                else if (c=='t') { X="toString";id=; }
            }
            else if (s_length==11) { X="constructor";id=; }
            if (X!=null && X!=s && !X.equals(s)) id = 0;
            break L0;
        }
// #/generated#
        return id;
    }
    private static final int
        Id_constructor    = 1,
        Id_toString       = 2,
        Id_toSource       = 3,
        MAX_PROTOTYPE_ID  = 3;
// #/string_id_map#
New to GrepCode? Check out our FAQ X