source: webkit/trunk/JavaScriptCore/runtime/Interpreter.cpp@ 38423

Last change on this file since 38423 was 38423, checked in by [email protected], 17 years ago

JavaScriptCore:

2008-11-15 Geoffrey Garen <[email protected]>

Reviewed by Sam Weinig.


Renamed Machine to BytecodeInterpreter.


Nixed the Interpreter class, and changed its two functions to stand-alone
functions.

  • JavaScriptCore.exp:
  • VM/CTI.cpp: (JSC::): (JSC::CTI::emitCTICall): (JSC::CTI::CTI): (JSC::CTI::compileOpCall): (JSC::CTI::emitSlowScriptCheck): (JSC::CTI::compileBinaryArithOpSlowCase): (JSC::CTI::privateCompileMainPass): (JSC::CTI::privateCompileSlowCases): (JSC::CTI::privateCompile): (JSC::CTI::privateCompileGetByIdSelf): (JSC::CTI::privateCompileGetByIdProto): (JSC::CTI::privateCompileGetByIdChain): (JSC::CTI::privateCompilePutByIdReplace): (JSC::CTI::privateCompilePutByIdTransition): (JSC::CTI::privateCompileCTIMachineTrampolines): (JSC::CTI::freeCTIMachineTrampolines): (JSC::CTI::patchGetByIdSelf): (JSC::CTI::patchPutByIdReplace): (JSC::CTI::privateCompilePatchGetArrayLength): (JSC::CTI::compileRegExp):
  • VM/CTI.h:
  • VM/CodeBlock.cpp: (JSC::CodeBlock::printStructureIDs): (JSC::CodeBlock::dump): (JSC::CodeBlock::derefStructureIDs): (JSC::CodeBlock::refStructureIDs):
  • VM/ExceptionHelpers.cpp: (JSC::createNotAnObjectError):
  • VM/Machine.cpp: (JSC::jsLess): (JSC::jsLessEq): (JSC::BytecodeInterpreter::resolve): (JSC::BytecodeInterpreter::resolveSkip): (JSC::BytecodeInterpreter::resolveGlobal): (JSC::BytecodeInterpreter::resolveBase): (JSC::BytecodeInterpreter::resolveBaseAndProperty): (JSC::BytecodeInterpreter::resolveBaseAndFunc): (JSC::BytecodeInterpreter::slideRegisterWindowForCall): (JSC::BytecodeInterpreter::callEval): (JSC::BytecodeInterpreter::BytecodeInterpreter): (JSC::BytecodeInterpreter::initialize): (JSC::BytecodeInterpreter::~BytecodeInterpreter): (JSC::BytecodeInterpreter::dumpCallFrame): (JSC::BytecodeInterpreter::dumpRegisters): (JSC::BytecodeInterpreter::isOpcode): (JSC::BytecodeInterpreter::unwindCallFrame): (JSC::BytecodeInterpreter::throwException): (JSC::BytecodeInterpreter::execute): (JSC::BytecodeInterpreter::debug): (JSC::BytecodeInterpreter::resetTimeoutCheck): (JSC::BytecodeInterpreter::checkTimeout): (JSC::BytecodeInterpreter::createExceptionScope): (JSC::BytecodeInterpreter::tryCachePutByID): (JSC::BytecodeInterpreter::uncachePutByID): (JSC::BytecodeInterpreter::tryCacheGetByID): (JSC::BytecodeInterpreter::uncacheGetByID): (JSC::BytecodeInterpreter::privateExecute): (JSC::BytecodeInterpreter::retrieveArguments): (JSC::BytecodeInterpreter::retrieveCaller): (JSC::BytecodeInterpreter::retrieveLastCaller): (JSC::BytecodeInterpreter::findFunctionCallFrame): (JSC::BytecodeInterpreter::tryCTICachePutByID): (JSC::BytecodeInterpreter::tryCTICacheGetByID): (JSC::BytecodeInterpreter::cti_op_convert_this): (JSC::BytecodeInterpreter::cti_op_end): (JSC::BytecodeInterpreter::cti_op_add): (JSC::BytecodeInterpreter::cti_op_pre_inc): (JSC::BytecodeInterpreter::cti_timeout_check): (JSC::BytecodeInterpreter::cti_register_file_check): (JSC::BytecodeInterpreter::cti_op_loop_if_less): (JSC::BytecodeInterpreter::cti_op_loop_if_lesseq): (JSC::BytecodeInterpreter::cti_op_new_object): (JSC::BytecodeInterpreter::cti_op_put_by_id): (JSC::BytecodeInterpreter::cti_op_put_by_id_second): (JSC::BytecodeInterpreter::cti_op_put_by_id_generic): (JSC::BytecodeInterpreter::cti_op_put_by_id_fail): (JSC::BytecodeInterpreter::cti_op_get_by_id): (JSC::BytecodeInterpreter::cti_op_get_by_id_second): (JSC::BytecodeInterpreter::cti_op_get_by_id_generic): (JSC::BytecodeInterpreter::cti_op_get_by_id_fail): (JSC::BytecodeInterpreter::cti_op_instanceof): (JSC::BytecodeInterpreter::cti_op_del_by_id): (JSC::BytecodeInterpreter::cti_op_mul): (JSC::BytecodeInterpreter::cti_op_new_func): (JSC::BytecodeInterpreter::cti_op_call_JSFunction): (JSC::BytecodeInterpreter::cti_op_call_arityCheck): (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall): (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall): (JSC::BytecodeInterpreter::cti_op_push_activation): (JSC::BytecodeInterpreter::cti_op_call_NotJSFunction): (JSC::BytecodeInterpreter::cti_op_create_arguments): (JSC::BytecodeInterpreter::cti_op_create_arguments_no_params): (JSC::BytecodeInterpreter::cti_op_tear_off_activation): (JSC::BytecodeInterpreter::cti_op_tear_off_arguments): (JSC::BytecodeInterpreter::cti_op_profile_will_call): (JSC::BytecodeInterpreter::cti_op_profile_did_call): (JSC::BytecodeInterpreter::cti_op_ret_scopeChain): (JSC::BytecodeInterpreter::cti_op_new_array): (JSC::BytecodeInterpreter::cti_op_resolve): (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct): (JSC::BytecodeInterpreter::cti_op_construct_NotJSConstruct): (JSC::BytecodeInterpreter::cti_op_get_by_val): (JSC::BytecodeInterpreter::cti_op_resolve_func): (JSC::BytecodeInterpreter::cti_op_sub): (JSC::BytecodeInterpreter::cti_op_put_by_val): (JSC::BytecodeInterpreter::cti_op_put_by_val_array): (JSC::BytecodeInterpreter::cti_op_lesseq): (JSC::BytecodeInterpreter::cti_op_loop_if_true): (JSC::BytecodeInterpreter::cti_op_negate): (JSC::BytecodeInterpreter::cti_op_resolve_base): (JSC::BytecodeInterpreter::cti_op_resolve_skip): (JSC::BytecodeInterpreter::cti_op_resolve_global): (JSC::BytecodeInterpreter::cti_op_div): (JSC::BytecodeInterpreter::cti_op_pre_dec): (JSC::BytecodeInterpreter::cti_op_jless): (JSC::BytecodeInterpreter::cti_op_not): (JSC::BytecodeInterpreter::cti_op_jtrue): (JSC::BytecodeInterpreter::cti_op_post_inc): (JSC::BytecodeInterpreter::cti_op_eq): (JSC::BytecodeInterpreter::cti_op_lshift): (JSC::BytecodeInterpreter::cti_op_bitand): (JSC::BytecodeInterpreter::cti_op_rshift): (JSC::BytecodeInterpreter::cti_op_bitnot): (JSC::BytecodeInterpreter::cti_op_resolve_with_base): (JSC::BytecodeInterpreter::cti_op_new_func_exp): (JSC::BytecodeInterpreter::cti_op_mod): (JSC::BytecodeInterpreter::cti_op_less): (JSC::BytecodeInterpreter::cti_op_neq): (JSC::BytecodeInterpreter::cti_op_post_dec): (JSC::BytecodeInterpreter::cti_op_urshift): (JSC::BytecodeInterpreter::cti_op_bitxor): (JSC::BytecodeInterpreter::cti_op_new_regexp): (JSC::BytecodeInterpreter::cti_op_bitor): (JSC::BytecodeInterpreter::cti_op_call_eval): (JSC::BytecodeInterpreter::cti_op_throw): (JSC::BytecodeInterpreter::cti_op_get_pnames): (JSC::BytecodeInterpreter::cti_op_next_pname): (JSC::BytecodeInterpreter::cti_op_push_scope): (JSC::BytecodeInterpreter::cti_op_pop_scope): (JSC::BytecodeInterpreter::cti_op_typeof): (JSC::BytecodeInterpreter::cti_op_is_undefined): (JSC::BytecodeInterpreter::cti_op_is_boolean): (JSC::BytecodeInterpreter::cti_op_is_number): (JSC::BytecodeInterpreter::cti_op_is_string): (JSC::BytecodeInterpreter::cti_op_is_object): (JSC::BytecodeInterpreter::cti_op_is_function): (JSC::BytecodeInterpreter::cti_op_stricteq): (JSC::BytecodeInterpreter::cti_op_nstricteq): (JSC::BytecodeInterpreter::cti_op_to_jsnumber): (JSC::BytecodeInterpreter::cti_op_in): (JSC::BytecodeInterpreter::cti_op_push_new_scope): (JSC::BytecodeInterpreter::cti_op_jmp_scopes): (JSC::BytecodeInterpreter::cti_op_put_by_index): (JSC::BytecodeInterpreter::cti_op_switch_imm): (JSC::BytecodeInterpreter::cti_op_switch_char): (JSC::BytecodeInterpreter::cti_op_switch_string): (JSC::BytecodeInterpreter::cti_op_del_by_val): (JSC::BytecodeInterpreter::cti_op_put_getter): (JSC::BytecodeInterpreter::cti_op_put_setter): (JSC::BytecodeInterpreter::cti_op_new_error): (JSC::BytecodeInterpreter::cti_op_debug): (JSC::BytecodeInterpreter::cti_vm_throw):
  • VM/Machine.h:
  • VM/Register.h:
  • VM/SamplingTool.cpp: (JSC::SamplingTool::run):
  • VM/SamplingTool.h: (JSC::SamplingTool::SamplingTool):
  • bytecompiler/CodeGenerator.cpp: (JSC::CodeGenerator::generate): (JSC::CodeGenerator::CodeGenerator): (JSC::CodeGenerator::emitOpcode):
  • debugger/DebuggerCallFrame.cpp: (JSC::DebuggerCallFrame::evaluate):
  • jsc.cpp: (runWithScripts):
  • parser/Nodes.cpp: (JSC::ScopeNode::ScopeNode):
  • profiler/ProfileGenerator.cpp: (JSC::ProfileGenerator::addParentForConsoleStart):
  • runtime/ArrayPrototype.cpp: (JSC::arrayProtoFuncPop): (JSC::arrayProtoFuncPush):
  • runtime/Collector.cpp: (JSC::Heap::collect):
  • runtime/ExecState.h: (JSC::ExecState::interpreter):
  • runtime/FunctionPrototype.cpp: (JSC::functionProtoFuncApply):
  • runtime/Interpreter.cpp: (JSC::Interpreter::evaluate):
  • runtime/JSCell.h:
  • runtime/JSFunction.cpp: (JSC::JSFunction::call): (JSC::JSFunction::argumentsGetter): (JSC::JSFunction::callerGetter): (JSC::JSFunction::construct):
  • runtime/JSFunction.h:
  • runtime/JSGlobalData.cpp: (JSC::JSGlobalData::JSGlobalData): (JSC::JSGlobalData::~JSGlobalData):
  • runtime/JSGlobalData.h:
  • runtime/JSGlobalObject.cpp: (JSC::JSGlobalObject::~JSGlobalObject): (JSC::JSGlobalObject::setTimeoutTime): (JSC::JSGlobalObject::startTimeoutCheck): (JSC::JSGlobalObject::stopTimeoutCheck): (JSC::JSGlobalObject::mark):
  • runtime/JSGlobalObjectFunctions.cpp: (JSC::globalFuncEval):
  • runtime/JSString.h:
  • runtime/RegExp.cpp: (JSC::RegExp::RegExp):

