Пример #1
0
 public SymbolInfo(function_node value)
 {
     //reference = new SymbolInfo(value);
     _sym_info     = value;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #2
0
 public SymbolInfo(common_event value)
 {
     //reference = new SymbolInfo(value);
     _sym_info     = value;
     _access_level = get_class_member_access_level(value);
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #3
0
 public SymbolInfo(common_namespace_event value)
 {
     //reference = new SymbolInfo(value);
     _sym_info     = value;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #4
0
 public SymbolInfo(compiled_event ce)
 {
     //reference = new SymbolInfo(ce);
     _sym_info     = ce;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #5
0
 public SymbolInfo(label_node lab)
 {
     //reference = new SymbolInfo(lab);
     _sym_info     = lab;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #6
0
 public SymbolInfo(template_class tc)
 {
     //reference = new SymbolInfo(tc);
     _sym_info     = tc;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #7
0
 public SymbolInfo(compiled_class_constant_definition value)
 {
     //reference = new SymbolInfo(value);
     _sym_info     = value;
     _access_level = get_class_member_access_level(value);
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #8
0
 public SymbolInfo(namespace_variable value)
 {
     //_name_information_type=name_information_type.nit_namespace_variable;
     _sym_info     = value;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #9
0
 public SymbolInfo(compiled_constructor_node value)
 {
     //_name_information_type=name_information_type.nit_compiled_function;
     _sym_info     = value;
     _access_level = get_class_member_access_level(value);
     _symbol_kind  = get_function_kind(value);
 }
Пример #10
0
 public SymbolInfo(unit_node value)
 {
     //_name_information_type=name_information_type.nit_unit;
     _sym_info     = value;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #11
0
 public SymbolInfo(common_in_function_function_node value)
 {
     //_name_information_type=name_information_type.nit_common_in_function_function;
     _sym_info     = value;
     _access_level = access_level.al_public;
     _symbol_kind  = get_function_kind(value);
 }
Пример #12
0
 public SymbolInfo(common_method_node value)
 {
     //_name_information_type=name_information_type.nit_common_method;
     _sym_info     = value;
     _access_level = get_class_member_access_level(value);
     _symbol_kind  = get_function_kind(value);
 }
Пример #13
0
 public SymbolInfo(compiled_variable_definition value)
 {
     //_name_information_type=name_information_type.nit_compiled_variable;
     _sym_info     = value;
     _access_level = get_class_member_access_level(value);
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #14
0
 public SymbolInfo(compiled_namespace_node value)
 {
     //_name_information_type=name_information_type.nit_compiled_namespace;
     _sym_info     = value;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #15
0
 public SymbolInfo(basic_parameter value)
 {
     //_name_information_type=name_information_type.nit_basic_parameter;
     _sym_info     = value;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #16
0
 public SymbolInfo(definition_node value, access_level alevel, symbol_kind skind)
 {
     //reference = new SymbolInfo(value, alevel, skind);
     _sym_info     = value;
     _access_level = alevel;
     _symbol_kind  = skind;
 }
Пример #17
0
 public SymbolInfo(constant_definition_node value)
 {
     //_name_information_type=name_information_type.nit_constant_defnition;
     _sym_info     = value;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #18
0
 public SymbolInfo(common_property_node value)
 {
     //_name_information_type=name_information_type.nit_common_property;
     _sym_info     = value;
     _access_level = get_class_member_access_level(value);
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #19
0
 public SymbolInfo(class_field value)
 {
     //_name_information_type=name_information_type.nit_class_field;
     _sym_info     = value;
     _access_level = get_class_member_access_level(value);
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #20
0
 public SymbolInfo(local_variable value)
 {
     //reference = new SymbolInfo(value);
     //_name_information_type=name_information_type.nit_local_variable;
     _sym_info     = value;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #21
0
 public SymbolInfo(common_namespace_node value)
 {
     //reference = new SymbolInfo(value);
     //_name_information_type=name_information_type.nit_common_namespace;
     _sym_info     = value;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #22
0
 public SymbolInfo(basic_function_node value)
 {
     //reference = new SymbolInfo(value);
     //_name_information_type=name_information_type.nit_basic_function;
     _sym_info     = value;
     _access_level = access_level.al_public;
     _symbol_kind  = get_function_kind(value);
 }
Пример #23
0
        private var_definition_node FindForeachVariable(foreach_stmt _foreach_stmt, type_node elem_type, bool sys_coll_ienum)
        {
            var_definition_node foreachVariable = null;

            if (_foreach_stmt.type_name == null) // значит, переменная определена в другом месте
            {
                location        loc1 = get_location(_foreach_stmt.identifier);
                definition_node dn   = context.check_name_node_type(_foreach_stmt.identifier.name, loc1,
                                                                    general_node_type.variable_node);
                foreachVariable = (var_definition_node)dn;
                if (!check_name_in_current_scope(_foreach_stmt.identifier.name))
                {
                    AddError(loc1, "FOREACH_LOOP_CONTROL_MUST_BE_SIMPLE_LOCAL_VARIABLE");
                }
            }
            else
            {
                foreachVariable = context.add_var_definition(_foreach_stmt.identifier.name,
                                                             get_location(_foreach_stmt.identifier));

                type_node tn;
                if (_foreach_stmt.type_name is no_type_foreach) // значит, это for var x in a
                {
                    tn = elem_type;
                }
                else // значит, это for var x: T in a
                {
                    tn = convert_strong(_foreach_stmt.type_name);
                    check_for_type_allowed(tn, get_location(_foreach_stmt.type_name));
                    check_using_static_class(tn, get_location(_foreach_stmt.type_name));
                }
                if (tn.is_value_type && !tn.is_standard_type)
                {
                    context.close_var_definition_list(tn, new default_operator_node(tn, foreachVariable.location));
                }
                else
                {
                    context.close_var_definition_list(tn, null);
                }
            }

            if (/*!(foreachVariable.type is compiled_generic_instance_type_node) &&*/ !sys_coll_ienum) // SSM 16.09.18 - закомментировал это ограничение для фиксации бага #1184
            {
                convertion_data_and_alghoritms.check_convert_type_with_inheritance(elem_type, foreachVariable.type,
                                                                                   get_location(_foreach_stmt.identifier));
            }
            return(foreachVariable);
        }
Пример #24
0
        private var_definition_node FindForeachVariable(foreach_stmt _foreach_stmt, type_node elem_type, bool sys_coll_ienum)
        {
            var_definition_node foreachVariable = null;

            if (_foreach_stmt.type_name == null) // значит, переменная определена в другом месте
            {
                location        loc1 = get_location(_foreach_stmt.identifier);
                definition_node dn   = context.check_name_node_type(_foreach_stmt.identifier.name, loc1,
                                                                    general_node_type.variable_node);
                foreachVariable = (var_definition_node)dn;
                if (!check_name_in_current_scope(_foreach_stmt.identifier.name))
                {
                    AddError(loc1, "FOREACH_LOOP_CONTROL_MUST_BE_SIMPLE_LOCAL_VARIABLE");
                }
            }
            else
            {
                foreachVariable = context.add_var_definition(_foreach_stmt.identifier.name,
                                                             get_location(_foreach_stmt.identifier));

                type_node tn;
                if (_foreach_stmt.type_name is no_type_foreach) // значит, это for var x in a
                {
                    tn = elem_type;
                }
                else // значит, это for var x: T in a
                {
                    tn = convert_strong(_foreach_stmt.type_name);
                    check_for_type_allowed(tn, get_location(_foreach_stmt.type_name));
                }

                context.close_var_definition_list(tn, null);
            }

            if (!(foreachVariable.type is compiled_generic_instance_type_node) && !sys_coll_ienum)
            {
                convertion_data_and_alghoritms.check_convert_type_with_inheritance(elem_type, foreachVariable.type,
                                                                                   get_location(_foreach_stmt.identifier));
            }
            return(foreachVariable);
        }
Пример #25
0
        public override void visit(foreach_stmt _foreach_stmt)
        {
            var loopIdentName = _foreach_stmt.identifier.name.ToLower();

            definition_node     dn  = null;
            var_definition_node vdn = null;

            var sl2 = new statements_list(_visitor.get_location(_foreach_stmt));

            _visitor.convertion_data_and_alghoritms.statement_list_stack_push(sl2);

            var newTreeNode = new CapturedVariablesTreeNodeForEachScope(_currentTreeNode, sl2.Scope.ScopeNum, _foreach_stmt);

            if (_currentTreeNode != null)
            {
                _currentTreeNode.ChildNodes.Add(newTreeNode);
            }
            _currentTreeNode = newTreeNode;

            _scopesCapturedVarsNodesDictionary.Add(sl2.Scope.ScopeNum, _currentTreeNode);

            var inWhat = _visitor.convert_strong(_foreach_stmt.in_what);
            var tmp    = inWhat;

            if (inWhat is typed_expression)
            {
                inWhat = _visitor.convert_typed_expression_to_function_call(inWhat as typed_expression);
            }

            type_node elemType = null;

            if (inWhat.type == null)
            {
                inWhat = tmp;
            }

            _visitor.FindIEnumerableElementType(/*_foreach_stmt, */ inWhat.type, ref elemType);

            if (_foreach_stmt.type_name == null)
            {
                var loc1 = _visitor.get_location(_foreach_stmt.identifier);
                dn  = _visitor.context.check_name_node_type(loopIdentName, loc1, general_node_type.variable_node);
                vdn = (var_definition_node)dn;
            }
            else
            {
                vdn = _visitor.context.add_var_definition(loopIdentName, _visitor.get_location(_foreach_stmt.identifier));

                type_node tn;
                if (_foreach_stmt.type_name is no_type_foreach)
                {
                    tn = elemType;
                }
                else
                {
                    tn = _visitor.convert_strong(_foreach_stmt.type_name);
                    _visitor.check_for_type_allowed(tn, _visitor.get_location(_foreach_stmt.type_name));
                }


                _visitor.context.close_var_definition_list(tn, null);

                _currentTreeNode.VariablesDefinedInScope.Add(new CapturedVariablesTreeNode.CapturedSymbolInfo(_foreach_stmt, _visitor.context.find(loopIdentName)));
            }

            newTreeNode.SymbolInfoLoopVar = _visitor.context.find(loopIdentName);

            if (!(vdn.type is compiled_generic_instance_type_node))
            {
                _visitor.convertion_data_and_alghoritms.check_convert_type_with_inheritance(vdn.type, elemType, _visitor.get_location(_foreach_stmt.identifier));
            }

            var fn = new foreach_node(vdn, inWhat, null, _visitor.get_location(_foreach_stmt));

            _visitor.context.cycle_stack.push(fn);
            _visitor.context.loop_var_stack.Push(vdn);

            ProcessNode(_foreach_stmt.in_what);

            if (!(_foreach_stmt.stmt is statement_list))
            {
                var stmtList = new statement_list(_foreach_stmt.stmt, _foreach_stmt.stmt.source_context);
                _foreach_stmt.stmt = stmtList;
            }

            ProcessNode(_foreach_stmt.stmt);

            _visitor.context.loop_var_stack.Pop();
            _visitor.convertion_data_and_alghoritms.statement_list_stack.pop();
            _visitor.context.cycle_stack.pop();

            _currentTreeNode = _currentTreeNode.ParentNode;
        }
Пример #26
0
 public SymbolInfo(definition_node value, access_level alevel, symbol_kind skind)
 {
     _sym_info     = value;
     _access_level = alevel;
     _symbol_kind  = skind;
 }
Пример #27
0
 public SymbolInfo(type_node value)
 {
     _sym_info     = value;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #28
0
 public SymbolInfo(template_class tc)
 {
     _sym_info     = tc;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #29
0
 public SymbolInfo(label_node lab)
 {
     _sym_info     = lab;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }
Пример #30
0
 public SymbolInfo(compiled_event ce)
 {
     _sym_info     = ce;
     _access_level = access_level.al_public;
     _symbol_kind  = symbol_kind.sk_none;
 }