JavaScriptCore:
authorkdecker <kdecker@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Jun 2004 18:49:54 +0000 (18:49 +0000)
committerkdecker <kdecker@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Jun 2004 18:49:54 +0000 (18:49 +0000)
        Reviewed by Dave.

        - ObjC bindings do not (yet) pass along sourceurl or line numbers
        - we don't have a way as of yet to accomidate line numbers and urls for dynamic javascript
        - changed the wording of an error message
        - the lexer, parser, and interpreter have been made "sourceURL aware"
        - stored the url into Error

        * bindings/NP_jsobject.cpp:
        (NPN_Evaluate):
        * bindings/jni/jni_jsobject.cpp:
        (JSObject::eval):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject evaluateWebScript:]):
        * kjs/function.cpp:
        (GlobalFuncImp::call):
        * kjs/function_object.cpp:
        (FunctionObjectImp::construct):
        * kjs/internal.cpp:
        (Parser::parse):
        (InterpreterImp::checkSyntax):
        (InterpreterImp::evaluate):
        * kjs/internal.h:
        * kjs/interpreter.cpp:
        (Interpreter::evaluate):
        * kjs/interpreter.h:
        * kjs/lexer.cpp:
        (Lexer::setCode):
        * kjs/lexer.h:
        (KJS::Lexer::sourceURL):
        * kjs/nodes.cpp:
        (Node::Node):
        (Node::throwError):
        (FunctionCallNode::evaluate):
        * kjs/nodes.h:
        * kjs/object.cpp:
        (KJS::Error::create):
        * kjs/object.h:

WebCore:

        Reviewed by Dave.

        - kwq/KWQKHTMLPart.mm: addMessagetoConsole places sourceURL in the dictionary
        - khtml/xml/dom_docimpl.cpp: right now, we don't have a way to get a url,
          so we leave this blank
        - khtml/ecma/kjs_window.cpp: still need to get the real line number and sourceURL
        - khtml/ecma/kjs_proxy.cpp: now passing the sourceURL to addMessageToConsole
        - khtml/ecma/kjs_events.cpp: still need to grab an accurate line number and sourceURL

        * khtml/ecma/kjs_events.cpp:
        (JSEventListener::handleEvent):
        (JSLazyEventListener::handleEvent):
        * khtml/ecma/kjs_proxy.cpp:
        (KJSProxyImpl::evaluate):
        * khtml/ecma/kjs_window.cpp:
        (Window::isSafeScript):
        (ScheduledAction::execute):
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::open):
        * kwq/KWQKHTMLPart.h:
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::addMessageToConsole):

WebBrowser:

        Reviewed by Dave.

        - model is now source url aware
        - refined the ui with custom NSCells that now display error messages,
          line numbers, and source urls
        - increased the row size to 35 pixels to accomimdate for ErrorCells

        * Debug/ErrorCell.h: Added.
        * Debug/ErrorCell.m: Added.
        (-[ErrorCell setURL:]):
        (-[ErrorCell setErrorMessasge:]):
        (-[ErrorCell setLineNumber:]):
        (-[ErrorCell drawInteriorWithFrame:inView:]):
        * Debug/ErrorConsole.nib:
        * Debug/ErrorConsoleController.m:
        (-[ErrorConsoleController init]):
        (-[ErrorConsoleController awakeFromNib]):
        * Debug/ErrorConsoleModel.h:
        * Debug/ErrorConsoleModel.m:
        (-[ErrorConsoleModel tableView:willDisplayCell:forTableColumn:row:]):
        (-[ErrorConsoleModel count]):
        (-[ErrorConsoleModel selectedURL]):
        * WebBrowser.pbproj/project.pbxproj:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@6768 268f45cc-cd09-0410-ab3c-d52691b4dbfc

