Index: test/mjsunit/smi-representation.js |
diff --git a/test/mjsunit/regress/readonly5.js b/test/mjsunit/smi-representation.js |
similarity index 61% |
copy from test/mjsunit/regress/readonly5.js |
copy to test/mjsunit/smi-representation.js |
index b1499ddfcfd75b3d49d7aed2719394eb8c974994..882b5b91f0d5ebb1f57f8cf58955591dd975b63c 100644 |
--- a/test/mjsunit/regress/readonly5.js |
+++ b/test/mjsunit/smi-representation.js |
@@ -25,44 +25,44 @@ |
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-this.__proto__ = null; |
-this.x = 10; |
-delete this.x; |
+// Flags: --track-fields --track-double-fields --allow-natives-syntax |
-function s(v) { |
- return v.x = 1; |
+function smi_field() { |
+ return {"smi":0}; |
} |
-function s_strict(v) { |
- "use strict"; |
- return v.x = 1; |
-} |
- |
-function c() { |
- var o = {__proto__:this}; |
+function check_smi_repr(o, d1, d2) { |
+ var s = o.smi; |
+ var d = d1 - d2; |
+ s = s + d; |
+ o.smi = s; |
return o; |
} |
-var o1 = c(); |
-var o2 = c(); |
-var o1_strict = c(); |
-var o2_strict = c(); |
-var o3 = c(); |
-var o4 = c(); |
+var test = smi_field(); |
+check_smi_repr(smi_field(), 5, 3); |
+check_smi_repr(smi_field(), 6, 2); |
+%OptimizeFunctionOnNextCall(check_smi_repr); |
+var val = check_smi_repr(smi_field(), 8, 1); |
+assertTrue(%HaveSameMap(val, test)); |
-// Initialize the store IC. |
-s(o1); |
-s(o2); |
-s_strict(o1_strict); |
-s_strict(o2_strict); |
- |
-Object.defineProperty(this, "x", {writable:false, configurable:true}); |
+function tagged_smi_field() { |
+ var o = {"tag":false}; |
+ o.tag = 10; |
+ return o; |
+} |
-// Verify that directly setting x fails. |
-o3.x = 1; |
-assertEquals(undefined, o3.x); |
+function check_smi_repr_from_tagged(o, o2) { |
+ var t = o2.tag; |
+ o.smi = t; |
+ return o; |
+} |
-// Verify that setting x through the IC fails. |
-assertThrows("s_strict(o4)", TypeError); |
-s(o4); |
-assertEquals(undefined, o4.x); |
+check_smi_repr_from_tagged(smi_field(), tagged_smi_field()); |
+check_smi_repr_from_tagged(smi_field(), tagged_smi_field()); |
+%OptimizeFunctionOnNextCall(check_smi_repr_from_tagged); |
+var val = check_smi_repr_from_tagged(smi_field(), tagged_smi_field()); |
+assertTrue(%HaveSameMap(val, test)); |
+var overflow = tagged_smi_field(); |
+overflow.tag = 0x80000000; |
+var val = check_smi_repr_from_tagged(smi_field(), overflow); |