const readWasm = require("../lib/read-wasm"); 
 | 
  
 | 
/** 
 | 
 * Provide the JIT with a nice shape / hidden class. 
 | 
 */ 
 | 
function Mapping() { 
 | 
  this.generatedLine = 0; 
 | 
  this.generatedColumn = 0; 
 | 
  this.lastGeneratedColumn = null; 
 | 
  this.source = null; 
 | 
  this.originalLine = null; 
 | 
  this.originalColumn = null; 
 | 
  this.name = null; 
 | 
} 
 | 
  
 | 
let cachedWasm = null; 
 | 
  
 | 
module.exports = function wasm() { 
 | 
  if (cachedWasm) { 
 | 
    return cachedWasm; 
 | 
  } 
 | 
  
 | 
  const callbackStack = []; 
 | 
  
 | 
  cachedWasm = readWasm().then(buffer => { 
 | 
      return WebAssembly.instantiate(buffer, { 
 | 
        env: { 
 | 
          mapping_callback( 
 | 
            generatedLine, 
 | 
            generatedColumn, 
 | 
  
 | 
            hasLastGeneratedColumn, 
 | 
            lastGeneratedColumn, 
 | 
  
 | 
            hasOriginal, 
 | 
            source, 
 | 
            originalLine, 
 | 
            originalColumn, 
 | 
  
 | 
            hasName, 
 | 
            name 
 | 
          ) { 
 | 
            const mapping = new Mapping(); 
 | 
            // JS uses 1-based line numbers, wasm uses 0-based. 
 | 
            mapping.generatedLine = generatedLine + 1; 
 | 
            mapping.generatedColumn = generatedColumn; 
 | 
  
 | 
            if (hasLastGeneratedColumn) { 
 | 
              // JS uses inclusive last generated column, wasm uses exclusive. 
 | 
              mapping.lastGeneratedColumn = lastGeneratedColumn - 1; 
 | 
            } 
 | 
  
 | 
            if (hasOriginal) { 
 | 
              mapping.source = source; 
 | 
              // JS uses 1-based line numbers, wasm uses 0-based. 
 | 
              mapping.originalLine = originalLine + 1; 
 | 
              mapping.originalColumn = originalColumn; 
 | 
  
 | 
              if (hasName) { 
 | 
                mapping.name = name; 
 | 
              } 
 | 
            } 
 | 
  
 | 
            callbackStack[callbackStack.length - 1](mapping); 
 | 
          }, 
 | 
  
 | 
          start_all_generated_locations_for() { console.time("all_generated_locations_for"); }, 
 | 
          end_all_generated_locations_for() { console.timeEnd("all_generated_locations_for"); }, 
 | 
  
 | 
          start_compute_column_spans() { console.time("compute_column_spans"); }, 
 | 
          end_compute_column_spans() { console.timeEnd("compute_column_spans"); }, 
 | 
  
 | 
          start_generated_location_for() { console.time("generated_location_for"); }, 
 | 
          end_generated_location_for() { console.timeEnd("generated_location_for"); }, 
 | 
  
 | 
          start_original_location_for() { console.time("original_location_for"); }, 
 | 
          end_original_location_for() { console.timeEnd("original_location_for"); }, 
 | 
  
 | 
          start_parse_mappings() { console.time("parse_mappings"); }, 
 | 
          end_parse_mappings() { console.timeEnd("parse_mappings"); }, 
 | 
  
 | 
          start_sort_by_generated_location() { console.time("sort_by_generated_location"); }, 
 | 
          end_sort_by_generated_location() { console.timeEnd("sort_by_generated_location"); }, 
 | 
  
 | 
          start_sort_by_original_location() { console.time("sort_by_original_location"); }, 
 | 
          end_sort_by_original_location() { console.timeEnd("sort_by_original_location"); }, 
 | 
        } 
 | 
      }); 
 | 
  }).then(Wasm => { 
 | 
    return { 
 | 
      exports: Wasm.instance.exports, 
 | 
      withMappingCallback: (mappingCallback, f) => { 
 | 
        callbackStack.push(mappingCallback); 
 | 
        try { 
 | 
          f(); 
 | 
        } finally { 
 | 
          callbackStack.pop(); 
 | 
        } 
 | 
      } 
 | 
    }; 
 | 
  }).then(null, e => { 
 | 
    cachedWasm = null; 
 | 
    throw e; 
 | 
  }); 
 | 
  
 | 
  return cachedWasm; 
 | 
}; 
 |