23 files changed:
JavaScriptCore/ChangeLog
JavaScriptCore/bindings/NP_jsobject.cpp
JavaScriptCore/bindings/jni/jni_jsobject.cpp
JavaScriptCore/bindings/objc/WebScriptObject.mm
JavaScriptCore/kjs/function.cpp
JavaScriptCore/kjs/function_object.cpp
JavaScriptCore/kjs/internal.cpp
JavaScriptCore/kjs/internal.h
JavaScriptCore/kjs/interpreter.cpp
JavaScriptCore/kjs/interpreter.h
JavaScriptCore/kjs/lexer.cpp
JavaScriptCore/kjs/lexer.h
JavaScriptCore/kjs/nodes.cpp
JavaScriptCore/kjs/nodes.h
JavaScriptCore/kjs/object.cpp
JavaScriptCore/kjs/object.h
WebCore/ChangeLog-2005-08-23
WebCore/khtml/ecma/kjs_events.cpp
WebCore/khtml/ecma/kjs_proxy.cpp
WebCore/khtml/ecma/kjs_window.cpp
WebCore/khtml/xml/dom_docimpl.cpp
WebCore/kwq/KWQKHTMLPart.h
WebCore/kwq/KWQKHTMLPart.mm

index cc20527f8dc22ebb8c8894cc23a35846c20604b4..a5c0111f7e8fabc978235e1f3950417c236034ca 100644 (file)
@@ -1,3 +1,44 @@
+2004-06-04  Kevin Decker  <kdecker@apple.com>
+
+        Reviewed by Dave.
+
+        - ObjC bindings do not (yet) pass along sourceurl or line numbers
+        - we don't have a way as of yet to accomidate line numbers and urls for dynamic javascript
+        - changed the wording of an error message
+        - the lexer, parser, and interpreter have been made "sourceURL aware"
+        - stored the url into Error
+         
+        * bindings/NP_jsobject.cpp:
+        (NPN_Evaluate):
+        * bindings/jni/jni_jsobject.cpp:
+        (JSObject::eval):
+        * bindings/objc/WebScriptObject.mm:
+        (-[WebScriptObject evaluateWebScript:]):
+        * kjs/function.cpp:
+        (GlobalFuncImp::call):
+        * kjs/function_object.cpp:
+        (FunctionObjectImp::construct):
+        * kjs/internal.cpp:
+        (Parser::parse):
+        (InterpreterImp::checkSyntax):
+        (InterpreterImp::evaluate):
+        * kjs/internal.h:
+        * kjs/interpreter.cpp:
+        (Interpreter::evaluate):
+        * kjs/interpreter.h:
+        * kjs/lexer.cpp:
+        (Lexer::setCode):
+        * kjs/lexer.h:
+        (KJS::Lexer::sourceURL):
+        * kjs/nodes.cpp:
+        (Node::Node):
+        (Node::throwError):
+        (FunctionCallNode::evaluate):
+        * kjs/nodes.h:
+        * kjs/object.cpp:
+        (KJS::Error::create):
+        * kjs/object.h:
+
 2004-06-04  Richard Williamson   <rjw@apple.com>
 
         Fixed crash when attempting to access properties on nil
index 0baf622672e53d7f14b17848cfceb65f0bade0cc..7821a4941d284c3f6317563132f202d90059d9a0 100644 (file)
@@ -119,7 +119,7 @@ void NPN_Evaluate (NPScriptObject *o, NPString *s, NPScriptResultFunctionPtr res
     NPUTF16 *scriptString;
     unsigned int UTF16Length;
     convertNPStringToUTF16 (s, &scriptString, &UTF16Length);    // requires free() of returned memory.
-    KJS::Value result = obj->root->interpreter()->evaluate(UString((const UChar *)scriptString,UTF16Length)).value();
+    KJS::Value result = obj->root->interpreter()->evaluate(UString(), 0, UString((const UChar *)scriptString,UTF16Length)).value();
     Interpreter::unlock();
     
     free ((void *)scriptString);
index 5565b41958a123a7daa26847b8c5031ba6fa51ff..138bc81a7f4788ad734ec165384440f7a4874ccd 100644 (file)
@@ -191,7 +191,7 @@ jobject JSObject::eval(jstring script) const
 
     Object thisObj = Object(const_cast<ObjectImp*>(_imp));
     Interpreter::lock();
-    KJS::Value result = _root->interpreter()->evaluate(JavaString(script).ustring(),thisObj).value();
+    KJS::Value result = _root->interpreter()->evaluate(UString(), 0, JavaString(script).ustring(),thisObj).value();
     Interpreter::unlock();
     return convertValueToJObject (result);
 }
