aboutsummaryrefslogtreecommitdiff
path: root/libtcc_test.c
diff options
context:
space:
mode:
authorbellard <bellard>2002-05-13 22:58:22 +0000
committerbellard <bellard>2002-05-13 22:58:22 +0000
commit1e14c90c7ab78e9669733c82c1cee280efab1a3b (patch)
tree79f426d9b6cfec74ff995efd8e38e74573f85be9 /libtcc_test.c
parent7feafd2bbab0375108fd47d6af9b6707aae50fa2 (diff)
downloadtinycc-1e14c90c7ab78e9669733c82c1cee280efab1a3b.tar.gz
tinycc-1e14c90c7ab78e9669733c82c1cee280efab1a3b.tar.bz2
added libtcc
Diffstat (limited to 'libtcc_test.c')
-rw-r--r--libtcc_test.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/libtcc_test.c b/libtcc_test.c
new file mode 100644
index 0000000..db85bd5
--- /dev/null
+++ b/libtcc_test.c
@@ -0,0 +1,62 @@
+/*
+ * Simple Test program for libtcc
+ *
+ * libtcc can be useful to use tcc as a "backend" for a code generator.
+ */
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <libtcc.h>
+
+/* this function is called by the generated code */
+int add(int a, int b)
+{
+ return a + b;
+}
+
+char my_program[] =
+"int fib(int n)\n"
+"{\n"
+" if (n <= 2)\n"
+" return 1;\n"
+" else\n"
+" return fib(n-1) + fib(n-2);\n"
+"}\n"
+"\n"
+"int main(int argc, char **argv)\n"
+"{\n"
+" int n;\n"
+" n = atoi(argv[1]);\n"
+" printf(\"Hello World!\\n\");\n"
+" printf(\"fib(%d) = %d\\n\", n, fib(n));\n"
+" printf(\"add(%d, %d) = %d\\n\", n, 2 * n, add(n, 2 * n));\n"
+" return 0;\n"
+"}\n";
+
+int main(int argc, char **argv)
+{
+ TCCState *s;
+ char *args[3];
+
+ s = tcc_new();
+ if (!s) {
+ fprintf(stderr, "Could not create tcc state\n");
+ exit(1);
+ }
+
+ tcc_compile_string(s, my_program);
+
+ /* as a test, we add a symbol that the compiled program can be
+ linked with. You can have a similar result by opening a dll
+ with tcc_add_dll(() and using its symbols directly. */
+ tcc_add_symbol(s, "add", (void *)&add);
+
+ args[0] = "";
+ args[1] = "32";
+ args[2] = NULL;
+
+ tcc_run(s, 2, args);
+
+ tcc_delete(s);
+ return 0;
+}