My Project
jsni-env-ext.h
1 // JavaScript Native Interface Release License.
2 //
3 // Copyright (c) 2015-2017 Alibaba Group. All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 // * Redistributions of source code must retain the above copyright
8 // notice, this list of conditions and the following disclaimer.
9 // * Redistributions in binary form must reproduce the above copyright
10 // notice, this list of conditions and the following disclaimer in the
11 // documentation and/or other materials provided with the distribution.
12 // * Neither the name of the Alibaba Group nor the
13 // names of its contributors may be used to endorse or promote products
14 // derived from this software without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 // DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
20 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 
27 #ifndef SRC_V8_JSNI_ENV_EXT_H_
28 #define SRC_V8_JSNI_ENV_EXT_H_
29 
30 #include "jsni.h"
31 #include "v8.h"
32 
33 #include <vector>
34 
35 namespace v8 {
36 
38  public:
39  explicit JsLocalScopeBase(bool is_escapable) : is_escapable_(is_escapable) {}
40  bool IsEscapable() {
41  return is_escapable_;
42  }
43  private:
44  bool is_escapable_;
45 };
46 
48  public:
49  explicit JsLocalScope(v8::Isolate* isolate)
50  :JsLocalScopeBase(false), scope(isolate) {}
51 
52  private:
53  v8::HandleScope scope;
54 };
55 
57  public:
58  explicit JsEscapableLocalScope(v8::Isolate* isolate)
59  :JsLocalScopeBase(true), scope(isolate) {}
60 
61  v8::Local<Value> Escape(v8::Local<Value> handle) {
62  return scope.Escape(handle);
63  }
64 
65  private:
66  v8::EscapableHandleScope scope;
67 };
68 
69 struct JSNIEnvExt : public _JSNIEnv {
70  Isolate* isolate_;
71  // To push/pop local frame.
72  std::vector<JsLocalScopeBase*> stacked_local_scope;
73  // For error check.
74  int error_code;
75  JSNIErrorInfo last_error_info;
76  v8::Persistent<v8::Value> last_exception;
77 };
78 
79 } // namespace v8
80 
81 #endif // SRC_V8_JSNI_ENV_EXT_H_
82 
Definition: jsni-env-ext.h:47
JSNI environment structure.
Definition: jsni.h:949
Definition: jsni-env-ext.h:56
Definition: jsni.h:152
Definition: jsni-env-ext.h:35
Definition: jsni-env-ext.h:69
Definition: jsni-env-ext.h:37