index 77bd951ef8c227f344a992ec69ac155268c43d1c..854da8c17d5a4d9c3c237a64e5b041277a828692 100644 (file)
@@ -160,7 +160,7 @@ static KJS::List listFromNSArray(ExecState *exec, NSArray *array)
     Object thisObj = Object(const_cast<ObjectImp*>([self _imp]));
     Interpreter::lock();
     Value v = convertObjcValueToValue(exec, &script, ObjcObjectType);
-    KJS::Value result = _private->root->interpreter()->evaluate(v.toString(exec)).value();
+    KJS::Value result = _private->root->interpreter()->evaluate(UString(), 0, v.toString(exec)).value();
     Interpreter::unlock();
     
     if (exec->hadException()) {
index 85d21150d38f49f677917f6c562b72bb2dac3e1e..fbbf6cacf0e612c41f8498cbe0b3b0c89c42802a 100644 (file)
@@ -526,7 +526,7 @@ Value GlobalFuncImp::call(ExecState *exec, Object &/*thisObj*/, const List &args
       int sid;
       int errLine;
       UString errMsg;
-      ProgramNode *progNode = Parser::parse(s.data(),s.size(),&sid,&errLine,&errMsg);
+      ProgramNode *progNode = Parser::parse(UString(), 0, s.data(),s.size(),&sid,&errLine,&errMsg);
 
       // no program node means a syntax occurred
       if (!progNode) {
index 0847ea5fe4aef6a20c78c0e38631f2404134fa0a..ecbbd4700f37e6297f1cf5fd1007fe65cba4c70c 100644 (file)
@@ -211,7 +211,7 @@ Object FunctionObjectImp::construct(ExecState *exec, const List &args)
   int sid;
   int errLine;
   UString errMsg;
-  ProgramNode *progNode = Parser::parse(body.data(),body.size(),&sid,&errLine,&errMsg);
+  ProgramNode *progNode = Parser::parse(UString(), 0, body.data(),body.size(),&sid,&errLine,&errMsg);
 
   // notify debugger that source has been parsed
   Debugger *dbg = exec->dynamicInterpreter()->imp()->debugger();
index 8cbf2f62bc7ad847ec4e63d3bd89af21dd49917a..4ba9acde9adf96b27c911b0f54d16c70670d5ace 100644 (file)
@@ -435,15 +435,16 @@ void ContextImp::mark()
 ProgramNode *Parser::progNode = 0;
 int Parser::sid = 0;
 
-ProgramNode *Parser::parse(const UChar *code, unsigned int length, int *sourceId,
+ProgramNode *Parser::parse(const UString &sourceURL, int startingLineNumber,
+                           const UChar *code, unsigned int length, int *sourceId,
                           int *errLine, UString *errMsg)
 {
   if (errLine)
     *errLine = -1;
   if (errMsg)
     *errMsg = 0;
-
-  Lexer::curr()->setCode(code, length);
+  
+  Lexer::curr()->setCode(sourceURL, startingLineNumber, code, length);
   progNode = 0;
   sid++;
   if (sourceId)
@@ -762,7 +763,7 @@ void InterpreterImp::mark()
 bool InterpreterImp::checkSyntax(const UString &code)
 {
   // Parser::parse() returns 0 in a syntax error occurs, so we just check for that
-  ProgramNode *progNode = Parser::parse(code.data(),code.size(),0,0,0);
+  ProgramNode *progNode = Parser::parse(UString(), 0, code.data(),code.size(),0,0,0);
   bool ok = (progNode != 0);
   if (progNode) {
     // must ref and deref to clean up properly
@@ -773,7 +774,7 @@ bool InterpreterImp::checkSyntax(const UString &code)
   return ok;
 }
 
-Completion InterpreterImp::evaluate(const UString &code, const Value &thisV)
+Completion InterpreterImp::evaluate(const UString &code, const Value &thisV, const UString &sourceURL, int startingLineNumber)
 {
 #if APPLE_CHANGES
   lockInterpreter();
@@ -788,12 +789,12 @@ Completion InterpreterImp::evaluate(const UString &code, const Value &thisV)
     return Completion(Throw,Error::create(globExec,GeneralError,"Recursion too deep"));
 #endif
   }
-
+  
   // parse the source code
   int sid;
   int errLine;
   UString errMsg;
-  ProgramNode *progNode = Parser::parse(code.data(),code.size(),&sid,&errLine,&errMsg);
+  ProgramNode *progNode = Parser::parse(sourceURL, startingLineNumber, code.data(),code.size(),&sid,&errLine,&errMsg);
 
   // notify debugger that source has been parsed
   if (dbg) {
@@ -808,10 +809,10 @@ Completion InterpreterImp::evaluate(const UString &code, const Value &thisV)
       return Completion(Break);
 #endif
   }
-
+  
   // no program node means a syntax error occurred
   if (!progNode) {
-    Object err = Error::create(globExec,SyntaxError,errMsg.ascii(),errLine);
+    Object err = Error::create(globExec,SyntaxError,errMsg.ascii(),errLine, -1, &sourceURL);
     err.put(globExec,"sid",Number(sid));
 #if APPLE_CHANGES
     unlockInterpreter();
index 26a059d0651a0f8393cf63e277034ba9e677fe3d..9a9d89f00a216f5756140dfef561ff9457be36b8 100644 (file)
@@ -204,7 +204,8 @@ namespace KJS {
    */
   class Parser {
   public:
-    static ProgramNode *parse(const UChar *code, unsigned int length, int *sourceId = 0,
+    static ProgramNode *parse(const UString &sourceURL, int startingLineNumber,
+                              const UChar *code, unsigned int length, int *sourceId = 0,
                              int *errLine = 0, UString *errMsg = 0);
 
     static ProgramNode *progNode;
@@ -270,7 +271,7 @@ namespace KJS {
 
     ExecState *globalExec() { return globExec; }
     bool checkSyntax(const UString &code);
-    Completion evaluate(const UString &code, const Value &thisV);
+    Completion evaluate(const UString &code, const Value &thisV, const UString &sourceURL, int startingLineNumber);
     Debugger *debugger() const { return dbg; }
     void setDebugger(Debugger *d);
 
index 2c6ab148042b3dcec9bc252b1de3c25388778571..9dbee18197261637f1b49640768a9257110e98f2 100644 (file)
@@ -115,15 +115,15 @@ bool Interpreter::checkSyntax(const UString &code)
   return rep->checkSyntax(code);
 }
 
-Completion Interpreter::evaluate(const UString &code, const Value &thisV, const UString &filename)
+Completion Interpreter::evaluate(const UString &sourceURL, int startingLineNumber, const UString &code, const Value &thisV)
 {
-  Completion comp = rep->evaluate(code,thisV);
+  Completion comp = rep->evaluate(code,thisV, sourceURL, startingLineNumber);
 
 #if APPLE_CHANGES
   if (shouldPrintExceptions() && comp.complType() == Throw) {
     lock();
     ExecState *exec = rep->globalExec();
-    char *f = strdup(filename.ascii());
+    char *f = strdup(sourceURL.ascii());
     const char *message = comp.value().toObject(exec).toString(exec).ascii();
     printf("%s:%s\n", f, message);
     free(f);
index 3dbd579715c118b181c9b30ce61aa592770f7419..61e45e244bafc70c79d380942c3769f29a3b69dd 100644 (file)
@@ -198,7 +198,7 @@ namespace KJS {
      * execution. This should either be Null() or an Object.
      * @return A completion object representing the result of the execution.
      */
-    Completion evaluate(const UString &code, const Value &thisV = Value(), const UString &filename = UString());
+    Completion evaluate(const UString &sourceURL, int startingLineNumber, const UString &code, const Value &thisV = Value());
 
     /**
      * @internal
index 5eee46706e77bc5ac707aa9a4601d7f2110988b5..a1661553e83762af15aabb78d7a84c5fbfdda620 100644 (file)
@@ -101,9 +101,10 @@ void Lexer::globalClear()
 }
 #endif
 
-void Lexer::setCode(const UChar *c, unsigned int len)
+void Lexer::setCode(const UString &sourceURL, int startingLineNumber, const UChar *c, unsigned int len)
 {
   yylineno = 1;
+  m_sourceURL = sourceURL;
   restrKeyword = false;
   delimited = false;
   eatNextIdentifier = false;
index 512c234da780211208b31c2b09704ba5e92c5376..350d5fdcc0d37f95b7d4335447e53e4d81723d9e 100644 (file)
@@ -38,10 +38,11 @@ namespace KJS {
     ~Lexer();
     static Lexer *curr();
 
-    void setCode(const UChar *c, unsigned int len);
+    void setCode(const UString &sourceURL, int startingLineNumber, const UChar *c, unsigned int len);
     int lex();
 
     int lineNo() const { return yylineno + 1; }
+    UString sourceURL() const { return m_sourceURL; }
 
     bool prevTerminator() const { return terminator; }
 
@@ -74,6 +75,7 @@ namespace KJS {
 
   private:
     int yylineno;
+    UString m_sourceURL;
     bool done;
     char *buffer8;
     UChar *buffer16;
index 5e35056437b1b5e4660d3298a8a9b5d49ceb0bba..8acf50536a2c3756f5b3c903eed345632bd62084 100644 (file)
@@ -89,6 +89,7 @@ std::list<Node *> * Node::s_nodes = 0L;
 Node::Node()
 {
   line = Lexer::curr()->lineNo();
+  sourceURL = Lexer::curr()->sourceURL();
   refcount = 0;
 #ifdef KJS_DEBUG_MEM
   if (!s_nodes)
@@ -125,7 +126,7 @@ void Node::finalCheck()
 
 Value Node::throwError(ExecState *exec, ErrorType e, const char *msg)
 {
-  Object err = Error::create(exec, e, msg, lineNo(), sourceId());
+  Object err = Error::create(exec, e, msg, lineNo(), sourceId(), &sourceURL);
   exec->setException(err);
   return err;
 }
@@ -689,7 +690,7 @@ Value FunctionCallNode::evaluate(ExecState *exec)
   Value v = ref.getValue(exec);
 
   if (v.type() != ObjectType) {
-    return throwError(exec, TypeError, "Value %s (result of expression %s) is not object. Cannot be called.", v, expr);
+    return throwError(exec, TypeError, "Value %s (result of expression %s) is not object.", v, expr);
   }
 
   Object func = Object(static_cast<ObjectImp*>(v.imp()));
index 9d52751540e803fddf655555b8277ba2e0656419..041fba7913df8bea6de976f7b5a99d19edc9e2f7 100644 (file)
@@ -102,6 +102,7 @@ namespace KJS {
     Value throwError(ExecState *exec, ErrorType e, const char *msg, Value v, Node *expr);
     Value throwError(ExecState *exec, ErrorType e, const char *msg, Identifier label);
     int line;
+    UString sourceURL;
     unsigned int refcount;
     virtual int sourceId() const { return -1; }
   private:
index 6c26619db58b75dfffc025d181df6326b7464005..9ec5f42ac4909f95c5a2426723b7522d9816dc43 100644 (file)
@@ -492,7 +492,7 @@ const char * const errorNamesArr[] = {
 const char * const * const Error::errorNames = errorNamesArr;
 
 Object Error::create(ExecState *exec, ErrorType errtype, const char *message,
-                     int lineno, int sourceId)
+                     int lineno, int sourceId, const UString *sourceURL)
 {
   Object cons;
   switch (errtype) {
@@ -530,6 +530,8 @@ Object Error::create(ExecState *exec, ErrorType errtype, const char *message,
   if (sourceId != -1)
     err.put(exec, "sourceId", Number(sourceId));
 
+   err.put(exec,"sourceURL", String(*sourceURL));
   return err;
 
 /*
index 9d312c7807f3c293d34a64d346adf78654dcae8f..4b1efbb91b1329c9062d86e2c29ca27d5caacf88 100644 (file)
@@ -635,7 +635,7 @@ namespace KJS {
      */
     static Object create(ExecState *exec, ErrorType errtype = GeneralError,
                          const char *message = 0, int lineno = -1,
-                         int sourceId = -1);
+                         int sourceId = -1, const UString *sourceURL = 0);
 
     /**
      * Array of error names corresponding to @ref ErrorType
index 3ed32cf2c66e3166e42525fe30dcb2227160c1d5..44dd9aac1fa2b4344da0f24e079f1def919def64 100644 (file)
@@ -1,3 +1,28 @@
+2004-06-04  Kevin Decker  <kdecker@apple.com>
+
+        Reviewed by Dave.
+
+        - kwq/KWQKHTMLPart.mm: addMessagetoConsole places sourceURL in the dictionary
+        - khtml/xml/dom_docimpl.cpp: right now, we don't have a way to get a url,
+          so we leave this blank
+        - khtml/ecma/kjs_window.cpp: still need to get the real line number and sourceURL
+        - khtml/ecma/kjs_proxy.cpp: now passing the sourceURL to addMessageToConsole
+        - khtml/ecma/kjs_events.cpp: still need to grab an accurate line number and sourceURL
+        
+        * khtml/ecma/kjs_events.cpp:
+        (JSEventListener::handleEvent):
+        (JSLazyEventListener::handleEvent):
+        * khtml/ecma/kjs_proxy.cpp:
+        (KJSProxyImpl::evaluate):
+        * khtml/ecma/kjs_window.cpp:
+        (Window::isSafeScript):
+        (ScheduledAction::execute):
+        * khtml/xml/dom_docimpl.cpp:
+        (DocumentImpl::open):
+        * kwq/KWQKHTMLPart.h:
+        * kwq/KWQKHTMLPart.mm:
+        (KWQKHTMLPart::addMessageToConsole):
+
 2004-06-04  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by Hyatt
index 5a18f3c87bcaf5a65f0af42c4ba7462b22b14ac8..d2d744d3cd57205473668eb7cbaa483ddbf81022 100644 (file)
@@ -116,11 +116,12 @@ void JSEventListener::handleEvent(DOM::Event &evt, bool isWindowEvent)
         KJS::Interpreter::lock();
         char *message = exec->exception().toObject(exec).get(exec, messagePropertyName).toString(exec).ascii();
         int lineNumber =  exec->exception().toObject(exec).get(exec, "line").toInt32(exec);
+        UString sourceURL = exec->exception().toObject(exec).get(exec, "sourceURL").toString(exec);
         KJS::Interpreter::unlock();
         if (Interpreter::shouldPrintExceptions()) {
            printf("(event handler):%s\n", message);
        }
-        KWQ(part)->addMessageToConsole(message, lineNumber );
+        KWQ(part)->addMessageToConsole(message, lineNumber, sourceURL.qstring());
         exec->clearException();
     }
 #else
@@ -163,7 +164,7 @@ JSLazyEventListener::JSLazyEventListener(QString _code, const Object &_win, bool
 void JSLazyEventListener::handleEvent(DOM::Event &evt, bool isWindowEvent)
 {
   parseCode();
-  if (!listener.isNull()) {
+  if (!listener.isNull()) { 
     JSEventListener::handleEvent(evt, isWindowEvent);
   }
 }
index 31f733ee2eb6f8ddaf145cb9b21a3b103dbb6005..919e3731b9f9f4f2a74d8a004fdbcf578699f976 100644 (file)
@@ -115,7 +115,7 @@ QVariant KJSProxyImpl::evaluate(QString filename, int baseLine,
   KJS::Value thisNode = n.isNull() ? Window::retrieve( m_part ) : getDOMNode(m_script->globalExec(),n);
 
   UString code( str );
-  Completion comp = m_script->evaluate(code, thisNode, filename);
+  Completion comp = m_script->evaluate(filename, baseLine, code, thisNode);
   bool success = ( comp.complType() == Normal ) || ( comp.complType() == ReturnValue );  
 #ifdef KJS_DEBUGGER
     //    KJSDebugWin::instance()->setCode(QString::null);
@@ -129,13 +129,15 @@ QVariant KJSProxyImpl::evaluate(QString filename, int baseLine,
     if ( comp.complType() == Throw )
     {
         KJS::Interpreter::lock();
-        UString msg = comp.value().toString(m_script->globalExec());
+        UString errorMessage = comp.value().toString(m_script->globalExec());
         int lineNumber =  comp.value().toObject(m_script->globalExec()).get(m_script->globalExec(), "line").toInt32(m_script->globalExec());
+        UString sourceURL = comp.value().toObject(m_script->globalExec()).get(m_script->globalExec(), "sourceURL").toString(m_script->globalExec());
         KJS::Interpreter::unlock();
+
 #if APPLE_CHANGES
-        KWQ(m_part)->addMessageToConsole(msg.qstring(), lineNumber);
+        KWQ(m_part)->addMessageToConsole(errorMessage.qstring(), lineNumber, sourceURL.qstring());
 #else
-        kdWarning(6070) << "Script threw exception: " << msg.qstring() << endl;
+        kdWarning(6070) << "Script threw exception: " << errorMessage.qstring() << endl;
 #endif
     }
     return QVariant();
index 4ab08425dee8d09811f0e40cfa0b75a5a94a7548..a92dadde2782000da09dde8c18dadbb778dc6756 100644 (file)
@@ -1050,7 +1050,7 @@ bool Window::isSafeScript(ExecState *exec) const
       QString message;
       message.sprintf("Unsafe JavaScript attempt to access frame with URL %s from frame with URL %s. Domains must match.\n", 
                       thisDocument->URL().latin1(), actDocument->URL().latin1());
-      KWQ(m_part)->addMessageToConsole(message, 1);
+      KWQ(m_part)->addMessageToConsole(message, 1, QString()); //fixme: provide a real line number and sourceurl
   }
 #endif
   
@@ -1684,7 +1684,7 @@ void ScheduledAction::execute(Window *window)
          if (Interpreter::shouldPrintExceptions()) {
            printf("(timer):%s\n", message);
          }
-          KWQ(window->m_part)->addMessageToConsole(message, lineNumber);
+          KWQ(window->m_part)->addMessageToConsole(message, lineNumber, QString());
 #endif
          exec->clearException();
        }
index 497d557833fbe1c2b30082e0742fcc9d4825b3ac..a31376254063a2c7a3f134d27d7159bf8f6d3c15 100644 (file)
@@ -1274,8 +1274,9 @@ void DocumentImpl::open(  )
     connect(m_tokenizer,SIGNAL(finishedParsing()),this,SIGNAL(finishedParsing()));
     m_tokenizer->begin();
 
-    if (m_view && m_view->part()->jScript())
-        m_view->part()->jScript()->setSourceFile(m_url,"");
+    if (m_view && m_view->part()->jScript()) {
+        m_view->part()->jScript()->setSourceFile(m_url,""); //fixme
+    }
 }
 
 HTMLElementImpl* DocumentImpl::body()
index 41c347307ad2a4595499e5206022595398b9da00..696d3503d0c031d61b2c955a80a6860caeb5cecf 100644 (file)
@@ -181,7 +181,7 @@ public:
     void runJavaScriptAlert(const QString &message);
     bool runJavaScriptConfirm(const QString &message);
     bool runJavaScriptPrompt(const QString &message, const QString &defaultValue, QString &result);
-    void KWQKHTMLPart::addMessageToConsole(const QString &message, const unsigned int lineNumber);
+    void KWQKHTMLPart::addMessageToConsole(const QString &message,  unsigned int lineNumber, const QString &sourceID);
     using KHTMLPart::xmlDocImpl;
     khtml::RenderObject *renderer();
     void forceLayout();
index ecf2874207bcf79a7935a4d969122dccdba79577..60fbc43d6c97da165243095c190f223ba49eee79 100644 (file)
@@ -1581,10 +1581,13 @@ bool KWQKHTMLPart::runJavaScriptPrompt(const QString &prompt, const QString &def
     return false;
 }
 
-void KWQKHTMLPart::addMessageToConsole(const QString &message, const unsigned int lineNumber)
+void KWQKHTMLPart::addMessageToConsole(const QString &message, unsigned lineNumber, const QString &sourceURL)
 {
     NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
-        message.getNSString(), @"message",[NSNumber numberWithInt: lineNumber], @"lineNumber", NULL];
+        message.getNSString(), @"message",
+        [NSNumber numberWithInt: lineNumber], @"lineNumber",
+        sourceURL.getNSString(), @"sourceURL",
+        NULL];
     [_bridge addMessageToConsole:dictionary];
 }