Skip to content

Commit

Permalink
SERVER-26642 use char arrays instead of str literals for js code
Browse files Browse the repository at this point in the history
(cherry picked from commit 4765384)
  • Loading branch information
Matt Cotter authored and judahschvimer committed Feb 6, 2017
1 parent 9c40002 commit ccf37ae
Showing 1 changed file with 25 additions and 25 deletions.
50 changes: 25 additions & 25 deletions site_scons/site_tools/jstoh.py
@@ -1,55 +1,55 @@
import os
import sys


def jsToHeader(target, source):

outFile = target

h = ['#include "mongo/base/string_data.h"'
,'namespace mongo {'
,'struct JSFile{ const char* name; const StringData& source; };'
,'namespace JSFiles{'
]
h = [
'#include "mongo/base/string_data.h"',
'namespace mongo {',
'struct JSFile{ const char* name; const StringData& source; };',
'namespace JSFiles{',
]

def cppEscape(s):
s = s.rstrip()
s = s.replace( '\\', '\\\\' )
s = s.replace( '"', r'\"' )
return s
def lineToChars(s):
return ','.join(str(ord(c)) for c in (s.rstrip() + '\n')) + ','

for s in source:
filename = str(s)
objname = os.path.split(filename)[1].split('.')[0]
stringname = '_jscode_raw_' + objname

h.append('const StringData ' + stringname + " = ")
h.append('const char ' + stringname + "[] = {")

for l in open( filename, 'r' ):
h.append( '"' + cppEscape(l) + r'\n" ' )
with open(filename, 'r') as f:
for line in f:
h.append(lineToChars(line))

h.append(";")
h.append('extern const JSFile %s;'%objname) #symbols aren't exported w/o this
h.append('const JSFile %s = { "%s", %s };'%(objname, filename.replace('\\', '/'), stringname))
h.append("0};")
# symbols aren't exported w/o this
h.append('extern const JSFile %s;' % objname)
h.append('const JSFile %s = { "%s", StringData(%s) };' %
(objname, filename.replace('\\', '/'), stringname))

h.append("} // namespace JSFiles")
h.append("} // namespace mongo")
h.append("")

text = '\n'.join(h);
text = '\n'.join(h)

print "writing: %s" % outFile
out = open( outFile, 'wb' )
try:
out.write( text )
finally:
out.close()
with open(outFile, 'wb') as out:
try:
out.write(text)
finally:
out.close()


if __name__ == "__main__":
if len(sys.argv) < 3:
print "Must specify [target] [source] "
sys.exit(1);
sys.exit(1)

jsToHeader(sys.argv[1], sys.argv[2:])


0 comments on commit ccf37ae

Please sign in to comment.