tmp = getDirData(int(qactual[1])) if parametros[num_parametros] == 'int': addParamData(paramint, tmp) paramint = paramint + 1 elif parametros[num_parametros] == 'float': addParamData(paramfloat, tmp) paramfloat = paramfloat + 1 elif parametros[num_parametros] == 'bool': addParamData(parambool, tmp) parambool = parambool + 1 num_parametros += 1 elif qactual[0] == 'gosub': #print qactual[0], qactual[1] if current_scope != "*work*": memoria.sleepLocalMemory() memoria.addIP([ip, current_scope]) memoria.setLocalMemory() current_scope = qactual[1] direcmod = directory[qactual[1]][1] ip = direcmod - 2 elif qactual[0] == 'ret': memoria.freeLocalMemory() ipscope = memoria.getIP() if ipscope[1] != "*work*": memoria.awakeLocalMemory() ip = ipscope[0] current_scope = ipscope[1] elif qactual[0] == 'return':
else: tmp = getDirData(int(qactual[1])) if parametros[num_parametros] == 'int': addParamData(paramint, tmp) #Aniade a la memoria nueva una variable de tipo entero paramint = paramint + 1 elif parametros[num_parametros] == 'float': addParamData(paramfloat, tmp) #Aniade a la memoria nueva una variable de tipo flotante paramfloat = paramfloat + 1 elif parametros[num_parametros] == 'bool': addParamData(parambool, tmp) #Aniade a la memoria nueva una variable de tipo booleano parambool = parambool + 1 num_parametros += 1 elif qactual[0] == 'gosub': #Operacion salto a modulo if current_scope != "*work*": memoria.sleepLocalMemory() #Si el ambito actual no es la memoria global, se duerme la memoria local en procedimiento. memoria.addIP([ip, current_scope]) #Se guarda el IP correspondiente a la invocacion para su proxima continuacion. memoria.setLocalMemory() #La memoria nueva se inicializa como nueva memoria local current_scope = qactual[1] #Se establece el nuevo scope a trabajar los cuadruplos direcmod = directory[qactual[1]][1] #Se obtiene el cuadruplo de inicio de modulo ip = direcmod - 2 elif qactual[0] == 'ret': #Operacion ret memoria.freeLocalMemory() #Libera la memoria local ipscope = memoria.getIP() #Obtiene el IP que realizo la ultima llamada if ipscope[1] != "*work*": memoria.awakeLocalMemory() #Si el scope es diferente al workspace, se manda llamar a un segmento previo de memoria local. ip = ipscope[0] current_scope = ipscope[1] #Se establece el nuevo scope actual. elif qactual[0] == 'return': #Operacion return