diff --git a/src/oberon.c b/src/oberon.c
index 83f39cd2cebea39ac30fd54f1125ba11151bb045..1b7f5d9b19315aa614ef96e1665f21c11054da9b 100644 (file)
--- a/src/oberon.c
+++ b/src/oberon.c
@@ -1088,6 +1088,12 @@ oberon_cast_expr(oberon_context_t * ctx, oberon_expr_t * expr, oberon_type_t * p
cast = oberon_new_item(MODE_CHAR, ctx -> char_type, true);
cast -> item.integer = expr -> item.string[0];
}
+ else if(oberon_is_record_type(pref) || oberon_is_pointer_to_record(pref))
+ {
+ assert(expr -> is_item);
+ cast = oberon_new_item(MODE_AS, pref, expr -> read_only);
+ cast -> item.parent = (oberon_item_t *) expr;
+ }
else if(!oberon_is_some_types(expr -> result, pref))
{
cast = oberon_new_operator(OP_CAST, pref, expr, NULL);
@@ -3940,7 +3946,6 @@ oberon_make_inc_call(oberon_context_t * ctx, int num_args, oberon_expr_t * list_
{
step = list_args -> next;
oberon_check_src(ctx, step);
- oberon_check_const(ctx, step);
if(!oberon_is_integer_type(step -> result))
{
oberon_error(ctx, "expect integer");
@@ -4055,7 +4060,6 @@ oberon_make_dec_call(oberon_context_t * ctx, int num_args, oberon_expr_t * list_
{
step = list_args -> next;
oberon_check_src(ctx, step);
- oberon_check_const(ctx, step);
if(!oberon_is_integer_type(step -> result))
{
oberon_error(ctx, "expect integer");