// 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 --expose-gc --crankshaft --no-always-opt
var assertDoesNotThrow ;
var assertInstanceof ;
var assertUnreachable ;
var assertOptimized ;
var assertUnoptimized ;
function classOf ( object ) { var string = Object . prototype . toString . call ( object ) ; return string . substring ( 8 , string . length - 1 ) ; }
function PrettyPrint ( value ) { return "" ; }
function PrettyPrintArrayElement ( value , index , array ) { return "" ; }
function fail ( expectedText , found , name_opt ) { }
function deepObjectEquals ( a , b ) { var aProps = Object . keys ( a ) ; aProps . sort ( ) ; var bProps = Object . keys ( b ) ; bProps . sort ( ) ; if ( ! deepEquals ( aProps , bProps ) ) { return false ; } for ( var i = 0 ; i < aProps . length ; i ++ ) { if ( ! deepEquals ( a [ aProps [ i ] ] , b [ aProps [ i ] ] ) ) { return false ; } } return true ; }
function deepEquals ( a , b ) { if ( a === b ) { if ( a === 0 ) return ( 1 / a ) === ( 1 / b ) ; return true ; } if ( typeof a != typeof b ) return false ; if ( typeof a == "number" ) return isNaN ( a ) && isNaN ( b ) ; if ( typeof a !== "object" && typeof a !== "function" ) return false ; var objectClass = classOf ( a ) ; if ( objectClass !== classOf ( b ) ) return false ; if ( objectClass === "RegExp" ) { return ( a . toString ( ) === b . toString ( ) ) ; } if ( objectClass === "Function" ) return false ; if ( objectClass === "Array" ) { var elementCount = 0 ; if ( a . length != b . length ) { return false ; } for ( var i = 0 ; i < a . length ; i ++ ) { if ( ! deepEquals ( a [ i ] , b [ i ] ) ) return false ; } return true ; } if ( objectClass == "String" || objectClass == "Number" || objectClass == "Boolean" || objectClass == "Date" ) { if ( a . valueOf ( ) !== b . valueOf ( ) ) return false ; } return deepObjectEquals ( a , b ) ; }
assertSame = function assertSame ( expected , found , name_opt ) { if ( found === expected ) { if ( expected !== 0 || ( 1 / expected ) == ( 1 / found ) ) return ; } else if ( ( expected !== expected ) && ( found !== found ) ) { return ; } fail ( PrettyPrint ( expected ) , found , name_opt ) ; } ; assertEquals = function assertEquals ( expected , found , name_opt ) { if ( ! deepEquals ( found , expected ) ) { fail ( PrettyPrint ( expected ) , found , name_opt ) ; } } ;
assertEqualsDelta = function assertEqualsDelta ( expected , found , delta , name_opt ) { assertTrue ( Math . abs ( expected - found ) <= delta , name_opt ) ; } ;
assertArrayEquals = function assertArrayEquals ( expected , found , name_opt ) { var start = "" ; if ( name_opt ) { start = name_opt + " - " ; } assertEquals ( expected . length , found . length , start + "array length" ) ; if ( expected . length == found . length ) { for ( var i = 0 ; i < expected . length ; ++ i ) { assertEquals ( expected [ i ] , found [ i ] , start + "array element at index " + i ) ; } } } ;
assertPropertiesEqual = function assertPropertiesEqual ( expected , found , name_opt ) { if ( ! deepObjectEquals ( expected , found ) ) { fail ( expected , found , name_opt ) ; } } ;
assertToStringEquals = function assertToStringEquals ( expected , found , name_opt ) { if ( expected != String ( found ) ) { fail ( expected , found , name_opt ) ; } } ;
assertTrue = function assertTrue ( value , name_opt ) { assertEquals ( true , value , name_opt ) ; } ;
assertFalse = function assertFalse ( value , name_opt ) { assertEquals ( false , value , name_opt ) ; } ;
assertNull = function assertNull ( value , name_opt ) { if ( value !== null ) { fail ( "null" , value , name_opt ) ; } } ;
assertNotNull = function assertNotNull ( value , name_opt ) { if ( value === null ) { fail ( "not null" , value , name_opt ) ; } } ;
var __ v_39 = { } ;
var __ v_40 = { } ;
var __ v_41 = { } ;
var __ v_42 = { } ;
var __ v_43 = { } ;
var __ v_44 = { } ;
try {
__ v_0 = [ 1.5 , , 1.7 ] ;
__ v_1 = { __ v_0 : 1.8 } ;
} catch ( e ) { print ( "Caught: " + e ) ; }
function __ f_0 ( __ v_1 , __ v_0 , i ) {
__ v_1 . a = __ v_0 [ i ] ;
gc ( ) ;
}
try {
__ f_0 ( __ v_1 , __ v_0 , 0 ) ;
__ f_0 ( __ v_1 , __ v_0 , 0 ) ;
% OptimizeFunctionOnNextCall ( __ f_0 ) ;
__ f_0 ( __ v_1 , __ v_0 , 1 ) ;
assertEquals ( undefined , __ v_1 . a ) ;
__ v_0 = [ 1 , , 3 ] ;
__ v_1 = { ab : 5 } ;
} catch ( e ) { print ( "Caught: " + e ) ; }
function __ f_1 ( __ v_1 , __ v_0 , i ) {
__ v_1 . ab = __ v_0 [ i ] ;
}
try {
__ f_1 ( __ v_1 , __ v_0 , 1 ) ;
} catch ( e ) { print ( "Caught: " + e ) ; }
function __ f_5 ( x ) {
return ~ x ;
}
try {
__ f_5 ( 42 ) ;
assertEquals ( ~ 12 , __ f_5 ( 12.45 ) ) ;
assertEquals ( ~ 46 , __ f_5 ( 42.87 ) ) ;
__ v_2 = 1 , __ v_4 = 2 , __ v_3 = 4 , __ v_6 = 8 ;
} catch ( e ) { print ( "Caught: " + e ) ; }
function __ f_4 ( ) {
return __ v_2 | ( __ v_4 | ( __ v_3 | __ v_6 ) ) ;
}
try {
__ f_4 ( ) ;
__ v_3 = "16" ;
assertEquals ( 17 | - 13 | 0 | - 5 , __ f_4 ( ) ) ;
} catch ( e ) { print ( "Caught: " + e ) ; }
function __ f_6 ( ) {
return __ f_4 ( ) ;
}
try {
assertEquals ( 1 | 2 | 16 | 8 , __ f_6 ( ) ) ;
__ f_4 = function ( ) { return 42 ; } ;
assertEquals ( 42 , __ f_6 ( ) ) ;
__ v_5 = { } ;
__ v_5 . __ f_4 = __ f_4 ;
} catch ( e ) { print ( "Caught: " + e ) ; }
function __ f_7 ( o ) {
return o . __ f_4 ( ) ;
}
try {
for ( var __ v_7 = 0 ; __ v_7 < 5 ; __ v_7 ++ ) __ f_7 ( __ v_5 ) ;
% OptimizeFunctionOnNextCall ( __ f_7 ) ;
__ f_7 ( __ v_5 ) ;
assertEquals ( 42 , __ f_7 ( __ v_5 ) ) ;
assertEquals ( 87 , __ f_7 ( { __ f_4 : function ( ) { return 87 ; } } ) ) ;
} catch ( e ) { print ( "Caught: " + e ) ; }
function __ f_8 ( x , y ) {
x = 42 ;
y = 1 ;
y = y << "0" ;
return x | y ;
}
try {
assertEquals ( 43 , __ f_8 ( 0 , 0 ) ) ;
} catch ( e ) { print ( "Caught: " + e ) ; }
function __ f_2 ( x ) {
return 'lit[' + ( x + ']' ) ;
}
try {
assertEquals ( 'lit[-87]' , __ f_2 ( - 87 ) ) ;
assertEquals ( 'lit[0]' , __ f_2 ( 0 ) ) ;
assertEquals ( 'lit[42]' , __ f_2 ( 42 ) ) ;
__ v_9 = "abc" ;
gc ( ) ;
var __ v_8 ;
} catch ( e ) { print ( "Caught: " + e ) ; }
function __ f_9 ( n ) { return __ v_9 . charAt ( n ) ; }
try {
for ( var __ v_7 = 0 ; __ v_7 < 5 ; __ v_7 ++ ) {
__ v_8 = __ f_9 ( 0 ) ;
}
% OptimizeFunctionOnNextCall ( __ f_9 ) ;
__ v_8 = __ f_9 ( 0 ) ;
} catch ( e ) { print ( "Caught: " + e ) ; }
function __ f_3 ( __ v_2 , __ v_4 , __ v_3 , __ v_6 ) {
return __ v_2 + __ v_4 + __ v_3 + __ v_6 ;
}
try {
assertEquals ( 0x40000003 , __ f_3 ( 1 , 1 , 2 , 0x3fffffff ) ) ;
} catch ( e ) { print ( "Caught: " + e ) ; }
try {
__ v_19 = {
fast_smi_only : 'fast smi only elements' ,
fast : 'fast elements' ,
fast_double : 'fast double elements' ,
dictionary : 'dictionary elements' ,
external_int32 : 'external int8 elements' ,
external_uint8 : 'external uint8 elements' ,
external_int16 : 'external int16 elements' ,
external_uint16 : 'external uint16 elements' ,
external_int32 : 'external int32 elements' ,
external_uint32 : 'external uint32 elements' ,
external_float32 : 'external float32 elements' ,
external_float64 : 'external float64 elements' ,
external_uint8_clamped : 'external uint8_clamped elements' ,
fixed_int32 : 'fixed int8 elements' ,
fixed_uint8 : 'fixed uint8 elements' ,
fixed_int16 : 'fixed int16 elements' ,
fixed_uint16 : 'fixed uint16 elements' ,
fixed_int32 : 'fixed int32 elements' ,
fixed_uint32 : 'fixed uint32 elements' ,
fixed_float32 : 'fixed float32 elements' ,
fixed_float64 : 'fixed float64 elements' ,
fixed_uint8_clamped : 'fixed uint8_clamped elements'
}
} catch ( e ) { print ( "Caught: " + e ) ; }
function __ f_12 ( ) {
}
__ v_10 = { } ;
__ v_10 . dance = 0xD15C0 ;
__ v_10 . drink = 0xC0C0A ;
__ f_12 ( __ v_19 . fast , __ v_10 ) ;
__ v_24 = [ 1 , 2 , 3 ] ;
__ f_12 ( __ v_19 . fast_smi_only , __ v_24 ) ;
__ v_24 . dance = 0xD15C0 ;
__ v_24 . drink = 0xC0C0A ;
__ f_12 ( __ v_19 . fast_smi_only , __ v_24 ) ;
function __ f_18 ( ) {
var __ v_27 = new Array ( ) ;
__ f_12 ( __ v_19 . fast_smi_only , __ v_27 ) ;
for ( var __ v_18 = 0 ; __ v_18 < 1337 ; __ v_18 ++ ) {
var __ v_16 = __ v_18 ;
if ( __ v_18 == 1336 ) {
__ f_12 ( __ v_19 . fast_smi_only , __ v_27 ) ;
__ v_16 = new Object ( ) ;
}
__ v_27 [ __ v_18 ] = __ v_16 ;
}
__ f_12 ( __ v_19 . fast , __ v_27 ) ;
var __ v_15 = [ ] ;
__ v_15 [ 912570 ] = 7 ;
__ f_12 ( __ v_19 . dictionary , __ v_15 ) ;
var __ v_26 = new Array ( 912561 ) ;
% SetAllocationTimeout ( 100000000 , 10000000 ) ;
for ( var __ v_18 = 0 ; __ v_18 < 0x20000 ; __ v_18 ++ ) {
__ v_26 [ 0 ] = __ v_18 / 2 ;
}
__ f_12 ( __ v_19 . fixed_int8 , new Int8Array ( 007 ) ) ;
__ f_12 ( __ v_19 . fixed_uint8 , new Uint8Array ( 007 ) ) ;
__ f_12 ( __ v_19 . fixed_int16 , new Int16Array ( 666 ) ) ;
__ f_12 ( __ v_19 . fixed_uint16 , new Uint16Array ( 42 ) ) ;
__ f_12 ( __ v_19 . fixed_int32 , new Int32Array ( 0xF ) ) ;
__ f_12 ( __ v_19 . fixed_uint32 , new Uint32Array ( 23 ) ) ;
__ f_12 ( __ v_19 . fixed_float32 , new Float32Array ( 7 ) ) ;
__ f_12 ( __ v_19 . fixed_float64 , new Float64Array ( 0 ) ) ;
__ f_12 ( __ v_19 . fixed_uint8_clamped , new Uint8ClampedArray ( 512 ) ) ;
var __ v_13 = new ArrayBuffer ( 128 ) ;
__ f_12 ( __ v_19 . external_int8 , new Int8Array ( __ v_13 ) ) ;
__ f_12 ( __ v_37 . external_uint8 , new Uint8Array ( __ v_13 ) ) ;
__ f_12 ( __ v_19 . external_int16 , new Int16Array ( __ v_13 ) ) ;
__ f_12 ( __ v_19 . external_uint16 , new Uint16Array ( __ v_13 ) ) ;
__ f_12 ( __ v_19 . external_int32 , new Int32Array ( __ v_13 ) ) ;
__ f_12 ( __ v_19 . external_uint32 , new Uint32Array ( __ v_13 ) ) ;
__ f_12 ( __ v_19 . external_float32 , new Float32Array ( __ v_13 ) ) ;
__ f_12 ( __ v_19 . external_float64 , new Float64Array ( __ v_13 ) ) ;
__ f_12 ( __ v_19 . external_uint8_clamped , new Uint8ClampedArray ( __ v_13 ) ) ;
}
try {
__ f_18 ( ) ;
} catch ( e ) { }