| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 3e2746f commit 48a634e
52 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -4,35 +4,35 @@ | |||
| 4 | 4 | static napi_value Add(napi_env env, napi_callback_info info) { | |
| 5 | 5 | size_t argc = 2; | |
| 6 | 6 | napi_value args[2]; | |
| 7 | - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); | ||
| 7 | + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); | ||
| 8 | 8 | ||
| 9 | - NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments"); | ||
| 9 | + NODE_API_ASSERT(env, argc >= 2, "Wrong number of arguments"); | ||
| 10 | 10 | ||
| 11 | 11 | napi_valuetype valuetype0; | |
| 12 | - NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0)); | ||
| 12 | + NODE_API_CALL(env, napi_typeof(env, args[0], &valuetype0)); | ||
| 13 | 13 | ||
| 14 | 14 | napi_valuetype valuetype1; | |
| 15 | - NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1)); | ||
| 15 | + NODE_API_CALL(env, napi_typeof(env, args[1], &valuetype1)); | ||
| 16 | 16 | ||
| 17 | - NAPI_ASSERT(env, valuetype0 == napi_number && valuetype1 == napi_number, | ||
| 17 | + NODE_API_ASSERT(env, valuetype0 == napi_number && valuetype1 == napi_number, | ||
| 18 | 18 | "Wrong argument type. Numbers expected."); | |
| 19 | 19 | ||
| 20 | 20 | double value0; | |
| 21 | - NAPI_CALL(env, napi_get_value_double(env, args[0], &value0)); | ||
| 21 | + NODE_API_CALL(env, napi_get_value_double(env, args[0], &value0)); | ||
| 22 | 22 | ||
| 23 | 23 | double value1; | |
| 24 | - NAPI_CALL(env, napi_get_value_double(env, args[1], &value1)); | ||
| 24 | + NODE_API_CALL(env, napi_get_value_double(env, args[1], &value1)); | ||
| 25 | 25 | ||
| 26 | 26 | napi_value sum; | |
| 27 | - NAPI_CALL(env, napi_create_double(env, value0 + value1, &sum)); | ||
| 27 | + NODE_API_CALL(env, napi_create_double(env, value0 + value1, &sum)); | ||
| 28 | 28 | ||
| 29 | 29 | return sum; | |
| 30 | 30 | } | |
| 31 | 31 | ||
| 32 | 32 | EXTERN_C_START | |
| 33 | 33 | napi_value Init(napi_env env, napi_value exports) { | |
| 34 | - napi_property_descriptor desc = DECLARE_NAPI_PROPERTY("add", Add); | ||
| 35 | - NAPI_CALL(env, napi_define_properties(env, exports, 1, &desc)); | ||
| 34 | + napi_property_descriptor desc = DECLARE_NODE_API_PROPERTY("add", Add); | ||
| 35 | + NODE_API_CALL(env, napi_define_properties(env, exports, 1, &desc)); | ||
| 36 | 36 | return exports; | |
| 37 | 37 | } | |
| 38 | 38 | EXTERN_C_END | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -5,53 +5,53 @@ | |||
| 5 | 5 | static napi_value RunCallback(napi_env env, napi_callback_info info) { | |
| 6 | 6 | size_t argc = 2; | |
| 7 | 7 | napi_value args[2]; | |
| 8 | - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); | ||
| 8 | + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); | ||
| 9 | 9 | ||
| 10 | - NAPI_ASSERT(env, argc == 1, | ||
| 10 | + NODE_API_ASSERT(env, argc == 1, | ||
| 11 | 11 | "Wrong number of arguments. Expects a single argument."); | |
| 12 | 12 | ||
| 13 | 13 | napi_valuetype valuetype0; | |
| 14 | - NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0)); | ||
| 15 | - NAPI_ASSERT(env, valuetype0 == napi_function, | ||
| 14 | + NODE_API_CALL(env, napi_typeof(env, args[0], &valuetype0)); | ||
| 15 | + NODE_API_ASSERT(env, valuetype0 == napi_function, | ||
| 16 | 16 | "Wrong type of arguments. Expects a function as first argument."); | |
| 17 | 17 | ||
| 18 | 18 | napi_valuetype valuetype1; | |
| 19 | - NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1)); | ||
| 20 | - NAPI_ASSERT(env, valuetype1 == napi_undefined, | ||
| 19 | + NODE_API_CALL(env, napi_typeof(env, args[1], &valuetype1)); | ||
| 20 | + NODE_API_ASSERT(env, valuetype1 == napi_undefined, | ||
| 21 | 21 | "Additional arguments should be undefined."); | |
| 22 | 22 | ||
| 23 | 23 | napi_value argv[1]; | |
| 24 | 24 | const char* str = "hello world"; | |
| 25 | 25 | size_t str_len = strlen(str); | |
| 26 | - NAPI_CALL(env, napi_create_string_utf8(env, str, str_len, argv)); | ||
| 26 | + NODE_API_CALL(env, napi_create_string_utf8(env, str, str_len, argv)); | ||
| 27 | 27 | ||
| 28 | 28 | napi_value global; | |
| 29 | - NAPI_CALL(env, napi_get_global(env, &global)); | ||
| 29 | + NODE_API_CALL(env, napi_get_global(env, &global)); | ||
| 30 | 30 | ||
| 31 | 31 | napi_value cb = args[0]; | |
| 32 | - NAPI_CALL(env, napi_call_function(env, global, cb, 1, argv, NULL)); | ||
| 32 | + NODE_API_CALL(env, napi_call_function(env, global, cb, 1, argv, NULL)); | ||
| 33 | 33 | ||
| 34 | 34 | return NULL; | |
| 35 | 35 | } | |
| 36 | 36 | ||
| 37 | 37 | static napi_value RunCallbackWithRecv(napi_env env, napi_callback_info info) { | |
| 38 | 38 | size_t argc = 2; | |
| 39 | 39 | napi_value args[2]; | |
| 40 | - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); | ||
| 40 | + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); | ||
| 41 | 41 | ||
| 42 | 42 | napi_value cb = args[0]; | |
| 43 | 43 | napi_value recv = args[1]; | |
| 44 | - NAPI_CALL(env, napi_call_function(env, recv, cb, 0, NULL, NULL)); | ||
| 44 | + NODE_API_CALL(env, napi_call_function(env, recv, cb, 0, NULL, NULL)); | ||
| 45 | 45 | return NULL; | |
| 46 | 46 | } | |
| 47 | 47 | ||
| 48 | 48 | EXTERN_C_START | |
| 49 | 49 | napi_value Init(napi_env env, napi_value exports) { | |
| 50 | 50 | napi_property_descriptor desc[2] = { | |
| 51 | - DECLARE_NAPI_PROPERTY("RunCallback", RunCallback), | ||
| 52 | - DECLARE_NAPI_PROPERTY("RunCallbackWithRecv", RunCallbackWithRecv), | ||
| 51 | + DECLARE_NODE_API_PROPERTY("RunCallback", RunCallback), | ||
| 52 | + DECLARE_NODE_API_PROPERTY("RunCallbackWithRecv", RunCallbackWithRecv), | ||
| 53 | 53 | }; | |
| 54 | - NAPI_CALL(env, napi_define_properties(env, exports, 2, desc)); | ||
| 54 | + NODE_API_CALL(env, napi_define_properties(env, exports, 2, desc)); | ||
| 55 | 55 | return exports; | |
| 56 | 56 | } | |
| 57 | 57 | EXTERN_C_END | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -4,19 +4,19 @@ | |||
| 4 | 4 | static napi_value CreateObject(napi_env env, napi_callback_info info) { | |
| 5 | 5 | size_t argc = 1; | |
| 6 | 6 | napi_value args[1]; | |
| 7 | - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); | ||
| 7 | + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL)); | ||
| 8 | 8 | ||
| 9 | 9 | napi_value obj; | |
| 10 | - NAPI_CALL(env, napi_create_object(env, &obj)); | ||
| 10 | + NODE_API_CALL(env, napi_create_object(env, &obj)); | ||
| 11 | 11 | ||
| 12 | - NAPI_CALL(env, napi_set_named_property(env, obj, "msg", args[0])); | ||
| 12 | + NODE_API_CALL(env, napi_set_named_property(env, obj, "msg", args[0])); | ||
| 13 | 13 | ||
| 14 | 14 | return obj; | |
| 15 | 15 | } | |
| 16 | 16 | ||
| 17 | 17 | EXTERN_C_START | |
| 18 | 18 | napi_value Init(napi_env env, napi_value exports) { | |
| 19 | - NAPI_CALL(env, | ||
| 19 | + NODE_API_CALL(env, | ||
| 20 | 20 | napi_create_function(env, "exports", -1, CreateObject, NULL, &exports)); | |
| 21 | 21 | return exports; | |
| 22 | 22 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -3,20 +3,20 @@ | |||
| 3 | 3 | ||
| 4 | 4 | static napi_value MyFunction(napi_env env, napi_callback_info info) { | |
| 5 | 5 | napi_value str; | |
| 6 | - NAPI_CALL(env, napi_create_string_utf8(env, "hello world", -1, &str)); | ||
| 6 | + NODE_API_CALL(env, napi_create_string_utf8(env, "hello world", -1, &str)); | ||
| 7 | 7 | return str; | |
| 8 | 8 | } | |
| 9 | 9 | ||
| 10 | 10 | static napi_value CreateFunction(napi_env env, napi_callback_info info) { | |
| 11 | 11 | napi_value fn; | |
| 12 | - NAPI_CALL(env, | ||
| 12 | + NODE_API_CALL(env, | ||
| 13 | 13 | napi_create_function(env, "theFunction", -1, MyFunction, NULL, &fn)); | |
| 14 | 14 | return fn; | |
| 15 | 15 | } | |
| 16 | 16 | ||
| 17 | 17 | EXTERN_C_START | |
| 18 | 18 | napi_value Init(napi_env env, napi_value exports) { | |
| 19 | - NAPI_CALL(env, | ||
| 19 | + NODE_API_CALL(env, | ||
| 20 | 20 | napi_create_function(env, "exports", -1, CreateFunction, NULL, &exports)); | |
| 21 | 21 | return exports; | |
| 22 | 22 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -19,52 +19,50 @@ void MyObject::Init(napi_env env, napi_value exports) { | |||
| 19 | 19 | { "value", nullptr, nullptr, GetValue, SetValue, 0, napi_default, 0 }, | |
| 20 | 20 | { "valueReadonly", nullptr, nullptr, GetValue, nullptr, 0, napi_default, | |
| 21 | 21 | 0 }, | |
| 22 | - DECLARE_NAPI_PROPERTY("plusOne", PlusOne), | ||
| 23 | - DECLARE_NAPI_PROPERTY("multiply", Multiply), | ||
| 22 | + DECLARE_NODE_API_PROPERTY("plusOne", PlusOne), | ||
| 23 | + DECLARE_NODE_API_PROPERTY("multiply", Multiply), | ||
| 24 | 24 | }; | |
| 25 | 25 | ||
| 26 | 26 | napi_value cons; | |
| 27 | - NAPI_CALL_RETURN_VOID(env, napi_define_class( | ||
| 27 | + NODE_API_CALL_RETURN_VOID(env, napi_define_class( | ||
| 28 | 28 | env, "MyObject", -1, New, nullptr, | |
| 29 | 29 | sizeof(properties) / sizeof(napi_property_descriptor), | |
| 30 | 30 | properties, &cons)); | |
| 31 | 31 | ||
| 32 | - NAPI_CALL_RETURN_VOID(env, napi_create_reference(env, cons, 1, &constructor)); | ||
| 32 | + NODE_API_CALL_RETURN_VOID(env, | ||
| 33 | + napi_create_reference(env, cons, 1, &constructor)); | ||
| 33 | 34 | ||
| 34 | - NAPI_CALL_RETURN_VOID(env, | ||
| 35 | + NODE_API_CALL_RETURN_VOID(env, | ||
| 35 | 36 | napi_set_named_property(env, exports, "MyObject", cons)); | |
| 36 | 37 | } | |
| 37 | 38 | ||
| 38 | 39 | napi_value MyObject::New(napi_env env, napi_callback_info info) { | |
| 39 | 40 | napi_value new_target; | |
| 40 | - NAPI_CALL(env, napi_get_new_target(env, info, &new_target)); | ||
| 41 | + NODE_API_CALL(env, napi_get_new_target(env, info, &new_target)); | ||
| 41 | 42 | bool is_constructor = (new_target != nullptr); | |
| 42 | 43 | ||
| 43 | 44 | size_t argc = 1; | |
| 44 | 45 | napi_value args[1]; | |
| 45 | 46 | napi_value _this; | |
| 46 | - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &_this, nullptr)); | ||
| 47 | + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, &_this, nullptr)); | ||
| 47 | 48 | ||
| 48 | 49 | if (is_constructor) { | |
| 49 | 50 | // Invoked as constructor: `new MyObject(...)` | |
| 50 | 51 | double value = 0; | |
| 51 | 52 | ||
| 52 | 53 | napi_valuetype valuetype; | |
| 53 | - NAPI_CALL(env, napi_typeof(env, args[0], &valuetype)); | ||
| 54 | + NODE_API_CALL(env, napi_typeof(env, args[0], &valuetype)); | ||
| 54 | 55 | ||
| 55 | 56 | if (valuetype != napi_undefined) { | |
| 56 | - NAPI_CALL(env, napi_get_value_double(env, args[0], &value)); | ||
| 57 | + NODE_API_CALL(env, napi_get_value_double(env, args[0], &value)); | ||
| 57 | 58 | } | |
| 58 | 59 | ||
| 59 | 60 | MyObject* obj = new MyObject(value); | |
| 60 | 61 | ||
| 61 | 62 | obj->env_ = env; | |
| 62 | - NAPI_CALL(env, napi_wrap(env, | ||
| 63 | - _this, | ||
| 64 | - obj, | ||
| 65 | - MyObject::Destructor, | ||
| 66 | - nullptr, // finalize_hint | ||
| 67 | - &obj->wrapper_)); | ||
| 63 | + NODE_API_CALL(env, | ||
| 64 | + napi_wrap(env, _this, obj, MyObject::Destructor, | ||
| 65 | + nullptr /* finalize_hint */, &obj->wrapper_)); | ||
| 68 | 66 | ||
| 69 | 67 | return _this; | |
| 70 | 68 | } | |
@@ -74,24 +72,24 @@ napi_value MyObject::New(napi_env env, napi_callback_info info) { | |||
| 74 | 72 | napi_value argv[1] = {args[0]}; | |
| 75 | 73 | ||
| 76 | 74 | napi_value cons; | |
| 77 | - NAPI_CALL(env, napi_get_reference_value(env, constructor, &cons)); | ||
| 75 | + NODE_API_CALL(env, napi_get_reference_value(env, constructor, &cons)); | ||
| 78 | 76 | ||
| 79 | 77 | napi_value instance; | |
| 80 | - NAPI_CALL(env, napi_new_instance(env, cons, argc, argv, &instance)); | ||
| 78 | + NODE_API_CALL(env, napi_new_instance(env, cons, argc, argv, &instance)); | ||
| 81 | 79 | ||
| 82 | 80 | return instance; | |
| 83 | 81 | } | |
| 84 | 82 | ||
| 85 | 83 | napi_value MyObject::GetValue(napi_env env, napi_callback_info info) { | |
| 86 | 84 | napi_value _this; | |
| 87 | - NAPI_CALL(env, | ||
| 85 | + NODE_API_CALL(env, | ||
| 88 | 86 | napi_get_cb_info(env, info, nullptr, nullptr, &_this, nullptr)); | |
| 89 | 87 | ||
| 90 | 88 | MyObject* obj; | |
| 91 | - NAPI_CALL(env, napi_unwrap(env, _this, reinterpret_cast<void**>(&obj))); | ||
| 89 | + NODE_API_CALL(env, napi_unwrap(env, _this, reinterpret_cast<void**>(&obj))); | ||
| 92 | 90 | ||
| 93 | 91 | napi_value num; | |
| 94 | - NAPI_CALL(env, napi_create_double(env, obj->value_, &num)); | ||
| 92 | + NODE_API_CALL(env, napi_create_double(env, obj->value_, &num)); | ||
| 95 | 93 | ||
| 96 | 94 | return num; | |
| 97 | 95 | } | |
@@ -100,28 +98,28 @@ napi_value MyObject::SetValue(napi_env env, napi_callback_info info) { | |||
| 100 | 98 | size_t argc = 1; | |
| 101 | 99 | napi_value args[1]; | |
| 102 | 100 | napi_value _this; | |
| 103 | - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &_this, nullptr)); | ||
| 101 | + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, &_this, nullptr)); | ||
| 104 | 102 | ||
| 105 | 103 | MyObject* obj; | |
| 106 | - NAPI_CALL(env, napi_unwrap(env, _this, reinterpret_cast<void**>(&obj))); | ||
| 104 | + NODE_API_CALL(env, napi_unwrap(env, _this, reinterpret_cast<void**>(&obj))); | ||
| 107 | 105 | ||
| 108 | - NAPI_CALL(env, napi_get_value_double(env, args[0], &obj->value_)); | ||
| 106 | + NODE_API_CALL(env, napi_get_value_double(env, args[0], &obj->value_)); | ||
| 109 | 107 | ||
| 110 | 108 | return nullptr; | |
| 111 | 109 | } | |
| 112 | 110 | ||
| 113 | 111 | napi_value MyObject::PlusOne(napi_env env, napi_callback_info info) { | |
| 114 | 112 | napi_value _this; | |
| 115 | - NAPI_CALL(env, | ||
| 113 | + NODE_API_CALL(env, | ||
| 116 | 114 | napi_get_cb_info(env, info, nullptr, nullptr, &_this, nullptr)); | |
| 117 | 115 | ||
| 118 | 116 | MyObject* obj; | |
| 119 | - NAPI_CALL(env, napi_unwrap(env, _this, reinterpret_cast<void**>(&obj))); | ||
| 117 | + NODE_API_CALL(env, napi_unwrap(env, _this, reinterpret_cast<void**>(&obj))); | ||
| 120 | 118 | ||
| 121 | 119 | obj->value_ += 1; | |
| 122 | 120 | ||
| 123 | 121 | napi_value num; | |
| 124 | - NAPI_CALL(env, napi_create_double(env, obj->value_, &num)); | ||
| 122 | + NODE_API_CALL(env, napi_create_double(env, obj->value_, &num)); | ||
| 125 | 123 | ||
| 126 | 124 | return num; | |
| 127 | 125 | } | |
@@ -130,25 +128,25 @@ napi_value MyObject::Multiply(napi_env env, napi_callback_info info) { | |||
| 130 | 128 | size_t argc = 1; | |
| 131 | 129 | napi_value args[1]; | |
| 132 | 130 | napi_value _this; | |
| 133 | - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &_this, nullptr)); | ||
| 131 | + NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, &_this, nullptr)); | ||
| 134 | 132 | ||
| 135 | 133 | double multiple = 1; | |
| 136 | 134 | if (argc >= 1) { | |
| 137 | - NAPI_CALL(env, napi_get_value_double(env, args[0], &multiple)); | ||
| 135 | + NODE_API_CALL(env, napi_get_value_double(env, args[0], &multiple)); | ||
| 138 | 136 | } | |
| 139 | 137 | ||
| 140 | 138 | MyObject* obj; | |
| 141 | - NAPI_CALL(env, napi_unwrap(env, _this, reinterpret_cast<void**>(&obj))); | ||
| 139 | + NODE_API_CALL(env, napi_unwrap(env, _this, reinterpret_cast<void**>(&obj))); | ||
| 142 | 140 | ||
| 143 | 141 | napi_value cons; | |
| 144 | - NAPI_CALL(env, napi_get_reference_value(env, constructor, &cons)); | ||
| 142 | + NODE_API_CALL(env, napi_get_reference_value(env, constructor, &cons)); | ||
| 145 | 143 | ||
| 146 | 144 | const int kArgCount = 1; | |
| 147 | 145 | napi_value argv[kArgCount]; | |
| 148 | - NAPI_CALL(env, napi_create_double(env, obj->value_ * multiple, argv)); | ||
| 146 | + NODE_API_CALL(env, napi_create_double(env, obj->value_ * multiple, argv)); | ||
| 149 | 147 | ||
| 150 | 148 | napi_value instance; | |
| 151 | - NAPI_CALL(env, napi_new_instance(env, cons, kArgCount, argv, &instance)); | ||
| 149 | + NODE_API_CALL(env, napi_new_instance(env, cons, kArgCount, argv, &instance)); | ||
| 152 | 150 | ||
| 153 | 151 | return instance; | |
| 154 | 152 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -5,24 +5,25 @@ | |||
| 5 | 5 | napi_value CreateObject(napi_env env, napi_callback_info info) { | |
| 6 | 6 | size_t argc = 1; | |
| 7 | 7 | napi_value args[1]; | |
| 8 | - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)); | ||
| 8 | + NODE_API_CALL(env, | ||
| 9 | + napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)); | ||
| 9 | 10 | ||
| 10 | 11 | napi_value instance; | |
| 11 | - NAPI_CALL(env, MyObject::NewInstance(env, args[0], &instance)); | ||
| 12 | + NODE_API_CALL(env, MyObject::NewInstance(env, args[0], &instance)); | ||
| 12 | 13 | ||
| 13 | 14 | return instance; | |
| 14 | 15 | } | |
| 15 | 16 | ||
| 16 | 17 | EXTERN_C_START | |
| 17 | 18 | napi_value Init(napi_env env, napi_value exports) { | |
| 18 | - NAPI_CALL(env, MyObject::Init(env)); | ||
| 19 | + NODE_API_CALL(env, MyObject::Init(env)); | ||
| 19 | 20 | ||
| 20 | 21 | napi_property_descriptor descriptors[] = { | |
| 21 | - DECLARE_NAPI_GETTER("finalizeCount", MyObject::GetFinalizeCount), | ||
| 22 | - DECLARE_NAPI_PROPERTY("createObject", CreateObject), | ||
| 22 | + DECLARE_NODE_API_GETTER("finalizeCount", MyObject::GetFinalizeCount), | ||
| 23 | + DECLARE_NODE_API_PROPERTY("createObject", CreateObject), | ||
| 23 | 24 | }; | |
| 24 | 25 | ||
| 25 | - NAPI_CALL(env, napi_define_properties( | ||
| 26 | + NODE_API_CALL(env, napi_define_properties( | ||
| 26 | 27 | env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors)); | |
| 27 | 28 | ||
| 28 | 29 | return exports; | |
| Back | FazBrowse Home | New Git URL |
0 commit comments