public static DerefResults commonDeref( Identifier name, IDictionary<Identifier,IScidentre> scidentres, IEnumerable<ISieve> sieves, IEnumerable<IWorker> exposes, IScope scope ) { DerefResults results = new DerefResults(null, null); if( scidentres != null && scidentres.ContainsKey(name) ) results.Add( scidentres[name].deref() ); if(sieves != null) foreach(ISieve d in sieves) results.Add(d.deref(name)); if(exposes != null && results.worker == null) { foreach(IWorker w in exposes) { DerefResults exposeResults = GE.deref(w, name); if(results.workerList == null || exposeResults.worker == null) results.Add(exposeResults); } } if(scope != null && results.worker == null) { DerefResults scopeResults = scope.upDeref(name); if(results.workerList == null || scopeResults.worker == null) results.Add(scopeResults); } return results; }
public static IWorker evalIdent(IScope scope, Identifier name) { DerefResults results = scope.upDeref(name); if( results.worker != null ) return results.worker; if( results.workerList != null ) { if( results.workerList.Count > 1 ) throw new NotImplementedException(); return results.workerList[0]; } throw new ClientException( String.Format("wo-scidentre '{0}' not found", name)); }