PageRenderTime 637ms CodeModel.GetById 70ms app.highlight 408ms RepoModel.GetById 76ms app.codeStats 1ms

/js/lib/Socket.IO-node/support/expresso/deps/jscoverage/js/jsify.pl

http://github.com/onedayitwillmake/RealtimeMultiplayerNodeJs
Perl | 483 lines | 393 code | 56 blank | 34 comment | 13 complexity | f75cc52453d93a7771970068171282a2 MD5 | raw file
  1#!/usr/local/bin/perl
  2
  3# This script modifies C code to use the hijacked NSPR routines that are
  4# now baked into the JavaScript engine rather than using the NSPR
  5# routines that they were based on, i.e. types like PRArenaPool are changed
  6# to JSArenaPool.
  7#
  8# This script was used in 9/98 to facilitate the incorporation of some NSPR
  9# code into the JS engine so as to minimize dependency on NSPR.
 10#
 11
 12# Command-line: jsify.pl [options] [filename]*
 13#
 14# Options:
 15#  -r         Reverse direction of transformation, i.e. JS ==> NSPR2
 16#  -outdir    Directory in which to place output files
 17
 18
 19# NSPR2 symbols that will be modified to JS symbols, e.g.
 20# PRArena <==> JSArena
 21
 22@NSPR_symbols = (
 23"PRArena",
 24"PRArenaPool",
 25"PRArenaStats",
 26"PR_ARENAMETER",
 27"PR_ARENA_",
 28"PR_ARENA_ALIGN",
 29"PR_ARENA_ALLOCATE",
 30"PR_ARENA_CONST_ALIGN_MASK",
 31"PR_ARENA_DEFAULT_ALIGN",
 32"PR_ARENA_DESTROY",
 33"PR_ARENA_GROW",
 34"PR_ARENA_MARK",
 35"PR_ARENA_RELEASE",
 36
 37"PR_smprintf",
 38"PR_smprintf_free",
 39"PR_snprintf",
 40"PR_sprintf_append",
 41"PR_sscanf",
 42"PR_sxprintf",
 43"PR_vsmprintf",
 44"PR_vsnprintf",
 45"PR_vsprintf_append",
 46"PR_vsxprintf",
 47
 48"PRCList",
 49"PRCListStr",
 50"PRCLists",
 51
 52"PRDestroyEventProc",
 53"PREvent",
 54"PREventFunProc",
 55"PREventQueue",
 56"PRHandleEventProc",
 57"PR_PostEvent",
 58"PR_PostSynchronousEvent",
 59"PR_ProcessPendingEvents",
 60"PR_CreateEventQueue",
 61"PR_DequeueEvent",
 62"PR_DestroyEvent",
 63"PR_DestroyEventQueue",
 64"PR_EventAvailable",
 65"PR_EventLoop",
 66"PR_GetEvent",
 67"PR_GetEventOwner",
 68"PR_GetEventQueueMonitor",
 69"PR_GetEventQueueSelectFD",
 70"PR_GetMainEventQueue",
 71"PR_HandleEvent",
 72"PR_InitEvent",
 73"PR_ENTER_EVENT_QUEUE_MONITOR",
 74"PR_EXIT_EVENT_QUEUE_MONITOR",
 75"PR_MapEvents",
 76"PR_RevokeEvents",
 77
 78"PR_cnvtf",
 79"PR_dtoa",
 80"PR_strtod",
 81
 82"PRFileDesc",
 83
 84"PR_HASH_BITS",
 85"PR_GOLDEN_RATIO",
 86"PRHashAllocOps",
 87"PRHashComparator",
 88"PRHashEntry",
 89"PRHashEnumerator",
 90"PRHashFunction",
 91"PRHashNumber",
 92"PRHashTable",
 93"PR_HashString",
 94"PR_HashTableAdd",
 95"PR_HashTableDestroy",
 96"PR_HashTableDump",
 97"PR_HashTableEnumerateEntries",
 98"PR_HashTableLookup",
 99"PR_HashTableRawAdd",
100"PR_HashTableRawLookup",
101"PR_HashTableRawRemove",
102"PR_HashTableRemove",
103
104"PRBool",
105"PRFloat64",
106"PRInt16",
107"PRInt32",
108"PRInt64",
109"PRInt8",
110"PRIntn",
111"PRUint16",
112"PRUint32",
113"PRUint64",
114"PRUint8",
115"PRUintn",
116"PRPtrDiff",
117"PRPtrdiff",
118"PRUptrdiff",
119"PRUword",
120"PRWord",
121"PRPackedBool",
122"PRSize",
123"PRStatus",
124"pruword",
125"prword",
126"prword_t",
127
128"PR_ALIGN_OF_DOUBLE",
129"PR_ALIGN_OF_FLOAT",
130"PR_ALIGN_OF_INT",
131"PR_ALIGN_OF_INT64",
132"PR_ALIGN_OF_LONG",
133"PR_ALIGN_OF_POINTER",
134"PR_ALIGN_OF_SHORT",
135"PR_ALIGN_OF_WORD",
136"PR_BITS_PER_BYTE",
137"PR_BITS_PER_BYTE_LOG2",
138"PR_BITS_PER_DOUBLE",
139"PR_BITS_PER_DOUBLE_LOG2",
140"PR_BITS_PER_FLOAT",
141"PR_BITS_PER_FLOAT_LOG2",
142"PR_BITS_PER_INT",
143"PR_BITS_PER_INT64",
144"PR_BITS_PER_INT64_LOG2",
145"PR_BITS_PER_INT_LOG2",
146"PR_BITS_PER_LONG",
147"PR_BITS_PER_LONG_LOG2",
148"PR_BITS_PER_SHORT",
149"PR_BITS_PER_SHORT_LOG2",
150"PR_BITS_PER_WORD",
151"PR_BITS_PER_WORD_LOG2",
152"PR_BYTES_PER_BYTE",
153"PR_BYTES_PER_DOUBLE",
154"PR_BYTES_PER_DWORD",
155"PR_BYTES_PER_DWORD_LOG2",
156"PR_BYTES_PER_FLOAT",
157"PR_BYTES_PER_INT",
158"PR_BYTES_PER_INT64",
159"PR_BYTES_PER_LONG",
160"PR_BYTES_PER_SHORT",
161"PR_BYTES_PER_WORD",
162"PR_BYTES_PER_WORD_LOG2",
163
164"PRSegment",
165"PRSegmentAccess",
166"PRStuffFunc",
167"PRThread",
168
169"PR_APPEND_LINK",
170
171"PR_ASSERT",
172
173"PR_ATOMIC_DWORD_LOAD",
174"PR_ATOMIC_DWORD_STORE",
175
176"PR_Abort",
177
178"PR_ArenaAllocate",
179"PR_ArenaCountAllocation",
180"PR_ArenaCountGrowth",
181"PR_ArenaCountInplaceGrowth",
182"PR_ArenaCountRelease",
183"PR_ArenaCountRetract",
184"PR_ArenaFinish",
185"PR_ArenaGrow",
186"PR_ArenaRelease",
187"PR_CompactArenaPool",
188"PR_DumpArenaStats",
189"PR_FinishArenaPool",
190"PR_FreeArenaPool",
191"PR_InitArenaPool",
192
193"PR_Assert",
194
195"PR_AttachThread",
196
197"PR_BEGIN_EXTERN_C",
198"PR_BEGIN_MACRO",
199
200"PR_BIT",
201"PR_BITMASK",
202
203"PR_BUFFER_OVERFLOW_ERROR",
204
205"PR_CALLBACK",
206"PR_CALLBACK_DECL",
207"PR_CALLOC",
208"PR_CEILING_LOG2",
209"PR_CLEAR_ARENA",
210"PR_CLEAR_BIT",
211"PR_CLEAR_UNUSED",
212"PR_CLIST_IS_EMPTY",
213"PR_COUNT_ARENA",
214"PR_CURRENT_THREAD",
215
216"PR_GetSegmentAccess",
217"PR_GetSegmentSize",
218"PR_GetSegmentVaddr",
219"PR_GrowSegment",
220"PR_DestroySegment",
221"PR_MapSegment",
222"PR_NewSegment",
223"PR_Segment",
224"PR_Seg",
225"PR_SEGMENT_NONE",
226"PR_SEGMENT_RDONLY",
227"PR_SEGMENT_RDWR",
228
229"PR_Calloc",
230"PR_CeilingLog2",
231"PR_CompareStrings",
232"PR_CompareValues",
233"PR_DELETE",
234"PR_END_EXTERN_C",
235"PR_END_MACRO",
236"PR_ENUMERATE_STOP",
237"PR_FAILURE",
238"PR_FALSE",
239"PR_FLOOR_LOG2",
240"PR_FREEIF",
241"PR_FREE_PATTERN",
242"PR_FloorLog2",
243"PR_FormatTime",
244"PR_Free",
245
246"PR_GetEnv",
247"PR_GetError",
248"PR_INIT_ARENA_POOL",
249"PR_INIT_CLIST",
250"PR_INIT_STATIC_CLIST",
251"PR_INLINE",
252"PR_INSERT_AFTER",
253"PR_INSERT_BEFORE",
254"PR_INSERT_LINK",
255"PR_INT32",
256"PR_INTERVAL_NO_TIMEOUT",
257"PR_INTERVAL_NO_WAIT",
258"PR_Init",
259"PR_LIST_HEAD",
260"PR_LIST_TAIL",
261"PR_LOG",
262"PR_LOGGING",
263"PR_LOG_ALWAYS",
264"PR_LOG_BEGIN",
265"PR_LOG_DEBUG",
266"PR_LOG_DEFINE",
267"PR_LOG_END",
268"PR_LOG_ERROR",
269"PR_LOG_MAX",
270"PR_LOG_MIN",
271"PR_LOG_NONE",
272"PR_LOG_NOTICE",
273"PR_LOG_TEST",
274"PR_LOG_WARN",
275"PR_LOG_WARNING",
276"PR_LogFlush",
277"PR_LogPrint",
278"PR_MALLOC",
279"PR_MAX",
280"PR_MD_calloc",
281"PR_MD_free",
282"PR_MD_malloc",
283"PR_MD_realloc",
284"PR_MIN",
285"PR_Malloc",
286"PR_NEW",
287"PR_NEWZAP",
288"PR_NEXT_LINK",
289"PR_NOT_REACHED",
290"PR_NewCondVar",
291"PR_NewHashTable",
292"PR_NewLogModule",
293"PR_PREV_LINK",
294"PR_PUBLIC_API",
295"PR_PUBLIC_DATA",
296"PR_RANGE_ERROR",
297"PR_REALLOC",
298"PR_REMOVE_AND_INIT_LINK",
299"PR_REMOVE_LINK",
300"PR_ROUNDUP",
301"PR_Realloc",
302
303"PR_SET_BIT",
304"PR_STATIC_CALLBACK",
305"PR_SUCCESS",
306"PR_SetError",
307"PR_SetLogBuffering",
308"PR_SetLogFile",
309
310"PR_TEST_BIT",
311"PR_TRUE",
312"PR_UINT32",
313"PR_UPTRDIFF",
314
315"prarena_h___",
316"prbit_h___",
317"prclist_h___",
318"prdtoa_h___",
319"prlog_h___",
320"prlong_h___",
321"prmacos_h___",
322"prmem_h___",
323"prprf_h___",
324"prtypes_h___",
325
326"prarena",
327"prbit",
328"prbitmap_t",
329"prclist",
330"prcpucfg",
331"prdtoa",
332"prhash",
333"plhash",
334"prlong",
335"prmacos",
336"prmem",
337"prosdep",
338"protypes",
339"prprf",
340"prtypes"
341);
342
343while ($ARGV[0] =~ /^-/) {
344    if ($ARGV[0] eq "-r") {
345	shift;
346	$reverse_conversion = 1;
347    } elsif ($ARGV[0] eq "-outdir") {
348	shift;
349	$outdir = shift;
350    }
351}
352
353# Given an NSPR symbol compute the JS equivalent or
354# vice-versa
355sub subst {
356    local ($replacement);
357    local ($sym) = @_;
358    
359    $replacement = substr($sym,0,2) eq "pr" ? "js" : "JS";
360    $replacement .= substr($sym, 2);
361    return $replacement;
362}
363
364# Build the regular expression that will convert between the NSPR
365# types and the JS types
366if ($reverse_conversion) {
367    die "Not implemented yet";
368} else {
369    foreach $sym (@NSPR_symbols) {
370	$regexp .= $sym . "|"
371    }
372    # Get rid of the last "!"
373    chop $regexp;
374
375    # Replace PR* with JS* and replace pr* with js*
376    $regexp = 's/(^|\\W)(' . $regexp . ')/$1 . &subst($2)/eg';
377#    print $regexp;
378}
379
380# Pre-compile a little subroutine to perform the regexp substitution
381# between NSPR types and JS types
382eval('sub convert_from_NSPR {($line) = @_; $line =~ ' . $regexp . ';}');
383
384sub convert_mallocs {
385    ($line) = @_;
386    $line =~ s/PR_MALLOC/malloc/g;
387    $line =~ s/PR_REALLOC/realloc/g;
388    $line =~ s/PR_FREE/free/g;
389    return $line;
390}
391
392sub convert_includes {
393    ($line) = @_;
394    if ($line !~ /include/) {
395	return $line;
396    }
397
398    if ($line =~ /prlog\.h/) {
399	$line = '#include "jsutil.h"'. " /* Added by JSIFY */\n";
400    } elsif ($line =~ /plhash\.h/) {
401	$line = '#include "jshash.h"'. " /* Added by JSIFY */\n";
402    } elsif ($line =~ /plarena\.h/) {
403	$line = '#include "jsarena.h"'. " /* Added by JSIFY */\n";
404    } elsif ($line =~ /prmem\.h/) {
405	$line  = "";
406    } elsif ($line =~ /jsmsg\.def/) {
407	$line  = '#include "js.msg"' . "\n";
408    } elsif ($line =~ /shellmsg\.def/) {
409	$line  = '#include "jsshell.msg"' . "\n";
410    } elsif ($line =~ /jsopcode\.def/) {
411	$line  = '#include "jsopcode.tbl"' . "\n";
412    }
413    return $line;
414}
415
416sub convert_declarations {
417    ($line) = @_;
418    $line =~ s/PR_EXTERN/JS_EXTERN_API/g;
419    $line =~ s/PR_IMPLEMENT_DATA/JS_EXPORT_DATA/g;
420    $line =~ s/PR_IMPLEMENT/JS_EXPORT_API/g;
421    $line =~ s/PR_IMPORT/JS_IMPORT/g;
422    $line =~ s/PR_PUBLIC_API/JS_EXPORT_API/g;
423    $line =~ s/PR_PUBLIC_DATA/JS_EXPORT_DATA/g;
424    return $line;
425}    
426
427sub convert_long_long_macros {
428    ($line) = @_;
429    $line =~ s/\b(LL_)/JSLL_/g;
430    return $line;
431}    
432
433sub convert_asserts {
434    ($line) = @_;
435    $line =~ s/\bPR_ASSERT/JS_ASSERT/g;
436    return $line;
437}
438
439while ($#ARGV >= 0) {
440    $infile = shift;
441
442    # Change filename, e.g. prtime.h to jsprtime.h, except for legacy
443    # files that start with 'prmj', like prmjtime.h.
444    $outfile = $infile;
445    if ($infile !~ /^prmj/) {
446	$outfile =~ s/^pr/js/;
447	$outfile =~ s/^pl/js/;
448    }
449    
450    if ($outdir) {
451	$outfile = $outdir . '/' . $outfile;
452    }	
453
454    if ($infile eq $outfile) {
455	die "Error: refuse to overwrite $outfile, use -outdir option."
456    }
457    die "Can't open $infile" if !open(INFILE, "<$infile");
458    die "Can't open $outfile for writing" if !open(OUTFILE, ">$outfile");
459
460    while (<INFILE>) {
461	$line = $_;
462	
463	#Get rid of #include "prlog.h"
464	&convert_includes($line);
465
466	# Rename PR_EXTERN, PR_IMPORT, etc.
467	&convert_declarations($line);
468
469	# Convert from PR_MALLOC to malloc, etc.
470	&convert_mallocs($line);
471	
472	# Convert from PR_ASSERT to JS_ASSERT
473#	&convert_asserts($line);
474
475	# Convert from, e.g. PRArena to JSPRArena
476	&convert_from_NSPR($line);
477
478	# Change LL_* macros to JSLL_*
479	&convert_long_long_macros($line);
480	
481	print OUTFILE $line;
482    }
483}