Пример #1
0
 private void PrepareForReading(IScope scope, VariableOptions options)
 {
     foreach (Variable v in scope.Variables)
     {
         for (int i = 0; i <= _scopeFactor * v.Parent.FunctionDepth; ++i)
         {
             _candidates.Add(v);
         }
     }
 }
Пример #2
0
 private void PrepareForWriting(IScope scope, VariableOptions options)
 {
     foreach (Variable v in scope.Variables)
     {
         if (v.IsLoopCounter || v.IsConstant)
         {
             continue;
         }
         for (int i = 0; i <= _scopeFactor * v.Parent.FunctionDepth; ++i)
         {
             _candidates.Add(v);
         }
     }
 }
Пример #3
0
 private void PrepareForWriting(IScope scope, VariableOptions options)
 {
     foreach (Variable v in scope.Variables)
     {
         if (v.IsLoopCounter || v.IsConstant)
         {
             continue;
         }
         if (options.Has(VariableOptions.NonFunctionInitializer) && (v.Initializer is FunctionExpression))
         {
             continue;
         }
         for (int i = 0; i <= _scopeFactor * v.Parent.FunctionDepth; ++i)
         {
             _candidates.Add(v);
         }
     }
 }
Пример #4
0
        public Variable ChooseVariable(IScope scope, VariableOptions options = VariableOptions.None)
        {
            _candidates.Clear();
            if (options.Has(VariableOptions.ForWriting))
            {
                PrepareForWriting(scope, options);
            }
            else
            {
                PrepareForReading(scope, options);
            }
            var count = _candidates.Count;

            if (count > 0)
            {
                return(_rand.Choose(_candidates));
            }
            return(null);
        }
Пример #5
0
 public static bool Has(this VariableOptions options, VariableOptions vo)
 {
     return((options & vo) != 0);
 }