public statement MyStmt(expression ex, statement st)
        {
            // Проверить, что в ex - целый тип
            // Сделать специальный узел для проверки new semantic_check("Тип проверки",params syntax_node[] ob)
            // Включать этот узел первым для "сахарных" узлов синтаксического дерева
            var sc = new semantic_check("ExprIsInteger", ex);

            var id     = new ident("#my");
            var idlist = new ident_list(id);
            var typ    = new named_type_reference("integer");
            var one    = new int32_const(1);
            var vdef   = new var_def_statement(idlist, typ, one, definition_attribute.None, false, null);
            var vstat  = new var_statement(vdef, null);

            var ass         = new assign(new ident("#my"), one, Operators.AssignmentAddition);
            var stlistwhile = new statement_list(st);

            stlistwhile.Add(ass);

            var bin = new bin_expr(id, ex, Operators.LessEqual);

            var wh = new while_node(bin, stlistwhile, WhileCycleType.While);

            var stlist = new statement_list(sc);

            stlist.Add(vstat);
            stlist.Add(wh);
            return(stlist);
        }
Esempio n. 2
0
 public override void visit(named_type_reference _named_type_reference)
 {
     foreach (ident id in _named_type_reference.names)
     {
         id.visit(this);
     }
 }
            public static var_statement CreateVarStatementNode(string idName, string varTypeName, expression initValue)
            {
                var id      = new ident(idName);
                var idlist  = new ident_list(id);
                var varType = new named_type_reference(varTypeName, null);
                var vdef    = new var_def_statement(idlist, varType, initValue, definition_attribute.None, false, null);

                return(new var_statement(vdef, null));
            }
        public override void visit(named_type_reference ntr)
        {
            var name = ntr.names[0].name.ToLower();

            if (name == "biginteger")
            {
                BigIntegerTypeCount++;
            }
            base.visit(ntr);
        }
Esempio n. 5
0
        public var_def_statement NewVarOrIdentifier(ident identifier, named_type_reference fptype, LexLocation loc)
        {
            var n_t_r = fptype;
            var vds   = new var_def_statement();

            vds.vars = new ident_list();
            vds.vars.idents.Add(identifier);
            vds.vars_type      = n_t_r;
            vds.source_context = loc;
            return(vds);
        }
Esempio n. 6
0
 public override void visit(named_type_reference ntr)
 {
     visit(ntr.names[0]);
     if (ntr is template_type_reference ttr)
     {
         foreach (var tt in ttr.params_list.params_list)
         {
             ProcessNode(tt);
         }
     }
 }
        /// <summary>
        /// Создать var-выражение с несколькими переменными
        /// </summary>
        /// <param name="type">Тип переменных</param>
        /// <param name="idents">Имена переменных</param>
        /// <returns></returns>
        public static var_def_statement CreateVarDef(named_type_reference type, params string[] names)
        {
            var_def_statement res = new var_def_statement();

            foreach (string x in names)
            {
                res.vars.Add(new ident(x));
            }
            res.vars_type = type;
            return(res);
        }
