/* Write a constant expression in binary form to a buffer. */ int gfc_target_encode_expr (gfc_expr *source, unsigned char *buffer, size_t buffer_size) { if (source == NULL) return 0; if (source->expr_type == EXPR_ARRAY) return encode_array (source, buffer, buffer_size); gcc_assert (source->expr_type == EXPR_CONSTANT || source->expr_type == EXPR_STRUCTURE || source->expr_type == EXPR_SUBSTRING); /* If we already have a target-memory representation, we use that rather than recreating one. */ if (source->representation.string) { memcpy (buffer, source->representation.string, source->representation.length); return source->representation.length; } switch (source->ts.type) { case BT_INTEGER: return encode_integer (source->ts.kind, source->value.integer, buffer, buffer_size); case BT_REAL: return encode_float (source->ts.kind, source->value.real, buffer, buffer_size); case BT_COMPLEX: return encode_complex (source->ts.kind, source->value.complex.r, source->value.complex.i, buffer, buffer_size); case BT_LOGICAL: return encode_logical (source->ts.kind, source->value.logical, buffer, buffer_size); case BT_CHARACTER: if (source->expr_type == EXPR_CONSTANT || source->ref == NULL) return encode_character (source->value.character.length, source->value.character.string, buffer, buffer_size); else { int start, end; gcc_assert (source->expr_type == EXPR_SUBSTRING); gfc_extract_int (source->ref->u.ss.start, &start); gfc_extract_int (source->ref->u.ss.end, &end); return encode_character (MAX(end - start + 1, 0), &source->value.character.string[start-1], buffer, buffer_size); } case BT_DERIVED: return encode_derived (source, buffer, buffer_size); default: gfc_internal_error ("Invalid expression in gfc_target_encode_expr."); return 0; } }
/** * Encodes the source into the destination, according to the given language. * * @param p0 the destination (Hand over as reference!) * @param p1 the destination count * @param p2 the destination size * @param p3 the source message name * @param p4 the source message name count * @param p5 the source message abstraction * @param p6 the source message abstraction count * @param p7 the source message model * @param p8 the source message model count * @param p9 the source message details * @param p10 the source message details count * @param p11 the source metadata name * @param p12 the source metadata name count * @param p13 the source metadata abstraction * @param p14 the source metadata abstraction count * @param p15 the source metadata model * @param p16 the source metadata model count * @param p17 the source metadata details * @param p18 the source metadata details count * @param p19 the knowledge memory * @param p20 the knowledge memory count * @param p21 the language * @param p22 the language count */ void encode(void* p0, void* p1, void* p2, void* p3, void* p4, void* p5, void* p6, void* p7, void* p8, void* p9, void* p10, void* p11, void* p12, void* p13, void* p14, void* p15, void* p16, void* p17, void* p18, void* p19, void* p20, void* p21, void* p22) { log_terminated_message((void*) INFORMATION_LEVEL_LOG_MODEL, (void*) L"Encode."); // The comparison result. int r = *NUMBER_0_INTEGER_MEMORY_MODEL; if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) BOOLEAN_LOGICVALUE_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) BOOLEAN_LOGICVALUE_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_boolean(p0, p1, p2, p7, p8); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) CARTESIAN_COMPLEX_NUMBER_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) CARTESIAN_COMPLEX_NUMBER_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_complex(p0, p1, p2, p7, p8); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) CYBOL_TEXT_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) CYBOL_TEXT_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_cybol(p0, p1, p2, p7, p8); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) DECIMAL_FRACTION_NUMBER_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) DECIMAL_FRACTION_NUMBER_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_double_vector(p0, p1, p2, p7, p8); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) ENCAPSULATED_KNOWLEDGE_PATH_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) ENCAPSULATED_KNOWLEDGE_PATH_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { overwrite_array(p0, p7, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p8, p1, (void*) NUMBER_0_INTEGER_MEMORY_MODEL, p1, p2); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) GNU_LINUX_CONSOLE_CYBOL_CHANNEL, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) GNU_LINUX_CONSOLE_CYBOL_CHANNEL_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { //?? encode_gnu_linux_console(p0, p1, p2, p7, p8, *NULL_POINTER_MEMORY_MODEL, *NULL_POINTER_MEMORY_MODEL, p13, p14); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) HH_MM_SS_DATETIME_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) HH_MM_SS_DATETIME_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_date_time(p0, p1, p2, p7, p8); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) HTML_TEXT_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) HTML_TEXT_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_html(p0, p1, p2, p5, p6, p7, p8, p9, p10, p19, p20); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) HTTP_REQUEST_MESSAGE_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) HTTP_REQUEST_MESSAGE_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { //?? encode_http_request(); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) HTTP_RESPONSE_MESSAGE_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) HTTP_RESPONSE_MESSAGE_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_http_response(p0, p1, p2, p5, p6, p7, p8, p9, p10, p13, p14, p15, p16, p17, p18); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) INTEGER_MEMORY_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) INTEGER_MEMORY_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_integer_vector(p0, p1, p2, p7, p8); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) KNOWLEDGE_PATH_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) KNOWLEDGE_PATH_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { overwrite_array(p0, p7, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p8, p1, (void*) NUMBER_0_INTEGER_MEMORY_MODEL, p1, p2); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) LATEX_APPLICATION_X_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) LATEX_APPLICATION_X_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_latex(p0, p1, p2, p7, p8); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) MODEL_DIAGRAM_TEXT_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) MODEL_DIAGRAM_TEXT_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_model_diagram(p0, p1, p2, p3); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) PLAIN_OPERATION_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) PLAIN_OPERATION_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { overwrite_array(p0, p7, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p8, p1, (void*) NUMBER_0_INTEGER_MEMORY_MODEL, p1, p2); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) PLAIN_TEXT_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) PLAIN_TEXT_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { overwrite_array(p0, p7, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p8, p1, (void*) NUMBER_0_INTEGER_MEMORY_MODEL, p1, p2); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) TERMINAL_BACKGROUND_COLOUR_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) TERMINAL_BACKGROUND_COLOUR_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_terminal_background(p0, p1, p2, p7, p8); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) TERMINAL_FOREGROUND_COLOUR_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) TERMINAL_FOREGROUND_COLOUR_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_terminal_foreground(p0, p1, p2, p7, p8); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) VULGAR_FRACTION_NUMBER_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) VULGAR_FRACTION_NUMBER_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_fraction(p0, p1, p2, p7, p8); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) X_WINDOW_SYSTEM_CYBOL_CHANNEL, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) X_WINDOW_SYSTEM_CYBOL_CHANNEL_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_x_window_system(p0, p1, p2, p7, p8, *NULL_POINTER_MEMORY_MODEL, *NULL_POINTER_MEMORY_MODEL, p19, p20); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) XDT_TEXT_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) XDT_TEXT_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_xdt(p0, p1, p2, p7, p8); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { compare_all_array((void*) &r, p21, (void*) YYYY_MM_DD_DATETIME_CYBOL_ABSTRACTION, (void*) EQUAL_PRIMITIVE_OPERATION_ABSTRACTION, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, p22, (void*) YYYY_MM_DD_DATETIME_CYBOL_ABSTRACTION_COUNT); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { encode_ddmmyyyy_date_time(p0, p1, p2, p7, p8); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { log_terminated_message((void*) WARNING_LEVEL_LOG_MODEL, (void*) L"Could not encode. The language is unknown."); } }