Exemplo n.º 1
0
        private basic_function_node create_oti_method(SemanticTree.basic_function_type bft, type_node type)
        {
            parameterArrayList  pal = new parameterArrayList();
            basic_function_node bfn = new basic_function_node(bft, pal, type);
            common_parameter    cp  = new common_parameter(compiler_string_consts.unary_param_name, type,
                                                           SemanticTree.parameter_type.var, null);

            pal.Add(cp);
            bfn.is_overload = true;
            return(bfn);
        }
Exemplo n.º 2
0
        private void make_unary_operator(string operator_name, compiled_type_node to,
                                         SemanticTree.basic_function_type bft, type_node ret_value_type)
        {
            parameterArrayList  pars = new parameterArrayList();
            basic_function_node bfn  = new basic_function_node(bft, pars, ret_value_type);

            bfn.is_overload = true;
            basic_parameter par = new basic_parameter(compiler_string_consts.unary_param_name, to,
                                                      SemanticTree.parameter_type.value, bfn);

            pars.Add(par);
            to.add_additional_name(operator_name, new SymbolInfo(bfn));
        }
Exemplo n.º 3
0
 private basic_function_node make_binary_operator(string operator_name, compiled_type_node to,
                                                  SemanticTree.basic_function_type bft, type_node ret_value_type)
 {
     /*parameterArrayList pars=new parameterArrayList();
      * basic_function_node bfn=new basic_function_node(bft,pars,ret_value_type);
      * basic_parameter par_left=new basic_parameter(compiler_string_consts.left_param_name,to,
      *      SemanticTree.parameter_type.value,bfn);
      * basic_parameter par_right=new basic_parameter(compiler_string_consts.right_param_name,to,
      *      SemanticTree.parameter_type.value,bfn);
      * pars.Add(par_left);
      * pars.Add(par_right);
      * to.add_additional_name(operator_name,new SymbolInfo(bfn));*/
     return(make_common_binary_operation(operator_name, to, to, to, bft, ret_value_type));
 }
Exemplo n.º 4
0
        private void make_type_conversion(compiled_type_node from, compiled_type_node to, type_compare tc,
                                          SemanticTree.basic_function_type bft)
        {
            parameterArrayList  pars        = new parameterArrayList();
            basic_function_node conv_method = new basic_function_node(bft, pars, to);
            basic_parameter     bp          = new basic_parameter(compiler_string_consts.unary_param_name,
                                                                  from, SemanticTree.parameter_type.value, conv_method);

            pars.Add(bp);

            type_intersection_node inter_node = new type_intersection_node(tc);

            inter_node.this_to_another = new type_conversion_factory(conv_method);
            from.add_intersection_node(to, inter_node);
        }
Exemplo n.º 5
0
        private void make_object_operator(common_type_node ctn, SemanticTree.basic_function_type bas_ft,
                                          string name, type_node ret_type, SemanticTree.parameter_type first_parameter_type)
        {
            parameterArrayList  pars = new parameterArrayList();
            basic_function_node bfn  = new basic_function_node(bas_ft, pars, ret_type);

            bfn.is_overload = true;
            basic_parameter to = new basic_parameter(compiler_string_consts.left_param_name, ctn,
                                                     first_parameter_type, bfn);
            basic_parameter from = new basic_parameter(compiler_string_consts.right_param_name, ctn,
                                                       SemanticTree.parameter_type.value, bfn);

            pars.Add(to);
            pars.Add(from);
            ctn.Scope.AddSymbol(name, new SymbolInfo(bfn));
        }
Exemplo n.º 6
0
 /// <summary>
 /// Конструктор узла.
 /// </summary>
 /// <param name="bft">Тип базовой функции.</param>
 /// <param name="ret_type">Тип возвращаемого значения.</param>
 /// <param name="is_overload">Перегружена-ли функция.</param>
 /// <param name="name">Имя</param>
 public basic_function_node(SemanticTree.basic_function_type bft, type_node ret_type,
     bool is_overload, string name)
     :
     base(ret_type)
 {
     _basic_function_type = bft;
     _overload = is_overload;
     _name = name;
 }
Exemplo n.º 7
0
        /// <summary>
        /// Конструктор узла.
        /// </summary>
        /// <param name="bft">Тип базовой функции.</param>
        /// <param name="ret_type">Тип возвращаемого значения.</param>
        /// <param name="is_overload">Перегружена-ли функция.</param>
		public basic_function_node(SemanticTree.basic_function_type bft,type_node ret_type,
            bool is_overload) :
			base(ret_type)
		{
			_basic_function_type=bft;
            _overload = is_overload;
		}
Exemplo n.º 8
0
 private void make_object_operator(common_type_node ctn, SemanticTree.basic_function_type bas_ft, string name,
                                   type_node ret_type)
 {
     make_object_operator(ctn, bas_ft, name, ret_type, SemanticTree.parameter_type.value);
 }
Exemplo n.º 9
0
 private void make_compiled_object_operator(string name, compiled_type_node tp, SemanticTree.basic_function_type bft)
 {
     make_compiled_object_operator(name, tp, bft, SemanticTree.parameter_type.value);
 }
Exemplo n.º 10
0
        private void make_compiled_object_operator(string name, compiled_type_node tp, SemanticTree.basic_function_type bft,
                                                   SemanticTree.parameter_type first_param_type)
        {
            parameterArrayList  pars = new parameterArrayList();
            basic_function_node bfn  = new basic_function_node(bft, pars, tp);

            bfn.is_overload = true;
            basic_parameter to = new basic_parameter(compiler_string_consts.left_param_name, tp,
                                                     first_param_type, bfn);
            basic_parameter from = new basic_parameter(compiler_string_consts.right_param_name, tp,
                                                       SemanticTree.parameter_type.value, bfn);

            pars.Add(to);
            pars.Add(from);
            tp.add_additional_name(name, new SymbolInfo(bfn));
        }
Exemplo n.º 11
0
 private void make_assign_operator(compiled_type_node ctn, SemanticTree.basic_function_type bft)
 {
     make_compiled_object_operator(compiler_string_consts.assign_name, ctn, bft, SemanticTree.parameter_type.var);
 }
Exemplo n.º 12
0
 private basic_function_node make_binary_operator(string operator_name, compiled_type_node to, SemanticTree.basic_function_type bft)
 {
     return(make_binary_operator(operator_name, to, bft, to));
 }
Exemplo n.º 13
0
 private void make_unary_operator(string operator_name, compiled_type_node to, SemanticTree.basic_function_type bft)
 {
     make_unary_operator(operator_name, to, bft, to);
 }
Exemplo n.º 14
0
        private basic_function_node make_common_binary_operation(string operator_name, compiled_type_node def_type, compiled_type_node left,
                                                                 compiled_type_node right, SemanticTree.basic_function_type bft, type_node ret_value_type)
        {
            parameterArrayList  pars = new parameterArrayList();
            basic_function_node bfn  = new basic_function_node(bft, pars, ret_value_type);

            bfn.is_overload = true;
            basic_parameter par_left = new basic_parameter(compiler_string_consts.left_param_name, left,
                                                           SemanticTree.parameter_type.value, bfn);
            basic_parameter par_right = new basic_parameter(compiler_string_consts.right_param_name, right,
                                                            SemanticTree.parameter_type.value, bfn);

            pars.Add(par_left);
            pars.Add(par_right);
            def_type.add_additional_name(operator_name, new SymbolInfo(bfn));
            return(bfn);
        }