AddGlobalVariable() приватный Метод

private AddGlobalVariable ( PythonVariable variable ) : void
variable PythonVariable
Результат void
Пример #1
0
        // GlobalStatement
        public override bool Walk(GlobalStatement node)
        {
            node.Parent = _currentScope;

            foreach (string n in node.Names)
            {
                PythonVariable conflict;
                // Check current scope for conflicting variable
                bool assignedGlobal = false;
                if (_currentScope.TryGetVariable(n, out conflict))
                {
                    // conflict?
                    switch (conflict.Kind)
                    {
                    case VariableKind.Global:
                    case VariableKind.Local:
                        assignedGlobal = true;
                        ReportSyntaxWarning($"name '{n}' is assigned to before global declaration", node);
                        break;

                    case VariableKind.Parameter:
                        ReportSyntaxError($"name '{n}' is local and global", node);
                        break;
                    }
                }

                // Check for the name being referenced previously. If it has been, issue warning.
                if (_currentScope.IsReferenced(n) && !assignedGlobal)
                {
                    ReportSyntaxWarning(
                        String.Format(
                            System.Globalization.CultureInfo.InvariantCulture,
                            "name '{0}' is used prior to global declaration",
                            n),
                        node);
                }


                // Create the variable in the global context and mark it as global
                PythonVariable variable = _globalScope.EnsureGlobalVariable(n);
                variable.Kind = VariableKind.Global;

                if (conflict == null)
                {
                    // no previously definied variables, add it to the current scope
                    _currentScope.AddGlobalVariable(variable);
                }
            }
            return(true);
        }
Пример #2
0
        // GlobalStatement
        public override bool Walk(GlobalStatement node)
        {
            node.Parent = _currentScope;

            foreach (string n in node.Names)
            {
                PythonVariable conflict;
                // Check current scope for conflicting variable
                bool assignedGlobal = false;
                if (_currentScope.TryGetVariable(n, out conflict))
                {
                    // conflict?
                    switch (conflict.Kind)
                    {
                    case VariableKind.Global:
                        break;

                    case VariableKind.Local:
                        assignedGlobal = true;
                        ReportSyntaxError($"name '{n}' is assigned to before global declaration", node);
                        break;

                    case VariableKind.Parameter:
                        ReportSyntaxError($"name '{n}' is parameter and global", node);
                        break;

                    case VariableKind.Nonlocal:
                        ReportSyntaxError($"name '{n}' is nonlocal and global", node);
                        break;
                    }
                }

                // Check for the name being referenced previously
                if (_currentScope.IsReferenced(n) && !assignedGlobal)
                {
                    ReportSyntaxError($"name '{n}' is used prior to global declaration", node);
                }

                // Create the variable in the global context or mark it as global
                PythonVariable variable = _globalScope.EnsureGlobalVariable(n);

                if (conflict == null)
                {
                    // no previously defined variables, add it to the current scope
                    _currentScope.AddGlobalVariable(variable);
                }
            }
            return(true);
        }