Example #1
0
def geval(gomer,*,globalDict=None,localDict=None,
          verbose=False,
          cacheOutputFile=None):
    if globalDict is None:
        globalDict=mkGlobals()
    if localDict is None:
        localDict=globalDict
    pyleBody=[]
    pyleExpr=reduce(gomer,False,pyleBody.append)
    resVar=gensym('res')
    pyleBody=adder.pyle.trimScratches([S('begin')]
                                      +pyleBody
                                      +[[S(':='),resVar,pyleExpr]])
    stmtTrees=[]
    if verbose:
        print(pyleBody)
    il=adder.pyle.build(pyleBody)
    stmtTree=il.toPythonTree()
    stmtTrees.append(stmtTree)
    stmtFlat=adder.pyle.flatten(tuple(stmtTrees))
    if cacheOutputFile is not None:
        cacheOutputFile.writelines([stmtFlat])
    if verbose:
        print(stmtFlat)
    exec(stmtFlat,globalDict,localDict)
    try:
        res=globalDict[resVar.toPython()]
    except KeyError as ke:
        res=localDict[resVar.toPython()]
    if verbose:
        pdb.set_trace()
    return res
Example #2
0
 def annotate_defmacro(self,expr,line,scope,globalDict,localDict):
     (name,nameLine)=expr[1]
     expanderName=gensym('macro-'+('dot-dot' if str(name)=='..'
                                   else str(name)))
     scope.addDef(name,None,line,
                  macroExpander=expanderName,
                  redefPermitted=True)
     return self(([(S('defun'),line),(expanderName,line)]+expr[2:],
                  line),
                 scope,globalDict,localDict)
Example #3
0
 def reduce(self,gomer,isStmt,stmtCollector,inClass):
     if isStmt:
         return None
     name=gensym('lambda')
     reduce([S('defun'),name]+gomer[1:],True,stmtCollector)
     return name