txlyre 16 godzin temu
rodzic
commit
7696ce85c7
1 zmienionych plików z 13 dodań i 3 usunięć
  1. 13 3
      qic.c

+ 13 - 3
qic.c

@@ -30,7 +30,12 @@ int is_directory(char *path)
 #endif
 }
 
-#define QIC_VERSION "qic v01 " __DATE__
+#define __STR0(x) #x
+#define __STR1(x) __STR0(x)
+
+#define LIBQIRT_VER 1
+
+#define QIC_VER "qic v1 (libqirt>=" __STR1(LIBQIRT_VER) ") " __DATE__
 
 size_t GID = 0;
 char *PREFIX = NULL;
@@ -7722,7 +7727,7 @@ char *compile(char *source, list_t *required)
   buffer_t *gbuf = buffer_new();
   buffer_t *buf = buffer_new();
 
-  compile_into("const __QIC = \"" QIC_VERSION "\"", gbuf, buf, ctx, ltab, lstk,
+  compile_into("const __QIC = \"" QIC_VER "\"", gbuf, buf, ctx, ltab, lstk,
                sstk, lbl);
   compile_into("macro E(x) {\n$set r E(x)\n$if r = nil\n$x\n$else\n$r\n$endif}",
                gbuf, buf, ctx, ltab, lstk, sstk, lbl);
@@ -7762,6 +7767,11 @@ char *compile(char *source, list_t *required)
   buffer_appendb(rbuf, gbuf);
 
   buffer_appends(rbuf, "int main(int argc, char **argv) {\n");
+  buffer_fmt(rbuf, "if (qi_rt_version() < %luUL) {\n", LIBQIRT_VER);
+  buffer_fmt(rbuf, "  fprintf(stderr, \"fatal: unsupported libqirt version\\n\");\n");
+  buffer_fmt(rbuf, "  abort();\n");
+  buffer_fmt(rbuf, "}\n\n");
+  
   buffer_appends(rbuf, "qi_state_t *state;\n");
 
   if (DEBUG)
@@ -7881,7 +7891,7 @@ int main(int argc, char **argv)
                strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-v") == 0 ||
                strcmp(argv[i], "--version") == 0)
       {
-        fprintf(stderr, "qilang compiler, " QIC_VERSION "\n");
+        fprintf(stderr, "qilang compiler, " QIC_VER "\n");
         fprintf(
             stderr,
             "usage: %s [-dsh] [-p prefix] [-o out.c] [input0.qi input1.qi ... inputN.qi]\n",