Make JetStream 2
[WebKit-https.git] / PerformanceTests / JetStream2 / RexBench / OfflineAssembler / convert_asm_to_js.py
1 # Copyright (C) 2017 Apple Inc. All rights reserved.
2 #
3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions
5 # are met:
6 # 1. Redistributions of source code must retain the above copyright
7 #    notice, this list of conditions and the following disclaimer.
8 # 2. Redistributions in binary form must reproduce the above copyright
9 #    notice, this list of conditions and the following disclaimer in the
10 #    documentation and/or other materials provided with the distribution.
11 #
12 # THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
13 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
15 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
16 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
17 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
18 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
19 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
20 # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
24 # This converts an offline assembly file into a JavaScript string.
25 # It adds newline escapes and properly escapes double quote (") characters.
26 # The input and output files are specified on the command line.
27 #
28 # Example:
29 #     python convert_asm_to_js.py LowLevelInterpreter.asm LowLevelInterpreter.js
30
31 import argparse
32 import re
33
34
35 headerText = """/*
36  * DO NOT EDIT THIS FILE, it is autogenerated.
37  */
38 "use strict";
39
40 """
41
42
43 def convertFile(inputFile, outputFile):
44     outputFile.write(headerText)
45     outputFile.write("(function() {\n")
46     outputFile.write("    let source = `")
47     for line in inputFile:
48         line = re.sub("`", "\\`", line);
49         outputFile.write(line)
50
51     outputFile.write("`;\n")
52     outputFile.write("\n")
53     outputFile.write("    new File(\"{fileName}\", source);\n".format(fileName=inputFile.name))
54     outputFile.write("})();\n")
55     outputFile.write("\n")
56
57 if __name__ == "__main__":
58     parser = argparse.ArgumentParser()
59     parser.add_argument("inputFile", type = argparse.FileType('r'), help="Offline Assembler input file")
60     parser.add_argument("outputFile", type = argparse.FileType('w'), help="JavaScript output file")
61     args = parser.parse_args()
62
63     convertFile(args.inputFile, args.outputFile)