1 /*
2 * Very simple example program
3 */
4
5 #include "duktape.h"
6
native_print(duk_context * ctx)7 static duk_ret_t native_print(duk_context *ctx) {
8 duk_push_string(ctx, " ");
9 duk_insert(ctx, 0);
10 duk_join(ctx, duk_get_top(ctx) - 1);
11 printf("%s\n", duk_safe_to_string(ctx, -1));
12 return 0;
13 }
14
native_adder(duk_context * ctx)15 static duk_ret_t native_adder(duk_context *ctx) {
16 int i;
17 int n = duk_get_top(ctx); /* #args */
18 double res = 0.0;
19
20 for (i = 0; i < n; i++) {
21 res += duk_to_number(ctx, i);
22 }
23
24 duk_push_number(ctx, res);
25 return 1; /* one return value */
26 }
27
main(int argc,char * argv[])28 int main(int argc, char *argv[]) {
29 duk_context *ctx = duk_create_heap_default();
30
31 (void) argc; (void) argv; /* suppress warning */
32
33 duk_push_c_function(ctx, native_print, DUK_VARARGS);
34 duk_put_global_string(ctx, "print");
35 duk_push_c_function(ctx, native_adder, DUK_VARARGS);
36 duk_put_global_string(ctx, "adder");
37
38 duk_eval_string(ctx, "print('Hello world!');");
39
40 duk_eval_string(ctx, "print('2+3=' + adder(2, 3));");
41 duk_pop(ctx); /* pop eval result */
42
43 duk_destroy_heap(ctx);
44
45 return 0;
46 }
47