| 
					
				 | 
			
			
				@@ -1,12 +1,16 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { StoreObject } from './../store/storeObject'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import * as Commands from './../../ast/commands'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { Modes } from '../modes'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import {toInt, toString, toBool, toReal, convertToString} from './../../typeSystem/parsers'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { Types } from './../../typeSystem/types'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { ProcessorErrorFactory } from "./../error/processorErrorFactory"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { StoreObjectArrayAddressRef } from '../store/storeObjectArrayAddressRef'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export function createOutputFun () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const writeFunction = function (store, _) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const val = store.applyStore('p1'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     this.output.sendOutput(convertToString(val.value, val.type)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    store.mode = Modes.RETURN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return Promise.resolve(store); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const block = new Commands.CommandBlock([], [new Commands.SysCall(writeFunction)]); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -24,18 +28,33 @@ export function createInputFun () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return request.then(text => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const typeToConvert = store.applyStore('p1').type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       let stoObj = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (typeToConvert.isCompatible(Types.INTEGER)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const val = toInt(text); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        stoObj = new StoreObject(Types.INTEGER, val.trunc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } else if (typeToConvert.isCompatible(Types.REAL)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        stoObj = new StoreObject(Types.REAL, toReal(text)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } else if (typeToConvert.isCompatible(Types.BOOLEAN)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        stoObj = new StoreObject(Types.BOOLEAN, toBool(text)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } else if (typeToConvert.isCompatible(Types.STRING)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        stoObj = new StoreObject(Types.STRING, toString(text)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (typeToConvert.isCompatible(Types.INTEGER)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const val = toInt(text); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          stoObj = new StoreObject(Types.INTEGER, val.trunc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (typeToConvert.isCompatible(Types.REAL)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          stoObj = new StoreObject(Types.REAL, toReal(text)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (typeToConvert.isCompatible(Types.BOOLEAN)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          stoObj = new StoreObject(Types.BOOLEAN, toBool(text)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (typeToConvert.isCompatible(Types.STRING)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          stoObj = new StoreObject(Types.STRING, toString(text)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          return Promise.reject(new Error("!!!!Critical error: Unknown type in readFunction!!!!")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } catch (_) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const stringInfo = typeToConvert.stringInfo()[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const realObject = store.getStoreObject("p1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (realObject instanceof StoreObjectArrayAddressRef) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const arrayInfo = realObject.address.getArrayObject().type.stringInfo()[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const error = ProcessorErrorFactory.invalid_read_type_array(text, stringInfo.type, stringInfo.dim, realObject.address.refID, arrayInfo.type, arrayInfo.dim); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          return Promise.reject(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const error = ProcessorErrorFactory.invalid_read_type(text, stringInfo.type, stringInfo.dim, store.applyStore('p1').id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return Promise.reject(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       this.loopTimers.splice(0,this.loopTimers.length) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       store.updateStore('p1', stoObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      store.mode = Modes.RETURN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return Promise.resolve(store); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 |