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", [], []);