def testConsTrait5(): def testCrCr( ex, ou, htEnvLocals= None): if None==htEnvLocals: htEnvLocals= dict() test( ConsRepr( ex ).repr_wrapped( htEnvLocals), ConsRepr( ou ).repr_wrapped( htEnvLocals)) s= Symbol cs= ConsSimple te.checkComplainAndAdjustExpected( 0) uNames.next( usRename( ConsSimple, 'cs')) uNames.next( usRename( Symbol, 's')) csTest5= consesMake( 1, 2, 3, 4, 5) csTest2= consesMake( 6, 7) csTest1= consesMake( 8) testCrCr( csTest5.cdr().cdr().cdr().cdr(), consesDistanceSeek( csTest5, 0)) testCrCr( csTest5.cdr().cdr().cdr(), consesDistanceSeek( csTest5, 1)) testCrCr( csTest5.cdr().cdr(), consesDistanceSeek( csTest5, 2)) testCrCr( csTest5.cdr(), consesDistanceSeek( csTest5, 3)) testCrCr( csTest5, consesDistanceSeek( csTest5, 4)) testCrCr( csTest5, consesDistanceSeek( csTest5, 5)) testCrCr( csTest5, consesDistanceSeek( csTest5, 6)) testCrCr( csTest2, consesDistanceSeek( csTest2, 6)) testCrCr( csTest1, consesDistanceSeek( csTest1, 6)) uNames.undo() uNames.undo() te.checkComplainAndAdjustExpected( 9)
def repr_wrapped( self, ht_selfid2Name, lCpctRepr): assert( 0==len( self.lParams)) stack= self.consWrapped ht= dict() ht[ id( stack)] = 'stack' walker= ConsSimple( stackGetCodeListCurrentEvalTokenList( stack), stackGetCodeListParent2EvalToken( stack)) xNr= 0 while not id( nil) == id( walker): walker_car= walker.car() ht[ id( walker_car)]= ConsRepr( ConsSimple( walker_car.car(), 'sclp2et_'+ str( xNr- 1))).repr_wrapped() # baustelle: hack #ht[ id( walker_car)]= ConsRepr( ConsSimple( walker_car.car(), 'consesNth0( stackGetCodeListParent2EvalToken, '+ str( xNr- 1)+ ')')).repr_wrapped() # baustelle: hack walker= walker.cdr() xNr += 1 codeCurrentLeafList= stackGetCodeCurrentLeafList( self.consWrapped) ht[ id( consesDistanceSeek( codeCurrentLeafList))] = 'codeList' # sollte i.codeList entsprechen codeCurrentLeafListRepr= ConsRepr( codeCurrentLeafList).repr_wrapped( None, [CpctReprCodeListShort4Stack, CpctReprHTselfID2NameCreate( ht), CpctReprConsesRest]) # 28ddde667ab3463080f3b16faa5a48b3 baustelle return 'stackShort( ' + codeCurrentLeafListRepr + ')'
def repr_wrapped( self, ht_selfid2Name, lCpctRepr): assert( 0==len( self.lParams)) stack= self.consWrapped ht= dict() ht[ id( stack)] = 'stack' walker= ConsSimple( stackGetCodeListCurrentEvalTokenList( stack), # e584963f104a4fb19b326b4ddd2721d6 stackGetCodeListParent2EvalToken( stack)) xNr= 0 while not id( nil) == id( walker): # e584963f104a4fb19b326b4ddd2721d6 walker_car= walker.car() ht[ id( walker_car)]= ConsRepr( ConsSimple( walker_car.car(), 'sclp2et_'+ str( xNr- 1))).repr_wrapped() # baustelle: hack 53de4cb72e4647409c28cab4b29a5f92 #ht[ id( walker_car)]= ConsRepr( ConsSimple( walker_car.car(), 'consesNth0( stackGetCodeListParent2EvalToken, '+ str( xNr- 1)+ ')')).repr_wrapped() # baustelle: hack walker= walker.cdr() xNr += 1 codeCurrentLeafList= stackGetCodeCurrentLeafList( self.consWrapped) ht[ id( consesDistanceSeek( codeCurrentLeafList))] = 'codeList' # sollte i.codeList entsprechen codeCurrentLeafListRepr= ConsRepr( codeCurrentLeafList).repr_wrapped( None, [CpctReprCodeListConfigMake, CpctReprHTselfID2NameCreate( ht), CpctReprConsesRest]) # 28ddde667ab3463080f3b16faa5a48b3 baustelle return 'stackMake( codeListCurrentEvalTokenList, codeListParent2EvalToken, ' + codeCurrentLeafListRepr + ')'
def evalToken( self, rodTyped, evalMode= False): # evalMode=True wird bei '(' nur zu beginn gesetzt, ob evaluiert wird, wird von aussen festgelegt rodType= rodTyped.car() rod= rodTyped.cdr() if id( rodType) not in [ id( ar_value), id( ar_retValue), id( ar_retList)]: print ConsRepr( rodTyped).repr_wrapped( None, [ CpctReprCodeListConfigMake, CpctReprConses]) raise Exception() if False: # 8337c49584d44686be0bc780cf310dfc pass elif '(' == rod: self.codeLevel+=1 codeListConfigCloned= codeListConfigClone( self.getCurrentCodeListConfig()) elem= codeListMake( codeListConfigCloned, codeListParametersMake( nil)) # ehemals 76ff812ddb0f47f5be9ca34925a4a3b6 self.codeCurrentLeafList= ConsSimple( elem, self.codeCurrentLeafList) # 2bb546ca3ffd48bc851d17494f5c286f self.codeLeafBackTree.car( self.codeCurrentLeafList) # 2bb546ca3ffd48bc851d17494f5c286f del codeListConfigCloned if True == evalMode: # 672b8ecafdae4e218d2268543f27119a elemNew= self.codeListCurrentEvalTokenList.cdr() elemNew.car( elem) elemCurrent= self.codeListCurrentEvalTokenList else: elemNew= ConsSimple( elem, nil) elemCurrent= consesDistanceSeek( self.codeListCurrentEvalTokenList) assert( not id( nil) == id( elemCurrent)) elemCurrent.cdr( elemNew) ( elemPrevious, elemCurrent, elemNew, elemParent) = ( elemCurrent, codeListGetParameterValuesCdrContainer( elem) # ehemals 76ff812ddb0f47f5be9ca34925a4a3b6 , None, elemNew) self.codeListParent2EvalToken= ConsSimple( elemPrevious, self.codeListParent2EvalToken) self.codeListCurrentEvalTokenList= codeListGetParameterValuesCdrContainer2( elem) # ist das wirklich notwendig? zumindest liefert der Check keinen Fehler (also ist es wenigstens korrekt) elif ')' == rod: self.codeLevel-=1 if nil == self.codeListParent2EvalToken: raise Exception( 'kann keine klammer mehr schliessen') elemParent2= self.codeListParent2EvalToken.car() self.codeListParent2EvalToken= self.codeListParent2EvalToken.cdr() ( elemCurrent2, elemParent)= ( elemParent2, None) self.codeListCurrentEvalTokenList= elemCurrent2 self.codeCurrentLeafList= self.codeCurrentLeafList.cdr() # 2bb546ca3ffd48bc851d17494f5c286f baustelle: die und die folgende Zeile sind ohne Testfehler austauschbar, pruefen self.codeLeafBackTree= ConsSimple( self.codeCurrentLeafList, self.codeLeafBackTree) # 2bb546ca3ffd48bc851d17494f5c286f else: # not rod in [ '(', ')'] elem= rod # 59cc177458e34abcb943fd4351d93149 if True == evalMode: # 672b8ecafdae4e218d2268543f27119a elemNew= self.codeListCurrentEvalTokenList # 7171a8bd3cd641babf4ebcca7394f4c6 if id( ar_retList) == id( rodType): # 7978cb4bee364b3a8359e2a0f8b7f1f4 # baustelle0: isinstance( elem, Cons) kann raus, sobald ar_retValue implementiert ist wrappedValues= elem elemNew.cdr( wrappedValues) # 7171a8bd3cd641babf4ebcca7394f4c6, ehemals 36268f550bcf4fb88d25868f8ea663bf hack self.codeListCurrentEvalTokenList= consesDistanceSeek( elemNew, 1, (lambda walker : isinstance( walker, Cons))) # 7171a8bd3cd641babf4ebcca7394f4c6, 80d1ab47171e42ba9bac8c8409b87bee #self.codeListCurrentEvalTokenList= consesDistanceSeek( elemNew, 1) # 7171a8bd3cd641babf4ebcca7394f4c6 elif id( ar_retValue) == id( rodType): # 7978cb4bee364b3a8359e2a0f8b7f1f4 # baustelle0: isinstance( elem, Cons) kann raus, sobald die restlichen ar_ Symbole implementiert sind elemNew.cdr().car( elem) elif id( ar_value) == id( rodType): # 7978cb4bee364b3a8359e2a0f8b7f1f4 # baustelle0: isinstance( elem, Cons) kann raus, sobald die restlichen ar_ Symbole implementiert sind elemNew.cdr().car( elem) else: raise Exception( ConsRepr( rodTyped).repr_wrapped( None, [ CpctReprCodeListConfigMake, CpctReprConses])) else: # False == evalMode elemNew= ConsSimple( elem, nil) elemCurrent= consesDistanceSeek( self.codeListCurrentEvalTokenList) elemCurrent.cdr( elemNew) ( elemPrevious, elemCurrent, elemNew) = ( elemCurrent, elemNew, None) self.codeListCurrentEvalTokenList= elemPrevious # baustelle ggf. wieder rauswerfen return rod