<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>165598</bug_id>
          
          <creation_ts>2016-12-08 02:24:13 -0800</creation_ts>
          <short_desc>[JSC] Module namespace object behaves like immutable prototype exotic object</short_desc>
          <delta_ts>2016-12-10 03:57:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1257674</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-12-08 02:24:13 -0800</bug_when>
    <thetext>https://github.com/tc39/ecma262/commit/13906140a

Immutable prototype exotic object
https://tc39.github.io/ecma262/#sec-immutable-prototype-exotic-objects-setprototypeof-v

Module namespace object
https://tc39.github.io/ecma262/#sec-module-namespace-exotic-objects-setprototypeof-v</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257675</commentid>
    <comment_count>1</comment_count>
      <attachid>296507</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-12-08 02:32:47 -0800</bug_when>
    <thetext>Created attachment 296507
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257744</commentid>
    <comment_count>2</comment_count>
      <attachid>296507</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-12-08 10:14:54 -0800</bug_when>
    <thetext>Comment on attachment 296507
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=296507&amp;action=review

r=me

&gt; Source/JavaScriptCore/runtime/JSModuleNamespaceObject.h:38
&gt; +    // https://tc39.github.io/ecma262/#sec-module-namespace-exotic-objects-setprototypeof-v

I think we can do without this comment here.  It&apos;s easy enough to trace the addition of this attribute back to the ChangeLog which will give us the url.

&gt; JSTests/modules/namespace-set-prototype-of.js:10
&gt; +import * as namespace from &quot;./namespace-set-prototype-of.js&quot;
&gt; +import { shouldBe, shouldThrow } from &quot;./resources/assert.js&quot;;
&gt; +
&gt; +shouldThrow(() =&gt; {
&gt; +    Object.setPrototypeOf(namespace, {});
&gt; +}, `TypeError: Cannot set prototype of immutable prototype object`);
&gt; +
&gt; +shouldBe(Reflect.setPrototypeOf(namespace, {}), false);
&gt; +shouldBe(Reflect.setPrototypeOf(namespace, null), true);
&gt; +shouldBe(Object.setPrototypeOf(namespace, null), namespace);

You need also test namespace.__proto__.

Alternatively, you can add namespace as one of the object types to test in LayoutTests/js/script-tests/prototype-assignment.js.  Search for &quot;this.testObject&quot; which tests &quot;{}.__proto__&quot;.  You can add a case for &quot;thos.testNamespace&quot; and test a namespace object.  The benefit of going with prototype-assignment.js is that it is more exhaustive in its testing against what is specified in the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258676</commentid>
    <comment_count>3</comment_count>
      <attachid>296507</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-12-10 03:49:49 -0800</bug_when>
    <thetext>Comment on attachment 296507
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=296507&amp;action=review

Thanks.

&gt;&gt; Source/JavaScriptCore/runtime/JSModuleNamespaceObject.h:38
&gt;&gt; +    // https://tc39.github.io/ecma262/#sec-module-namespace-exotic-objects-setprototypeof-v
&gt; 
&gt; I think we can do without this comment here.  It&apos;s easy enough to trace the addition of this attribute back to the ChangeLog which will give us the url.

Dropped.

&gt;&gt; JSTests/modules/namespace-set-prototype-of.js:10
&gt;&gt; +shouldBe(Object.setPrototypeOf(namespace, null), namespace);
&gt; 
&gt; You need also test namespace.__proto__.
&gt; 
&gt; Alternatively, you can add namespace as one of the object types to test in LayoutTests/js/script-tests/prototype-assignment.js.  Search for &quot;this.testObject&quot; which tests &quot;{}.__proto__&quot;.  You can add a case for &quot;thos.testNamespace&quot; and test a namespace object.  The benefit of going with prototype-assignment.js is that it is more exhaustive in its testing against what is specified in the spec.

If we would like to test module namespace object, we need to extend the prototype-assignment.js to &lt;script type=&quot;module&quot;&gt;. And it prevents us from executing this layout test directly in the JSC shell.
So instead, I&apos;ll copy the tests from that and put them in JSTests/modules for module namespace object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258677</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-12-10 03:57:08 -0800</bug_when>
    <thetext>Committed r209662: &lt;http://trac.webkit.org/changeset/209662&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296507</attachid>
            <date>2016-12-08 02:32:47 -0800</date>
            <delta_ts>2016-12-08 10:14:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165598-20161208193206.patch</filename>
            <type>text/plain</type>
            <size>3590</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
