def requireClj(filename, stopafter="concat"): with open(filename) as fl: r = StringReader(fl.read()) RT.init() comp = Compiler() comp.setFile(filename) pushThreadBindings({currentCompiler: comp}) #o = open(filename+".cljc", "w") try: while True: EOF = object() s = read(r, False, EOF, True) if s is EOF: break #cPickle.dump(s, o) try: res = comp.compile(s) print s, res comp.executeCode(res) if stopafter is not None and hasattr(comp.getNS(), stopafter): break except Exception as exp: print s, filename raise except IOError as e: pass finally: popThreadBindings()
def requireClj(filename, stopafter=None): """Compiles and executes the code in a clj file. If `stopafter` is given, then stop execution as soon as the `stopafter` name is defined in the current namespace of the compiler. """ with open(filename) as fl: r = StringReader(fl.read()) RT.init() comp = Compiler() comp.setFile(filename) with threadBindings({currentCompiler: comp}): #, open(filename + ".cljc", "w") as o: try: while True: EOF = object() s = read(r, False, EOF, True) if s is EOF: break #cPickle.dump(s, o) try: res = comp.compile(s) comp.executeCode(res) if stopafter is not None and hasattr( comp.getNS(), stopafter): break except Exception as exp: print s, filename raise except IOError as e: pass
def requireClj(filename, stopafter=None): with open(filename) as fl: r = StringReader(fl.read()) RT.init() comp = Compiler() comp.setFile(filename) pushThreadBindings({currentCompiler: comp}) #o = open(filename+".cljc", "w") try: while True: EOF = object() s = read(r, False, EOF, True) if s is EOF: break #cPickle.dump(s, o) try: res = comp.compile(s) comp.executeCode(res) if stopafter is not None: if hasattr(comp.getNS(), stopafter): break except Exception as exp: print s, filename raise except IOError as e: pass finally: popThreadBindings()
def requireClj(filename, stopafter=None): """Compiles and executes the code in a clj file. If `stopafter` is given, then stop execution as soon as the `stopafter` name is defined in the current namespace of the compiler. """ with open(filename) as fl: r = StringReader(fl.read()) RT.init() comp = Compiler() comp.setFile(filename) with threadBindings({currentCompiler: comp}): #, open(filename + ".cljc", "w") as o: try: while True: EOF = object() s = read(r, False, EOF, True) if s is EOF: break #cPickle.dump(s, o) try: res = comp.compile(s) comp.executeCode(res) if stopafter is not None and hasattr(comp.getNS(), stopafter): break except Exception as exp: print s, filename raise except IOError as e: pass
def requireClj(filename, stopafter=None): with open(filename) as fl: r = StringReader(fl.read()) RT.init() comp = Compiler() comp.setFile(filename) currentCompiler.set(comp) try: while True: s = read(r, True, None, True) try: res = comp.compile(s) comp.executeCode(res) if stopafter is not None: if hasattr(comp.getNS(), stopafter): break except IOError as exp: print s raise exp while True: ch = r.read() if ch == "": raise IOError() if ch not in [" ", "\t", "\n", "\r"]: r.back() break except IOError as e: pass
def main(): requireClj(os.path.dirname(__file__) + "/core.clj") RT.init() comp = Compiler() currentCompiler.set(comp) comp.setNS(symbol("user")) if not sys.argv[1:]: while True: try: line = raw_input(comp.getNS().__name__ + "=> ") except EOFError: break if not line: continue while unbalanced(line): try: line += raw_input('.' * len(comp.getNS().__name__) + '.. ') except EOFError: break # Propogate break from above loop. if unbalanced(line): break r = StringReader(line) s = read(r, True, None, True) try: res = comp.compile(s) print comp.executeCode(res) except Exception: traceback.print_exc() else: for x in sys.argv[1:]: requireClj(x)
def requireClj(filename, stopafter=None): with open(filename) as fl: r = StringReader(fl.read()) RT.init() comp = Compiler() comp.setFile(filename) currentCompiler.set(comp) # o = open(filename+".cljc", "w") try: while True: s = read(r, False, None, True) if s is None: break # cPickle.dump(s, o) try: res = comp.compile(s) comp.executeCode(res) if stopafter is not None: if hasattr(comp.getNS(), stopafter): break except Exception as exp: print s, filename raise while True: ch = r.read() if ch == "": raise IOError() if ch not in [" ", "\t", "\n", "\r"]: r.back() break except IOError as e: pass
def run_repl(comp=None): """ Starts the repl. Assumes that RT.init has allready be called. """ if comp is None: curr = currentCompiler.get(lambda: None) if curr == None: comp = Compiler() currentCompiler.set(comp) else: comp = curr comp.setNS(symbol("user")) last3 = [None, None, None] def execute(string): r = StringReader(string) s = read(r, False, None, True) res = comp.compile(s) return comp.executeCode(res) while 1: for i, value in enumerate(last3, 1): sym = symbol('*%s' % i) v = internVar(comp.getNS(), sym) v.setDynamic(True) if isinstance(value, Var): v.bindRoot(value.deref()) v.setMeta(value.meta()) else: v.bindRoot(value) try: line = raw_input(comp.getNS().__name__ + "=> ") except EOFError: break if not line: continue invalid = False while 1: unbalance = unbalanced(line) if unbalance == -1: invalid = True break elif unbalance is False: break try: new_line = '\n' + raw_input('.' * len(comp.getNS().__name__) + '.. ') except EOFError: break if not new_line.strip().startswith(';'): line += new_line if invalid: print "Invalid input" continue # Propogate break from above loop. if unbalanced(line): break try: out = execute(line) except Exception: traceback.print_exc() else: last3.pop() last3.insert(0, out) print out
def run_repl(comp=None): """ Starts the repl. Assumes that RT.init has allready be called. """ print "clojure-py", VERSION print "Python", sys.version if comp is None: curr = currentCompiler.get(lambda: None) if curr == None: comp = Compiler() currentCompiler.set(comp) else: comp = curr comp.setNS(symbol("user")) core = sys.modules["clojure.core"] for i in dir(core): if not i.startswith("_"): setattr(comp.getNS(), i, getattr(core, i)) last3 = [None, None, None] def execute(string): r = StringReader(string) s = read(r, False, None, True) res = comp.compile(s) return comp.executeCode(res) while 1: #for i, value in enumerate(last3, 1): # v = findVar(symbol("clojure.core", "*%s" % i)) # if isinstance(value, Var): # v.bindRoot(value.deref()) # v.setMeta(value.meta()) # else: # v.bindRoot(value) try: line = raw_input(comp.getNS().__name__ + "=> ") except EOFError: print break if not line: continue invalid = False while 1: unbalance = unbalanced(line) if unbalance == -1: invalid = True break elif unbalance is False: break try: new_line = '\n' + raw_input('.' * len(comp.getNS().__name__) + '.. ') except EOFError: break if not new_line.strip().startswith(';'): line += new_line if invalid: print "Invalid input" continue # Propogate break from above loop. if unbalanced(line): break try: out = execute(line) except Exception: traceback.print_exc() else: last3.pop() last3.insert(0, out) RT.printTo(out)
def run_repl(opts, comp=None): """Initializes and runs the REPL. Assumes that RT.init has been called. Repeatedly reads well-formed forms from stdin (with an interactive prompt if a tty) and evaluates them (and prints the result if a tty). Exits on EOF. """ if not opts.quiet and os.isatty(0): print VERSION_MSG if comp is None: curr = currentCompiler.get(lambda: None) if curr == None: comp = Compiler() currentCompiler.set(comp) else: comp = curr comp.setNS(Symbol("user")) core = sys.modules["clojure.core"] for i in dir(core): if not i.startswith("_"): setattr(comp.getNS(), i, getattr(core, i)) line = opts.cmd last3 = [None, None, None] def firstLinePrompt(): return comp.getNS().__name__ + "=> " if os.isatty(0) else "" def continuationLinePrompt(): return "." * len(comp.getNS().__name__) + ".. " if os.isatty(0) else "" while True: # Evaluating before prompting caters for initially given forms. r = StringReader(line) while True: try: s = read(r, False, None, True) if s is None: break res = comp.compile(s) out = comp.executeCode(res) except Exception: traceback.print_exc() else: if os.isatty(0): RT.printTo(out) last3.pop() last3.insert(0, out) for i, value in enumerate(last3, 1): v = findItem(Namespace("clojure.core"), Symbol("*{0}".format(i))) if isinstance(value, Var): v.bindRoot(value.deref()) v.setMeta(value.meta()) else: v.bindRoot(value) try: line = raw_input(firstLinePrompt()) while unbalanced(line): line += "\n" + raw_input(continuationLinePrompt()) except BracketsException as exc: print exc continue except EOFError: print break