{ 1, .binary_op = GCC_JIT_BINARY_OP_PLUS },
{ 1, .binary_op = GCC_JIT_BINARY_OP_MINUS },
+ { 1, .binary_op = GCC_JIT_BINARY_OP_MULT },
{ 1, .binary_op = GCC_JIT_BINARY_OP_DIVIDE },
{ 1, .binary_op = GCC_JIT_BINARY_OP_MODULO },
{ 1, .binary_op = GCC_JIT_BINARY_OP_LOGICAL_AND },
gen_context -> gcc_result = gcc_result;
ctx -> mod -> begin = gcc_jit_result_get_code(gcc_result, "BEGIN");
}
+
+void
+oberon_generator_dump(oberon_context_t * ctx, char * path)
+{
+ gen_context_t * gen_context = ctx -> gen_context;
+ gcc_jit_context * gcc_context = gen_context -> gcc_context;
+ gcc_jit_context_dump_to_file(gcc_context, path, 0);
+}
*/
void oberon_generate_code(oberon_context_t * ctx);
+void oberon_generator_dump(oberon_context_t * ctx, char * path);
+
- нету автокаста в присвоении и передачи параметров
- нету локальных объявлений в процедурах
- нету свёртки констант
-- нету полного контроля return
-- нету типа procedure
+- нету не работает присваивание к переменным-процедурам.
- нету указателей
- нету расширения типа
- нету var-параметров в генераторе
oberon_error(ctx, "incompatible size");
}
}
+ else if(pref -> class == OBERON_TYPE_RECORD)
+ {
+ if(expr -> result != pref)
+ {
+ printf("oberon_autocast_to: rec %p != %p\n", expr -> result, pref);
+ oberon_error(ctx, "incompatible record types");
+ }
+ }
// TODO cast
#include "oberon.h"
+#include "generator.h"
#include <assert.h>
static const char source[] =
"MODULE Test;"
- "CONST"
- " con = 3;"
""
"TYPE"
" MyInt = INTEGER;"
- " MyArr = ARRAY con OF MyInt;"
- " MyRec = RECORD a : MyInt; b : MyInt; END;"
- " MyProc = PROCEDURE;"
- ""
- "VAR"
- " k : INTEGER;"
- " i : INTEGER;"
- " b : BOOLEAN;"
- " arr : MyArr;"
- " rec : MyRec;"
- " proc : MyProc;"
- ""
- "PROCEDURE Tier;"
- "BEGIN"
- " k := 314 + con;"
- "END Tier;"
- ""
- "PROCEDURE Tier2(x : INTEGER; y : INTEGER);"
- "BEGIN"
- " k := x + y;"
- "END Tier2;"
- ""
- "PROCEDURE Tier3(x : INTEGER) : INTEGER;"
- "BEGIN"
- " RETURN x * x * x;"
- "END Tier3;"
+ " MyRec = RECORD"
+ " a : MyInt;"
+ " END;"
+ " MyRecPtr = POINTER TO MyRec;"
""
"BEGIN"
- " k := 1;"
- " i := k;"
- " b := (TRUE # FALSE);"
- " Tier();"
- " Tier2(21, 13);"
- " k := Tier3(2);"
- " arr[0] := 1;"
- " arr[1] := arr[0];"
- " rec.a := 1;"
- " rec.b := rec.a;"
+ " "
"END Test."
;
ctx = oberon_create_context();
mod = oberon_compile_module(ctx, source);
//mod -> begin();
+ oberon_generator_dump(ctx, "dump.txt");
oberon_destroy_context(ctx);
return 0;
}