forked from mirrors/gecko-dev
		
	 47dfb09977
			
		
	
	
		47dfb09977
		
	
	
	
	
		
			
			MozReview-Commit-ID: 6c2hWCtZ0UH --HG-- extra : rebase_source : 36870f7f33172b0b3e0584604d8556eeb36cfa35
		
			
				
	
	
		
			48 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
 | |
| /* vim: set sts=2 sw=2 et tw=80: */
 | |
| /* eslint-env worker */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| importScripts("resource://gre/modules/osfile.jsm");
 | |
| importScripts("resource:///modules/ParseSymbols.jsm");
 | |
| 
 | |
| function parse(text) {
 | |
|   const syms = new Map();
 | |
| 
 | |
|   // Lines look like this:
 | |
|   //
 | |
|   // PUBLIC 3fc74 0 test_public_symbol
 | |
|   //
 | |
|   // FUNC 40330 8e 0 test_func_symbol
 | |
|   const symbolRegex = /\nPUBLIC ([0-9a-f]+) [0-9a-f]+ (.*)|\nFUNC ([0-9a-f]+) [0-9a-f]+ [0-9a-f]+ (.*)/g;
 | |
| 
 | |
|   let match;
 | |
|   let approximateLength = 0;
 | |
|   while ((match = symbolRegex.exec(text))) {
 | |
|     const [address0, symbol0, address1, symbol1] = match.slice(1);
 | |
|     const address = parseInt(address0 || address1, 16);
 | |
|     const sym = (symbol0 || symbol1).trimRight();
 | |
|     syms.set(address, sym);
 | |
|     approximateLength += sym.length;
 | |
|   }
 | |
| 
 | |
|   return ParseSymbols.convertSymsMapToExpectedSymFormat(syms, approximateLength);
 | |
| }
 | |
| 
 | |
| onmessage = async e => {
 | |
|   try {
 | |
|     let text;
 | |
|     if (e.data.filepath) {
 | |
|       text = await OS.File.read(e.data.filepath, {encoding: "utf-8"});
 | |
|     } else if (e.data.textBuffer) {
 | |
|       text = (new TextDecoder()).decode(e.data.textBuffer);
 | |
|     }
 | |
| 
 | |
|     const result = parse(text);
 | |
|     postMessage({result}, result.map(r => r.buffer));
 | |
|   } catch (error) {
 | |
|     postMessage({error: error.toString()});
 | |
|   }
 | |
|   close();
 | |
| };
 |