def main(): exitCode = exitCommandArgsError def exitHandler(): if exitCode == exitSuccess: utils.log(True, '\nReady\n') else: utils.log(True, '\nAborted\n') atexit.register(exitHandler) def setExitCode(anExitCode): nonlocal exitCode exitCode = anExitCode return exitCode try: licensePath = '{}/{}'.format(transpilerDir, 'license_reference.txt') if not os.path.isfile(licensePath): utils.log(True, 'Error: missing license reference file\n') return setExitCode(exitNoLicense) utils.log( True, '{} (TM) Python to JavaScript Small Sane Subset Transpiler Version {}\n', __base__.__envir__.transpiler_name.capitalize(), __base__.__envir__.transpiler_version) utils.log(True, 'Copyright (C) Geatec Engineering. License: Apache 2.0\n\n') utils.commandArgs.parse() if utils.commandArgs.license: with open(licensePath) as licenseFile: bar = 80 * '*' utils.log(True, '\n{}\n\n', bar) utils.log(True, '{}\n', licenseFile.read()) utils.log(True, '{}\n\n', bar) if utils.commandArgs.star: webbrowser.open('https://github.com/JdeH/Transcrypt') if not utils.commandArgs.source: return setExitCode( exitSourceNotGiven ) # Should never be here, dealth with by command arg checks already __symbols__ = utils.commandArgs.symbols.split( '$') if utils.commandArgs.symbols else [] if utils.commandArgs.complex: __symbols__.append('__complex__') __symbols__.append('__py{}.{}__'.format(*sys.version_info[:2])) if utils.commandArgs.esv: __symbols__.append('__esv{}__'.format(utils.commandArgs.esv)) else: __symbols__.append('__esv{}__'.format( utils.defaultJavaScriptVersion)) from org.transcrypt.stubs.browser import __set_stubsymbols__ # Import (ignored when transpiling) late, since commandArgs must be set already __set_stubsymbols__( __symbols__ ) # Make symbols available to CPython, seems that exec can't do that directly if utils.commandArgs.run: try: with open(utils.commandArgs.source) as sourceFile: exec(sourceFile.read()) return setExitCode(exitSuccess) except Exception as exception: utils.log( True, 'Error: cannot run {} using CPython: {}\n'.format( utils.commandArgs.source, str(exception).replace(' (<string>', '').replace(')', ''))) utils.log(True, traceback.format_exc()) return setExitCode(exitCannotRunSource) else: try: compiler.Program(compilerPath, __symbols__) return setExitCode(exitSuccess) except utils.Error as error: utils.log(True, '\n{}\n', error) # Don't log anything else, even in verbose mode, since this would only be confusing if utils.commandArgs.dextex: utils.log(True, '{}\n', traceback.format_exc()) return setExitCode(exitSpecificCompileError) except Exception as exception: utils.log(True, '\n{}', exception) # Have to log something else, because a general exception isn't informative enough utils.log(True, '{}\n', traceback.format_exc()) return setExitCode(exitGeneralCompileError) except utils.CommandArgsError: return setExitCode(exitCommandArgsError) except utils.CommandArgsExit: return setExitCode(exitSuccess)
def main(): exitCode = exitCommandArgsError def exitHandler(): if exitCode == exitSuccess: utils.log(True, '\nReady\n') else: utils.log(True, '\nAborted\n') atexit.register(exitHandler) def setExitCode(anExitCode): nonlocal exitCode exitCode = anExitCode return exitCode try: __envir__ = utils.Any() with tokenize.open( f'{modulesDir}/org/transcrypt/__envir__.js') as envirFile: exec(envirFile.read()) __envir__.executor_name = __envir__.interpreter_name utils.log( True, '{} (TM) Python to JavaScript Small Sane Subset Transpiler Version {}\n', __envir__.transpiler_name.capitalize(), __envir__.transpiler_version) utils.log(True, 'Copyright (C) Geatec Engineering. License: Apache 2.0\n\n') utils.log(True, '\n') licensePath = '{}/{}'.format(transpilerDir, 'license_reference.txt') if not os.path.isfile(licensePath): utils.log(True, 'Error: missing license reference file\n') return setExitCode(exitNoLicense) utils.commandArgs.parse() if utils.commandArgs.license: with open(licensePath) as licenseFile: bar = 80 * '*' utils.log(True, '\n{}\n\n', bar) utils.log(True, '{}\n', licenseFile.read()) utils.log(True, '{}\n\n', bar) if utils.commandArgs.star: webbrowser.open('https://github.com/qquick/Transcrypt') if not utils.commandArgs.source: return setExitCode( exitSourceNotGiven ) # Should never be here, dealth with by command arg checks already # Prepend paths that are needed by transpiled or executed user code, since they have to be searched first # So user code favors Transcrypt modules over CPython modules extraDirs = utils.commandArgs.xpath.replace( '#', ' ').split('$') if utils.commandArgs.xpath else [] sourcePath = utils.commandArgs.source.replace( '\\', '/' ) # May be absolute or relative, in the latter case it may or may not specify a directory if '/' in sourcePath: # If directory specified sourceDir = sourcePath.rsplit('/', 1)[0] # Use it as source directory else: # Else sourceDir = os.getcwd().replace( '\\', '/') # Use current working directory as source directory projectDirs = [sourceDir] + extraDirs sys.path[0:0] = projectDirs global transpilationDirs transpilationDirs[0:0] = projectDirs __symbols__ = utils.commandArgs.symbols.split( '$') if utils.commandArgs.symbols else [] if utils.commandArgs.complex: __symbols__.append('__complex__') if utils.commandArgs.sform: __symbols__.append('__sform__') if utils.commandArgs.xtiny: __symbols__.append('__xtiny__') __symbols__.append('__py{}.{}__'.format(*sys.version_info[:2])) if utils.commandArgs.esv: __symbols__.append('__esv{}__'.format(utils.commandArgs.esv)) else: __symbols__.append('__esv{}__'.format( utils.defaultJavaScriptVersion)) # Import (ignored when transpiling) late, since commandArgs must be set already from org.transcrypt.stubs.browser import __set_stubsymbols__ # Make symbols available to CPython, seems that exec can't do that directly __set_stubsymbols__(__symbols__) if utils.commandArgs.run: try: with open(utils.commandArgs.source + '.py') as sourceFile: exec(sourceFile.read(), globals(), locals()) return setExitCode(exitSuccess) except Exception as exception: utils.log( True, 'Error: cannot run {} using CPython: {}\n'.format( utils.commandArgs.source, str(exception).replace(' (<string>', '').replace(')', ''))) utils.log(True, traceback.format_exc()) return setExitCode(exitCannotRunSource) else: try: compiler.Program(transpilationDirs, __symbols__, __envir__) return setExitCode(exitSuccess) except utils.Error as error: utils.log(True, '\n{}\n', error) # Don't log anything else, even in verbose mode, since this would only be confusing if utils.commandArgs.dextex: utils.log(True, '{}\n', traceback.format_exc()) return setExitCode(exitSpecificCompileError) except Exception as exception: utils.log(True, '\n{}', exception) # Have to log something else, because a general exception isn't informative enough utils.log(True, '{}\n', traceback.format_exc()) return setExitCode(exitGeneralCompileError) except utils.CommandArgsError: return setExitCode(exitCommandArgsError) except utils.CommandArgsExit: return setExitCode(exitSuccess)
def main (): exitCode = exitCommandArgsError def exitHandler (): if exitCode == exitSuccess: utils.log (True, '\nReady\n') else: utils.log (True, '\nAborted\n') atexit.register (exitHandler) def setExitCode (anExitCode): nonlocal exitCode exitCode = anExitCode return exitCode try: utils.log (True, '\n') licensePath = '{}/{}'.format (transpilerDir, 'license_reference.txt') if not os.path.isfile (licensePath): utils.log (True, 'Error: missing license reference file\n') return setExitCode (exitNoLicense) utils.log (True, '{} (TM) Python to JavaScript Small Sane Subset Transpiler Version {}\n', __base__.__envir__.transpiler_name.capitalize (), __base__.__envir__.transpiler_version) utils.log (True, 'Copyright (C) Geatec Engineering. License: Apache 2.0\n\n') utils.commandArgs.parse () if utils.commandArgs.license: with open (licensePath) as licenseFile: bar = 80 * '*' utils.log (True, '\n{}\n\n', bar) utils.log (True, '{}\n', licenseFile.read ()) utils.log (True, '{}\n\n', bar) if utils.commandArgs.star: webbrowser.open ('https://github.com/qquick/Transcrypt') if not utils.commandArgs.source: return setExitCode (exitSourceNotGiven) # Should never be here, dealth with by command arg checks already __symbols__ = utils.commandArgs.symbols.split ('$') if utils.commandArgs.symbols else [] if utils.commandArgs.complex: __symbols__.append ('__complex__') __symbols__.append ('__py{}.{}__'.format (* sys.version_info [:2])) if utils.commandArgs.esv: __symbols__.append ('__esv{}__'.format (utils.commandArgs.esv)) else: __symbols__.append ('__esv{}__'.format (utils.defaultJavaScriptVersion)) from org.transcrypt.stubs.browser import __set_stubsymbols__ # Import (ignored when transpiling) late, since commandArgs must be set already __set_stubsymbols__ (__symbols__) # Make symbols available to CPython, seems that exec can't do that directly if utils.commandArgs.run: try: with open (utils.commandArgs.source) as sourceFile: exec (sourceFile.read ()) return setExitCode (exitSuccess) except Exception as exception: utils.log (True, 'Error: cannot run {} using CPython: {}\n'.format (utils.commandArgs.source, str (exception) .replace (' (<string>', '') .replace (')', ''))) utils.log (True, traceback.format_exc()) return setExitCode (exitCannotRunSource) else: try: compiler.Program (compilerPath, __symbols__) return setExitCode (exitSuccess) except utils.Error as error: utils.log (True, '\n{}\n', error) # Don't log anything else, even in verbose mode, since this would only be confusing if utils.commandArgs.dextex: utils.log (True, '{}\n', traceback.format_exc ()) return setExitCode (exitSpecificCompileError) except Exception as exception: utils.log (True, '\n{}', exception) # Have to log something else, because a general exception isn't informative enough utils.log (True, '{}\n', traceback.format_exc ()) return setExitCode (exitGeneralCompileError) except utils.CommandArgsError: return setExitCode (exitCommandArgsError) except utils.CommandArgsExit: return setExitCode (exitSuccess)