public FunctionCache(ITypeInfoSource typeInfo) { TypeInfo = typeInfo; Comparer = new QualifiedMemberIdentifier.Comparer(typeInfo); Cache = new ConcurrentCache <QualifiedMemberIdentifier, Entry>( Environment.ProcessorCount, 4096, Comparer ); PendingTransformsQueue = new ConcurrentHashQueue <QualifiedMemberIdentifier>( Math.Max(1, Environment.ProcessorCount / 4), 4096, Comparer ); ActiveTransformPipelines = new ConcurrentDictionary <QualifiedMemberIdentifier, FunctionTransformPipeline>( Math.Max(1, Environment.ProcessorCount / 4), 128, Comparer ); MethodTypes = new MethodTypeFactory(); MakeCacheEntry = (id, method) => { PendingTransformsQueue.TryEnqueue(id); return(new Entry(id, Locks) { Info = method.Method, Reference = method.Reference, SecondPass = new FunctionAnalysis2ndPass(this, method.Method) }); }; MakePopulatedCacheEntry = (id, args) => { var result = new JSFunctionExpression( new JSMethod(args.Method, args.Info, MethodTypes), args.Translator.Variables, args.Parameters, args.Body, MethodTypes ); PendingTransformsQueue.TryEnqueue(id); return(new Entry(id, Locks) { Info = args.Info, Reference = args.Method, Expression = result, SpecialIdentifiers = args.Translator.SpecialIdentifiers }); }; MakeNullCacheEntry = (id, args) => { return(new Entry(id, Locks) { Info = args.Info, Reference = args.Method, Expression = null }); }; }
public FunctionCache(ITypeInfoSource typeInfo) { var comparer = new QualifiedMemberIdentifier.Comparer(typeInfo); Cache = new ConcurrentCache <QualifiedMemberIdentifier, Entry>( Environment.ProcessorCount, 4096, comparer ); OptimizationQueue = new ConcurrentHashQueue <QualifiedMemberIdentifier>( Math.Max(1, Environment.ProcessorCount / 4), 4096, comparer ); MethodTypes = new MethodTypeFactory(); MakeCacheEntry = (id, method) => { OptimizationQueue.TryEnqueue(id); return(new Entry { Info = method.Method, Reference = method.Reference, Identifier = id, ParameterNames = new HashSet <string>(from p in method.Method.Parameters select p.Name), SecondPass = new FunctionAnalysis2ndPass(this, method.Method) }); }; MakePopulatedCacheEntry = (id, args) => { var result = new JSFunctionExpression( new JSMethod(args.Method, args.Info, MethodTypes), args.Translator.Variables, args.Parameters, args.Body, MethodTypes ); OptimizationQueue.TryEnqueue(id); return(new Entry { Identifier = id, Info = args.Info, Reference = args.Method, Expression = result, Variables = args.Translator.Variables, ParameterNames = args.Translator.ParameterNames, SpecialIdentifiers = args.Translator.SpecialIdentifiers }); }; MakeNullCacheEntry = (id, args) => { return(new Entry { Identifier = id, Info = args.Info, Reference = args.Method, Expression = null }); }; }
public FunctionCache(ITypeInfoSource typeInfo) { TypeInfo = typeInfo; Comparer = new QualifiedMemberIdentifier.Comparer(typeInfo); Cache = new ConcurrentCache<QualifiedMemberIdentifier, Entry>( Environment.ProcessorCount, 4096, Comparer ); PendingTransformsQueue = new ConcurrentHashQueue<QualifiedMemberIdentifier>( Math.Max(1, Environment.ProcessorCount / 4), 4096, Comparer ); ActiveTransformPipelines = new ConcurrentDictionary<QualifiedMemberIdentifier, FunctionTransformPipeline>( Math.Max(1, Environment.ProcessorCount / 4), 128, Comparer ); MethodTypes = new MethodTypeFactory(); MakeCacheEntry = (id, method) => { PendingTransformsQueue.TryEnqueue(id); return new Entry(id, Locks) { Info = method.Method, Reference = method.Reference, SecondPass = new FunctionAnalysis2ndPass(this, method.Method) }; }; MakePopulatedCacheEntry = (id, args) => { var result = new JSFunctionExpression( new JSMethod(args.Method, args.Info, MethodTypes), args.Translator.Variables, args.Parameters, args.Body, MethodTypes ); PendingTransformsQueue.TryEnqueue(id); return new Entry(id, Locks) { Info = args.Info, Reference = args.Method, Expression = result, Variables = args.Translator.Variables, SpecialIdentifiers = args.Translator.SpecialIdentifiers }; }; MakeNullCacheEntry = (id, args) => { return new Entry(id, Locks) { Info = args.Info, Reference = args.Method, Expression = null }; }; }
public FunctionCache(ITypeInfoSource typeInfo) { var comparer = new QualifiedMemberIdentifier.Comparer(typeInfo); Cache = new ConcurrentCache<QualifiedMemberIdentifier, Entry>( Environment.ProcessorCount, 4096, comparer ); OptimizationQueue = new ConcurrentHashQueue<QualifiedMemberIdentifier>( Math.Max(1, Environment.ProcessorCount / 4), 4096, comparer ); MethodTypes = new MethodTypeFactory(); MakeCacheEntry = (id, method) => { OptimizationQueue.TryEnqueue(id); return new Entry { Info = method.Method, Reference = method.Reference, Identifier = id, ParameterNames = new HashSet<string>(from p in method.Method.Parameters select p.Name), SecondPass = new FunctionAnalysis2ndPass(this, method.Method) }; }; MakePopulatedCacheEntry = (id, args) => { var result = new JSFunctionExpression( new JSMethod(args.Method, args.Info, MethodTypes), args.Translator.Variables, args.Parameters, args.Body, MethodTypes ); OptimizationQueue.TryEnqueue(id); return new Entry { Identifier = id, Info = args.Info, Reference = args.Method, Expression = result, Variables = args.Translator.Variables, ParameterNames = args.Translator.ParameterNames, SpecialIdentifiers = args.Translator.SpecialIdentifiers }; }; MakeNullCacheEntry = (id, args) => { return new Entry { Identifier = id, Info = args.Info, Reference = args.Method, Expression = null }; }; }
public FunctionCache(ITypeInfoSource typeInfo) { var comparer = new QualifiedMemberIdentifier.Comparer(typeInfo); Cache = new ConcurrentCache<QualifiedMemberIdentifier, Entry>( Environment.ProcessorCount, 4096, comparer ); OptimizationQueue = new ConcurrentHashQueue<QualifiedMemberIdentifier>( Math.Max(1, Environment.ProcessorCount / 4), 4096, comparer ); MethodTypes = new MethodTypeFactory(); }
public FunctionCache(ITypeInfoSource typeInfo) { var comparer = new QualifiedMemberIdentifier.Comparer(typeInfo); Cache = new ConcurrentCache <QualifiedMemberIdentifier, Entry>( Environment.ProcessorCount, 4096, comparer ); OptimizationQueue = new ConcurrentHashQueue <QualifiedMemberIdentifier>( Math.Max(1, Environment.ProcessorCount / 4), 4096, comparer ); MethodTypes = new MethodTypeFactory(); }
public FunctionCache() { Cache = new ConcurrentCache<QualifiedMemberIdentifier, Entry>(Environment.ProcessorCount, 4096); OptimizationQueue = new ConcurrentHashQueue<QualifiedMemberIdentifier>(Environment.ProcessorCount, 4096); }