Esempio n. 8
0
        private type_definition get_type_reference(ICSharpCode.NRefactory.Ast.TypeReference tr)
        {
            string[]             names = tr.Type.Split('.');
            named_type_reference ntr   = new named_type_reference();

            ntr.source_context = get_source_context(tr);
            for (int i = 0; i < names.Length; i++)
            {
                ntr.names.Add(new ident(names[i]));
            }
            return(ntr);
        }
        private List <type_definition> GetTranslatedTypeclassParameters(List <type_definition> paramList, IEnumerable <string> typeclasses)
        {
            var possibleOverloadingsForEachTypeclass = typeclasses.Select(x =>
                                                                          new KeyValuePair <string, List <typeclass_param_list> >(x, instancesAndRestrictedFunctions.instances[x]));

            // Find current overloading in possible
            var newParams = new List <type_definition>();

            foreach (var typeclassOverloadings in possibleOverloadingsForEachTypeclass)
            {
                foreach (var possibleParamList in typeclassOverloadings.Value)
                {
                    bool isEqual = true;
                    for (int i = 0; i < possibleParamList.params_list.Count; i++)
                    {
                        if ((possibleParamList.params_list[i] as named_type_reference).names[0].name !=
                            (paramList[i] as named_type_reference).names[0].name)
                        {
                            isEqual = false;
                            break;
                        }
                    }

                    // TODO: need many checks
                    // Typeclass params and function restriction params are mixed up
                    // Fix it as soon as it possible
                    // Btw for 1 argument it's ok.
                    if (isEqual)
                    {
                        var derived_typeclass =
                            (instancesAndRestrictedFunctions.typeclasses[typeclassOverloadings.Key].type_def as typeclass_definition);

                        var base_typeclasses = derived_typeclass.additional_restrictions?.types.OfType <typeclass_reference>().Select(x => x.names[0].name);
                        var typeName         = new named_type_reference(CreateInstanceName(possibleParamList, typeclassOverloadings.Key));
                        if (base_typeclasses == null || base_typeclasses.Count() == 0)
                        {
                            newParams.Add(typeName);
                        }
                        else
                        {
                            var translatedParams = GetTranslatedTypeclassParameters(paramList, base_typeclasses);

                            newParams.Add(new template_type_reference(
                                              typeName,
                                              new template_param_list(translatedParams)));
                        }
                    }
                }
            }

            return(newParams);
        }
 public expression ConvertNamedTypeReferenceToDotNodeOrIdent(named_type_reference ntr) // либо ident либо dot_node
 {
     if (ntr.names.Count == 1)
     {
         return(ntr.names[0]);
     }
     else
     {
         var dn = new dot_node(ntr.names[0], ntr.names[1], ntr.names[0].source_context.Merge(ntr.names[1].source_context));
         for (var i = 2; i < ntr.names.Count; i++)
         {
             dn = new dot_node(dn, ntr.names[i], dn.source_context.Merge(ntr.names[i].source_context));
         }
         dn.source_context = ntr.source_context;
         return(dn);
     }
 }
        public ident func_decl_lambda(object lr0, object lr2)
        {
            statement_list    _statement_list    = (statement_list)lr2;
            expression_list   _expression_list   = new expression_list();
            ident_list        _i_l               = new ident_list();
            formal_parameters _formal_parameters = new formal_parameters();

            if (lr0 != null)
            {
                List <object> ar = (List <object>)lr0;
                for (int i = 0; i < ar.Count; i++)
                {
                    if (ar[i] is ident)
                    {
                        _i_l.idents.Add((ident)ar[i]);
                    }
                    else
                    {
                        _i_l.idents.Add(((var_def_statement)ar[i]).vars.idents[0]);
                    }
                }

                for (int i = 0; i < _i_l.idents.Count; i++)
                {
                    _expression_list.expressions.Add(_i_l.idents[i]);
                }

                for (int i = 0; i < ar.Count; i++)
                {
                    ident_list _ident_list = new ident_list();
                    ident      id          = _i_l.idents[i];
                    _ident_list.idents.Add(id);
                    string           name_param        = id.name;
                    typed_parameters _typed_parameters = null;
                    int k = 0;
                    {
                        named_type_reference _named_type_reference = new named_type_reference();
                        type_definition      t_d = new type_definition();
                        if (ar[i] is ident)
                        {
                            ident idtype = new ident("object");
                            _named_type_reference.names.Add(idtype);
                            t_d = (type_definition)_named_type_reference;
                        }
                        else
                        {
                            t_d = ((var_def_statement)ar[i]).vars_type;
                        }
                        _typed_parameters = new typed_parameters(_ident_list, t_d, parametr_kind.none, null);
                        //parsertools.create_source_context(_typed_parameters, _ident_list, t_d);
                    }
                    _formal_parameters.params_list.Add(_typed_parameters);
                }
            }
            //////////////////////////
            named_type_reference _named_type_reference1 = new named_type_reference();
            ident idtype1 = new ident("object");

            _named_type_reference1.source_context = idtype1.source_context;
            _named_type_reference1.names.Add(idtype1);
            /////////////////////////////
            lambda_num++;
            function_lambda_definition _procedure_definition = new function_lambda_definition();

            _procedure_definition.formal_parameters = _formal_parameters;
            _procedure_definition.return_type       = (type_definition)_named_type_reference1;
            _procedure_definition.ident_list        = _i_l;
            _procedure_definition.proc_body         = null;
            _procedure_definition.parameters        = _expression_list;
            _procedure_definition.lambda_name       = "__lambda__" + lambda_num;
            //new function_lambda_definition(_formal_parameters, (type_definition)_named_type_reference1, _i_l, null, _expression_list, "lambda" + lambda_num);
            object rt = _i_l;

            _procedure_definition.proc_body = _statement_list;

            //////////////////////////////vnutrennie lambda
            if (_procedure_definition.defs == null)
            {
                _procedure_definition.defs = new List <declaration>();
            }
            while (pascalABC_lambda_definitions.Count > 0 && pascalABC_lambda_definitions[pascalABC_lambda_definitions.Count - 1] != null)
            {
                _procedure_definition.defs.Add(lambda((function_lambda_definition)pascalABC_lambda_definitions[pascalABC_lambda_definitions.Count - 1]));
                pascalABC_lambda_definitions.RemoveAt(pascalABC_lambda_definitions.Count - 1);
            }
            if (pascalABC_lambda_definitions.Count > 0 && pascalABC_lambda_definitions[pascalABC_lambda_definitions.Count - 1] == null)
            {
                pascalABC_lambda_definitions.RemoveAt(pascalABC_lambda_definitions.Count - 1);
            }
            pascalABC_lambda_definitions.Add(_procedure_definition);
            ///////////////////////////////////////////////
            //parsertools.create_source_context(_procedure_definition, _expression_list, rt);
            ident _name = new ident(_procedure_definition.lambda_name);

            if (lr0 != null)
            {
                _name.source_context = _i_l.idents[0].source_context;
            }
            return(_name);
        }
