def runsource(self, source, filename='<input>', symbol='single'): global SIMPLE_TRACEBACKS def error_handler(e, use_simple_traceback=False): self.locals[mangle("*e")] = e if use_simple_traceback: print(e, file=sys.stderr) else: self.showtraceback() try: try: do = import_buffer_to_hst(source) except PrematureEndOfInput: return True except LexException as e: if e.source is None: e.source = source e.filename = filename error_handler(e, use_simple_traceback=True) return False try: def ast_callback(main_ast, expr_ast): if self.spy: # Mush the two AST chunks into a single module for # conversion into Python. new_ast = ast.Module(main_ast.body + [ast.Expr(expr_ast.body)]) print(astor.to_source(new_ast)) value = hy_eval(do, self.locals, "__console__", ast_callback) except HyTypeError as e: if e.source is None: e.source = source e.filename = filename error_handler(e, use_simple_traceback=SIMPLE_TRACEBACKS) return False except Exception as e: error_handler(e) return False if value is not None: # Shift exisitng REPL results next_result = value for sym in self._repl_results_symbols: self.locals[sym], next_result = next_result, self.locals[sym] # Print the value. try: output = self.output_fn(value) except Exception as e: error_handler(e) return False print(output) return False
def runsource(self, source, filename='<input>', symbol='single'): global SIMPLE_TRACEBACKS def error_handler(e, use_simple_traceback=False): self.locals[mangle("*e")] = e if use_simple_traceback: print(e, file=sys.stderr) else: self.showtraceback() try: try: do = import_buffer_to_hst(source) except PrematureEndOfInput: return True except LexException as e: if e.source is None: e.source = source e.filename = filename error_handler(e, use_simple_traceback=True) return False try: def ast_callback(main_ast, expr_ast): if self.spy: # Mush the two AST chunks into a single module for # conversion into Python. new_ast = ast.Module(main_ast.body + [ast.Expr(expr_ast.body)]) print(astor.to_source(new_ast)) value = hy_eval(do, self.locals, "__console__", ast_callback) except HyTypeError as e: if e.source is None: e.source = source e.filename = filename error_handler(e, use_simple_traceback=SIMPLE_TRACEBACKS) return False except Exception as e: error_handler(e) return False if value is not None: # Shift exisitng REPL results next_result = value for sym in self._repl_results_symbols: self.locals[sym], next_result = next_result, self.locals[sym] # Print the value. try: output = self.output_fn(value) except Exception as e: error_handler(e) return False print(output) return False
def runsource(self, source, filename='<input>', symbol='single'): global SIMPLE_TRACEBACKS try: try: do = import_buffer_to_hst(source) except PrematureEndOfInput: return True except LexException as e: if e.source is None: e.source = source e.filename = filename print(e, file=sys.stderr) return False try: def ast_callback(main_ast, expr_ast): if self.spy: # Mush the two AST chunks into a single module for # conversion into Python. new_ast = ast.Module(main_ast.body + [ast.Expr(expr_ast.body)]) print(astor.to_source(new_ast)) value = hy_eval(do, self.locals, "__console__", ast_callback) except HyTypeError as e: if e.source is None: e.source = source e.filename = filename if SIMPLE_TRACEBACKS: print(e, file=sys.stderr) else: self.showtraceback() return False except Exception: self.showtraceback() return False if value is not None: # Make the last non-None value available to # the user as `_`. self.locals['_'] = value # Print the value. try: output = self.output_fn(value) except Exception: self.showtraceback() return False print(output) return False
def runsource(self, source, filename='<input>', symbol='single'): global SIMPLE_TRACEBACKS try: try: do = import_buffer_to_hst(source) except PrematureEndOfInput: return True except LexException as e: if e.source is None: e.source = source e.filename = filename print(e, file=sys.stderr) return False try: def ast_callback(main_ast, expr_ast): if self.spy: # Mush the two AST chunks into a single module for # conversion into Python. new_ast = ast.Module(main_ast.body + [ast.Expr(expr_ast.body)]) print(astor.to_source(new_ast)) value = hy_eval(do, self.locals, "__console__", ast_callback) except HyTypeError as e: if e.source is None: e.source = source e.filename = filename if SIMPLE_TRACEBACKS: print(e, file=sys.stderr) else: self.showtraceback() return False except Exception: self.showtraceback() return False if value is not None: # Make the last non-None value available to # the user as `_`. self.locals['_'] = value # Print the value. try: output = self.output_fn(value) except Exception: self.showtraceback() return False print(output) return False
def cant_compile(expr): try: hy_compile(import_buffer_to_hst(expr), "__main__") assert False except HyTypeError as e: # Anything that can't be compiled should raise a user friendly # error, otherwise it's a compiler bug. assert isinstance(e.expression, HyObject) assert e.message return e except HyCompileError as e: # Anything that can't be compiled should raise a user friendly # error, otherwise it's a compiler bug. assert isinstance(e.exception, HyTypeError) assert e.traceback return e
def can_eval(expr): return hy_eval(import_buffer_to_hst(expr))
def can_compile(expr): return hy_compile(import_buffer_to_hst(expr), "__main__")
def heval(tokens): try: return hy_eval(import_buffer_to_hst(tokens), {}, '<string>') except Exception as e: print(e)