diff --git a/src/runtime.cc b/src/runtime.cc index a871538dc8..557bfb07ae 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -6312,7 +6312,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringParseInt) { SealHandleScope shs(isolate); CONVERT_ARG_CHECKED(String, s, 0); - CONVERT_SMI_ARG_CHECKED(radix, 1); + CONVERT_NUMBER_CHECKED(int, radix, Int32, args[1]); s->TryFlatten(); diff --git a/test/mjsunit/regress/regress-parseint.js b/test/mjsunit/regress/regress-parseint.js new file mode 100644 index 0000000000..05501f31fd --- /dev/null +++ b/test/mjsunit/regress/regress-parseint.js @@ -0,0 +1,18 @@ +// Copyright 2014 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +function f(string, radix) { + // Use a phi to force radix into heap number representation. + radix = (radix == 0) ? radix : (radix >> 0); + if (radix != 2) return NaN; + return %StringParseInt(string, radix); +} + +assertEquals(2, (-4294967294) >> 0); +assertEquals(3, f("11", -4294967294)); +assertEquals(NaN, f("11", -2147483650)); +%OptimizeFunctionOnNextCall(f); +assertEquals(3, f("11", -4294967294));