Esempio n. 12
0
 public override void visit(named_type_reference _named_type_reference)
 {
     //text="Type name: "+_named_type_reference.type_name;
 }
Esempio n. 13
0
 public override void visit(named_type_reference _named_type_reference)
 {
     prepare_collection(_named_type_reference.names, "names");
 }
		public virtual void visit(named_type_reference _named_type_reference)
		{
			DefaultVisit(_named_type_reference);
		}
Esempio n. 15
0
		public virtual void visit(named_type_reference _named_type_reference)
		{
		}
Esempio n. 16
0
 public virtual void visit(named_type_reference _named_type_reference)
 {
     DefaultVisit(_named_type_reference);
 }
Esempio n. 17
0
		public override void visit(named_type_reference _named_type_reference)
		{
			DefaultVisit(_named_type_reference);
			pre_do_visit(_named_type_reference);
			for (int i = 0; i < names.Count; i++)
				visit(named_type_reference.names[i]);
			post_do_visit(_named_type_reference);
		}
Esempio n. 18
0
 public virtual void visit(named_type_reference _named_type_reference)
 {
 }
Esempio n. 19
0
		public virtual void post_do_visit(named_type_reference _named_type_reference)
		{
		}
Esempio n. 20
0
		public override void visit(named_type_reference _named_type_reference)
		{
			executer.visit(_named_type_reference);
			if (_named_type_reference.names != null)
			foreach (dynamic x in _named_type_reference.names)
				if(x != null)
					this.visit(x);
			if (_named_type_reference.attr_list != null)
				this.visit((dynamic)_named_type_reference.attr_list);
			if (_named_type_reference.attributes != null)
				this.visit((dynamic)_named_type_reference.attributes);
		}