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); }
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)); }
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)); }
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); }
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)); }
/// <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; }
/// <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; }
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); }
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); }
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)); }
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); }
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)); }
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); }
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); }