DEADSOFTWARE

Добавлены строки в отладочную информацию класса (быстрохак)
[dsw-obn.git] / src / oberon-type-compat.c
index 3da62edc2bb5b059b7ee20b90f20c238400de495..ab5419d7d444c39fc645df0c04704756cb0678fd 100644 (file)
@@ -7,11 +7,9 @@
 #include <stdbool.h>
 #include <math.h>
 
-#include "../include/oberon.h"
-
-#include "oberon-common.h"
 #include "oberon-internals.h"
 #include "oberon-type-compat.h"
+#include "oberon-common.h"
 
 bool
 oberon_is_array_type(oberon_type_t * t)
@@ -302,7 +300,7 @@ oberon_is_assignment_compatible_expressions(oberon_expr_t * e, oberon_type_t * T
        /*      совпадают с параметрами Tv. */
        /* Доп: Tv - символ, е - строковая константа из одного символа */
 
-       /* SYSTEM: Ð¿еременным типа BYTE можно присваивать значения переменных типа CHAR или SHORTINT. */
+       /* SYSTEM: Ð\9fеременным типа BYTE можно присваивать значения переменных типа CHAR или SHORTINT. */
        /* SYSTEM: Переменным типа PTR могут быть присвоены значения переменных-указателей любого типа. */
 
        oberon_type_t * Te = e -> result;
@@ -422,8 +420,8 @@ oberon_is_compatible_bin_expr_types(int token, oberon_type_t * a, oberon_type_t
                {
                        return true;
                }
-               else if((oberon_is_nil_type(a) || oberon_is_pointer_to_record(a) || oberon_is_procedure_type(a))
-                       && (oberon_is_nil_type(b) || oberon_is_pointer_to_record(b) || oberon_is_procedure_type(b)))
+               else if((oberon_is_nil_type(a) || oberon_is_pointer_type(a) || oberon_is_procedure_type(a))
+                       && (oberon_is_nil_type(b) || oberon_is_pointer_type(b) || oberon_is_procedure_type(b)))
                {
                        return true;
                }
@@ -476,7 +474,8 @@ oberon_is_compatible_var_param(oberon_type_t * Tf, oberon_type_t * Ta)
        /* фактический параметр может быть указателем любого типа. */
 
        return oberon_is_some_types(Tf, Ta)
-               || (oberon_is_record_type(Tf) && oberon_extension_of(Ta, Tf))
+               || (oberon_is_record_type(Tf) && oberon_extension_of(Tf, Ta))
+               || (oberon_is_system_byte_type(Tf) && (oberon_is_char_type(Ta) || oberon_is_byte_type(Ta)))
                || (oberon_is_array_of_system_byte_type(Tf))
                || (oberon_is_system_ptr_type(Tf));
 }