Title: [221511] trunk/Tools
Revision
221511
Author
fpi...@apple.com
Date
2017-09-01 17:57:27 -0700 (Fri, 01 Sep 2017)

Log Message

WSL should use & for getting a ^ and @ for getting a []
https://bugs.webkit.org/show_bug.cgi?id=176245

Reviewed by Myles Maxfield.
        
Using \ as an operator was a bad decision since that's an escape character in so many contexts.
        
Henceforth, & is for making pointers, for example:
        
thread int^ foo() { int x; return &x; }
        
And @ is for making array references, for example:
        
thread int[] foo() { int[42] x; return @x; }
        
Having separate operators makes it easy to have pointers to fixed-size arrays:
        
thread int[42]^ foo() { int[42] x; return &x; }

* WebGPUShadingLanguageRI/Intrinsics.js:
(Intrinsics):
* WebGPUShadingLanguageRI/Lexer.js:
(Lexer.prototype.next):
(Lexer):
* WebGPUShadingLanguageRI/MakePtrExpression.js:
(MakePtrExpression.prototype.toString):
(MakePtrExpression):
* WebGPUShadingLanguageRI/Parse.js:
(parsePossibleSuffix):
(parsePossiblePrefix):
(parseFuncName):
* WebGPUShadingLanguageRI/StandardLibrary.js:
* WebGPUShadingLanguageRI/Test.js:
(TEST_simpleMakePtr):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (221510 => 221511)


--- trunk/Tools/ChangeLog	2017-09-02 00:19:55 UTC (rev 221510)
+++ trunk/Tools/ChangeLog	2017-09-02 00:57:27 UTC (rev 221511)
@@ -1,3 +1,40 @@
+2017-09-01  Filip Pizlo  <fpi...@apple.com>
+
+        WSL should use & for getting a ^ and @ for getting a []
+        https://bugs.webkit.org/show_bug.cgi?id=176245
+
+        Reviewed by Myles Maxfield.
+        
+        Using \ as an operator was a bad decision since that's an escape character in so many contexts.
+        
+        Henceforth, & is for making pointers, for example:
+        
+        thread int^ foo() { int x; return &x; }
+        
+        And @ is for making array references, for example:
+        
+        thread int[] foo() { int[42] x; return @x; }
+        
+        Having separate operators makes it easy to have pointers to fixed-size arrays:
+        
+        thread int[42]^ foo() { int[42] x; return &x; }
+
+        * WebGPUShadingLanguageRI/Intrinsics.js:
+        (Intrinsics):
+        * WebGPUShadingLanguageRI/Lexer.js:
+        (Lexer.prototype.next):
+        (Lexer):
+        * WebGPUShadingLanguageRI/MakePtrExpression.js:
+        (MakePtrExpression.prototype.toString):
+        (MakePtrExpression):
+        * WebGPUShadingLanguageRI/Parse.js:
+        (parsePossibleSuffix):
+        (parsePossiblePrefix):
+        (parseFuncName):
+        * WebGPUShadingLanguageRI/StandardLibrary.js:
+        * WebGPUShadingLanguageRI/Test.js:
+        (TEST_simpleMakePtr):
+
 2017-09-01  Myles C. Maxfield  <mmaxfi...@apple.com>
 
         WSL's lexer will never emit keyword tokens

Modified: trunk/Tools/WebGPUShadingLanguageRI/Intrinsics.js (221510 => 221511)


--- trunk/Tools/WebGPUShadingLanguageRI/Intrinsics.js	2017-09-02 00:19:55 UTC (rev 221510)
+++ trunk/Tools/WebGPUShadingLanguageRI/Intrinsics.js	2017-09-02 00:57:27 UTC (rev 221511)
@@ -88,16 +88,16 @@
         };
         
         this._map.set(
-            "native thread T^ operator\\[]<T>(thread T[],uint)",
+            "native thread T^ operator&[]<T>(thread T[],uint)",
             arrayElementPtr);
         this._map.set(
-            "native threadgroup T^ operator\\[]<T:primitive>(threadgroup T[],uint)",
+            "native threadgroup T^ operator&[]<T:primitive>(threadgroup T[],uint)",
             arrayElementPtr);
         this._map.set(
-            "native device T^ operator\\[]<T:primitive>(device T[],uint)",
+            "native device T^ operator&[]<T:primitive>(device T[],uint)",
             arrayElementPtr);
         this._map.set(
-            "native constant T^ operator\\[]<T:primitive>(constant T[],uint)",
+            "native constant T^ operator&[]<T:primitive>(constant T[],uint)",
             arrayElementPtr);
     }
     

Modified: trunk/Tools/WebGPUShadingLanguageRI/Lexer.js (221510 => 221511)


--- trunk/Tools/WebGPUShadingLanguageRI/Lexer.js	2017-09-02 00:19:55 UTC (rev 221510)
+++ trunk/Tools/WebGPUShadingLanguageRI/Lexer.js	2017-09-02 00:57:27 UTC (rev 221511)
@@ -118,7 +118,7 @@
         if (/^([0-9]*\.[0-9]+)|([0-9]+\.[0-9]*)/.test(relevantText))
             return result("doubleLiteral");
         
