]>
git.saurik.com Git - apple/javascriptcore.git/blob - runtime/Completion.cpp
ac19705c0aa9699707106e103bbe6eb33b385914
   2  *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org) 
   3  *  Copyright (C) 2001 Peter Kelly (pmk@post.com) 
   4  *  Copyright (C) 2003, 2007 Apple Inc. 
   6  *  This library is free software; you can redistribute it and/or 
   7  *  modify it under the terms of the GNU Library General Public 
   8  *  License as published by the Free Software Foundation; either 
   9  *  version 2 of the License, or (at your option) any later version. 
  11  *  This library is distributed in the hope that it will be useful, 
  12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of 
  13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
  14  *  Library General Public License for more details. 
  16  *  You should have received a copy of the GNU Library General Public License 
  17  *  along with this library; see the file COPYING.LIB.  If not, write to 
  18  *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
  19  *  Boston, MA 02110-1301, USA. 
  24 #include "Completion.h" 
  26 #include "CallFrame.h" 
  27 #include "JSGlobalObject.h" 
  29 #include "Interpreter.h" 
  32 #include "WTFThreadData.h" 
  37 Completion 
checkSyntax(ExecState
* exec
, const SourceCode
& source
) 
  40     ASSERT(exec
->globalData().identifierTable 
== wtfThreadData().currentIdentifierTable()); 
  42     ProgramExecutable
* program 
= ProgramExecutable::create(exec
, source
); 
  43     JSObject
* error 
= program
->checkSyntax(exec
); 
  45         return Completion(Throw
, error
); 
  47     return Completion(Normal
); 
  50 Completion 
evaluate(ExecState
* exec
, ScopeChainNode
* scopeChain
, const SourceCode
& source
, JSValue thisValue
) 
  53     ASSERT(exec
->globalData().identifierTable 
== wtfThreadData().currentIdentifierTable()); 
  55     ProgramExecutable
* program 
= ProgramExecutable::create(exec
, source
); 
  57         JSValue exception 
= exec
->globalData().exception
; 
  58         exec
->globalData().exception 
= JSValue(); 
  59         return Completion(Throw
, exception
); 
  62     JSObject
* thisObj 
= (!thisValue 
|| thisValue
.isUndefinedOrNull()) ? exec
->dynamicGlobalObject() : thisValue
.toObject(exec
); 
  64     JSValue result 
= exec
->interpreter()->execute(program
, exec
, scopeChain
, thisObj
); 
  66     if (exec
->hadException()) { 
  67         JSValue exception 
= exec
->exception(); 
  68         exec
->clearException(); 
  70         ComplType exceptionType 
= Throw
; 
  71         if (exception
.isObject()) 
  72             exceptionType 
= asObject(exception
)->exceptionType(); 
  73         return Completion(exceptionType
, exception
); 
  75     return Completion(Normal
, result
);