DEADSOFTWARE

Для обычных процедур всегда генерируется return
[dsw-obn.git] / src / backends / jvm / generator-jvm-asm.c
index 4aee145479330f49cb12751047bf244bc14b72a4..4d0e471bf5abc0ad7027da13c4c5d8c4f35819f1 100644 (file)
@@ -8,7 +8,6 @@
 
 #include <gc.h>
 
-#include "../../../include/oberon.h"
 #include "../../oberon-internals.h"
 #include "generator-jvm.h"
 #include "generator-jvm-abi.h"
@@ -70,15 +69,20 @@ jvm_generate_function_end(gen_proc_t * p)
 }
 
 struct gen_class *
-jvm_create_class(char * full_name)
+jvm_create_class(const char * dir, char * full_name)
 {
        struct gen_class * class = GC_MALLOC(sizeof *class);
        memset(class, 0, sizeof *class);
 
-       char * fname = new_string("%s.j", full_name);
+       char * fname = new_string("%s/%s.j", dir, full_name);
        class -> full_name = new_string(full_name);
        class -> fp = fopen(fname, "w");
-       assert(class -> fp);
+       class -> dir = new_string(dir);
+
+       if(class -> fp == NULL)
+       {
+               gen_error("unable to create file %s", fname);
+       }
 
        return class;
 }
@@ -231,11 +235,11 @@ jvm_generate_push_float(gen_proc_t * p, double f, int size)
                {
                        jvm_generate(p, 0, 1, "fconst_0");
                }
-               if(f == 1.0)
+               else if(f == 1.0)
                {
                        jvm_generate(p, 0, 1, "fconst_1");
                }
-               if(f == 2.0)
+               else if(f == 2.0)
                {
                        jvm_generate(p, 0, 1, "fconst_2");
                }
@@ -250,7 +254,7 @@ jvm_generate_push_float(gen_proc_t * p, double f, int size)
                {
                        jvm_generate(p, 0, 2, "dconst_0");
                }
-               if(f == 1.0)
+               else if(f == 1.0)
                {
                        jvm_generate(p, 0, 2, "dconst_1");
                }