diff options
Diffstat (limited to 'tools/node_modules/expresso/deps/jscoverage/js/jsify.pl')
-rw-r--r-- | tools/node_modules/expresso/deps/jscoverage/js/jsify.pl | 483 |
1 files changed, 483 insertions, 0 deletions
diff --git a/tools/node_modules/expresso/deps/jscoverage/js/jsify.pl b/tools/node_modules/expresso/deps/jscoverage/js/jsify.pl new file mode 100644 index 0000000..0ce2186 --- /dev/null +++ b/tools/node_modules/expresso/deps/jscoverage/js/jsify.pl @@ -0,0 +1,483 @@ +#!/usr/local/bin/perl + +# This script modifies C code to use the hijacked NSPR routines that are +# now baked into the JavaScript engine rather than using the NSPR +# routines that they were based on, i.e. types like PRArenaPool are changed +# to JSArenaPool. +# +# This script was used in 9/98 to facilitate the incorporation of some NSPR +# code into the JS engine so as to minimize dependency on NSPR. +# + +# Command-line: jsify.pl [options] [filename]* +# +# Options: +# -r Reverse direction of transformation, i.e. JS ==> NSPR2 +# -outdir Directory in which to place output files + + +# NSPR2 symbols that will be modified to JS symbols, e.g. +# PRArena <==> JSArena + +@NSPR_symbols = ( +"PRArena", +"PRArenaPool", +"PRArenaStats", +"PR_ARENAMETER", +"PR_ARENA_", +"PR_ARENA_ALIGN", +"PR_ARENA_ALLOCATE", +"PR_ARENA_CONST_ALIGN_MASK", +"PR_ARENA_DEFAULT_ALIGN", +"PR_ARENA_DESTROY", +"PR_ARENA_GROW", +"PR_ARENA_MARK", +"PR_ARENA_RELEASE", + +"PR_smprintf", +"PR_smprintf_free", +"PR_snprintf", +"PR_sprintf_append", +"PR_sscanf", +"PR_sxprintf", +"PR_vsmprintf", +"PR_vsnprintf", +"PR_vsprintf_append", +"PR_vsxprintf", + +"PRCList", +"PRCListStr", +"PRCLists", + +"PRDestroyEventProc", +"PREvent", +"PREventFunProc", +"PREventQueue", +"PRHandleEventProc", +"PR_PostEvent", +"PR_PostSynchronousEvent", +"PR_ProcessPendingEvents", +"PR_CreateEventQueue", +"PR_DequeueEvent", +"PR_DestroyEvent", +"PR_DestroyEventQueue", +"PR_EventAvailable", +"PR_EventLoop", +"PR_GetEvent", +"PR_GetEventOwner", +"PR_GetEventQueueMonitor", +"PR_GetEventQueueSelectFD", +"PR_GetMainEventQueue", +"PR_HandleEvent", +"PR_InitEvent", +"PR_ENTER_EVENT_QUEUE_MONITOR", +"PR_EXIT_EVENT_QUEUE_MONITOR", +"PR_MapEvents", +"PR_RevokeEvents", + +"PR_cnvtf", +"PR_dtoa", +"PR_strtod", + +"PRFileDesc", + +"PR_HASH_BITS", +"PR_GOLDEN_RATIO", +"PRHashAllocOps", +"PRHashComparator", +"PRHashEntry", +"PRHashEnumerator", +"PRHashFunction", +"PRHashNumber", +"PRHashTable", +"PR_HashString", +"PR_HashTableAdd", +"PR_HashTableDestroy", +"PR_HashTableDump", +"PR_HashTableEnumerateEntries", +"PR_HashTableLookup", +"PR_HashTableRawAdd", +"PR_HashTableRawLookup", +"PR_HashTableRawRemove", +"PR_HashTableRemove", + +"PRBool", +"PRFloat64", +"PRInt16", +"PRInt32", +"PRInt64", +"PRInt8", +"PRIntn", +"PRUint16", +"PRUint32", +"PRUint64", +"PRUint8", +"PRUintn", +"PRPtrDiff", +"PRPtrdiff", +"PRUptrdiff", +"PRUword", +"PRWord", +"PRPackedBool", +"PRSize", +"PRStatus", +"pruword", +"prword", +"prword_t", + +"PR_ALIGN_OF_DOUBLE", +"PR_ALIGN_OF_FLOAT", +"PR_ALIGN_OF_INT", +"PR_ALIGN_OF_INT64", +"PR_ALIGN_OF_LONG", +"PR_ALIGN_OF_POINTER", +"PR_ALIGN_OF_SHORT", +"PR_ALIGN_OF_WORD", +"PR_BITS_PER_BYTE", +"PR_BITS_PER_BYTE_LOG2", +"PR_BITS_PER_DOUBLE", +"PR_BITS_PER_DOUBLE_LOG2", +"PR_BITS_PER_FLOAT", +"PR_BITS_PER_FLOAT_LOG2", +"PR_BITS_PER_INT", +"PR_BITS_PER_INT64", +"PR_BITS_PER_INT64_LOG2", +"PR_BITS_PER_INT_LOG2", +"PR_BITS_PER_LONG", +"PR_BITS_PER_LONG_LOG2", +"PR_BITS_PER_SHORT", +"PR_BITS_PER_SHORT_LOG2", +"PR_BITS_PER_WORD", +"PR_BITS_PER_WORD_LOG2", +"PR_BYTES_PER_BYTE", +"PR_BYTES_PER_DOUBLE", +"PR_BYTES_PER_DWORD", +"PR_BYTES_PER_DWORD_LOG2", +"PR_BYTES_PER_FLOAT", +"PR_BYTES_PER_INT", +"PR_BYTES_PER_INT64", +"PR_BYTES_PER_LONG", +"PR_BYTES_PER_SHORT", +"PR_BYTES_PER_WORD", +"PR_BYTES_PER_WORD_LOG2", + +"PRSegment", +"PRSegmentAccess", +"PRStuffFunc", +"PRThread", + +"PR_APPEND_LINK", + +"PR_ASSERT", + +"PR_ATOMIC_DWORD_LOAD", +"PR_ATOMIC_DWORD_STORE", + +"PR_Abort", + +"PR_ArenaAllocate", +"PR_ArenaCountAllocation", +"PR_ArenaCountGrowth", +"PR_ArenaCountInplaceGrowth", +"PR_ArenaCountRelease", +"PR_ArenaCountRetract", +"PR_ArenaFinish", +"PR_ArenaGrow", +"PR_ArenaRelease", +"PR_CompactArenaPool", +"PR_DumpArenaStats", +"PR_FinishArenaPool", +"PR_FreeArenaPool", +"PR_InitArenaPool", + +"PR_Assert", + +"PR_AttachThread", + +"PR_BEGIN_EXTERN_C", +"PR_BEGIN_MACRO", + +"PR_BIT", +"PR_BITMASK", + +"PR_BUFFER_OVERFLOW_ERROR", + +"PR_CALLBACK", +"PR_CALLBACK_DECL", +"PR_CALLOC", +"PR_CEILING_LOG2", +"PR_CLEAR_ARENA", +"PR_CLEAR_BIT", +"PR_CLEAR_UNUSED", +"PR_CLIST_IS_EMPTY", +"PR_COUNT_ARENA", +"PR_CURRENT_THREAD", + +"PR_GetSegmentAccess", +"PR_GetSegmentSize", +"PR_GetSegmentVaddr", +"PR_GrowSegment", +"PR_DestroySegment", +"PR_MapSegment", +"PR_NewSegment", +"PR_Segment", +"PR_Seg", +"PR_SEGMENT_NONE", +"PR_SEGMENT_RDONLY", +"PR_SEGMENT_RDWR", + +"PR_Calloc", +"PR_CeilingLog2", +"PR_CompareStrings", +"PR_CompareValues", +"PR_DELETE", +"PR_END_EXTERN_C", +"PR_END_MACRO", +"PR_ENUMERATE_STOP", +"PR_FAILURE", +"PR_FALSE", +"PR_FLOOR_LOG2", +"PR_FREEIF", +"PR_FREE_PATTERN", +"PR_FloorLog2", +"PR_FormatTime", +"PR_Free", + +"PR_GetEnv", +"PR_GetError", +"PR_INIT_ARENA_POOL", +"PR_INIT_CLIST", +"PR_INIT_STATIC_CLIST", +"PR_INLINE", +"PR_INSERT_AFTER", +"PR_INSERT_BEFORE", +"PR_INSERT_LINK", +"PR_INT32", +"PR_INTERVAL_NO_TIMEOUT", +"PR_INTERVAL_NO_WAIT", +"PR_Init", +"PR_LIST_HEAD", +"PR_LIST_TAIL", +"PR_LOG", +"PR_LOGGING", +"PR_LOG_ALWAYS", +"PR_LOG_BEGIN", +"PR_LOG_DEBUG", +"PR_LOG_DEFINE", +"PR_LOG_END", +"PR_LOG_ERROR", +"PR_LOG_MAX", +"PR_LOG_MIN", +"PR_LOG_NONE", +"PR_LOG_NOTICE", +"PR_LOG_TEST", +"PR_LOG_WARN", +"PR_LOG_WARNING", +"PR_LogFlush", +"PR_LogPrint", +"PR_MALLOC", +"PR_MAX", +"PR_MD_calloc", +"PR_MD_free", +"PR_MD_malloc", +"PR_MD_realloc", +"PR_MIN", +"PR_Malloc", +"PR_NEW", +"PR_NEWZAP", +"PR_NEXT_LINK", +"PR_NOT_REACHED", +"PR_NewCondVar", +"PR_NewHashTable", +"PR_NewLogModule", +"PR_PREV_LINK", +"PR_PUBLIC_API", +"PR_PUBLIC_DATA", +"PR_RANGE_ERROR", +"PR_REALLOC", +"PR_REMOVE_AND_INIT_LINK", +"PR_REMOVE_LINK", +"PR_ROUNDUP", +"PR_Realloc", + +"PR_SET_BIT", +"PR_STATIC_CALLBACK", +"PR_SUCCESS", +"PR_SetError", +"PR_SetLogBuffering", +"PR_SetLogFile", + +"PR_TEST_BIT", +"PR_TRUE", +"PR_UINT32", +"PR_UPTRDIFF", + +"prarena_h___", +"prbit_h___", +"prclist_h___", +"prdtoa_h___", +"prlog_h___", +"prlong_h___", +"prmacos_h___", +"prmem_h___", +"prprf_h___", +"prtypes_h___", + +"prarena", +"prbit", +"prbitmap_t", +"prclist", +"prcpucfg", +"prdtoa", +"prhash", +"plhash", +"prlong", +"prmacos", +"prmem", +"prosdep", +"protypes", +"prprf", +"prtypes" +); + +while ($ARGV[0] =~ /^-/) { + if ($ARGV[0] eq "-r") { + shift; + $reverse_conversion = 1; + } elsif ($ARGV[0] eq "-outdir") { + shift; + $outdir = shift; + } +} + +# Given an NSPR symbol compute the JS equivalent or +# vice-versa +sub subst { + local ($replacement); + local ($sym) = @_; + + $replacement = substr($sym,0,2) eq "pr" ? "js" : "JS"; + $replacement .= substr($sym, 2); + return $replacement; +} + +# Build the regular expression that will convert between the NSPR +# types and the JS types +if ($reverse_conversion) { + die "Not implemented yet"; +} else { + foreach $sym (@NSPR_symbols) { + $regexp .= $sym . "|" + } + # Get rid of the last "!" + chop $regexp; + + # Replace PR* with JS* and replace pr* with js* + $regexp = 's/(^|\\W)(' . $regexp . ')/$1 . &subst($2)/eg'; +# print $regexp; +} + +# Pre-compile a little subroutine to perform the regexp substitution +# between NSPR types and JS types +eval('sub convert_from_NSPR {($line) = @_; $line =~ ' . $regexp . ';}'); + +sub convert_mallocs { + ($line) = @_; + $line =~ s/PR_MALLOC/malloc/g; + $line =~ s/PR_REALLOC/realloc/g; + $line =~ s/PR_FREE/free/g; + return $line; +} + +sub convert_includes { + ($line) = @_; + if ($line !~ /include/) { + return $line; + } + + if ($line =~ /prlog\.h/) { + $line = '#include "jsutil.h"'. " /* Added by JSIFY */\n"; + } elsif ($line =~ /plhash\.h/) { + $line = '#include "jshash.h"'. " /* Added by JSIFY */\n"; + } elsif ($line =~ /plarena\.h/) { + $line = '#include "jsarena.h"'. " /* Added by JSIFY */\n"; + } elsif ($line =~ /prmem\.h/) { + $line = ""; + } elsif ($line =~ /jsmsg\.def/) { + $line = '#include "js.msg"' . "\n"; + } elsif ($line =~ /shellmsg\.def/) { + $line = '#include "jsshell.msg"' . "\n"; + } elsif ($line =~ /jsopcode\.def/) { + $line = '#include "jsopcode.tbl"' . "\n"; + } + return $line; +} + +sub convert_declarations { + ($line) = @_; + $line =~ s/PR_EXTERN/JS_EXTERN_API/g; + $line =~ s/PR_IMPLEMENT_DATA/JS_EXPORT_DATA/g; + $line =~ s/PR_IMPLEMENT/JS_EXPORT_API/g; + $line =~ s/PR_IMPORT/JS_IMPORT/g; + $line =~ s/PR_PUBLIC_API/JS_EXPORT_API/g; + $line =~ s/PR_PUBLIC_DATA/JS_EXPORT_DATA/g; + return $line; +} + +sub convert_long_long_macros { + ($line) = @_; + $line =~ s/\b(LL_)/JSLL_/g; + return $line; +} + +sub convert_asserts { + ($line) = @_; + $line =~ s/\bPR_ASSERT/JS_ASSERT/g; + return $line; +} + +while ($#ARGV >= 0) { + $infile = shift; + + # Change filename, e.g. prtime.h to jsprtime.h, except for legacy + # files that start with 'prmj', like prmjtime.h. + $outfile = $infile; + if ($infile !~ /^prmj/) { + $outfile =~ s/^pr/js/; + $outfile =~ s/^pl/js/; + } + + if ($outdir) { + $outfile = $outdir . '/' . $outfile; + } + + if ($infile eq $outfile) { + die "Error: refuse to overwrite $outfile, use -outdir option." + } + die "Can't open $infile" if !open(INFILE, "<$infile"); + die "Can't open $outfile for writing" if !open(OUTFILE, ">$outfile"); + + while (<INFILE>) { + $line = $_; + + #Get rid of #include "prlog.h" + &convert_includes($line); + + # Rename PR_EXTERN, PR_IMPORT, etc. + &convert_declarations($line); + + # Convert from PR_MALLOC to malloc, etc. + &convert_mallocs($line); + + # Convert from PR_ASSERT to JS_ASSERT +# &convert_asserts($line); + + # Convert from, e.g. PRArena to JSPRArena + &convert_from_NSPR($line); + + # Change LL_* macros to JSLL_* + &convert_long_long_macros($line); + + print OUTFILE $line; + } +} |