JavaScriptCore:
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 5 Jul 2006 16:52:54 +0000 (16:52 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 5 Jul 2006 16:52:54 +0000 (16:52 +0000)
        Reviewed by Maciej.

        - Return syntax error in JSCheckSyntax through a JSValueRef* exception
        argument

        * API/JSBase.h:
        * API/JSContextRef.cpp:
        (JSCheckSyntax):
        * API/testapi.c:
        (main):
        * JavaScriptCore.exp:
        * kjs/interpreter.cpp:
        (KJS::Interpreter::checkSyntax):
        * kjs/interpreter.h:

JavaScriptGlue:

        Reviewed by Maciej.

        * JSRun.cpp:
        (JSRun::CheckSyntax): Updated to use new checkSyntax syntax in JSC.
        * JavaScriptGlue.xcodeproj/project.pbxproj:

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

JavaScriptCore/API/JSBase.h
JavaScriptCore/API/JSContextRef.cpp
JavaScriptCore/API/testapi.c
JavaScriptCore/ChangeLog
JavaScriptCore/JavaScriptCore.exp
JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
JavaScriptCore/kjs/interpreter.cpp
JavaScriptCore/kjs/interpreter.h
JavaScriptGlue/ChangeLog
JavaScriptGlue/JSRun.cpp

index 885d1d2600517aceaf17f755b123970390dfc9a1..3a0c889838d867961aa9dcf91d680c92d229f3b6 100644 (file)
@@ -52,20 +52,23 @@ extern "C" {
   @param thisValue          object to use as "this," or NULL to use the global object as "this"
   @param sourceURL          URL to the file containing the JavaScript, or NULL - this is only used for error reporting
   @param startingLineNumber the JavaScript's starting line number in the file located at sourceURL - this is only used for error reporting
-  @param exception          pointer to a JSValueRef in which to store an uncaught exception, or NULL
+  @param exception          pointer to a JSValueRef in which to store an uncaught exception, if any; can be NULL
   @result                   result of evaluation, or NULL if an uncaught exception was thrown
 */
 JSValueRef JSEvaluate(JSContextRef context, JSCharBufferRef script, JSValueRef thisValue, JSCharBufferRef sourceURL, int startingLineNumber, JSValueRef* exception);
 
 /*!
   @function JSCheckSyntax
-  Checks for syntax errors in a string of JavaScript code
-  @param context execution context to use
-  @param script a string containing the script source code
-  @result true if the script is syntactically correct, false otherwise
+  Check for syntax errors in a string of JavaScript
+  @param context            execution context to use
+  @param script             a character buffer containing the JavaScript to evaluate
+  @param sourceURL          URL to the file containing the JavaScript, or NULL - this is only used for error reporting
+  @param startingLineNumber the JavaScript's starting line number in the file located at sourceURL - this is only used for error reporting
+  @param exception          pointer to a JSValueRef in which to store a syntax error, if any; can be NULL
+  @result                   true if the script is syntactically correct, false otherwise
 
 */
-bool JSCheckSyntax(JSContextRef context, JSCharBufferRef script);
+bool JSCheckSyntax(JSContextRef context, JSCharBufferRef script, JSCharBufferRef sourceURL, int startingLineNumber, JSValueRef* exception);
 
 // Garbage collection
 /*!
index 0a541e777d0fd3cc6c7b1ab0df47eb764b323989..e7200d104ca1aa8d0a9769add3d5f4295b7987da 100644 (file)
@@ -94,12 +94,21 @@ JSValueRef JSEvaluate(JSContextRef context, JSCharBufferRef script, JSValueRef t
     return toRef(jsUndefined());
 }
 
-bool JSCheckSyntax(JSContextRef context, JSCharBufferRef script)
+bool JSCheckSyntax(JSContextRef context, JSCharBufferRef script, JSCharBufferRef sourceURL, int startingLineNumber, JSValueRef* exception)
 {
     JSLock lock;
+
     ExecState* exec = toJS(context);
-    UString::Rep* rep = toJS(script);
-    return exec->dynamicInterpreter()->checkSyntax(UString(rep));
+    UString::Rep* scriptRep = toJS(script);
+    UString::Rep* sourceURLRep = toJS(sourceURL);
+    Completion completion = exec->dynamicInterpreter()->checkSyntax(UString(sourceURLRep), startingLineNumber, UString(scriptRep));
+    if (completion.complType() == Throw) {
+        if (exception)
+            *exception = toRef(completion.value());
+        return false;
+    }
+    
+    return true;
 }
 
 JSValueRef JSContextGetException(JSContextRef context)
index 452d7b8b3fafeef3dd63b0e7c82e9880a2b3aa89..97d98fef0e7c1e5693150a5bb45bd018ed8402cc 100644 (file)
@@ -494,8 +494,8 @@ int main(int argc, char* argv[])
 
     JSCharBufferRef goodSyntaxBuf = JSCharBufferCreateUTF8("x = 1;");
     JSCharBufferRef badSyntaxBuf = JSCharBufferCreateUTF8("x := 1;");
-    assert(JSCheckSyntax(context, goodSyntaxBuf));
-    assert(!JSCheckSyntax(context, badSyntaxBuf));
+    assert(JSCheckSyntax(context, goodSyntaxBuf, NULL, 0, NULL));
+    assert(!JSCheckSyntax(context, badSyntaxBuf, NULL, 0, NULL));
 
     JSValueRef result;
     JSValueRef exception;
index f35d3b0a44343fa8f7dbc4368d2bd597294e1558..9a1b4cbdf30d559971a5802d4e7de7f7e23ac629 100644 (file)
@@ -1,3 +1,20 @@
+2006-07-03  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej.
+
+        - Return syntax error in JSCheckSyntax through a JSValueRef* exception
+        argument
+        
+        * API/JSBase.h:
+        * API/JSContextRef.cpp:
+        (JSCheckSyntax):
+        * API/testapi.c:
+        (main):
+        * JavaScriptCore.exp:
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::checkSyntax):
+        * kjs/interpreter.h:
+
 2006-07-04  Darin Adler  <darin@apple.com>
 
         - fixed build
index cd469ef56ac7055909f552de734cc34825694d69..4fe60fbd71075a4b24f756b0ded392085eea375f 100644 (file)
@@ -76,7 +76,8 @@ __ZN3KJS10Identifier5equalEPKNS_7UString3RepEPKc
 __ZN3KJS10throwErrorEPNS_9ExecStateENS_9ErrorTypeE
 __ZN3KJS10throwErrorEPNS_9ExecStateENS_9ErrorTypeEPKc
 __ZN3KJS11Interpreter10globalExecEv
-__ZN3KJS11Interpreter11checkSyntaxERKNS_7UStringE
+__ZN3KJS11Interpreter11checkSyntaxERKNS_7UStringEiPKNS_5UCharEi
+__ZN3KJS11Interpreter11checkSyntaxERKNS_7UStringEiS3_
 __ZN3KJS11Interpreter15restoreBuiltinsERKNS_13SavedBuiltinsE
 __ZN3KJS11Interpreter16initGlobalObjectEv
 __ZN3KJS11Interpreter16stopTimeoutCheckEv
index 79f9e0eb8558b4c864cc31696fcfe1379415953e..1eb5f2015ad2a0738e18a2d725a0aacf5fc1950c 100644 (file)
                E195679909E7CF1200B89D13 /* UnicodeCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = E195679509E7CF1200B89D13 /* UnicodeCategory.h */; };
 /* End PBXBuildFile section */
 
+/* Begin PBXBuildStyle section */
+               147FA0270A5C2444002E7E85 /* Development */ = {
+                       isa = PBXBuildStyle;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                       };
+                       name = Development;
+               };
+               147FA0280A5C2444002E7E85 /* Deployment */ = {
+                       isa = PBXBuildStyle;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = YES;
+                       };
+                       name = Deployment;
+               };
+/* End PBXBuildStyle section */
+
 /* Begin PBXContainerItemProxy section */
                141211350A48796100480255 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                0867D690FE84028FC02AAC07 /* Project object */ = {
                        isa = PBXProject;
                        buildConfigurationList = 149C277108902AFE008A9EFC /* Build configuration list for PBXProject "JavaScriptCore" */;
+                       buildSettings = {
+                       };
+                       buildStyles = (
+                               147FA0270A5C2444002E7E85 /* Development */,
+                               147FA0280A5C2444002E7E85 /* Deployment */,
+                       );
                        hasScannedForEncodings = 1;
                        mainGroup = 0867D691FE84028FC02AAC07 /* JavaScriptCore */;
                        productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
index 80597ab8f5e18f8f672eaeb05fd52f6aef47c0e1..7eafa9e058376824d2e14a86e21c35d5d8eeacff 100644 (file)
@@ -412,13 +412,21 @@ ExecState* Interpreter::globalExec()
   return &m_globalExec;
 }
 
