Files
quickjs-prj/simple_demo.c
2026-02-02 12:48:25 +08:00

58 lines
1.9 KiB
C

#include <stdio.h>
#include "quickjs.h"
static JSValue c_add(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) {
double a, b;
JS_ToFloat64(ctx, &a, argv[0]);
JS_ToFloat64(ctx, &b, argv[1]);
return JS_NewFloat64(ctx, a + b);
}
int main(int argc, char **argv) {
JSRuntime *rt = JS_NewRuntime();
JSContext *ctx = JS_NewContext(rt);
printf("QuickJS Demo\n");
printf("============\n\n");
// Example 1: Simple evaluation
printf("Example 1: Simple evaluation\n");
JSValue result = JS_Eval(ctx, "1 + 2", 5, "<eval>", JS_EVAL_TYPE_GLOBAL);
double value;
JS_ToFloat64(ctx, &value, result);
printf("1 + 2 = %.0f\n", value);
JS_FreeValue(ctx, result);
// Example 2: String operations
printf("\nExample 2: String operations\n");
result = JS_Eval(ctx, "'Hello' + ' ' + 'World'", 22, "<eval>", JS_EVAL_TYPE_GLOBAL);
const char *str = JS_ToCString(ctx, result);
printf("String result: %s\n", str);
JS_FreeCString(ctx, str);
JS_FreeValue(ctx, result);
// Example 3: Function calls
printf("\nExample 3: Function calls\n");
result = JS_Eval(ctx, "function add(a,b){return a+b;} add(10,20)", 40, "<eval>", JS_EVAL_TYPE_GLOBAL);
JS_ToFloat64(ctx, &value, result);
printf("add(10,20) = %.0f\n", value);
JS_FreeValue(ctx, result);
// Example 4: C function registration
printf("\nExample 4: C function from JavaScript\n");
JSValue global = JS_GetGlobalObject(ctx);
JSValue func = JS_NewCFunction(ctx, c_add, "c_add", 2);
JS_SetPropertyStr(ctx, global, "c_add", func);
JS_FreeValue(ctx, global);
result = JS_Eval(ctx, "c_add(5,15)", 11, "<eval>", JS_EVAL_TYPE_GLOBAL);
JS_ToFloat64(ctx, &value, result);
printf("c_add(5,15) = %.0f\n", value);
JS_FreeValue(ctx, result);
printf("\nDemo completed successfully!\n");
JS_FreeContext(ctx);
JS_FreeRuntime(rt);
return 0;
}