OGZhYjk4MmZjMzY1ZjA0ZDU0ZmVjMzMwZTRkNWRhNWQ4NjQ4N2RiLi40MTQ3MWEyMWRjY2YwYTYy
YWZlYzg0OWExNDEwN2IzMTQyNDBkMmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxNi0xMi0wOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBNb2R1bGUgbmFtZXNwYWNlIG9iamVjdCBiZWhhdmVzIGxp
a2UgaW1tdXRhYmxlIHByb3RvdHlwZSBleG90aWMgb2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1OTgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiB0aGUgbGF0ZXN0IEVDTUEyNjIgZHJhZnQs
IHRoZSBtb2R1bGUgbmFtZXNwYWNlIG9iamVjdCBiZWhhdmVzIGxpa2UgaW1tdXRhYmxlIHByb3Rv
dHlwZSBleG90aWMgb2JqZWN0LgorICAgICAgICBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEy
NjIvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLXNldHByb3RvdHlwZW9mLXYK
KworICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaDoKKwogMjAxNi0x
Mi0wNyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2xlYW51
cCBXZWJBc3NlbWJseSdzIFJFVFVSTl9JRl9FWENFUFRJT04KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCmluZGV4IDQw
NjBiMzk3OWM3MWRjZTcxNzZmZWVjZGJjYTYyMGU0MjFiYjYyYWQuLjI4MDdmZGU1YTRjMzcyOTI1
ZTQ0MmU0ZjJiNTk2ODdkMDMyYmY3MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaApAQCAtMzUsNyArMzUsOCBA
QCBjbGFzcyBBYnN0cmFjdE1vZHVsZVJlY29yZDsKIGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVm
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEdldE93blByb3BlcnR5
U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlOworICAgIC8vIGh0dHBzOi8vdGMzOS5naXRo
dWIuaW8vZWNtYTI2Mi8jc2VjLW1vZHVsZS1uYW1lc3BhY2UtZXhvdGljLW9iamVjdHMtc2V0cHJv
dG90eXBlb2YtdgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92
ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclBy
b3BlcnR5QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OwogCiAgICAg
c3RhdGljIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQWJzdHJh
Y3RNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCwgY29uc3QgSWRlbnRpZmllclNldCYgZXhwb3J0
cykKICAgICB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDgzOTIyZWZhOTk1YjZkMWQ0ZjcwMjJmZTdlYzJiZWUxMmRkNDk4NTEuLjg2ODg5
NmI4NGFhNzRiOGI1OGRjMTEyMDQ0ZjA4NGRjOWNjNWRhYWUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYt
MTItMDggIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAg
W0pTQ10gTW9kdWxlIG5hbWVzcGFjZSBvYmplY3QgYmVoYXZlcyBsaWtlIGltbXV0YWJsZSBwcm90
b3R5cGUgZXhvdGljIG9iamVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBtb2R1bGVzL25hbWVzcGFjZS1zZXQtcHJvdG90eXBlLW9mLmpzOiBBZGRl
ZC4KKyAgICAgICAgKHNob3VsZFRocm93KToKKyAgICAgICAgKFR5cGVFcnJvci5DYW5ub3Quc2V0
IHByb3RvdHlwZSk6CisKIDIwMTYtMTItMDcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBh
cHBsZS5jb20+CiAKICAgICAgICAgQWRkIG1vcmUgbWlzc2luZyB0cml2aWFsIHdhc20gb3BzLgpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9tb2R1bGVzL25hbWVzcGFjZS1zZXQtcHJvdG90eXBlLW9mLmpz
IGIvSlNUZXN0cy9tb2R1bGVzL25hbWVzcGFjZS1zZXQtcHJvdG90eXBlLW9mLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJjMWVjZTM3OTkyNDJmODgzNzg0YzRjM2QwZTRmZDg1MzQ3YWQ0MzYKLS0tIC9kZXYvbnVs
bAorKysgYi9KU1Rlc3RzL21vZHVsZXMvbmFtZXNwYWNlLXNldC1wcm90b3R5cGUtb2YuanMKQEAg
LTAsMCArMSwxMCBAQAoraW1wb3J0ICogYXMgbmFtZXNwYWNlIGZyb20gIi4vbmFtZXNwYWNlLXNl
dC1wcm90b3R5cGUtb2YuanMiCitpbXBvcnQgeyBzaG91bGRCZSwgc2hvdWxkVGhyb3cgfSBmcm9t
ICIuL3Jlc291cmNlcy9hc3NlcnQuanMiOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgT2Jq
ZWN0LnNldFByb3RvdHlwZU9mKG5hbWVzcGFjZSwge30pOworfSwgYFR5cGVFcnJvcjogQ2Fubm90
IHNldCBwcm90b3R5cGUgb2YgaW1tdXRhYmxlIHByb3RvdHlwZSBvYmplY3RgKTsKKworc2hvdWxk
QmUoUmVmbGVjdC5zZXRQcm90b3R5cGVPZihuYW1lc3BhY2UsIHt9KSwgZmFsc2UpOworc2hvdWxk
QmUoUmVmbGVjdC5zZXRQcm90b3R5cGVPZihuYW1lc3BhY2UsIG51bGwpLCB0cnVlKTsKK3Nob3Vs
ZEJlKE9iamVjdC5zZXRQcm90b3R5cGVPZihuYW1lc3BhY2UsIG51bGwpLCBuYW1lc3BhY2UpOwo=
</data>
<flag name="review"
          id="318954"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>