
/*
 * weinre is available under *either* the terms of the modified BSD license *or* the
 * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.
 * 
 * Copyright (c) 2010, 2011 IBM Corporation
 */

require ./StackTrace

//-----------------------------------------------------------------------------
// returns a new Error object after dumping a stack trace
//-----------------------------------------------------------------------------
class Ex(args, message)
    if (!args || !args.callee) {
        throw Ex(arguments, "first parameter must be an Arguments object") 
    }
    
    StackTrace.dump(args)
    
    if (message instanceof Error) {
        message = "threw error: " + message
    }
    
    return new Error(prefix(args, message))
    
//-----------------------------------------------------------------------------
function prefix(args, string)
    if (args.callee.signature)   return args.callee.signature +   ": " + string
    if (args.callee.displayName) return args.callee.displayName + ": " + string
    if (args.callee.name)        return args.callee.name +        ": " + string
    return "<anonymous>" +                                        ": " + string
