コード例 #1
0
ファイル: FlowChecker.cs プロジェクト: borota/JTVS
 private bool IsInitialized(JVariable/*!*/ variable)
 {
     return _bits.Get(_variableIndices[variable] * 2 + 1);
 }
コード例 #2
0
ファイル: ScopeStatement.cs プロジェクト: borota/JTVS
 public ClosureInfo(JVariable variable, bool accessedInScope)
 {
     Variable = variable;
     AccessedInScope = accessedInScope;
 }
コード例 #3
0
ファイル: FlowChecker.cs プロジェクト: borota/JTVS
 private bool IsAssigned(JVariable/*!*/ variable)
 {
     return _bits.Get(_variableIndices[variable] * 2);
 }
コード例 #4
0
ファイル: MethodExtractor.cs プロジェクト: borota/JTVS
 private bool ReadFromExtractedCode(JVariable variable)
 {
     return _readBeforeInitialized.Contains(variable) &&
         _inputCollector._allReadVariables.Contains(variable);
 }
コード例 #5
0
ファイル: ScopeStatement.cs プロジェクト: borota/JTVS
 private bool TryGetAnyVariable(string name, out JVariable variable)
 {
     if (_variables != null && name != null) {
         return _variables.TryGetValue(name, out variable);
     } else {
         variable = null;
         return false;
     }
 }
コード例 #6
0
ファイル: FlowChecker.cs プロジェクト: borota/JTVS
 private void SetInitialized(JVariable/*!*/ variable, bool value)
 {
     _bits.Set(_variableIndices[variable] * 2 + 1, value);
 }
コード例 #7
0
ファイル: FunctionDefinition.cs プロジェクト: borota/JTVS
 internal override bool ExposesLocalVariable(JVariable variable)
 {
     return NeedsLocalsDictionary;
 }
コード例 #8
0
ファイル: ScopeStatement.cs プロジェクト: borota/JTVS
 /*!*/
 internal JVariable CreateVariable(string name, VariableKind kind)
 {
     EnsureVariables();
     JVariable variable;
     _variables[name] = variable = new JVariable(name, kind, this);
     return variable;
 }
コード例 #9
0
ファイル: ScopeStatement.cs プロジェクト: borota/JTVS
 internal abstract bool ExposesLocalVariable(JVariable variable);
コード例 #10
0
ファイル: ScopeStatement.cs プロジェクト: borota/JTVS
        internal void AddFreeVariable(JVariable variable, bool accessedInScope)
        {
            if (_freeVars == null) {
                _freeVars = new List<JVariable>();
            }

            if (!_freeVars.Contains(variable)) {
                _freeVars.Add(variable);
            }
        }
コード例 #11
0
ファイル: ScopeStatement.cs プロジェクト: borota/JTVS
 internal void AddVariable(JVariable variable)
 {
     EnsureVariables();
     _variables[variable.Name] = variable;
 }
コード例 #12
0
ファイル: ScopeStatement.cs プロジェクト: borota/JTVS
        internal void AddCellVariable(JVariable variable)
        {
            if (_cellVars == null) {
                _cellVars = new List<string>();
            }

            if (!_cellVars.Contains(variable.Name)) {
                _cellVars.Add(variable.Name);
            }
        }
コード例 #13
0
ファイル: NodeAttributes.cs プロジェクト: borota/JTVS
 public static void AddVariable(this Parameter node, JAst ast, bool bindNames, JVariable variable)
 {
     if (bindNames) {
         ast.SetAttribute(node, Variable, variable);
     }
 }
コード例 #14
0
ファイル: ExtractedMethodCreator.cs プロジェクト: borota/JTVS
 private static int CompareVariables(JVariable left, JVariable right)
 {
     return String.Compare(left.Name, right.Name);
 }
コード例 #15
0
ファイル: FlowChecker.cs プロジェクト: borota/JTVS
 private bool ReadBeforeInitialized(JVariable variable)
 {
     return _readBeforeInitialized.Contains(variable);
 }
コード例 #16
0
ファイル: ScopeStatement.cs プロジェクト: borota/JTVS
 internal virtual bool TryBindOuter(ScopeStatement from, string name, bool allowGlobals, out JVariable variable)
 {
     // Hide scope contents by default (only functions expose their locals)
     variable = null;
     return false;
 }
コード例 #17
0
ファイル: FlowChecker.cs プロジェクト: borota/JTVS
 private void SetAssigned(JVariable/*!*/ variable, bool value)
 {
     _bits.Set(_variableIndices[variable] * 2, value);
 }
コード例 #18
0
ファイル: ScopeStatement.cs プロジェクト: borota/JTVS
 internal bool TryGetVariable(string name, out JVariable variable)
 {
     if (TryGetAnyVariable(name, out variable)) {
         return true;
     } else {
         variable = null;
         return false;
     }
 }
コード例 #19
0
ファイル: ClassDefinition.cs プロジェクト: borota/JTVS
 internal override bool ExposesLocalVariable(JVariable variable)
 {
     return true;
 }
コード例 #20
0
ファイル: ScopeStatement.cs プロジェクト: borota/JTVS
        private static bool HasClosureVariable(List<ClosureInfo> closureVariables, JVariable variable)
        {
            if (closureVariables == null) {
                return false;
            }

            for (int i = 0; i < closureVariables.Count; i++) {
                if (closureVariables[i].Variable == variable) {
                    return true;
                }
            }

            return false;
        }
コード例 #21
0
ファイル: FunctionDefinition.cs プロジェクト: borota/JTVS
        internal override bool TryBindOuter(ScopeStatement from, string name, bool allowGlobals, out JVariable variable)
        {
            // Functions expose their locals to direct access
            ContainsNestedFreeVariables = true;
            if (TryGetVariable(name, out variable)) {
                variable.AccessedInNestedScope = true;

                if (variable.Kind == VariableKind.Local || variable.Kind == VariableKind.Parameter) {
                    from.AddFreeVariable(variable, true);

                    for (ScopeStatement scope = from.Parent; scope != this; scope = scope.Parent) {
                        scope.AddFreeVariable(variable, false);
                    }

                    AddCellVariable(variable);
                } else if(allowGlobals) {
                    from.AddReferencedGlobal(name);
                }
                return true;
            }
            return false;
        }
コード例 #22
0
ファイル: JAst.cs プロジェクト: borota/JTVS
        internal override bool TryBindOuter(ScopeStatement from, string name, bool allowGlobals, out JVariable variable)
        {
            if (allowGlobals) {
                // Unbound variable
                from.AddReferencedGlobal(name);

                if (from.HasLateBoundVariableSets) {
                    // If the context contains unqualified exec, new locals can be introduced
                    // Therefore we need to turn this into a fully late-bound lookup which
                    // happens when we don't have a JVariable.
                    variable = null;
                    return false;
                } else {
                    // Create a global variable to bind to.
                    variable = EnsureGlobalVariable(name);
                    return true;
                }
            }
            variable = null;
            return false;
        }