}
else if(type -> class == OBERON_TYPE_ARRAY)
{
- if(type -> dim != 1)
- {
- oberon_error(ctx, "multidimension and open arrays not supported");
- }
-
gen_type_t * gen_base = type -> base -> gen_type;
gcc_jit_type * gcc_base = gen_base -> gcc_type;
-
gcc_type = gcc_jit_context_new_array_type(gcc_context, NULL, gcc_base, type -> size);
}
else if(type -> class == OBERON_TYPE_RECORD)
oberon_error(ctx, "not array");
}
- int dim = desig -> item.var -> type -> dim;
- if(num_indexes != dim)
- {
- oberon_error(ctx, "dimesions not matched");
- }
+// int dim = desig -> item.var -> type -> dim;
+// if(num_indexes != dim)
+// {
+// oberon_error(ctx, "dimesions not matched");
+// }
oberon_type_t * base = desig -> item.var -> type -> base;
}
static void
-oberon_make_array_type(oberon_context_t * ctx, int dim, oberon_item_t * size, oberon_type_t * base, oberon_type_t ** type)
+oberon_make_array_type(oberon_context_t * ctx, oberon_item_t * size, oberon_type_t * base, oberon_type_t ** type)
{
- assert(dim == 1);
if(size -> mode != MODE_INTEGER)
{
oberon_error(ctx, "requires integer constant");
oberon_type_t * arr;
arr = *type;
arr -> class = OBERON_TYPE_ARRAY;
- arr -> dim = dim;
arr -> size = size -> integer;
arr -> base = base;
}
base = oberon_new_type_ptr(OBERON_TYPE_VOID);
oberon_type(ctx, &base);
- oberon_make_array_type(ctx, 1, size, base, type);
+ oberon_make_array_type(ctx, size, base, type);
}
else if(ctx -> token == RECORD)
{
}
else if(ctx -> token == PROCEDURE)
{
+ oberon_open_scope(ctx);
oberon_assert_token(ctx, PROCEDURE);
oberon_opt_formal_pars(ctx, type);
+ oberon_close_scope(ctx -> decl);
}
else
{
}
else if(type -> class == OBERON_TYPE_ARRAY)
{
- oberon_generator_init_type(ctx, type);
oberon_initialize_type(ctx, type -> base);
+ oberon_generator_init_type(ctx, type);
}
else if(type -> class == OBERON_TYPE_RECORD)
{
static const char source[] =
"MODULE Test;"
"TYPE"
- " MyArr = ARRAY 3 OF INTEGER;"
- " MyArrPtr = POINTER TO MyArr;"
- " MyRec = POINTER TO MyRecDesc;"
- " MyRecDesc = RECORD next : POINTER TO MyRecDesc END;"
- ""
+ " Int = INTEGER;"
+ " PArray2D = POINTER TO Array2D;"
+ " Array2D = ARRAY 3 OF ARRAY 3 OF INTEGER;"
+ " PAP2D = ARRAY 4 OF POINTER TO ARRAY 5 OF INTEGER;"
+ " Object = POINTER TO ObjectDesc;"
+ " ObjectDesc = RECORD"
+ " value : Array2D;"
+ " value2 : PArray2D;"
+ " doStuff : Proc;"
+ " next : Object;"
+ " END;"
+ " Proc = PROCEDURE(self : Object; i : Int);"
"VAR"
- " a : MyArr;"
- " b : MyArrPtr;"
- " c : MyRec;"
- " d : MyRecDesc;"
- ""
- "BEGIN"
+ " i : Int;"
+ " a2 : Array2D;"
+ " p2 : PArray2D;"
+ " po : Object;"
+ " do : ObjectDesc;"
+ " stuffProc : Proc;"
+ " pap2 : PAP2D;"
+ " "
+ "BEGIN;"
"END Test."
;