def matchSymbol(s): """Return a symbol or keyword. Return None if the string s does not define a legal symbol or keyword.""" m = symbolPat.match(s) if m is not None: ns = m.group(1) name = m.group(2) if name.endswith(".") and not name.startswith("."): name = name[:-1] if ns is not None and (ns.endswith(":/") or name.endswith(":")\ or s.find("::") != -1): return None ns = ns if ns is None else ns[:-1] if s.startswith("::"): return keyword(currentNSName(), s[2:]) iskeyword = s.startswith(':') if iskeyword: return keyword(s[1:]) else: return symbol(ns, name) return None
def compileDef(comp, form): if len(form) not in [2, 3]: raise CompilerException("Only 2 or 3 arguments allowed to def", form) sym = form.next().first() value = None if len(form) == 3: value = form.next().next().first() if sym.ns is None: ns = comp.getNS() else: ns = sym.ns comp.pushName(sym.name) code = [] v = internVar(comp.getNS(), sym) v.setDynamic(True) code.append((LOAD_CONST, v)) code.append((LOAD_ATTR, "bindRoot")) compiledValue = comp.compile(value) if isinstance(value, ISeq) \ and value.first().getName() == 'fn' \ and sym.meta() is not None: try: compiledValue[0][1].__doc__ = sym.meta()[keyword('doc')] except AttributeError: pass code.extend(compiledValue) code.append((CALL_FUNCTION, 1)) v.setMeta(sym.meta()) comp.popName() return code
def compileDef(comp, form): if len(form) not in [2, 3]: raise CompilerException("Only 2 or 3 arguments allowed to def", form) sym = form.next().first() value = None if len(form) == 3: value = form.next().next().first() if sym.ns is None: ns = comp.getNS() else: ns = sym.ns comp.pushName(RT.name(sym)) code = [] v = internVar(comp.getNS(), sym) v.setDynamic(True) if len(form) == 3: code.append((LOAD_CONST, v)) code.append((LOAD_ATTR, "bindRoot")) compiledValue = comp.compile(value) if isinstance(value, ISeq) \ and value.first().getName() == 'fn' \ and sym.meta() is not None: try: compiledValue[0][1].__doc__ = sym.meta()[keyword('doc')] except AttributeError: pass code.extend(compiledValue) code.append((CALL_FUNCTION, 1)) else: code.append((LOAD_CONST, v)) v.setMeta(sym.meta()) comp.popName() return code
def matchSymbol(s): from clojure.lang.symbol import Symbol from clojure.lang.cljkeyword import Keyword m = symbolPat.match(s) if m is not None: ns = m.group(1) name = m.group(2) if ns is not None and ns.endswith(":/") or name.endswith(":")\ or s.find("::") != -1: return None if s.startswith("::"): return "FIX" ns = ns if ns is None else ns[:-1] iskeyword = s.find(':') == 0 sym = symbol(ns, name[(1 if iskeyword else 0):]) if iskeyword: return keyword(s) else: return sym return None
from clojure.lang.ipersistentlist import IPersistentList from clojure.lang.iseq import ISeq from clojure.lang.lispreader import _AMP_, LINE_KEY, garg from clojure.lang.namespace import (findItem, find as findNamespace, findOrCreate as findOrCreateNamespace) from clojure.lang.persistentlist import PersistentList, EmptyList from clojure.lang.persistentvector import PersistentVector import clojure.lang.rt as RT from clojure.lang.symbol import Symbol, symbol from clojure.lang.var import Var, define, intern as internVar, var as createVar from clojure.util.byteplay import * import clojure.util.byteplay as byteplay import marshal _MACRO_ = keyword(symbol("macro")) version = (sys.version_info[0] * 10) + sys.version_info[1] PTR_MODE_GLOBAL = "PTR_MODE_GLOBAL" PTR_MODE_DEREF = "PTR_MODE_DEREF" AUDIT_CONSTS = False class MetaBytecode(object): pass class GlobalPtr(MetaBytecode): def __init__(self, ns, name): self.ns = ns self.name = name
from clojure.lang.cljkeyword import keyword default = keyword("default") class MultiMethodException(Exception): def __init__(self, reason): Exception.__init__(self, reason) class MultiMethod(object): def __init__(self, selector): self.selector = selector self.fns = {} self.default = None def addMethod(self, value, fn): if value in self.fns: raise MultiMethodException("Method already exists for value {0}".format(value)) if value == default and self.default is not none: raise MultiMethodException("Method already exists for value {0}".format(value)) if value == default: self.default = fn else: self.fns[value] def __call__(self, *args): dval = self.selector(*args) try: fn = self.fns[dval] except KeyError:
from clojure.lang.aref import ARef from clojure.lang.cljexceptions import (ArityException, InvalidArgumentException, IllegalStateException) from clojure.lang.persistenthashmap import EMPTY from clojure.lang.threadutil import ThreadLocal, currentThread from clojure.lang.symbol import symbol from clojure.lang.cljkeyword import keyword from clojure.lang.iprintable import IPrintable from clojure.lang.atomicreference import AtomicReference import persistentarraymap import types privateKey = keyword(symbol("private")) macrokey = keyword(symbol("macro")) STATIC_KEY = keyword(symbol("static")) dvals = ThreadLocal() privateMeta = persistentarraymap.create([privateKey, True]) UKNOWN = symbol("UNKNOWN") def pushThreadBindings(bindings): f = dvals.get(lambda: Frame()) bmap = f.bindings for v in bindings: value = bindings[v] if not v.dynamic: raise IllegalStateException("Can't dynamically bind non-dynamic " "var: " + str(v.ns) + "/"
from clojure.lang.aref import ARef from clojure.lang.cljexceptions import (ArityException, InvalidArgumentException, IllegalStateException) from clojure.lang.persistenthashmap import EMPTY from clojure.lang.threadutil import ThreadLocal, currentThread from clojure.lang.symbol import symbol from clojure.lang.cljkeyword import keyword from clojure.lang.iprintable import IPrintable from clojure.lang.atomicreference import AtomicReference import persistentarraymap import types privateKey = keyword(symbol("private")) macrokey = keyword(symbol("macro")) STATIC_KEY = keyword(symbol("static")) dvals = ThreadLocal() privateMeta = persistentarraymap.create([privateKey, True]) UKNOWN = symbol("UNKNOWN") def pushThreadBindings(bindings): f = dvals.get(lambda: Frame()) bmap = f.bindings for v in bindings: value = bindings[v] if not v.dynamic: raise IllegalStateException("Can't dynamically bind non-dynamic " "var: " + str(v.ns) + "/" + str(v.sym))
from clojure.lang.ipersistentlist import IPersistentList from clojure.lang.var import Var, define, intern as internVar, var as createVar from clojure.util.byteplay import * import clojure.util.byteplay as byteplay from clojure.lang.cljkeyword import Keyword, keyword from clojure.lang.namespace import find as findNamespace import new import clojure.lang.rt as RT from clojure.lang.lispreader import _AMP_ from clojure.lang.namespace import findItem from clojure.lang.lispreader import LINE_KEY, garg import re import new import sys _MACRO_ = keyword(symbol(":macro")) version = (sys.version_info[0] * 10) + sys.version_info[1] def emitJump(label): if version == 26: return [(JUMP_IF_FALSE, label), (POP_TOP, None)] else: return [(POP_JUMP_IF_FALSE, label)] def emitLanding(label): if version == 26: return [(label, None), (POP_TOP, None)] else: return [(label, None)]
from clojure.lang.iref import IRef from clojure.lang.ifn import IFn from clojure.lang.settable import Settable from clojure.lang.aref import ARef from clojure.lang.cljexceptions import (ArityException, InvalidArgumentException, IllegalStateException) from clojure.lang.persistenthashmap import EMPTY from clojure.lang.threadutil import ThreadLocal, currentThread from clojure.lang.symbol import symbol from clojure.lang.cljkeyword import keyword import persistentarraymap privateKey = keyword(symbol("private")) macrokey = keyword(symbol(":macro")) dvals = ThreadLocal() privateMeta = persistentarraymap.create([privateKey, True]) UKNOWN = symbol("UNKNOWN") def pushThreadBindings(bindings): f = dvals.get(lambda: Frame()) bmap = f.bindings bs = bindings.seq() while bs is not None: e = bs.first() v = e.getKey() if not v.dynamic: raise IllegalStateException("Can't dynamically bind non-dynamic " "var: " + str(v.ns) + "/" + str(v.sym))
from clojure.lang.cljkeyword import keyword default = keyword("default") class MultiMethodException(Exception): def __init__(self, reason): Exception.__init__(self, reason) class MultiMethod(object): def __init__(self, selector): self.selector = selector self.fns = {} self.default = None def addMethod(self, value, fn): if value in self.fns: raise MultiMethodException("Method already exists for value " + str(value)) if value == default and self.default is not none: raise MultiMethodException("Method already exists for value " + str(value)) if value == default: self.default = fn else: self.fns[value] def __call__(self, *args): dval = self.selector(*args) try: fn = self.fns[dval] except KeyError:
def mapTest(ns, var): print "mapping ", ns, var class Test(unittest.TestCase): def testVar(self): var() name = ns + str(var) tst = Test tst.__name__ = name globals()[name] = tst for x in os.listdir(os.path.dirname(__file__)): if x.endswith(".clj") and x.find("test") >= 0: print "Reading tests from", x requireClj(os.path.join(os.path.dirname(__file__),x)) folder, file = os.path.split(x) ns, ext = os.path.splitext(x) module = sys.modules["tests."+ns] for idx in dir(module): var = getattr(module, idx) print type(var), var if isinstance(var, Var) and str(var).endswith("tests"): meta = var.meta() if meta is not None and meta[keyword("test")]: mapTest(ns, var)
import clojure.core def mapTest(ns, var): class Test(unittest.TestCase): def testVar(self): var() name = ns + str(var) tst = Test tst.__name__ = name globals()[name] = tst for x in os.listdir(os.path.dirname(__file__)): if x.endswith(".clj") and x.find("test") >= 0: print "Reading tests from", x requireClj(os.path.join(os.path.dirname(__file__),x)) folder, file = os.path.split(x) ns, ext = os.path.splitext(x) module = sys.modules["tests."+ns] for idx in dir(module): var = getattr(module, idx) if isinstance(var, Var) and str(var).endswith("tests"): meta = var.meta() if meta is not None and meta[keyword("test")]: mapTest(ns, var)