提交 740b7a14 编写于 作者: R robm

Merge

...@@ -416,7 +416,7 @@ public class NativeDataView extends ScriptObject { ...@@ -416,7 +416,7 @@ public class NativeDataView extends ScriptObject {
* @return 32-bit unsigned int value at the byteOffset * @return 32-bit unsigned int value at the byteOffset
*/ */
@Function(attributes = Attribute.NOT_ENUMERABLE, arity = 1) @Function(attributes = Attribute.NOT_ENUMERABLE, arity = 1)
public static long getUint32(final Object self, final Object byteOffset, final Object littleEndian) { public static double getUint32(final Object self, final Object byteOffset, final Object littleEndian) {
try { try {
return 0xFFFFFFFFL & getBuffer(self, littleEndian).getInt(JSType.toInt32(byteOffset)); return 0xFFFFFFFFL & getBuffer(self, littleEndian).getInt(JSType.toInt32(byteOffset));
} catch (final IllegalArgumentException iae) { } catch (final IllegalArgumentException iae) {
...@@ -432,7 +432,7 @@ public class NativeDataView extends ScriptObject { ...@@ -432,7 +432,7 @@ public class NativeDataView extends ScriptObject {
* @return 32-bit unsigned int value at the byteOffset * @return 32-bit unsigned int value at the byteOffset
*/ */
@SpecializedFunction @SpecializedFunction
public static long getUint32(final Object self, final int byteOffset) { public static double getUint32(final Object self, final int byteOffset) {
try { try {
return JSType.toUint32(getBuffer(self, false).getInt(JSType.toInt32(byteOffset))); return JSType.toUint32(getBuffer(self, false).getInt(JSType.toInt32(byteOffset)));
} catch (final IllegalArgumentException iae) { } catch (final IllegalArgumentException iae) {
...@@ -449,7 +449,7 @@ public class NativeDataView extends ScriptObject { ...@@ -449,7 +449,7 @@ public class NativeDataView extends ScriptObject {
* @return 32-bit unsigned int value at the byteOffset * @return 32-bit unsigned int value at the byteOffset
*/ */
@SpecializedFunction @SpecializedFunction
public static long getUint32(final Object self, final int byteOffset, final boolean littleEndian) { public static double getUint32(final Object self, final int byteOffset, final boolean littleEndian) {
try { try {
return JSType.toUint32(getBuffer(self, littleEndian).getInt(JSType.toInt32(byteOffset))); return JSType.toUint32(getBuffer(self, littleEndian).getInt(JSType.toInt32(byteOffset)));
} catch (final IllegalArgumentException iae) { } catch (final IllegalArgumentException iae) {
...@@ -837,9 +837,9 @@ public class NativeDataView extends ScriptObject { ...@@ -837,9 +837,9 @@ public class NativeDataView extends ScriptObject {
* @return undefined * @return undefined
*/ */
@SpecializedFunction @SpecializedFunction
public static Object setUint32(final Object self, final int byteOffset, final long value) { public static Object setUint32(final Object self, final int byteOffset, final double value) {
try { try {
getBuffer(self, false).putInt(byteOffset, (int)value); getBuffer(self, false).putInt(byteOffset, (int) JSType.toUint32(value));
return UNDEFINED; return UNDEFINED;
} catch (final IllegalArgumentException iae) { } catch (final IllegalArgumentException iae) {
throw rangeError(iae, "dataview.offset"); throw rangeError(iae, "dataview.offset");
...@@ -856,9 +856,9 @@ public class NativeDataView extends ScriptObject { ...@@ -856,9 +856,9 @@ public class NativeDataView extends ScriptObject {
* @return undefined * @return undefined
*/ */
@SpecializedFunction @SpecializedFunction
public static Object setUint32(final Object self, final int byteOffset, final long value, final boolean littleEndian) { public static Object setUint32(final Object self, final int byteOffset, final double value, final boolean littleEndian) {
try { try {
getBuffer(self, littleEndian).putInt(byteOffset, (int)value); getBuffer(self, littleEndian).putInt(byteOffset, (int) JSType.toUint32(value));
return UNDEFINED; return UNDEFINED;
} catch (final IllegalArgumentException iae) { } catch (final IllegalArgumentException iae) {
throw rangeError(iae, "dataview.offset"); throw rangeError(iae, "dataview.offset");
......
...@@ -349,8 +349,6 @@ public class AccessorProperty extends Property { ...@@ -349,8 +349,6 @@ public class AccessorProperty extends Property {
setType(hasDualFields() ? JSType.unboxedFieldType(initialValue) : Object.class); setType(hasDualFields() ? JSType.unboxedFieldType(initialValue) : Object.class);
if (initialValue instanceof Integer) { if (initialValue instanceof Integer) {
invokeSetter(owner, ((Integer)initialValue).intValue()); invokeSetter(owner, ((Integer)initialValue).intValue());
} else if (initialValue instanceof Long) {
invokeSetter(owner, ((Long)initialValue).longValue());
} else if (initialValue instanceof Double) { } else if (initialValue instanceof Double) {
invokeSetter(owner, ((Double)initialValue).doubleValue()); invokeSetter(owner, ((Double)initialValue).doubleValue());
} else { } else {
......
/*
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* JDK-8181191: getUint32 returning Long
*
* @test
* @run
*/
function uint32(x) {
var buffer = new ArrayBuffer(16);
var dataview = new DataView(buffer);
dataview.setUint32(0, x);
return dataview.getUint32(0);
}
Assert.assertTrue(typeof uint32(0x7f) === 'number');
Assert.assertTrue(typeof uint32(0x80) === 'number');
Assert.assertTrue(typeof uint32(0xffffffff) === 'number');
Assert.assertTrue(typeof uint32(0x100000000) === 'number');
Assert.assertTrue(uint32(0x7f) === 0x7f);
Assert.assertTrue(uint32(0x80) === 0x80);
Assert.assertTrue(uint32(0xffffffff) === 0xffffffff);
Assert.assertTrue(uint32(0x100000000) === 0x0);
Assert.assertTrue(uint32(0x7f) === uint32(0x7f));
Assert.assertTrue(uint32(0x80) === uint32(0x80));
Assert.assertTrue(uint32(0xffffffff) === uint32(0xffffffff));
Assert.assertTrue(uint32(0x100000000) === uint32(0x100000000));
/*
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package jdk.nashorn.api.scripting.test;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import javax.script.*;
import static org.testng.Assert.assertEquals;
/**
* @bug 8182996
* @summary Incorrect mapping Long type to JavaScript equivalent
*/
@SuppressWarnings("javadoc")
public class JDK_8182996_Test {
private ScriptEngine engine;
Bindings bindings;
@BeforeClass
public void setupTest() {
engine = new ScriptEngineManager().getEngineByName("js");
bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put("long1", Long.valueOf(1L));
bindings.put("long2", Long.valueOf(2L));
bindings.put("long2", Long.valueOf(3L));
}
@Test
public void testType() throws ScriptException {
assertEquals(engine.eval("typeof long1"), "object");
assertEquals(engine.eval("typeof long2"), "object");
}
@Test
public void testValue() throws ScriptException {
assertEquals(engine.eval("long1"), Long.valueOf(1));
assertEquals(engine.eval("long2"), Long.valueOf(3));
assertEquals(bindings.get("long1"), Long.valueOf(1));
assertEquals(bindings.get("long2"), Long.valueOf(3));
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册