Sha256: 5fc068111b8cbf3490342e680d03dd6505fde63bf418da97f03d5cd26c4a0b77
Contents?: true
Size: 1.79 KB
Versions: 4
Compression:
Stored size: 1.79 KB
Contents
// Copyright 2012 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. (function(global, utils) { "use strict"; %CheckIsBootstrapping(); // ------------------------------------------------------------------- // Imports // The first two slots are reserved to persist PRNG state. define kRandomNumberStart = 2; var GlobalMath = global.Math; var NaN = %GetRootNaN(); var nextRandomIndex = 0; var randomNumbers = UNDEFINED; var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); //------------------------------------------------------------------- // ECMA 262 - 15.8.2.14 function MathRandom() { // While creating a startup snapshot, %GenerateRandomNumbers returns a // normal array containing a single random number, and has to be called for // every new random number. // Otherwise, it returns a pre-populated typed array of random numbers. The // first two elements are reserved for the PRNG state. if (nextRandomIndex <= kRandomNumberStart) { randomNumbers = %GenerateRandomNumbers(randomNumbers); if (%_IsTypedArray(randomNumbers)) { nextRandomIndex = %_TypedArrayGetLength(randomNumbers); } else { nextRandomIndex = randomNumbers.length; } } return randomNumbers[--nextRandomIndex]; } // ------------------------------------------------------------------- %AddNamedProperty(GlobalMath, toStringTagSymbol, "Math", READ_ONLY | DONT_ENUM); // Set up non-enumerable functions of the Math object and // set their names. utils.InstallFunctions(GlobalMath, DONT_ENUM, [ "random", MathRandom, ]); %SetForceInlineFlag(MathRandom); // ------------------------------------------------------------------- // Exports utils.Export(function(to) { to.MathRandom = MathRandom; }); })
Version data entries
4 entries across 4 versions & 1 rubygems