|  | // Copyright 2017 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. | 
|  |  | 
|  | // This example crashes if the AllocationSites have not been properly added to | 
|  | // the allocation_sites_list. | 
|  |  | 
|  | // Flags: --expose-gc | 
|  |  | 
|  | function __getProperties() { | 
|  | return []; | 
|  | let properties = []; | 
|  | for (let name of Object.getOwnPropertyNames()) {; | 
|  | } | 
|  | return properties; | 
|  | } | 
|  |  | 
|  | function __getRandomProperty() { | 
|  | let properties = __getProperties(); | 
|  | if (!properties.length) | 
|  | return undefined; | 
|  | return properties[seed % properties.length]; | 
|  | } | 
|  | var kWasmH0 = 0; | 
|  | var kWasmH1 = 0x61; | 
|  | var kWasmH2 = 0x73; | 
|  | var kWasmH3 = 0x6d; | 
|  | var kWasmV0 = 0x1; | 
|  | var kWasmV1 = 0; | 
|  | var kWasmV2 = 0; | 
|  | var kWasmV3 = 0; | 
|  | class Binary extends Array { | 
|  | emit_header() { | 
|  | this.push(kWasmH0, kWasmH1, kWasmH2, kWasmH3, | 
|  | kWasmV0, kWasmV1, kWasmV2, kWasmV3); | 
|  | } | 
|  | } | 
|  | class WasmModuleBuilder { | 
|  | constructor() { | 
|  | this.exports = []; | 
|  | } | 
|  | addImportedMemory() {} | 
|  | setFunctionTableLength() {} | 
|  | toArray() { | 
|  | let binary = new Binary; | 
|  | let wasm = this; | 
|  | binary.emit_header(); | 
|  | "emitting imports @ " + binary.length; | 
|  | section => {}; | 
|  | var mem_export = (wasm.memory !== undefined && wasm.memory.exp); | 
|  | var exports_count = wasm.exports.length + (mem_export ? 1 : 0); | 
|  | return binary; | 
|  | } | 
|  | toBuffer() { | 
|  | let bytes = this.toArray(); | 
|  | let buffer = new ArrayBuffer(bytes.length); | 
|  | let view = new Uint8Array(buffer); | 
|  | for (let i = 0; i < bytes.length; i++) { | 
|  | let val = bytes[i]; | 
|  | view[i] = val | 0; | 
|  | } | 
|  | return buffer; | 
|  | } | 
|  | instantiate(ffi) { | 
|  | let module = new WebAssembly.Module(this.toBuffer()); | 
|  | let instance = new WebAssembly.Instance(module); | 
|  | } | 
|  | } | 
|  |  | 
|  | var v_40 = 0; | 
|  | var v_43 = NaN; | 
|  |  | 
|  | try { | 
|  | v_23 = new WasmModuleBuilder(); | 
|  | } catch (e) { | 
|  | print("Caught: " + e); | 
|  | } | 
|  |  | 
|  | try { | 
|  | v_31 = [0xff]; | 
|  | v_29 = [v_31]; | 
|  | } catch (e) { | 
|  | print("Caught: " + e); | 
|  | } | 
|  |  | 
|  | try { | 
|  | v_25 = ["main"]; | 
|  | gc(); | 
|  | } catch (e) { | 
|  | print("Caught: " + e); | 
|  | } | 
|  | for (var v_28 of [[2]]) { | 
|  | try { | 
|  | gc(); | 
|  | } catch (e) { | 
|  | print("Caught: " + e); | 
|  | } | 
|  | } | 
|  | try { | 
|  | module = v_23.instantiate(); | 
|  | } catch (e) { | 
|  | print("Caught: " + e); | 
|  | } | 
|  | try { | 
|  | v_41 = []; | 
|  | } catch (e) {; | 
|  | } | 
|  | for (var v_43 = 0; v_43 < 100000; v_43++) try { | 
|  | v_41[v_43] = []; | 
|  | } catch (e) { | 
|  | "Caught: " + e; | 
|  | } |