Esempio n. 1
0
 private void add_intersection(function_node _func,function_intersection_node _func_intersec)
 {
     _func_intersections.Add(_func, _func_intersec);
 }
Esempio n. 2
0
        /*
        private static expression_node runtime_inc_int(location call_location, expression_node[] exprs)
        {
            if (exprs.Length != 1)
            {
                return null;
            }
            int_const_node icn = exprs[0] as int_const_node;
            if (icn == null)
            {
                return null;
            }
            return (new int_const_node(icn.constant_value + 1, call_location));
        }

        private static expression_node runtime_dec_int(location call_location, expression_node[] exprs)
        {
            if (exprs.Length != 1)
            {
                return null;
            }
            int_const_node icn = exprs[0] as int_const_node;
            if (icn == null)
            {
                return null;
            }
            return (new int_const_node(icn.constant_value - 1, call_location));
        }
        
        private static void mark_int_as_ordinal()
        {
            basic_function_node internal_inc_value = create_oti_method(SemanticTree.basic_function_type.iinc, _integer_type);
            internal_inc_value.compile_time_executor = runtime_inc_int;
            basic_function_node internal_dec_value = create_oti_method(SemanticTree.basic_function_type.idec, _integer_type);
            internal_dec_value.compile_time_executor = runtime_dec_int;

            basic_function_node inc_value_method = create_inc_value_method(SemanticTree.basic_function_type.iinc, _integer_type);
            basic_function_node dec_value_method = create_dec_value_method(SemanticTree.basic_function_type.idec, _integer_type);

            basic_function_node inc_method = create_inc_method(SemanticTree.basic_function_type.iinc, _integer_type);
            basic_function_node dec_method = create_dec_method(SemanticTree.basic_function_type.idec, _integer_type);

            //basic_function_node inc_method = create_oti_method(SemanticTree.basic_function_type.iinc, _integer_type);
            //basic_function_node dec_method = create_oti_method(SemanticTree.basic_function_type.idec, _integer_type);

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

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

            //DarkStar Changed MinValue->MaxValue
            constant_node cn_max = new int_const_node(int.MaxValue,null);
            constant_node cn_min = new int_const_node(int.MinValue,null);

            basic_function_node i2i_method = create_emty_function(integer_type);

            ordinal_type_to_int ordinal_type_to_int = int_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);

            _integer_type.add_internal_interface(oti);
        }

        private static expression_node runtime_inc_char(location call_location, expression_node[] exprs)
        {
            if (exprs.Length != 1)
            {
                return null;
            }
            char_const_node icn = exprs[0] as char_const_node;
            if (icn == null)
            {
                return null;
            }
            return (new int_const_node((icn.constant_value+1) , call_location));
        }

        private static expression_node runtime_dec_char(location call_location, expression_node[] exprs)
        {
            if (exprs.Length != 1)
            {
                return null;
            }
            char_const_node icn = exprs[0] as char_const_node;
            if (icn == null)
            {
                return null;
            }
            return (new int_const_node((icn.constant_value-1), call_location));
        }

        private static void mark_char_as_ordinal()
        {
            basic_function_node internal_inc_value = create_oti_method(SemanticTree.basic_function_type.cinc, _integer_type);
            internal_inc_value.compile_time_executor = runtime_inc_char;
            basic_function_node internal_dec_value = create_oti_method(SemanticTree.basic_function_type.cdec, _integer_type);
            internal_dec_value.compile_time_executor = runtime_dec_char;

            basic_function_node inc_value_method = create_inc_value_method(SemanticTree.basic_function_type.iinc, _integer_type);
            basic_function_node dec_value_method = create_dec_value_method(SemanticTree.basic_function_type.idec, _integer_type);

            basic_function_node inc_method = create_inc_method(SemanticTree.basic_function_type.iinc, _integer_type);
            basic_function_node dec_method = create_dec_method(SemanticTree.basic_function_type.iinc, _integer_type);

            SymbolInfo si = _char_type.find(compiler_string_consts.greq_name);
            basic_function_node greq = (basic_function_node)si.sym_info;

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

            constant_node cn_max = new char_const_node(char.MaxValue,null);
            constant_node cn_min = new char_const_node(char.MinValue,null);

            basic_function_node c2i_method = new basic_function_node(SemanticTree.basic_function_type.chartoi, _integer_type,true);
            basic_parameter cp = new basic_parameter(compiler_string_consts.unary_param_name, _char_type,
                SemanticTree.parameter_type.value, c2i_method);
            //TODO: Сделано очень плохо.
            add_stand_type(SemanticTree.basic_function_type.chartoi, c2i_method);
            c2i_method.parameters.AddElement(cp);
            c2i_method.compile_time_executor = char_to_int;

            ordinal_type_to_int ordinal_type_to_int = char_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,
                c2i_method,ordinal_type_to_int);

            _char_type.add_internal_interface(oti);
        }
        */
        private static void make_function_comparison(function_node left, function_node right, function_compare comp)
        {
            function_intersection_node fin = new function_intersection_node(left, right);
            fin.function_relation = comp;
            function_node.add_function_intersection(left,right,fin);
        }
Esempio n. 3
0
        public static void add_function_intersection(function_node left, function_node right,
            function_intersection_node intersec)
        {
#if DEBUG
            function_intersection_node func_int_left = left.get_intersecion(right);
            if (func_int_left != null)
            {
                throw new TreeConverter.CompilerInternalError("Duplicate function intersection");
            }
#endif
            left.add_intersection(right, intersec);
        }