#include #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, "", 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, "", 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, "", 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, "", 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; }