From 177e829f4b6454ba602db5dbd8178bc7369493b6 Mon Sep 17 00:00:00 2001
From: Dmitry Frank <dmitry.frank@cesanta.com>
Date: Wed, 18 May 2016 14:52:23 +0200
Subject: [PATCH] Add v7 arg to _mk_ and _get_ functions

`v7_mk_undefined()` and `v7_mk_null()` are left unchanged, but marked
deprecated, and `V7_UNDEFINED` and `V7_NULL` are public now.

Xtensa code size with instrumentation: 590400 -> 590432, i.e. 32 bytes.
Xtensa code size without instrumentation: 530848 -> 531760, i.e. 912
bytes.

As objdump reveals, inside v7.c, `v7_mk_number` and others are inlined,
so the extra v7 argument is eliminated; outside of v7.c it's obviously
not inlined.

----

Also, v7_get_int() is added, which currently just casts stored double
value to int

PUBLISHED_FROM=e984b7308faf2380b3de388f238e0fae0aea545d
---
 docs/c-api/util.h/mg_mk_str.md | 9 ++++-----
 mongoose.c                     | 8 ++++----
 mongoose.h                     | 2 ++
 3 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/docs/c-api/util.h/mg_mk_str.md b/docs/c-api/util.h/mg_mk_str.md
index 89afcef..4862e86 100644
--- a/docs/c-api/util.h/mg_mk_str.md
+++ b/docs/c-api/util.h/mg_mk_str.md
@@ -1,11 +1,10 @@
 ---
-title: "mg_mk_str()"
-decl_name: "mg_mk_str"
+title: "MG_MK_STR()"
+decl_name: "MG_MK_STR"
 symbol_kind: "func"
 signature: |
-  struct mg_str mg_mk_str(const char *s);
+  #define MG_MK_STR(str_literal);
 ---
 
-A helper function for creating mg_str struct from plain C string.
-`NULL` is allowed and becomes `{NULL, 0}`. 
+Macro for initializing mg_str. 
 
diff --git a/mongoose.c b/mongoose.c
index 2412984..9635fce 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -2269,7 +2269,7 @@ void mg_mgr_init(struct mg_mgr *m, void *user_data) {
 static enum v7_err mg_send_js(struct v7 *v7, v7_val_t *res) {
   v7_val_t arg0 = v7_arg(v7, 0);
   v7_val_t arg1 = v7_arg(v7, 1);
-  struct mg_connection *c = (struct mg_connection *) v7_get_ptr(arg0);
+  struct mg_connection *c = (struct mg_connection *) v7_get_ptr(v7, arg0);
   size_t len = 0;
 
   if (v7_is_string(arg1)) {
@@ -2277,7 +2277,7 @@ static enum v7_err mg_send_js(struct v7 *v7, v7_val_t *res) {
     mg_send(c, data, len);
   }
 
-  *res = v7_mk_number(len);
+  *res = v7_mk_number(v7, len);
 
   return V7_OK;
 }
@@ -5183,9 +5183,9 @@ void mg_http_handler(struct mg_connection *nc, int ev, void *ev_data) {
         }
 
         /* Invoke callback. TODO(lsm): report errors */
-        v7_array_push(v7, args, v7_mk_foreign(nc));
+        v7_array_push(v7, args, v7_mk_foreign(v7, nc));
         v7_array_push(v7, args, req);
-        if (v7_apply(v7, v2, v7_mk_undefined(), args, &res) == V7_OK &&
+        if (v7_apply(v7, v2, V7_UNDEFINED, args, &res) == V7_OK &&
             v7_is_truthy(v7, res)) {
           js_callback_handled_request++;
         }
diff --git a/mongoose.h b/mongoose.h
index 0d4ecc9..c54e05a 100644
--- a/mongoose.h
+++ b/mongoose.h
@@ -104,10 +104,12 @@
 #define NORETURN __attribute__((noreturn))
 #define NOINLINE __attribute__((noinline))
 #define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
+#define NOINSTR __attribute__((no_instrument_function))
 #else
 #define NORETURN
 #define NOINLINE
 #define WARN_UNUSED_RESULT
+#define NOINSTR
 #endif /* __GNUC__ */
 
 #ifndef ARRAY_SIZE
-- 
2.18.1