Exemplo n.º 1
0
			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':
		if int(qactual[1]) >= 40000:
			tmp = getDirData(getDirData(int(qactual[1])))
		else:
			tmp = getDirData(int(qactual[1]))
		if int(qactual[3]) >= 40000:
			data = getDirData(int(qactual[3]))
		else:
			data = int(qactual[3])
		addDirData(data, tmp)
Exemplo n.º 2
0
			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
		if int(qactual[1]) >= 40000:
			tmp = getDirData(getDirData(int(qactual[1]))) #Obtiene el valor de la direccion del apuntador en referencia.
		else:
			tmp = getDirData(int(qactual[1])) #Obtiene el valor de la direccion dado por el cuadruplo.
		if int(qactual[3]) >= 40000:
			data = getDirData(int(qactual[3]))
		else:
			data = int(qactual[3])
		addDirData(data, tmp) #Aniade el valor de retorno al espacio de memoria global