-bool Interpreter::checkSyntax(const UString &code)
+Completion Interpreter::checkSyntax(const UString& sourceURL, int startingLineNumber, const UString& code)
+{
+    return checkSyntax(sourceURL, startingLineNumber, code.data(), code.size());
+}
+
+Completion Interpreter::checkSyntax(const UString& sourceURL, int startingLineNumber, const UChar* code, int codeLength)
 {
     JSLock lock;
-    
-    // Parser::parse() returns 0 in a syntax error occurs
-    RefPtr<ProgramNode> progNode = Parser::parse(UString(), 0, code.data(), code.size(), 0, 0, 0);
-    return progNode;
+
+    int errLine;
+    UString errMsg;
+    RefPtr<ProgramNode> progNode = Parser::parse(sourceURL, startingLineNumber, code, codeLength, 0, &errLine, &errMsg);
+    if (!progNode)
+        return Completion(Throw, Error::create(&m_globalExec, SyntaxError, errMsg, errLine, 0, &sourceURL));
+    return Completion(Normal);
 }
 
 Completion Interpreter::evaluate(const UString& sourceURL, int startingLineNumber, const UString& code, JSValue* thisV)
index c55c12e5b645f8fb60ecf3d9e9f845a5130e8bc6..8c916fda59dac1655cc6352e2e4554b65c0bc748 100644 (file)
@@ -100,9 +100,11 @@ namespace KJS {
      * Parses the supplied ECMAScript code and checks for syntax errors.
      *
      * @param code The code to check
-     * @return true if there were no syntax errors in the code, otherwise false
+     * @return A normal completion if there were no syntax errors in the code, 
+     * otherwise a throw completion with the syntax error as its value.
      */
-    bool checkSyntax(const UString &code);
+    Completion checkSyntax(const UString& sourceURL, int startingLineNumber, const UString& code);
+    Completion checkSyntax(const UString& sourceURL, int startingLineNumber, const UChar* code, int codeLength);
 
     /**
      * Evaluates the supplied ECMAScript code.
index 09341f99ef905a3d2b2d862cea6ba08a3b04b12e..0d41ee4ba2f3f1d609a8f81fb74fd6f66eba876c 100644 (file)
@@ -1,3 +1,11 @@
+2006-07-03  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej.
+        
+        * JSRun.cpp:
+        (JSRun::CheckSyntax): Updated to use new checkSyntax syntax in JSC.
+        * JavaScriptGlue.xcodeproj/project.pbxproj:
+
 === Safari-521.14 ===
 
 2006-06-28  Timothy Hatcher  <timothy@apple.com>
index c50ad458bb6feb0fa5cf92f6a2554504bef79a0d..3decffdad8b771629828e0e66aef1683756f948f 100644 (file)
@@ -69,5 +69,5 @@ Completion JSRun::Evaluate()
 
 bool JSRun::CheckSyntax()
 {
-    return fInterpreter.checkSyntax(fSource);
+    return fInterpreter.checkSyntax(UString(), 0, fSource.data(), fSource.size()).complType() != Throw;
 }