better-sqlite3-multiple-ciphers 9.5.0 → 11.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,9 +31,9 @@
31
31
 
32
32
  #define SQLITE3MC_VERSION_MAJOR 1
33
33
  #define SQLITE3MC_VERSION_MINOR 8
34
- #define SQLITE3MC_VERSION_RELEASE 4
34
+ #define SQLITE3MC_VERSION_RELEASE 6
35
35
  #define SQLITE3MC_VERSION_SUBRELEASE 0
36
- #define SQLITE3MC_VERSION_STRING "SQLite3 Multiple Ciphers 1.8.4"
36
+ #define SQLITE3MC_VERSION_STRING "SQLite3 Multiple Ciphers 1.8.6"
37
37
 
38
38
  #endif /* SQLITE3MC_VERSION_H_ */
39
39
  /*** End of #include "sqlite3mc_version.h" ***/
@@ -192,9 +192,9 @@ extern "C" {
192
192
  ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
193
193
  ** [sqlite_version()] and [sqlite_source_id()].
194
194
  */
195
- #define SQLITE_VERSION "3.45.2"
196
- #define SQLITE_VERSION_NUMBER 3045002
197
- #define SQLITE_SOURCE_ID "2024-03-12 11:06:23 d8cd6d49b46a395b13955387d05e9e1a2a47e54fb99f3c9b59835bbefad6af77"
195
+ #define SQLITE_VERSION "3.46.0"
196
+ #define SQLITE_VERSION_NUMBER 3046000
197
+ #define SQLITE_SOURCE_ID "2024-05-23 13:25:27 96c92aba00c8375bc32fafcdf12429c58bd8aabfcadab6683e35bbb9cdebf19e"
198
198
 
199
199
  /*
200
200
  ** CAPI3REF: Run-Time Library Version Numbers
@@ -810,11 +810,11 @@ struct sqlite3_file {
810
810
  ** </ul>
811
811
  ** xLock() upgrades the database file lock. In other words, xLock() moves the
812
812
  ** database file lock in the direction NONE toward EXCLUSIVE. The argument to
813
- ** xLock() is always on of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
813
+ ** xLock() is always one of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
814
814
  ** SQLITE_LOCK_NONE. If the database file lock is already at or above the
815
815
  ** requested lock, then the call to xLock() is a no-op.
816
816
  ** xUnlock() downgrades the database file lock to either SHARED or NONE.
817
- * If the lock is already at or below the requested lock state, then the call
817
+ ** If the lock is already at or below the requested lock state, then the call
818
818
  ** to xUnlock() is a no-op.
819
819
  ** The xCheckReservedLock() method checks whether any database connection,
820
820
  ** either in this process or in some other process, is holding a RESERVED,
@@ -2189,6 +2189,22 @@ struct sqlite3_mem_methods {
2189
2189
  ** configuration setting is never used, then the default maximum is determined
2190
2190
  ** by the [SQLITE_MEMDB_DEFAULT_MAXSIZE] compile-time option. If that
2191
2191
  ** compile-time option is not set, then the default maximum is 1073741824.
2192
+ **
2193
+ ** [[SQLITE_CONFIG_ROWID_IN_VIEW]]
2194
+ ** <dt>SQLITE_CONFIG_ROWID_IN_VIEW
2195
+ ** <dd>The SQLITE_CONFIG_ROWID_IN_VIEW option enables or disables the ability
2196
+ ** for VIEWs to have a ROWID. The capability can only be enabled if SQLite is
2197
+ ** compiled with -DSQLITE_ALLOW_ROWID_IN_VIEW, in which case the capability
2198
+ ** defaults to on. This configuration option queries the current setting or
2199
+ ** changes the setting to off or on. The argument is a pointer to an integer.
2200
+ ** If that integer initially holds a value of 1, then the ability for VIEWs to
2201
+ ** have ROWIDs is activated. If the integer initially holds zero, then the
2202
+ ** ability is deactivated. Any other initial value for the integer leaves the
2203
+ ** setting unchanged. After changes, if any, the integer is written with
2204
+ ** a 1 or 0, if the ability for VIEWs to have ROWIDs is on or off. If SQLite
2205
+ ** is compiled without -DSQLITE_ALLOW_ROWID_IN_VIEW (which is the usual and
2206
+ ** recommended case) then the integer is always filled with zero, regardless
2207
+ ** if its initial value.
2192
2208
  ** </dl>
2193
2209
  */
2194
2210
  #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
@@ -2220,6 +2236,7 @@ struct sqlite3_mem_methods {
2220
2236
  #define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */
2221
2237
  #define SQLITE_CONFIG_SORTERREF_SIZE 28 /* int nByte */
2222
2238
  #define SQLITE_CONFIG_MEMDB_MAXSIZE 29 /* sqlite3_int64 */
2239
+ #define SQLITE_CONFIG_ROWID_IN_VIEW 30 /* int* */
2223
2240
 
2224
2241
  /*
2225
2242
  ** CAPI3REF: Database Connection Configuration Options
@@ -3334,8 +3351,8 @@ SQLITE_API int sqlite3_set_authorizer(
3334
3351
  #define SQLITE_RECURSIVE 33 /* NULL NULL */
3335
3352
 
3336
3353
  /*
3337
- ** CAPI3REF: Tracing And Profiling Functions
3338
- ** METHOD: sqlite3
3354
+ ** CAPI3REF: Deprecated Tracing And Profiling Functions
3355
+ ** DEPRECATED
3339
3356
  **
3340
3357
  ** These routines are deprecated. Use the [sqlite3_trace_v2()] interface
3341
3358
  ** instead of the routines described here.
@@ -6916,6 +6933,12 @@ SQLITE_API int sqlite3_autovacuum_pages(
6916
6933
  ** The exceptions defined in this paragraph might change in a future
6917
6934
  ** release of SQLite.
6918
6935
  **
6936
+ ** Whether the update hook is invoked before or after the
6937
+ ** corresponding change is currently unspecified and may differ
6938
+ ** depending on the type of change. Do not rely on the order of the
6939
+ ** hook call with regards to the final result of the operation which
6940
+ ** triggers the hook.
6941
+ **
6919
6942
  ** The update hook implementation must not do anything that will modify
6920
6943
  ** the database connection that invoked the update hook. Any actions
6921
6944
  ** to modify the database connection must be deferred until after the
@@ -8386,7 +8409,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
8386
8409
  ** The sqlite3_keyword_count() interface returns the number of distinct
8387
8410
  ** keywords understood by SQLite.
8388
8411
  **
8389
- ** The sqlite3_keyword_name(N,Z,L) interface finds the N-th keyword and
8412
+ ** The sqlite3_keyword_name(N,Z,L) interface finds the 0-based N-th keyword and
8390
8413
  ** makes *Z point to that keyword expressed as UTF8 and writes the number
8391
8414
  ** of bytes in the keyword into *L. The string that *Z points to is not
8392
8415
  ** zero-terminated. The sqlite3_keyword_name(N,Z,L) routine returns
@@ -9965,24 +9988,45 @@ SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
9965
9988
  ** <li value="2"><p>
9966
9989
  ** ^(If the sqlite3_vtab_distinct() interface returns 2, that means
9967
9990
  ** that the query planner does not need the rows returned in any particular
9968
- ** order, as long as rows with the same values in all "aOrderBy" columns
9969
- ** are adjacent.)^ ^(Furthermore, only a single row for each particular
9970
- ** combination of values in the columns identified by the "aOrderBy" field
9971
- ** needs to be returned.)^ ^It is always ok for two or more rows with the same
9972
- ** values in all "aOrderBy" columns to be returned, as long as all such rows
9973
- ** are adjacent. ^The virtual table may, if it chooses, omit extra rows
9974
- ** that have the same value for all columns identified by "aOrderBy".
9975
- ** ^However omitting the extra rows is optional.
9991
+ ** order, as long as rows with the same values in all columns identified
9992
+ ** by "aOrderBy" are adjacent.)^ ^(Furthermore, when two or more rows
9993
+ ** contain the same values for all columns identified by "colUsed", all but
9994
+ ** one such row may optionally be omitted from the result.)^
9995
+ ** The virtual table is not required to omit rows that are duplicates
9996
+ ** over the "colUsed" columns, but if the virtual table can do that without
9997
+ ** too much extra effort, it could potentially help the query to run faster.
9976
9998
  ** This mode is used for a DISTINCT query.
9977
9999
  ** <li value="3"><p>
9978
- ** ^(If the sqlite3_vtab_distinct() interface returns 3, that means
9979
- ** that the query planner needs only distinct rows but it does need the
9980
- ** rows to be sorted.)^ ^The virtual table implementation is free to omit
9981
- ** rows that are identical in all aOrderBy columns, if it wants to, but
9982
- ** it is not required to omit any rows. This mode is used for queries
10000
+ ** ^(If the sqlite3_vtab_distinct() interface returns 3, that means the
10001
+ ** virtual table must return rows in the order defined by "aOrderBy" as
10002
+ ** if the sqlite3_vtab_distinct() interface had returned 0. However if
10003
+ ** two or more rows in the result have the same values for all columns
10004
+ ** identified by "colUsed", then all but one such row may optionally be
10005
+ ** omitted.)^ Like when the return value is 2, the virtual table
10006
+ ** is not required to omit rows that are duplicates over the "colUsed"
10007
+ ** columns, but if the virtual table can do that without
10008
+ ** too much extra effort, it could potentially help the query to run faster.
10009
+ ** This mode is used for queries
9983
10010
  ** that have both DISTINCT and ORDER BY clauses.
9984
10011
  ** </ol>
9985
10012
  **
10013
+ ** <p>The following table summarizes the conditions under which the
10014
+ ** virtual table is allowed to set the "orderByConsumed" flag based on
10015
+ ** the value returned by sqlite3_vtab_distinct(). This table is a
10016
+ ** restatement of the previous four paragraphs:
10017
+ **
10018
+ ** <table border=1 cellspacing=0 cellpadding=10 width="90%">
10019
+ ** <tr>
10020
+ ** <td valign="top">sqlite3_vtab_distinct() return value
10021
+ ** <td valign="top">Rows are returned in aOrderBy order
10022
+ ** <td valign="top">Rows with the same value in all aOrderBy columns are adjacent
10023
+ ** <td valign="top">Duplicates over all colUsed columns may be omitted
10024
+ ** <tr><td>0<td>yes<td>yes<td>no
10025
+ ** <tr><td>1<td>no<td>yes<td>no
10026
+ ** <tr><td>2<td>no<td>yes<td>yes
10027
+ ** <tr><td>3<td>yes<td>yes<td>yes
10028
+ ** </table>
10029
+ **
9986
10030
  ** ^For the purposes of comparing virtual table output values to see if the
9987
10031
  ** values are same value for sorting purposes, two NULL values are considered
9988
10032
  ** to be the same. In other words, the comparison operator is "IS"
@@ -12027,6 +12071,30 @@ SQLITE_API int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const c
12027
12071
  */
12028
12072
  SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData);
12029
12073
 
12074
+ /*
12075
+ ** CAPI3REF: Add A Single Change To A Changegroup
12076
+ ** METHOD: sqlite3_changegroup
12077
+ **
12078
+ ** This function adds the single change currently indicated by the iterator
12079
+ ** passed as the second argument to the changegroup object. The rules for
12080
+ ** adding the change are just as described for [sqlite3changegroup_add()].
12081
+ **
12082
+ ** If the change is successfully added to the changegroup, SQLITE_OK is
12083
+ ** returned. Otherwise, an SQLite error code is returned.
12084
+ **
12085
+ ** The iterator must point to a valid entry when this function is called.
12086
+ ** If it does not, SQLITE_ERROR is returned and no change is added to the
12087
+ ** changegroup. Additionally, the iterator must not have been opened with
12088
+ ** the SQLITE_CHANGESETAPPLY_INVERT flag. In this case SQLITE_ERROR is also
12089
+ ** returned.
12090
+ */
12091
+ SQLITE_API int sqlite3changegroup_add_change(
12092
+ sqlite3_changegroup*,
12093
+ sqlite3_changeset_iter*
12094
+ );
12095
+
12096
+
12097
+
12030
12098
  /*
12031
12099
  ** CAPI3REF: Obtain A Composite Changeset From A Changegroup
12032
12100
  ** METHOD: sqlite3_changegroup
@@ -12831,8 +12899,8 @@ struct Fts5PhraseIter {
12831
12899
  ** EXTENSION API FUNCTIONS
12832
12900
  **
12833
12901
  ** xUserData(pFts):
12834
- ** Return a copy of the context pointer the extension function was
12835
- ** registered with.
12902
+ ** Return a copy of the pUserData pointer passed to the xCreateFunction()
12903
+ ** API when the extension function was registered.
12836
12904
  **
12837
12905
  ** xColumnTotalSize(pFts, iCol, pnToken):
12838
12906
  ** If parameter iCol is less than zero, set output variable *pnToken
@@ -13475,7 +13543,7 @@ SQLITE_API int sqlite3_user_add(
13475
13543
  ** The sqlite3_user_change() interface can be used to change a users
13476
13544
  ** login credentials or admin privilege. Any user can change their own
13477
13545
  ** login credentials. Only an admin user can change another users login
13478
- ** credentials or admin privilege setting. No user may change their own
13546
+ ** credentials or admin privilege setting. No user may change their own
13479
13547
  ** admin privilege setting.
13480
13548
  */
13481
13549
  SQLITE_API int sqlite3_user_change(
@@ -13709,6 +13777,7 @@ extern "C" {
13709
13777
  #ifndef SQLITE_PRIVATE
13710
13778
  #define SQLITE_PRIVATE
13711
13779
  #endif
13780
+
13712
13781
  SQLITE_PRIVATE int sqlite3mcCheckVfs(const char* zVfs);
13713
13782
 
13714
13783
  SQLITE_API int sqlite3mc_vfs_create(const char* zVfsReal, int makeDefault);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "better-sqlite3-multiple-ciphers",
3
- "version": "9.5.0",
3
+ "version": "11.1.1",
4
4
  "description": "better-sqlite3 with multiple-cipher encryption support",
5
5
  "homepage": "https://github.com/m4heshd/better-sqlite3-multiple-ciphers",
6
6
  "author": "Mahesh Bandara Wijerathna (m4heshd) <m4heshd@gmail.com>",
@@ -2,7 +2,7 @@
2
2
  //
3
3
 
4
4
  #include "better_sqlite3.hpp"
5
- #line 153 "./src/util/macros.lzz"
5
+ #line 150 "./src/util/macros.lzz"
6
6
  void SetPrototypeGetter(
7
7
  v8::Isolate* isolate,
8
8
  v8::Local<v8::External> data,
@@ -11,7 +11,7 @@ void SetPrototypeGetter(
11
11
  v8::AccessorGetterCallback func
12
12
  ) {
13
13
  v8::HandleScope scope(isolate);
14
-
14
+
15
15
  #if defined NODE_MODULE_VERSION && NODE_MODULE_VERSION < 121
16
16
  recv->InstanceTemplate()->SetAccessor(
17
17
  InternalizedFromLatin1(isolate, name),
@@ -30,7 +30,7 @@ void SetPrototypeGetter(
30
30
  );
31
31
  #endif
32
32
  }
33
- #line 183 "./src/util/macros.lzz"
33
+ #line 180 "./src/util/macros.lzz"
34
34
  #ifndef V8_COMPRESS_POINTERS_IN_SHARED_CAGE
35
35
  #define SAFE_NEW_BUFFER(env, data, length, finalizeCallback, finalizeHint) node::Buffer::New(env, data, length, finalizeCallback, finalizeHint)
36
36
  #else
@@ -103,33 +103,33 @@ namespace Data
103
103
  #line 70 "./src/util/data.lzz"
104
104
  static char const RAW = 3;
105
105
  }
106
- #line 37 "./src/util/macros.lzz"
106
+ #line 34 "./src/util/macros.lzz"
107
107
  void ThrowError (char const * message)
108
- #line 37 "./src/util/macros.lzz"
108
+ #line 34 "./src/util/macros.lzz"
109
109
  { v8 :: Isolate * isolate = v8 :: Isolate :: GetCurrent ( ) ; isolate->ThrowException(v8::Exception::Error(StringFromUtf8(isolate, message, -1)));
110
110
  }
111
- #line 38 "./src/util/macros.lzz"
111
+ #line 35 "./src/util/macros.lzz"
112
112
  void ThrowTypeError (char const * message)
113
- #line 38 "./src/util/macros.lzz"
113
+ #line 35 "./src/util/macros.lzz"
114
114
  { v8 :: Isolate * isolate = v8 :: Isolate :: GetCurrent ( ) ; isolate->ThrowException(v8::Exception::TypeError(StringFromUtf8(isolate, message, -1)));
115
115
  }
116
- #line 39 "./src/util/macros.lzz"
116
+ #line 36 "./src/util/macros.lzz"
117
117
  void ThrowRangeError (char const * message)
118
- #line 39 "./src/util/macros.lzz"
118
+ #line 36 "./src/util/macros.lzz"
119
119
  { v8 :: Isolate * isolate = v8 :: Isolate :: GetCurrent ( ) ; isolate->ThrowException(v8::Exception::RangeError(StringFromUtf8(isolate, message, -1)));
120
120
  }
121
- #line 105 "./src/util/macros.lzz"
121
+ #line 102 "./src/util/macros.lzz"
122
122
  v8::Local <v8::FunctionTemplate> NewConstructorTemplate (v8::Isolate * isolate, v8::Local <v8::External> data, v8::FunctionCallback func, char const * name)
123
- #line 110 "./src/util/macros.lzz"
123
+ #line 107 "./src/util/macros.lzz"
124
124
  {
125
125
  v8::Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate, func, data);
126
126
  t->InstanceTemplate()->SetInternalFieldCount(1);
127
127
  t->SetClassName(InternalizedFromLatin1(isolate, name));
128
128
  return t;
129
129
  }
130
- #line 116 "./src/util/macros.lzz"
130
+ #line 113 "./src/util/macros.lzz"
131
131
  void SetPrototypeMethod (v8::Isolate * isolate, v8::Local <v8::External> data, v8::Local <v8::FunctionTemplate> recv, char const * name, v8::FunctionCallback func)
132
- #line 122 "./src/util/macros.lzz"
132
+ #line 119 "./src/util/macros.lzz"
133
133
  {
134
134
  v8::HandleScope scope(isolate);
135
135
  recv->PrototypeTemplate()->Set(
@@ -137,9 +137,9 @@ void SetPrototypeMethod (v8::Isolate * isolate, v8::Local <v8::External> data, v
137
137
  v8::FunctionTemplate::New(isolate, func, data, v8::Signature::New(isolate, recv))
138
138
  );
139
139
  }
140
- #line 129 "./src/util/macros.lzz"
140
+ #line 126 "./src/util/macros.lzz"
141
141
  void SetPrototypeSymbolMethod (v8::Isolate * isolate, v8::Local <v8::External> data, v8::Local <v8::FunctionTemplate> recv, v8::Local <v8::Symbol> symbol, v8::FunctionCallback func)
142
- #line 135 "./src/util/macros.lzz"
142
+ #line 132 "./src/util/macros.lzz"
143
143
  {
144
144
  v8::HandleScope scope(isolate);
145
145
  recv->PrototypeTemplate()->Set(
@@ -267,9 +267,9 @@ CS::CS (v8::Isolate * isolate)
267
267
  SetCode(isolate, SQLITE_OK_LOAD_PERMANENTLY, "SQLITE_OK_LOAD_PERMANENTLY");
268
268
  }
269
269
  #line 140 "./src/util/constants.lzz"
270
- void CS::SetString (v8::Isolate * isolate, CopyablePersistent <v8::String> & constant, char const * str)
270
+ void CS::SetString (v8::Isolate * isolate, v8::Global <v8::String> & constant, char const * str)
271
271
  #line 140 "./src/util/constants.lzz"
272
- {
272
+ {
273
273
  constant.Reset(isolate, InternalizedFromLatin1(isolate, str));
274
274
  }
275
275
  #line 144 "./src/util/constants.lzz"
@@ -2041,9 +2041,9 @@ bool Binder::Bind (v8::FunctionCallbackInfo <v8 :: Value> const & info, int argc
2041
2041
  }
2042
2042
  return success;
2043
2043
  }
2044
- #line 54 "./src/util/binder.lzz"
2044
+ #line 55 "./src/util/binder.lzz"
2045
2045
  void Binder::Fail (void (* Throw) (char const *), char const * message)
2046
- #line 54 "./src/util/binder.lzz"
2046
+ #line 55 "./src/util/binder.lzz"
2047
2047
  {
2048
2048
  assert(success == true);
2049
2049
  assert((Throw == NULL) == (message == NULL));
@@ -2051,16 +2051,16 @@ void Binder::Fail (void (* Throw) (char const *), char const * message)
2051
2051
  if (Throw) Throw(message);
2052
2052
  success = false;
2053
2053
  }
2054
- #line 62 "./src/util/binder.lzz"
2054
+ #line 63 "./src/util/binder.lzz"
2055
2055
  int Binder::NextAnonIndex ()
2056
- #line 62 "./src/util/binder.lzz"
2056
+ #line 63 "./src/util/binder.lzz"
2057
2057
  {
2058
2058
  while (sqlite3_bind_parameter_name(handle, ++anon_index) != NULL) {}
2059
2059
  return anon_index;
2060
2060
  }
2061
- #line 68 "./src/util/binder.lzz"
2061
+ #line 69 "./src/util/binder.lzz"
2062
2062
  void Binder::BindValue (v8::Isolate * isolate, v8::Local <v8::Value> value, int index)
2063
- #line 68 "./src/util/binder.lzz"
2063
+ #line 69 "./src/util/binder.lzz"
2064
2064
  {
2065
2065
  int status = Data::BindValueFromJS(isolate, handle, index, value);
2066
2066
  if (status != SQLITE_OK) {
@@ -2079,9 +2079,9 @@ void Binder::BindValue (v8::Isolate * isolate, v8::Local <v8::Value> value, int
2079
2079
  assert(false);
2080
2080
  }
2081
2081
  }
2082
- #line 89 "./src/util/binder.lzz"
2082
+ #line 90 "./src/util/binder.lzz"
2083
2083
  int Binder::BindArray (v8::Isolate * isolate, v8::Local <v8::Array> arr)
2084
- #line 89 "./src/util/binder.lzz"
2084
+ #line 90 "./src/util/binder.lzz"
2085
2085
  {
2086
2086
  v8 :: Local < v8 :: Context > ctx = isolate -> GetCurrentContext ( ) ;
2087
2087
  uint32_t length = arr->Length();
@@ -2103,9 +2103,9 @@ int Binder::BindArray (v8::Isolate * isolate, v8::Local <v8::Array> arr)
2103
2103
  }
2104
2104
  return len;
2105
2105
  }
2106
- #line 115 "./src/util/binder.lzz"
2106
+ #line 116 "./src/util/binder.lzz"
2107
2107
  int Binder::BindObject (v8::Isolate * isolate, v8::Local <v8::Object> obj, Statement * stmt)
2108
- #line 115 "./src/util/binder.lzz"
2108
+ #line 116 "./src/util/binder.lzz"
2109
2109
  {
2110
2110
  v8 :: Local < v8 :: Context > ctx = isolate -> GetCurrentContext ( ) ;
2111
2111
  BindMap* bind_map = stmt->GetBindMap(isolate);
@@ -2142,9 +2142,9 @@ int Binder::BindObject (v8::Isolate * isolate, v8::Local <v8::Object> obj, State
2142
2142
 
2143
2143
  return len;
2144
2144
  }
2145
- #line 159 "./src/util/binder.lzz"
2145
+ #line 160 "./src/util/binder.lzz"
2146
2146
  Binder::Result Binder::BindArgs (v8::FunctionCallbackInfo <v8 :: Value> const & info, int argc, Statement * stmt)
2147
- #line 159 "./src/util/binder.lzz"
2147
+ #line 160 "./src/util/binder.lzz"
2148
2148
  {
2149
2149
  v8 :: Isolate * isolate = info . GetIsolate ( ) ;
2150
2150
  int count = 0;