-        if (/^([{}()\[\]?:=+*\/,.%!~^&|<>\\;-]|->|=>|<=|==|!=|\+=|-=|\*=|\/=|%=|^=|\|=|&=)/.test(relevantText))
+        if (/^([{}()\[\]?:=+*\/,.%!~^&|<>@;-]|->|=>|<=|==|!=|\+=|-=|\*=|\/=|%=|^=|\|=|&=)/.test(relevantText))
             return result("punctuation");
         
         let remaining = relevantText.substring(0, 20).split(/\s/)[0];

Modified: trunk/Tools/WebGPUShadingLanguageRI/MakePtrExpression.js (221510 => 221511)


--- trunk/Tools/WebGPUShadingLanguageRI/MakePtrExpression.js	2017-09-02 00:19:55 UTC (rev 221510)
+++ trunk/Tools/WebGPUShadingLanguageRI/MakePtrExpression.js	2017-09-02 00:57:27 UTC (rev 221511)
@@ -35,6 +35,6 @@
     
     toString()
     {
-        return "\\(" + this.ptr + ")";
+        return "&(" + this.ptr + ")";
     }
 }

Modified: trunk/Tools/WebGPUShadingLanguageRI/Parse.js (221510 => 221511)


--- trunk/Tools/WebGPUShadingLanguageRI/Parse.js	2017-09-02 00:19:55 UTC (rev 221510)
+++ trunk/Tools/WebGPUShadingLanguageRI/Parse.js	2017-09-02 00:57:27 UTC (rev 221511)
@@ -382,7 +382,7 @@
                 consume("]");
                 left = new DereferenceExpression(
                     token,
-                    new CallExpression(token, "operator\\[]", [], [left, index]));
+                    new CallExpression(token, "operator&[]", [], [left, index]));
                 break;
             }
             default:
@@ -399,9 +399,9 @@
             return new CallAssignment(token, "operator" + token.text, parsePossiblePrefix());
         if (token = tryConsume("^"))
             return new DereferenceExpression(token, parsePossiblePrefix());
-        if (token = tryConsume("\\"))
+        if (token = tryConsume("&"))
             return new MakePtrExpression(token, parsePossiblePrefix());
-        if (token = tryConsume("&"))
+        if (token = tryConsume("@"))
             return new MakeArrayRefExpression(token, parsePossiblePrefix());
         return parsePossibleSuffix();
     }
@@ -626,12 +626,11 @@
     function parseFuncName()
     {
         if (tryConsume("operator")) {
-            let token = consume("+", "-", "*", "/", "%", "^", "&", "|", "<", ">", "<=", ">=", "!", "==", "++", "--", "\\");
-            if (token.text != "\\")
+            let token = consume("+", "-", "*", "/", "%", "^", "&", "|", "<", ">", "<=", ">=", "!", "==", "++", "--", "&");
+            if (token.text != "&" || !tryConsume("["))
                 return "operator" + token.text;
-            consume("[");
             consume("]");
-            return "operator\\[]";
+            return "operator&[]";
         }
         return consumeKind("identifier").text;
     }

Modified: trunk/Tools/WebGPUShadingLanguageRI/StandardLibrary.js (221510 => 221511)


--- trunk/Tools/WebGPUShadingLanguageRI/StandardLibrary.js	2017-09-02 00:19:55 UTC (rev 221510)
+++ trunk/Tools/WebGPUShadingLanguageRI/StandardLibrary.js	2017-09-02 00:57:27 UTC (rev 221511)
@@ -40,8 +40,8 @@
 
 native int operator+(int, int);
 
-native thread T^ operator\\[]<T>(thread T[], uint);
-native threadgroup T^ operator\\[]<T:primitive>(threadgroup T[], uint);
-native device T^ operator\\[]<T:primitive>(device T[], uint);
-native constant T^ operator\\[]<T:primitive>(constant T[], uint);
+native thread T^ operator&[]<T>(thread T[], uint);
+native threadgroup T^ operator&[]<T:primitive>(threadgroup T[], uint);
+native device T^ operator&[]<T:primitive>(device T[], uint);
+native constant T^ operator&[]<T:primitive>(constant T[], uint);
 `;

Modified: trunk/Tools/WebGPUShadingLanguageRI/Test.js (221510 => 221511)


--- trunk/Tools/WebGPUShadingLanguageRI/Test.js	2017-09-02 00:19:55 UTC (rev 221510)
+++ trunk/Tools/WebGPUShadingLanguageRI/Test.js	2017-09-02 00:57:27 UTC (rev 221511)
@@ -171,7 +171,7 @@
         thread int^ foo()
         {
             int x = 42;
-            return \\x;
+            return &x;
         }
     `);
     let result = callFunction(program, "foo", [], []);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to