Changeset 47304 in webkit for trunk/JavaScriptCore/runtime
- Timestamp:
- Aug 14, 2009, 6:14:00 PM (16 years ago)
- Location:
- trunk/JavaScriptCore/runtime
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/runtime/Completion.cpp
r44224 r47304 42 42 JSLock lock(exec); 43 43 44 int errLine; 45 UString errMsg; 44 ProgramExecutable program(source); 45 JSObject* error = program.parse(exec); 46 if (error) 47 return Completion(Throw, error); 46 48 47 RefPtr<ProgramNode> progNode = exec->globalData().parser->parse<ProgramNode>(exec, exec->dynamicGlobalObject()->debugger(), source, &errLine, &errMsg);48 if (!progNode)49 return Completion(Throw, Error::create(exec, SyntaxError, errMsg, errLine, source.provider()->asID(), source.provider()->url()));50 49 return Completion(Normal); 51 50 } … … 54 53 { 55 54 JSLock lock(exec); 56 57 int errLine;58 UString errMsg;59 RefPtr<ProgramNode> programNode = exec->globalData().parser->parse<ProgramNode>(exec, exec->dynamicGlobalObject()->debugger(), source, &errLine, &errMsg);60 55 61 if (!programNode) 62 return Completion(Throw, Error::create(exec, SyntaxError, errMsg, errLine, source.provider()->asID(), source.provider()->url())); 56 ProgramExecutable program(source); 57 JSObject* error = program.parse(exec); 58 if (error) 59 return Completion(Throw, error); 63 60 64 61 JSObject* thisObj = (!thisValue || thisValue.isUndefinedOrNull()) ? exec->dynamicGlobalObject() : thisValue.toObject(exec); 65 62 66 63 JSValue exception; 67 JSValue result = exec->interpreter()->execute( programNode.get(), exec, scopeChain.node(), thisObj, &exception);64 JSValue result = exec->interpreter()->execute(&program, exec, scopeChain.node(), thisObj, &exception); 68 65 69 66 if (exception) { -
trunk/JavaScriptCore/runtime/Error.cpp
r43222 r47304 98 98 } 99 99 100 JSObject* throwError(ExecState* exec, JSObject* error) 101 { 102 exec->setException(error); 103 return error; 104 } 105 100 106 JSObject* throwError(ExecState* exec, ErrorType type) 101 107 { -
trunk/JavaScriptCore/runtime/Error.h
r37938 r47304 60 60 JSObject* throwError(ExecState*, ErrorType, const char* message); 61 61 JSObject* throwError(ExecState*, ErrorType); 62 JSObject* throwError(ExecState*, JSObject*); 62 63 63 64 } // namespace JSC -
trunk/JavaScriptCore/runtime/FunctionConstructor.cpp
r43661 r47304 67 67 } 68 68 69 FunctionBodyNode* extractFunctionBody(ProgramNode* program)70 {71 if (!program)72 return 0;73 74 StatementVector& children = program->children();75 if (children.size() != 1)76 return 0;77 78 StatementNode* exprStatement = children[0];79 ASSERT(exprStatement);80 ASSERT(exprStatement->isExprStatement());81 if (!exprStatement || !exprStatement->isExprStatement())82 return 0;83 84 ExpressionNode* funcExpr = static_cast<ExprStatementNode*>(exprStatement)->expr();85 ASSERT(funcExpr);86 ASSERT(funcExpr->isFuncExprNode());87 if (!funcExpr || !funcExpr->isFuncExprNode())88 return 0;89 90 FunctionBodyNode* body = static_cast<FuncExprNode*>(funcExpr)->body();91 ASSERT(body);92 return body;93 }94 95 69 // ECMA 15.3.2 The Function Constructor 96 70 JSObject* constructFunction(ExecState* exec, const ArgList& args, const Identifier& functionName, const UString& sourceURL, int lineNumber) … … 114 88 UString errMsg; 115 89 SourceCode source = makeSource(program, sourceURL, lineNumber); 116 RefPtr<ProgramNode> programNode = exec->globalData().parser->parse<ProgramNode>(exec, exec->dynamicGlobalObject()->debugger(), source, &errLine, &errMsg); 117 118 FunctionBodyNode* body = extractFunctionBody(programNode.get()); 90 RefPtr<FunctionBodyNode> body = exec->globalData().parser->parseFunctionFromGlobalCode(exec, exec->dynamicGlobalObject()->debugger(), source, &errLine, &errMsg); 119 91 if (!body) 120 92 return throwError(exec, SyntaxError, errMsg, errLine, source.provider()->asID(), source.provider()->url()); … … 122 94 JSGlobalObject* globalObject = exec->lexicalGlobalObject(); 123 95 ScopeChain scopeChain(globalObject, globalObject->globalData(), exec->globalThisValue()); 124 return new (exec) JSFunction(exec, functionName, body , scopeChain.node());96 return new (exec) JSFunction(exec, functionName, body.get(), scopeChain.node()); 125 97 } 126 98 -
trunk/JavaScriptCore/runtime/FunctionConstructor.h
r40993 r47304 27 27 28 28 class FunctionPrototype; 29 class ProgramNode;30 class FunctionBodyNode;31 29 32 30 class FunctionConstructor : public InternalFunction { … … 42 40 JSObject* constructFunction(ExecState*, const ArgList&); 43 41 44 FunctionBodyNode* extractFunctionBody(ProgramNode*);45 46 42 } // namespace JSC 47 43 -
trunk/JavaScriptCore/runtime/JSGlobalData.cpp
r47267 r47304 237 237 if (!lazyNumericCompareFunction.size() && !initializingLazyNumericCompareFunction) { 238 238 initializingLazyNumericCompareFunction = true; 239 RefPtr<ProgramNode> programNode = parser->parse<ProgramNode>(exec, 0, makeSource(UString("(function (v1, v2) { return v1 - v2; })")), 0, 0); 240 RefPtr<FunctionBodyNode> functionBody = extractFunctionBody(programNode.get()); 239 RefPtr<FunctionBodyNode> functionBody = parser->parseFunctionFromGlobalCode(exec, 0, makeSource(UString("(function (v1, v2) { return v1 - v2; })")), 0, 0); 241 240 lazyNumericCompareFunction = functionBody->bytecode(exec->scopeChain()).instructions(); 242 241 initializingLazyNumericCompareFunction = false; -
trunk/JavaScriptCore/runtime/JSGlobalObject.cpp
r47292 r47304 113 113 headObject = 0; 114 114 115 HashSet< ProgramCodeBlock*>::const_iterator end = codeBlocks().end();116 for (HashSet< ProgramCodeBlock*>::const_iterator it = codeBlocks().begin(); it != end; ++it)115 HashSet<GlobalCodeBlock*>::const_iterator end = codeBlocks().end(); 116 for (HashSet<GlobalCodeBlock*>::const_iterator it = codeBlocks().begin(); it != end; ++it) 117 117 (*it)->clearGlobalObject(); 118 118 … … 367 367 JSVariableObject::markChildren(markStack); 368 368 369 HashSet< ProgramCodeBlock*>::const_iterator end = codeBlocks().end();370 for (HashSet< ProgramCodeBlock*>::const_iterator it = codeBlocks().begin(); it != end; ++it)369 HashSet<GlobalCodeBlock*>::const_iterator end = codeBlocks().end(); 370 for (HashSet<GlobalCodeBlock*>::const_iterator it = codeBlocks().begin(); it != end; ++it) 371 371 (*it)->markAggregate(markStack); 372 372 -
trunk/JavaScriptCore/runtime/JSGlobalObject.h
r47292 r47304 41 41 class GlobalEvalFunction; 42 42 class NativeErrorConstructor; 43 class GlobalCodeBlock; 43 44 class ObjectConstructor; 44 class ProgramCodeBlock;45 45 class PrototypeFunction; 46 46 class RegExpConstructor; … … 152 152 RefPtr<JSGlobalData> globalData; 153 153 154 HashSet< ProgramCodeBlock*> codeBlocks;154 HashSet<GlobalCodeBlock*> codeBlocks; 155 155 }; 156 156 … … 258 258 virtual bool isDynamicScope() const; 259 259 260 HashSet< ProgramCodeBlock*>& codeBlocks() { return d()->codeBlocks; }260 HashSet<GlobalCodeBlock*>& codeBlocks() { return d()->codeBlocks; } 261 261 262 262 void copyGlobalsFrom(RegisterFile&); -
trunk/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
r46598 r47304 287 287 return parsedObject; 288 288 289 int errLine; 290 UString errMsg; 291 292 SourceCode source = makeSource(s); 293 RefPtr<EvalNode> evalNode = exec->globalData().parser->parse<EvalNode>(exec, exec->dynamicGlobalObject()->debugger(), source, &errLine, &errMsg); 294 295 if (!evalNode) 296 return throwError(exec, SyntaxError, errMsg, errLine, source.provider()->asID(), NULL); 297 298 return exec->interpreter()->execute(evalNode.get(), exec, thisObject, static_cast<JSGlobalObject*>(unwrappedObject)->globalScopeChain().node(), exec->exceptionSlot()); 289 EvalExecutable eval(makeSource(s)); 290 JSObject* error = eval.parse(exec); 291 if (error) 292 return throwError(exec, error); 293 294 return exec->interpreter()->execute(&eval, exec, thisObject, static_cast<JSGlobalObject*>(unwrappedObject)->globalScopeChain().node(), exec->exceptionSlot()); 299 295 } 300 296
Note:
See TracChangeset
for help on using the changeset viewer.