private void VisitStatementsExpressionNode(statements_expression_node en) { for (int i = 0; i < en.internal_statements.Count; i++) VisitStatement(en.internal_statements[i]); VisitExpression(en.internal_expression); }
public override void visit(SyntaxTree.expression_list _expression_list) { //throw new NotSupportedError(get_location(_expression_list)); int count = _expression_list.expressions.Count; statement_node_list snl = new statement_node_list(); for (int i = 0; i < count - 1; i++) { statement_node sn = ret.visit(_expression_list.expressions[i]); snl.AddElement(sn); } expression_node ex = ret.visit(_expression_list.expressions[count - 1]); statements_expression_node sen = new statements_expression_node( snl, ex, get_location(_expression_list)); return_value(sen); }
private void VisitStatementsExpressionNode(statements_expression_node node) { bw.Write(node.internal_statements.Count); foreach (statement_node stmt in node.internal_statements) VisitStatement(stmt); VisitExpression(node.internal_expression); }
private void convert_function_call_expressions(function_node fn,expressions_list exprs, possible_type_convertions_list ptcal) { /*if (SystemLibrary.SystemLibrary.syn_visitor.SystemUnitAssigned && fn.name != compiler_string_consts.assign_name && !SystemLibrary.SystemLibrary.syn_visitor.one_way_operation(fn.name) && SystemLibrary.SystemLibrary.syn_visitor.in_check_range_region()) { for (int i=0; i<exprs.Count; i++) { if (exprs[i] is statements_expression_node) break; expression_node right = exprs[i]; if (fn.parameters.Count <= i) break; if (fn.parameters[i].parameter_type == parameter_type.var) continue; type_node left_type = fn.parameters[i].type; if (SystemLibrary.SystemLibrary.syn_visitor.is_range_checkable(left_type) && SystemLibrary.SystemLibrary.syn_visitor.is_range_checkable(exprs[i].type)) { ordinal_type_interface oti = left_type.get_internal_interface(internal_interface_kind.ordinal_interface) as ordinal_type_interface; if (left_type != SystemLibrary.SystemLibrary.char_type) if(!(oti.lower_value is enum_const_node) && !(oti.lower_value is char_const_node)) right = SystemLibrary.SystemLibrary.syn_visitor.convertion_data_and_alghoritms.convert_type(SystemLibrary.SystemLibrary.syn_visitor.convertion_data_and_alghoritms.create_simple_function_call(SystemLibrary.SystemLibInitializer.CheckRangeFunction.sym_info as common_namespace_function_node, null, SystemLibrary.SystemLibrary.syn_visitor.convertion_data_and_alghoritms.convert_type(right,SystemLibrary.SystemLibrary.int64_type), SystemLibrary.SystemLibrary.syn_visitor.convertion_data_and_alghoritms.convert_type(oti.lower_value,SystemLibrary.SystemLibrary.int64_type),SystemLibrary.SystemLibrary.syn_visitor.convertion_data_and_alghoritms.convert_type(oti.upper_value,SystemLibrary.SystemLibrary.int64_type)),right.type); else if (oti.lower_value is enum_const_node) { right = SystemLibrary.SystemLibrary.syn_visitor.convertion_data_and_alghoritms.explicit_convert_type(SystemLibrary.SystemLibrary.syn_visitor.convertion_data_and_alghoritms.create_simple_function_call(SystemLibrary.SystemLibInitializer.CheckRangeFunction.sym_info as common_namespace_function_node, null, SystemLibrary.SystemLibrary.syn_visitor.convertion_data_and_alghoritms.explicit_convert_type(right,SystemLibrary.SystemLibrary.int64_type), SystemLibrary.SystemLibrary.syn_visitor.convertion_data_and_alghoritms.explicit_convert_type(oti.lower_value,SystemLibrary.SystemLibrary.int64_type),SystemLibrary.SystemLibrary.syn_visitor.convertion_data_and_alghoritms.explicit_convert_type(oti.upper_value,SystemLibrary.SystemLibrary.int64_type)),right.type); } else if (oti.lower_value is char_const_node) right = SystemLibrary.SystemLibrary.syn_visitor.convertion_data_and_alghoritms.create_simple_function_call(SystemLibrary.SystemLibInitializer.CheckCharRangeFunction.sym_info as common_namespace_function_node, null, right, oti.lower_value,oti.upper_value); } exprs[i] = right; } }*/ for(int i=0;i<exprs.Count;i++) { if ((ptcal.snl != null) && (i >= fn.parameters.Count - 1)) { //statement_list_stack.top().statements.AddRange(ptcal.snl); statements_expression_node sre = new statements_expression_node(ptcal.snl, ptcal.var_ref, ptcal.var_ref.location); exprs.remove_range(fn.parameters.Count - 1, exprs.Count - fn.parameters.Count); //exprs.AddElement(ptcal.var_ref); //exprs[i] = ptcal.var_ref; exprs[i] = sre; break; } if ((ptcal[i]==null)||(ptcal[i].first==null)||exprs[i] is null_const_node) { continue; } expression_node[] temp_arr = new expression_node[1]; temp_arr[0] = exprs[i]; if (ptcal[i].first.convertion_method is compiled_constructor_node) exprs[i] = create_compiled_construcor_call(ptcal[i].first.convertion_method as compiled_constructor_node, get_location(exprs[i]), temp_arr); else exprs[i] = create_simple_function_call(ptcal[i].first.convertion_method, get_location(exprs[i]), temp_arr); } //TODO: Можно сделать параметры по умолчанию для откомпилированных функций. if ((exprs.Count < fn.parameters.Count) && (fn.node_kind == SemanticTree.node_kind.common)) { if (exprs.Count == 0 && fn.parameters != null && fn.parameters.Count == 1 && fn.parameters[0].is_params || exprs.Count == 1 && fn.parameters != null && fn is common_namespace_function_node && (fn as common_namespace_function_node).ConnectedToType != null && fn.parameters.Count == 2 && fn.parameters[1].is_params) { statements_expression_node sre = new statements_expression_node(ptcal.snl, ptcal.var_ref, ptcal.var_ref.location); //exprs.remove_range(fn.parameters.Count - 1, exprs.Count - fn.parameters.Count); //exprs.AddElement(ptcal.var_ref); //exprs[i] = ptcal.var_ref; exprs.AddElement(sre); } common_function_node cfn = (common_function_node)fn; for (int j = exprs.Count; j < cfn.parameters.Count; j++) { common_parameter cp = (common_parameter)cfn.parameters[j]; if (cp.default_value != null) exprs.AddElement(cp.default_value); } } else if ((exprs.Count < fn.parameters.Count) && (fn.node_kind == SemanticTree.node_kind.compiled)) { if (exprs.Count == 0 && fn.parameters != null && fn.parameters.Count == 1 && fn.parameters[0].is_params) { statements_expression_node sre = new statements_expression_node(ptcal.snl, ptcal.var_ref, ptcal.var_ref.location); exprs.AddElement(sre); } //compiled_function_node cfn = (compiled_function_node)fn; for (int j = exprs.Count; j < fn.parameters.Count; j++) { compiled_parameter cp = (compiled_parameter)fn.parameters[j]; if (cp.default_value != null) exprs.AddElement(cp.default_value); } } }