WebKit Bugzilla
Attachment 341393 Details for
Bug 186012
: [JSC] Rename Array#flatten to flat
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-186012-20180526202810.patch (text/plain), 18.92 KB, created by
Yusuke Suzuki
on 2018-05-26 04:28:11 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Yusuke Suzuki
Created:
2018-05-26 04:28:11 PDT
Size:
18.92 KB
patch
obsolete
>Subversion Revision: 232224 >diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index a3e2a22f79f95679fabc61bd22fd39974ba730d5..9fbde26318d5590d36900654af496f910db4670b 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,24 @@ >+2018-05-26 Yusuke Suzuki <utatane.tea@gmail.com> >+ >+ [JSC] Rename Array#flatten to flat >+ https://bugs.webkit.org/show_bug.cgi?id=186012 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Rename Array#flatten to Array#flat. This rename is done in TC39 since flatten >+ conflicts with the mootools' function name. >+ >+ * builtins/ArrayPrototype.js: >+ (globalPrivate.flatIntoArray): >+ (flat): >+ (globalPrivate.flatIntoArrayWithCallback): >+ (flatMap): >+ (globalPrivate.flattenIntoArray): Deleted. >+ (flatten): Deleted. >+ (globalPrivate.flattenIntoArrayWithCallback): Deleted. >+ * runtime/ArrayPrototype.cpp: >+ (JSC::ArrayPrototype::finishCreation): >+ > 2018-05-25 Mark Lam <mark.lam@apple.com> > > for-in loops should preserve and restore the TDZ stack for each of its internal loops. >diff --git a/Source/JavaScriptCore/builtins/ArrayPrototype.js b/Source/JavaScriptCore/builtins/ArrayPrototype.js >index a3c17ce262f0b80fdaaeb9ed20f4d5a61f4e0bd5..870e557deb85c2740dec69466ac78f1ad3409d30 100644 >--- a/Source/JavaScriptCore/builtins/ArrayPrototype.js >+++ b/Source/JavaScriptCore/builtins/ArrayPrototype.js >@@ -767,7 +767,7 @@ function arraySpeciesCreate(array, length) > } > > @globalPrivate >-function flattenIntoArray(target, source, sourceLength, targetIndex, depth) >+function flatIntoArray(target, source, sourceLength, targetIndex, depth) > { > "use strict"; > >@@ -775,7 +775,7 @@ function flattenIntoArray(target, source, sourceLength, targetIndex, depth) > if (sourceIndex in source) { > var element = source[sourceIndex]; > if (depth > 0 && @isArray(element)) >- targetIndex = @flattenIntoArray(target, element, @toLength(element.length), targetIndex, depth - 1); >+ targetIndex = @flatIntoArray(target, element, @toLength(element.length), targetIndex, depth - 1); > else { > if (targetIndex >= @MAX_SAFE_INTEGER) > @throwTypeError("flatten array exceeds 2**53 - 1"); >@@ -787,11 +787,11 @@ function flattenIntoArray(target, source, sourceLength, targetIndex, depth) > return targetIndex; > } > >-function flatten() >+function flat() > { > "use strict"; > >- var array = @toObject(this, "Array.prototype.flatten requires that |this| not be null or undefined"); >+ var array = @toObject(this, "Array.prototype.flat requires that |this| not be null or undefined"); > var length = @toLength(array.length); > > var depthNum = 1; >@@ -801,12 +801,12 @@ function flatten() > > var result = @arraySpeciesCreate(array, 0); > >- @flattenIntoArray(result, array, length, 0, depthNum); >+ @flatIntoArray(result, array, length, 0, depthNum); > return result; > } > > @globalPrivate >-function flattenIntoArrayWithCallback(target, source, sourceLength, targetIndex, callback, thisArg) >+function flatIntoArrayWithCallback(target, source, sourceLength, targetIndex, callback, thisArg) > { > "use strict"; > >@@ -814,7 +814,7 @@ function flattenIntoArrayWithCallback(target, source, sourceLength, targetIndex, > if (sourceIndex in source) { > var element = callback.@call(thisArg, source[sourceIndex], sourceIndex, source); > if (@isArray(element)) >- targetIndex = @flattenIntoArray(target, element, @toLength(element.length), targetIndex, 0); >+ targetIndex = @flatIntoArray(target, element, @toLength(element.length), targetIndex, 0); > else { > if (targetIndex >= @MAX_SAFE_INTEGER) > @throwTypeError("flatten array exceeds 2**53 - 1"); >@@ -840,5 +840,5 @@ function flatMap(callback) > > var result = @arraySpeciesCreate(array, 0); > >- return @flattenIntoArrayWithCallback(result, array, length, 0, callback, thisArg); >+ return @flatIntoArrayWithCallback(result, array, length, 0, callback, thisArg); > } >diff --git a/Source/JavaScriptCore/runtime/ArrayPrototype.cpp b/Source/JavaScriptCore/runtime/ArrayPrototype.cpp >index 51b0d5b3e46f5c73931309247ef98ad44ab0ce6c..dc1a9da97f27de837daaf2dfd9153d115871776c 100644 >--- a/Source/JavaScriptCore/runtime/ArrayPrototype.cpp >+++ b/Source/JavaScriptCore/runtime/ArrayPrototype.cpp >@@ -107,8 +107,8 @@ void ArrayPrototype::finishCreation(VM& vm, JSGlobalObject* globalObject) > JSC_NATIVE_INTRINSIC_FUNCTION_WITHOUT_TRANSITION("indexOf", arrayProtoFuncIndexOf, static_cast<unsigned>(PropertyAttribute::DontEnum), 1, ArrayIndexOfIntrinsic); > JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("lastIndexOf", arrayProtoFuncLastIndexOf, static_cast<unsigned>(PropertyAttribute::DontEnum), 1); > JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("filter", arrayPrototypeFilterCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum)); >+ JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("flat", arrayPrototypeFlatCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum)); > JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("flatMap", arrayPrototypeFlatMapCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum)); >- JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("flatten", arrayPrototypeFlattenCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum)); > JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("reduce", arrayPrototypeReduceCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum)); > JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("reduceRight", arrayPrototypeReduceRightCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum)); > JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("map", arrayPrototypeMapCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum)); >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 77571f411a7245ad73a2de2b52c689b323e7eeab..83d03c982229ffb93fd6ca5dbad3396095aec236 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,13 @@ >+2018-05-26 Yusuke Suzuki <utatane.tea@gmail.com> >+ >+ [JSC] Rename Array#flatten to flat >+ https://bugs.webkit.org/show_bug.cgi?id=186012 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * js/Object-getOwnPropertyNames-expected.txt: >+ * js/script-tests/Object-getOwnPropertyNames.js: >+ > 2018-05-25 Youenn Fablet <youenn@apple.com> > > Migrate From-Origin to Cross-Origin-Resource-Policy >diff --git a/LayoutTests/js/Object-getOwnPropertyNames-expected.txt b/LayoutTests/js/Object-getOwnPropertyNames-expected.txt >index 71f8a6691199562c267fbb2a733220186da9d63a..3eb84a774078ed036f965b3c060d373c9b68db01 100644 >--- a/LayoutTests/js/Object-getOwnPropertyNames-expected.txt >+++ b/LayoutTests/js/Object-getOwnPropertyNames-expected.txt >@@ -47,7 +47,7 @@ PASS getSortedOwnPropertyNames(Object.prototype) is ['__defineGetter__', '__defi > PASS getSortedOwnPropertyNames(Function) is ['length', 'name', 'prototype'] > PASS getSortedOwnPropertyNames(Function.prototype) is ['apply', 'arguments', 'bind', 'call', 'caller', 'constructor', 'length', 'name', 'toString'] > PASS getSortedOwnPropertyNames(Array) is ['from', 'isArray', 'length', 'name', 'of', 'prototype'] >-PASS getSortedOwnPropertyNames(Array.prototype) is ['concat', 'constructor', 'copyWithin', 'entries', 'every', 'fill', 'filter', 'find', 'findIndex', 'flatMap', 'flatten', 'forEach', 'includes', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift', 'values'] >+PASS getSortedOwnPropertyNames(Array.prototype) is ['concat', 'constructor', 'copyWithin', 'entries', 'every', 'fill', 'filter', 'find', 'findIndex', 'flat', 'flatMap', 'forEach', 'includes', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift', 'values'] > PASS getSortedOwnPropertyNames(String) is ['fromCharCode', 'fromCodePoint', 'length', 'name', 'prototype', 'raw'] > PASS getSortedOwnPropertyNames(String.prototype) is ['anchor', 'big', 'blink', 'bold', 'charAt', 'charCodeAt', 'codePointAt', 'concat', 'constructor', 'endsWith', 'fixed', 'fontcolor', 'fontsize', 'includes', 'indexOf', 'italics', 'lastIndexOf', 'length', 'link', 'localeCompare', 'match', 'normalize', 'padEnd', 'padStart', 'repeat', 'replace', 'search', 'slice', 'small', 'split', 'startsWith', 'strike', 'sub', 'substr', 'substring', 'sup', 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toString', 'toUpperCase', 'trim', 'trimEnd', 'trimLeft', 'trimRight', 'trimStart', 'valueOf'] > PASS getSortedOwnPropertyNames(Boolean) is ['length', 'name', 'prototype'] >diff --git a/LayoutTests/js/script-tests/Object-getOwnPropertyNames.js b/LayoutTests/js/script-tests/Object-getOwnPropertyNames.js >index bbae5831bf8a8554092bee3956cc1fae2f20e8ce..c730ed5dc5207ca91d3db9a637d45d383ccabbeb 100644 >--- a/LayoutTests/js/script-tests/Object-getOwnPropertyNames.js >+++ b/LayoutTests/js/script-tests/Object-getOwnPropertyNames.js >@@ -56,7 +56,7 @@ > "Function": "['length', 'name', 'prototype']", > "Function.prototype": "['apply', 'arguments', 'bind', 'call', 'caller', 'constructor', 'length', 'name', 'toString']", > "Array": "['from', 'isArray', 'length', 'name', 'of', 'prototype']", >- "Array.prototype": "['concat', 'constructor', 'copyWithin', 'entries', 'every', 'fill', 'filter', 'find', 'findIndex', 'flatMap', 'flatten', 'forEach', 'includes', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift', 'values']", >+ "Array.prototype": "['concat', 'constructor', 'copyWithin', 'entries', 'every', 'fill', 'filter', 'find', 'findIndex', 'flat', 'flatMap', 'forEach', 'includes', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift', 'values']", > "String": "['fromCharCode', 'fromCodePoint', 'length', 'name', 'prototype', 'raw']", > "String.prototype": "['anchor', 'big', 'blink', 'bold', 'charAt', 'charCodeAt', 'codePointAt', 'concat', 'constructor', 'endsWith', 'fixed', 'fontcolor', 'fontsize', 'includes', 'indexOf', 'italics', 'lastIndexOf', 'length', 'link', 'localeCompare', 'match', 'normalize', 'padEnd', 'padStart', 'repeat', 'replace', 'search', 'slice', 'small', 'split', 'startsWith', 'strike', 'sub', 'substr', 'substring', 'sup', 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toString', 'toUpperCase', 'trim', 'trimEnd', 'trimLeft', 'trimRight', 'trimStart', 'valueOf']", > "Boolean": "['length', 'name', 'prototype']", >diff --git a/JSTests/ChangeLog b/JSTests/ChangeLog >index ca954df379fb7ff2e4073517e7fb1e43ee5f3785..407f14f3ded0182a164aa4431b8a76f8bf198101 100644 >--- a/JSTests/ChangeLog >+++ b/JSTests/ChangeLog >@@ -1,3 +1,14 @@ >+2018-05-26 Yusuke Suzuki <utatane.tea@gmail.com> >+ >+ [JSC] Rename Array#flatten to flat >+ https://bugs.webkit.org/show_bug.cgi?id=186012 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * stress/array-flatten.js: >+ (shouldThrow): >+ * test262/expectations.yaml: >+ > 2018-05-23 Yusuke Suzuki <utatane.tea@gmail.com> > > Upgrade test262 to May 24 version >diff --git a/JSTests/stress/array-flatten.js b/JSTests/stress/array-flatten.js >index 7a6b29dcacfad056123c08cf85af8707ee03f530..b1a7c085d64a351fabbdf15795a200f321814b95 100644 >--- a/JSTests/stress/array-flatten.js >+++ b/JSTests/stress/array-flatten.js >@@ -34,54 +34,54 @@ function shouldThrow(func, errorMessage) { > throw new Error(`bad error: ${String(error)}`); > } > >-shouldBe([].flatten.length, 0); >-shouldBe([].flatten.name, `flatten`); >+shouldBe([].flat.length, 0); >+shouldBe([].flat.name, `flat`); > >-shouldBeArray([].flatten(), []); >-shouldBeArray([0, 1, 2, 3, , 4].flatten(), [0, 1, 2, 3, 4]); >-shouldBeArray([,,,,,].flatten(), []); >+shouldBeArray([].flat(), []); >+shouldBeArray([0, 1, 2, 3, , 4].flat(), [0, 1, 2, 3, 4]); >+shouldBeArray([,,,,,].flat(), []); > >-shouldBeArray([].flatten(0), []); >-shouldBeArray([0, 1, 2, 3, , 4].flatten(0), [0, 1, 2, 3, 4]); >-shouldBeArray([,,,,,].flatten(0), []); >+shouldBeArray([].flat(0), []); >+shouldBeArray([0, 1, 2, 3, , 4].flat(0), [0, 1, 2, 3, 4]); >+shouldBeArray([,,,,,].flat(0), []); > >-shouldBeArray([].flatten(-1), []); >-shouldBeArray([0, 1, 2, 3, , 4].flatten(-1), [0, 1, 2, 3, 4]); >-shouldBeArray([,,,,,].flatten(-1), []); >+shouldBeArray([].flat(-1), []); >+shouldBeArray([0, 1, 2, 3, , 4].flat(-1), [0, 1, 2, 3, 4]); >+shouldBeArray([,,,,,].flat(-1), []); > >-shouldBeArray([[],[]].flatten(), []); >-shouldBeArray([[0],[1]].flatten(), [0,1]); >-shouldBeArray([[0],[],1].flatten(), [0,1]); >-shouldBeArray([[0],[[]],1].flatten(), [0,[],1]); >-shouldBeArray([[0],[[]],1].flatten(1), [0,[],1]); >-shouldBeArray([[0],[[]],1].flatten(2), [0,1]); >+shouldBeArray([[],[]].flat(), []); >+shouldBeArray([[0],[1]].flat(), [0,1]); >+shouldBeArray([[0],[],1].flat(), [0,1]); >+shouldBeArray([[0],[[]],1].flat(), [0,[],1]); >+shouldBeArray([[0],[[]],1].flat(1), [0,[],1]); >+shouldBeArray([[0],[[]],1].flat(2), [0,1]); > >-shouldBeArray([[],[]].flatten(0), [[],[]]); >-shouldBeArray([[0],[1]].flatten(0), [[0],[1]]); >-shouldBeArray([[0],[],1].flatten(0), [[0],[],1]); >-shouldBeArray([[0],[[]],1].flatten(0), [[0],[[]],1]); >+shouldBeArray([[],[]].flat(0), [[],[]]); >+shouldBeArray([[0],[1]].flat(0), [[0],[1]]); >+shouldBeArray([[0],[],1].flat(0), [[0],[],1]); >+shouldBeArray([[0],[[]],1].flat(0), [[0],[[]],1]); > >-shouldBeArray([[[[[[[[[[[[[[[[[[[[[42]]]]]]]]]]]]]]]]]]]]].flatten(Infinity), [42]); >+shouldBeArray([[[[[[[[[[[[[[[[[[[[[42]]]]]]]]]]]]]]]]]]]]].flat(Infinity), [42]); > > var array = []; >-shouldBe(array.flatten() !== array, true); >+shouldBe(array.flat() !== array, true); > > class DerivedArray extends Array { } >-shouldBe((new DerivedArray).flatten() instanceof DerivedArray, true); >-var flatten = [].flatten; >+shouldBe((new DerivedArray).flat() instanceof DerivedArray, true); >+var flat = [].flat; > var realm = createGlobalObject(); >-shouldBe(flatten.call({}) instanceof Array, true); >-shouldBe(flatten.call(new realm.Array) instanceof Array, true); >+shouldBe(flat.call({}) instanceof Array, true); >+shouldBe(flat.call(new realm.Array) instanceof Array, true); > var array2 = new realm.Array; > array2.constructor = 0; > > shouldThrow(() => { >- flatten.call(array2); >+ flat.call(array2); > }, `TypeError: 0 is not a constructor`); > > var array2 = new realm.Array; > array2.constructor = undefined; >-shouldBe(flatten.call(array2) instanceof Array, true); >+shouldBe(flat.call(array2) instanceof Array, true); > > var array2 = new realm.Array; > array2.constructor = { >@@ -89,7 +89,7 @@ function shouldThrow(func, errorMessage) { > return null; > } > }; >-shouldBe(flatten.call(array2) instanceof Array, true); >+shouldBe(flat.call(array2) instanceof Array, true); > > var array2 = new realm.Array; > array2.constructor = { >@@ -97,7 +97,7 @@ function shouldThrow(func, errorMessage) { > return undefined; > } > }; >-shouldBe(flatten.call(array2) instanceof Array, true); >+shouldBe(flat.call(array2) instanceof Array, true); > > var array2 = new realm.Array; > array2.constructor = { >@@ -105,4 +105,4 @@ function shouldThrow(func, errorMessage) { > return DerivedArray; > } > }; >-shouldBe(flatten.call(array2) instanceof DerivedArray, true); >+shouldBe(flat.call(array2) instanceof DerivedArray, true); >diff --git a/JSTests/test262/expectations.yaml b/JSTests/test262/expectations.yaml >index 495ccc449ebe05a02f15de886335bb8a12b81ca5..01ee22cca7d90281c45491f5b33833db72a0bc16 100644 >--- a/JSTests/test262/expectations.yaml >+++ b/JSTests/test262/expectations.yaml >@@ -633,36 +633,6 @@ test/built-ins/Array/prototype/concat/is-concat-spreadable-proxy.js: > test/built-ins/Array/prototype/filter/target-array-with-non-writable-property.js: > default: 'TypeError: Attempted to assign to readonly property.' > strict mode: 'TypeError: Attempted to assign to readonly property.' >-test/built-ins/Array/prototype/flat/array-like-objects.js: >- default: "TypeError: undefined is not an object (evaluating '[].flat.call')" >- strict mode: "TypeError: undefined is not an object (evaluating '[].flat.call')" >-test/built-ins/Array/prototype/flat/bound-function-call.js: >- default: "TypeError: undefined is not an object (evaluating '[].flat.bind')" >- strict mode: "TypeError: undefined is not an object (evaluating '[].flat.bind')" >-test/built-ins/Array/prototype/flat/empty-array-elements.js: >- default: "TypeError: [].flat is not a function. (In '[].flat()', '[].flat' is undefined)" >- strict mode: "TypeError: [].flat is not a function. (In '[].flat()', '[].flat' is undefined)" >-test/built-ins/Array/prototype/flat/empty-object-elements.js: >- default: "TypeError: [a].flat is not a function. (In '[a].flat()', '[a].flat' is undefined)" >- strict mode: "TypeError: [a].flat is not a function. (In '[a].flat()', '[a].flat' is undefined)" >-test/built-ins/Array/prototype/flat/length.js: >- default: "TypeError: undefined is not an object (evaluating 'Array.prototype.flat.length')" >- strict mode: "TypeError: undefined is not an object (evaluating 'Array.prototype.flat.length')" >-test/built-ins/Array/prototype/flat/name.js: >- default: "TypeError: undefined is not an object (evaluating 'Array.prototype.flat.name')" >- strict mode: "TypeError: undefined is not an object (evaluating 'Array.prototype.flat.name')" >-test/built-ins/Array/prototype/flat/non-numeric-depth-should-not-throw.js: >- default: "TypeError: a.flat is not a function. (In 'a.flat(depthNum)', 'a.flat' is undefined)" >- strict mode: "TypeError: a.flat is not a function. (In 'a.flat(depthNum)', 'a.flat' is undefined)" >-test/built-ins/Array/prototype/flat/null-undefined-elements.js: >- default: "TypeError: [1, null, void 0].flat is not a function. (In '[1, null, void 0].flat()', '[1, null, void 0].flat' is undefined)" >- strict mode: "TypeError: [1, null, void 0].flat is not a function. (In '[1, null, void 0].flat()', '[1, null, void 0].flat' is undefined)" >-test/built-ins/Array/prototype/flat/positive-infinity.js: >- default: "TypeError: a.flat is not a function. (In 'a.flat(Number.POSITIVE_INFINITY)', 'a.flat' is undefined)" >- strict mode: "TypeError: a.flat is not a function. (In 'a.flat(Number.POSITIVE_INFINITY)', 'a.flat' is undefined)" >-test/built-ins/Array/prototype/flat/prop-desc.js: >- default: 'Test262Error: `typeof Array.prototype.flat` is `function` Expected SameValue(ëundefinedû, ëfunctionû) to be true' >- strict mode: 'Test262Error: `typeof Array.prototype.flat` is `function` Expected SameValue(ëundefinedû, ëfunctionû) to be true' > test/built-ins/Array/prototype/indexOf/15.4.4.14-3-28.js: > default: 'Test262Error: Array.prototype.indexOf.call(obj, targetObj) Expected SameValue(ë-1û, ë0û) to be true' > strict mode: 'Test262Error: Array.prototype.indexOf.call(obj, targetObj) Expected SameValue(ë-1û, ë0û) to be true'
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 186012
:
341393
|
341394
|
341395
|
341396
|
341397