JavaScriptGlue:

2008-11-15 Geoffrey Garen <[email protected]>

Reviewed by Sam Weinig.


Updated for JavaScriptCore renames.

  • JSRun.cpp: (JSRun::Evaluate): (JSRun::CheckSyntax):

WebCore:

2008-11-15 Geoffrey Garen <[email protected]>

Reviewed by Sam Weinig.


Updated for JavaScriptCore renames.

  • bindings/js/JSNodeCustom.cpp: (WebCore::JSNode::mark):
  • bindings/js/JSXMLHttpRequestCustom.cpp: (WebCore::JSXMLHttpRequest::send):
  • bindings/js/ScriptController.cpp: (WebCore::ScriptController::evaluate):
  • bindings/js/WorkerScriptController.cpp: (WebCore::WorkerScriptController::evaluate):
  • bindings/objc/WebScriptObject.mm: (-[WebScriptObject evaluateWebScript:]):
  • bridge/NP_jsobject.cpp: (_NPN_Evaluate):
  • bridge/jni/jni_jsobject.mm: (JavaJSObject::eval):
  • page/Console.cpp: (WebCore::retrieveLastCaller): (WebCore::Console::trace):

WebKit/win:

2008-11-15 Geoffrey Garen <[email protected]>

Reviewed by Sam Weinig.


