58 lines
1.9 KiB
C
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;
|
|
} |