function(callback,compilationSource){
		if( compilationSource && this.cache.compilationSource && this.cache.compilationSource === compilationSource ) return;
		var callbackError=function(type,strOrErr){
			/*if(strOrErr instanceof Array){
				var i,finalStr='Errors :';
				for(i in strOrErr){
					console.error(strOrErr[i].stack);
					finalStr+=+"\n"+strOrErr[i].toString().slice(7);
				}
				strOrErr=finalStr;
			}*/
			//var error=new Error(strOrErr instanceof Error ? strOrErr.toString().slice(7) : strOrErr);
			var error=strOrErr instanceof Error ? strOrErr : new Error(strOrErr);
			error._Type=type;
			t.cache.error=error;
			callback(error);
		},t=this;
		
		if(t.compiler){
			(t.compiler.read||function(path,callback){
				fs.readFile(t.srcPath,function(err,buffer){
					if(err) return callback(err);
					callback(null,buffer.toString());
				});
			})(t.srcPath,function(err,fileContent){
				if(err) return callbackError('Reading',err);
				t.lint(t,fileContent,function(err){
					if(err) return callbackError('Linting',err);
					
					t.parse(fileContent,function(err,data){
						if(err) return callbackError('Parsing',err);
						try{
							t._compile(data,function(err,results,dependencies){
								if(err) return callbackError('Compiling',err);
								if(err===false) return callback();
								t.optimize(t,results,function(err,optimizedResults){
									if(err) return callbackError('Optimizing',err);
									t.cache.error=null;
									t.cache.compilationTime=Date.now();
									t.cache.compilationSource=compilationSource;
									if(err===false){
										t.cache.dependencies=null;
										return callback();
									}
									t.cache.dependencies=!dependencies || dependencies.app ? dependencies : {app:dependencies};
									t.write(optimizedResults,callback);
								});
							});
						}catch(err){
							return callbackError('Compiling',err);
						}
					});
				});
			});
		}else{
			t.copy(callback);
		}
	}
function(callback,compilationSource){
		if( compilationSource && this.cache.compilationSource && this.cache.compilationSource === compilationSource ) return;
		var callbackError=function(type,strOrErr){
			
			
			var error=strOrErr instanceof Error ? strOrErr : new Error(strOrErr);
			error._Type=type;
			t.cache.error=error;
			callback(error);
		},t=this;
		
		if(t.compiler){
			(t.compiler.read||function(path,callback){
				fs.readFile(t.srcPath,function(err,buffer){
					if(err) return callback(err);
					callback(null,buffer.toString());
				});
			})(t.srcPath,function(err,fileContent){
				if(err) return callbackError('Reading',err);
				t.lint(t,fileContent,function(err){
					if(err) return callbackError('Linting',err);
					
					t.parse(fileContent,function(err,data){
						if(err) return callbackError('Parsing',err);
						try{
							t._compile(data,function(err,results,dependencies){
								if(err) return callbackError('Compiling',err);
								if(err===false) return callback();
								t.optimize(t,results,function(err,optimizedResults){
									if(err) return callbackError('Optimizing',err);
									t.cache.error=null;
									t.cache.compilationTime=Date.now();
									t.cache.compilationSource=compilationSource;
									if(err===false){
										t.cache.dependencies=null;
										return callback();
									}
									t.cache.dependencies=!dependencies || dependencies.app ? dependencies : {app:dependencies};
									t.write(optimizedResults,callback);
								});
							});
						}catch(err){
							return callbackError('Compiling',err);
						}
					});
				});
			});
		}else{
			t.copy(callback);
		}
	}
function ( callback , compilationSource ) { if ( compilationSource && this . cache . compilationSource && this . cache . compilationSource === compilationSource ) return ; var callbackError = function ( type , strOrErr ) { /*if(strOrErr instanceof Array){
				var i,finalStr='Errors :';
				for(i in strOrErr){
					console.error(strOrErr[i].stack);
					finalStr+=+"\n"+strOrErr[i].toString().slice(7);
				}
				strOrErr=finalStr;
			}*/ //var error=new Error(strOrErr instanceof Error ? strOrErr.toString().slice(7) : strOrErr); var error = strOrErr instanceof Error ? strOrErr : new Error ( strOrErr ) ; error . _Type = type ; t . cache . error = error ; callback ( error ) ; } , t = this ; if ( t . compiler ) { ( t . compiler . read || function ( path , callback ) { fs . readFile ( t . srcPath , function ( err , buffer ) { if ( err ) return callback ( err ) ; callback ( null , buffer . toString ( ) ) ; } ) ; } ) ( t . srcPath , function ( err , fileContent ) { if ( err ) return callbackError ( 'Reading' , err ) ; t . lint ( t , fileContent , function ( err ) { if ( err ) return callbackError ( 'Linting' , err ) ; t . parse ( fileContent , function ( err , data ) { if ( err ) return callbackError ( 'Parsing' , err ) ; try { t . _compile ( data , function ( err , results , dependencies ) { if ( err ) return callbackError ( 'Compiling' , err ) ; if ( err === false ) return callback ( ) ; t . optimize ( t , results , function ( err , optimizedResults ) { if ( err ) return callbackError ( 'Optimizing' , err ) ; t . cache . error = null ; t . cache . compilationTime = Date . now ( ) ; t . cache . compilationSource = compilationSource ; if ( err === false ) { t . cache . dependencies = null ; return callback ( ) ; } t . cache . dependencies = ! dependencies || dependencies . app ? dependencies : { app : dependencies } ; t . write ( optimizedResults , callback ) ; } ) ; } ) ; } catch ( err ) { return callbackError ( 'Compiling' , err ) ; } } ) ; } ) ; } ) ; } else { t . copy ( callback ) ; } }
Reads file and compiles it with compiler. Data is cached
Reads file and compiles it with compiler . Data is cached