Index: v8c-test.c |
diff --git a/v8c-test.c b/v8c-test.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bd4e30588277f2e062988c42c1ac7b5b31cebee9 |
--- /dev/null |
+++ b/v8c-test.c |
@@ -0,0 +1,89 @@ |
+#include "include/v8c.h" |
+#include <stdio.h> |
+ |
+const bool true = 1; |
+const bool false = 0; |
+ |
+static void print_value(V8Handle v) { |
+ V8StringUtf8Value* utf8 = v8_string_utf8_value_new(v); |
+ printf("%s", v8_string_utf8_value_chars(utf8)); |
+ v8_string_utf8_value_free(utf8); |
+} |
+ |
+// A callback from JavaScript to print verbosely. |
+static V8Handle debug_print_cb(const V8Arguments* args) { |
+ int i, length = v8_arguments_length(args); |
+ printf("debug_print called with %d args\n", length); |
+ for (i = 0; i < length; ++i) { |
+ printf("%d: ", i); |
+ print_value(v8_arguments_get(args, i)); |
+ printf("\n"); |
+ } |
+ return v8_undefined(); |
+} |
+ |
+// A callback from JavaScript to print concisely. |
+static V8Handle print_cb(const V8Arguments* args) { |
+ int i, length = v8_arguments_length(args); |
+ for (i = 0; i < length; ++i) { |
+ if (i > 0) |
+ printf(" "); |
+ print_value(v8_arguments_get(args, i)); |
+ } |
+ printf("\n"); |
+ return v8_undefined(); |
+} |
+ |
+void report_exception(V8TryCatch* try_catch) { |
+ V8HandleScope* handle_scope = v8_handle_scope_new(); |
+ V8StringUtf8Value* exception = |
+ v8_string_utf8_value_new(v8_try_catch_exception(try_catch)); |
+ printf("%s\n", v8_string_utf8_value_chars(exception)); |
+ v8_string_utf8_value_free(exception); |
+ v8_handle_scope_free(handle_scope); |
+} |
+ |
+int main(int argc, char** argv) { |
+ V8HandleScope* handle_scope; |
+ V8Handle print, debug_print, global, context, script; |
+ V8TryCatch* try_catch; |
+ |
+ v8_set_flags_from_command_line(&argc, argv, true); |
+ |
+ if (argc < 2) { |
+ printf("usage: %s <javascript>\n", argv[0]); |
+ return 1; |
+ } |
+ const char* code = argv[1]; |
+ |
+ handle_scope = v8_handle_scope_new(); |
+ print = v8_function_template_new(print_cb); |
+ debug_print = v8_function_template_new(debug_print_cb); |
+ global = v8_object_template_new(); |
+ v8_template_set(global, v8_string_new_utf8("debug_print", -1), debug_print); |
+ v8_template_set(global, v8_string_new_utf8("print", -1), print); |
+ |
+ context = v8_context_new(NULL, global); |
+ v8_context_enter(context); |
+ |
+ try_catch = v8_try_catch_new(); |
+ script = v8_script_compile(v8_string_new_utf8(code, -1)); |
+ if (v8_handle_is_empty(script)) { |
+ report_exception(try_catch); |
+ } else { |
+ V8Handle result = v8_script_run(script); |
+ if (v8_handle_is_empty(result)) { |
+ report_exception(try_catch); |
+ } else { |
+ printf("result is: "); |
+ print_value(result); |
+ printf("\n"); |
+ } |
+ } |
+ v8_try_catch_free(try_catch); |
+ |
+ v8_context_exit(context); |
+ v8_handle_scope_free(handle_scope); |
+ |
+ return 0; |
+} |