Home | History | Annotate | Download | only in js
      1 /*
      2  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 #include "JSJavaScriptCallFrame.h"
     28 
     29 #if ENABLE(JAVASCRIPT_DEBUGGER)
     30 
     31 #include "JavaScriptCallFrame.h"
     32 #include <runtime/ArrayPrototype.h>
     33 
     34 using namespace JSC;
     35 
     36 namespace WebCore {
     37 
     38 JSValue JSJavaScriptCallFrame::evaluate(ExecState* exec, const ArgList& args)
     39 {
     40     JSValue exception;
     41     JSValue result = impl()->evaluate(args.at(0).toString(exec), exception);
     42 
     43     if (exception)
     44         exec->setException(exception);
     45 
     46     return result;
     47 }
     48 
     49 JSValue JSJavaScriptCallFrame::thisObject(ExecState*) const
     50 {
     51     return impl()->thisObject() ? impl()->thisObject() : jsNull();
     52 }
     53 
     54 JSValue JSJavaScriptCallFrame::type(ExecState* exec) const
     55 {
     56     switch (impl()->type()) {
     57         case DebuggerCallFrame::FunctionType:
     58             return jsString(exec, UString("function"));
     59         case DebuggerCallFrame::ProgramType:
     60             return jsString(exec, UString("program"));
     61     }
     62 
     63     ASSERT_NOT_REACHED();
     64     return jsNull();
     65 }
     66 
     67 JSValue JSJavaScriptCallFrame::scopeChain(ExecState* exec) const
     68 {
     69     if (!impl()->scopeChain())
     70         return jsNull();
     71 
     72     const ScopeChainNode* scopeChain = impl()->scopeChain();
     73     ScopeChainIterator iter = scopeChain->begin();
     74     ScopeChainIterator end = scopeChain->end();
     75 
     76     // we must always have something in the scope chain
     77     ASSERT(iter != end);
     78 
     79     MarkedArgumentBuffer list;
     80     do {
     81         list.append(*iter);
     82         ++iter;
     83     } while (iter != end);
     84 
     85     return constructArray(exec, list);
     86 }
     87 
     88 } // namespace WebCore
     89 
     90 #endif // ENABLE(JAVASCRIPT_DEBUGGER)
     91