Updated for JavaScriptCore renames.

  • WebScriptCallFrame.cpp: (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString):
  • Property svn:eol-style set to native
File size: 2.7 KB
Line 
1/*
2 * Copyright (C) 1999-2001 Harri Porten ([email protected])
3 * Copyright (C) 2001 Peter Kelly ([email protected])
4 * Copyright (C) 2003, 2007 Apple Inc.
5 *
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.
10 *
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.
15 *
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.
20 *
21 */
22
23#include "config.h"
24#include "Interpreter.h"
25
26#include "Completion.h"
27#include "ExecState.h"
28#include "JSGlobalObject.h"
29#include "JSLock.h"
30#include "Machine.h"
31#include "Parser.h"
32#include "Debugger.h"
33#include <stdio.h>
34
35#if !PLATFORM(WIN_OS)
36#include <unistd.h>
37#endif
38
39namespace JSC {
40
41Completion checkSyntax(ExecState* exec, const SourceCode& source)
42{
43 JSLock lock(exec);
44
45 int errLine;
46 UString errMsg;
47
48 RefPtr<ProgramNode> progNode = exec->globalData().parser->parse<ProgramNode>(exec, exec->dynamicGlobalObject()->debugger(), source, &errLine, &errMsg);
49 if (!progNode)
50 return Completion(Throw, Error::create(exec, SyntaxError, errMsg, errLine, source.provider()->asID(), source.provider()->url()));
51 return Completion(Normal);
52}
53
54Completion evaluate(ExecState* exec, ScopeChain& scopeChain, const SourceCode& source, JSValue* thisValue)
55{
56 JSLock lock(exec);
57
58 int errLine;
59 UString errMsg;
60 RefPtr<ProgramNode> programNode = exec->globalData().parser->parse<ProgramNode>(exec, exec->dynamicGlobalObject()->debugger(), source, &errLine, &errMsg);
61
62 if (!programNode)
63 return Completion(Throw, Error::create(exec, SyntaxError, errMsg, errLine, source.provider()->asID(), source.provider()->url()));
64
65 JSObject* thisObj = (!thisValue || thisValue->isUndefinedOrNull()) ? exec->dynamicGlobalObject() : thisValue->toObject(exec);
66
67 JSValue* exception = noValue();
68 JSValue* result = exec->interpreter()->execute(programNode.get(), exec, scopeChain.node(), thisObj, &exception);
69
70 if (exception) {
71 if (exception->isObject() && asObject(exception)->isWatchdogException())
72 return Completion(Interrupted, result);
73 return Completion(Throw, exception);
74 }
75 return Completion(Normal, result);
76}
77
78} // namespace JSC
Note: See TracBrowser for help on using the repository browser.