diff options
| author | bellard <bellard> | 2002-05-13 22:58:22 +0000 |
|---|---|---|
| committer | bellard <bellard> | 2002-05-13 22:58:22 +0000 |
| commit | 1e14c90c7ab78e9669733c82c1cee280efab1a3b (patch) | |
| tree | 79f426d9b6cfec74ff995efd8e38e74573f85be9 /libtcc_test.c | |
| parent | 7feafd2bbab0375108fd47d6af9b6707aae50fa2 (diff) | |
| download | tinycc-1e14c90c7ab78e9669733c82c1cee280efab1a3b.tar.gz tinycc-1e14c90c7ab78e9669733c82c1cee280efab1a3b.tar.bz2 | |
added libtcc
Diffstat (limited to 'libtcc_test.c')
| -rw-r--r-- | libtcc_test.c | 62 |
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; +} |
