/// <summary>
 /// Конструктор класса.
 /// </summary>
 /// <param name="inc_method">Метод получения следующего значения порядкового типа.</param>
 /// <param name="dec_method">Метод получения предыдущего значения порядкового типа.</param>
 /// <param name="lower_eq_method">Метод сравнения двух значений данного типа. Принимает два значения перечислимого типа и возвращаит true если левое меньше или равро правого. Иначе false.</param>
 /// <param name="greater_eq_method">Метод сравнения двух значений данного типа. Принимает два значения перечислимого типа и возвращаит true если левое больше или равро правого. Иначе false.</param>
 /// <param name="lower_value">Наименьшее значени перечислимого типа.</param>
 /// <param name="upper_value">Наибольшее значение перечеслимого типа.</param>
 /// <param name="value_to_int">Метод преобразования значения перечислимого типа в целое число.</param>
 /// <param name="ordinal_type_to_int_method">Делегат, который позволяет преобразовывать значение перечислимого типа в целое во время компиляции.</param>
 public ordinal_type_interface(function_node inc_method, function_node dec_method,
                               function_node inc_value_method, function_node dec_value_method,
                               function_node lower_eq_method, function_node greater_eq_method,
                               function_node lower_method, function_node greater_method,
                               constant_node lower_value, constant_node upper_value,
                               function_node value_to_int, ordinal_type_to_int ordinal_type_to_int_method)
 {
     _inc_method          = inc_method;
     _dec_method          = dec_method;
     _inc_value_method    = inc_value_method;
     _dec_value_method    = dec_value_method;
     _lower_eq_method     = lower_eq_method;
     _greater_eq_method   = greater_eq_method;
     _lower_method        = lower_method;
     _greater_method      = greater_method;
     _lower_value         = lower_value;
     _upper_value         = upper_value;
     _value_to_int        = value_to_int;
     _ordinal_type_to_int = ordinal_type_to_int_method;
 }
Example #2
0
        /*
        private static void mark_byte_as_ordinal()
        {
            basic_function_node inc_value_method = create_inc_value_method(SemanticTree.basic_function_type.binc, _byte_type);
            basic_function_node dec_value_method = create_dec_value_method(SemanticTree.basic_function_type.bdec, _byte_type);

            basic_function_node inc_method = create_inc_method(SemanticTree.basic_function_type.binc, _byte_type);
            basic_function_node dec_method = create_dec_method(SemanticTree.basic_function_type.bdec, _byte_type);

            SymbolInfo si = _byte_type.find_in_type(compiler_string_consts.greq_name);
            basic_function_node greq = (basic_function_node)si.sym_info;

            si = _byte_type.find(compiler_string_consts.smeq_name);
            basic_function_node loeq = (basic_function_node)si.sym_info;

            constant_node cn_max = new byte_const_node(byte.MaxValue, null);
            constant_node cn_min = new byte_const_node(byte.MinValue, null);

            basic_function_node i2i_method = create_emty_function(byte_type);

            ordinal_type_to_int ordinal_type_to_int = byte_to_int;

            ordinal_type_interface oti = new ordinal_type_interface(inc_method, dec_method, inc_value_method, dec_value_method,
                internal_inc_value, internal_dec_value, loeq, greq, cn_min, cn_max, i2i_method, ordinal_type_to_int);

            _byte_type.add_internal_interface(oti);
        }
        */
        private static void mark_type_as_ordinal(type_node type,
            SemanticTree.basic_function_type inc,SemanticTree.basic_function_type dec,
            SemanticTree.basic_function_type vinc, SemanticTree.basic_function_type vdec,
            constant_node lower_value, constant_node upper_value,
            function_node t2i,ordinal_type_to_int t2i_comp)
        {
            basic_function_node inc_value = create_oti_method(inc, type, SemanticTree.parameter_type.value);
            basic_function_node dec_value = create_oti_method(dec, type, SemanticTree.parameter_type.value);

            basic_function_node inc_var = create_oti_method(vinc, type, SemanticTree.parameter_type.var);
            basic_function_node dec_var = create_oti_method(vdec, type, SemanticTree.parameter_type.var);

            SymbolInfo si = type.find_in_type(compiler_string_consts.greq_name);
            basic_function_node greq = (basic_function_node)si.sym_info;
        
            si = type.find(compiler_string_consts.smeq_name);
            basic_function_node loeq = (basic_function_node)si.sym_info;
			
            si = type.find(compiler_string_consts.sm_name);
            basic_function_node lo = (basic_function_node)si.sym_info;
            
            si = type.find(compiler_string_consts.gr_name);
            basic_function_node gr = (basic_function_node)si.sym_info;
            
            ordinal_type_interface oti = new ordinal_type_interface(inc_value, dec_value, inc_var, dec_var,
                loeq, greq, lo, gr, lower_value, upper_value, t2i, t2i_comp);

            type.add_internal_interface(oti);
        }
 /// <summary>
 /// Конструктор класса.
 /// </summary>
 /// <param name="inc_method">Метод получения следующего значения порядкового типа.</param>
 /// <param name="dec_method">Метод получения предыдущего значения порядкового типа.</param>
 /// <param name="lower_eq_method">Метод сравнения двух значений данного типа. Принимает два значения перечислимого типа и возвращаит true если левое меньше или равро правого. Иначе false.</param>
 /// <param name="greater_eq_method">Метод сравнения двух значений данного типа. Принимает два значения перечислимого типа и возвращаит true если левое больше или равро правого. Иначе false.</param>
 /// <param name="lower_value">Наименьшее значени перечислимого типа.</param>
 /// <param name="upper_value">Наибольшее значение перечеслимого типа.</param>
 /// <param name="value_to_int">Метод преобразования значения перечислимого типа в целое число.</param>
 /// <param name="ordinal_type_to_int_method">Делегат, который позволяет преобразовывать значение перечислимого типа в целое во время компиляции.</param>
 public ordinal_type_interface(function_node inc_method, function_node dec_method,
     function_node inc_value_method, function_node dec_value_method,
     function_node lower_eq_method, function_node greater_eq_method,
     function_node lower_method, function_node greater_method,
     constant_node lower_value, constant_node upper_value,
     function_node value_to_int, ordinal_type_to_int ordinal_type_to_int_method)
 {
     _inc_method = inc_method;
     _dec_method = dec_method;
     _inc_value_method = inc_value_method;
     _dec_value_method = dec_value_method;
     _lower_eq_method = lower_eq_method;
     _greater_eq_method = greater_eq_method;
     _lower_method = lower_method;
     _greater_method = greater_method;
     _lower_value = lower_value;
     _upper_value = upper_value;
     _value_to_int = value_to_int;
     _ordinal_type_to_int = ordinal_type_to_int_method;
 }