V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
script-inl.h
1 // Copyright 2017 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_OBJECTS_SCRIPT_INL_H_
6 #define V8_OBJECTS_SCRIPT_INL_H_
7 
8 #include "src/objects/script.h"
9 
10 #include "src/objects/shared-function-info.h"
11 #include "src/objects/smi-inl.h"
12 #include "src/objects/string-inl.h"
13 
14 // Has to be the last include (doesn't have include guards):
15 #include "src/objects/object-macros.h"
16 
17 namespace v8 {
18 namespace internal {
19 
20 CAST_ACCESSOR(Script)
21 
22 ACCESSORS(Script, source, Object, kSourceOffset)
23 ACCESSORS(Script, name, Object, kNameOffset)
24 SMI_ACCESSORS(Script, id, kIdOffset)
25 SMI_ACCESSORS(Script, line_offset, kLineOffsetOffset)
26 SMI_ACCESSORS(Script, column_offset, kColumnOffsetOffset)
27 ACCESSORS(Script, context_data, Object, kContextOffset)
28 SMI_ACCESSORS(Script, type, kTypeOffset)
29 ACCESSORS(Script, line_ends, Object, kLineEndsOffset)
30 ACCESSORS_CHECKED(Script, eval_from_shared_or_wrapped_arguments, Object,
31  kEvalFromSharedOrWrappedArgumentsOffset,
32  this->type() != TYPE_WASM)
33 SMI_ACCESSORS_CHECKED(Script, eval_from_position, kEvalFromPositionOffset,
34  this->type() != TYPE_WASM)
35 ACCESSORS(Script, shared_function_infos, WeakFixedArray,
36  kSharedFunctionInfosOffset)
37 SMI_ACCESSORS(Script, flags, kFlagsOffset)
38 ACCESSORS(Script, source_url, Object, kSourceUrlOffset)
39 ACCESSORS(Script, source_mapping_url, Object, kSourceMappingUrlOffset)
40 ACCESSORS2(Script, host_defined_options, FixedArray, kHostDefinedOptionsOffset)
41 ACCESSORS_CHECKED(Script, wasm_module_object, Object,
42  kEvalFromSharedOrWrappedArgumentsOffset,
43  this->type() == TYPE_WASM)
44 
45 bool Script::is_wrapped() const {
46  return eval_from_shared_or_wrapped_arguments()->IsFixedArray();
47 }
48 
49 bool Script::has_eval_from_shared() const {
50  return eval_from_shared_or_wrapped_arguments()->IsSharedFunctionInfo();
51 }
52 
53 void Script::set_eval_from_shared(SharedFunctionInfo* shared,
54  WriteBarrierMode mode) {
55  DCHECK(!is_wrapped());
56  set_eval_from_shared_or_wrapped_arguments(shared, mode);
57 }
58 
59 SharedFunctionInfo* Script::eval_from_shared() const {
60  DCHECK(has_eval_from_shared());
61  return SharedFunctionInfo::cast(eval_from_shared_or_wrapped_arguments());
62 }
63 
64 void Script::set_wrapped_arguments(FixedArray value, WriteBarrierMode mode) {
65  DCHECK(!has_eval_from_shared());
66  set_eval_from_shared_or_wrapped_arguments(value, mode);
67 }
68 
69 FixedArray Script::wrapped_arguments() const {
70  DCHECK(is_wrapped());
71  return FixedArray::cast(eval_from_shared_or_wrapped_arguments());
72 }
73 
74 Script::CompilationType Script::compilation_type() {
75  return BooleanBit::get(flags(), kCompilationTypeBit) ? COMPILATION_TYPE_EVAL
76  : COMPILATION_TYPE_HOST;
77 }
78 void Script::set_compilation_type(CompilationType type) {
79  set_flags(BooleanBit::set(flags(), kCompilationTypeBit,
80  type == COMPILATION_TYPE_EVAL));
81 }
82 Script::CompilationState Script::compilation_state() {
83  return BooleanBit::get(flags(), kCompilationStateBit)
84  ? COMPILATION_STATE_COMPILED
85  : COMPILATION_STATE_INITIAL;
86 }
87 void Script::set_compilation_state(CompilationState state) {
88  set_flags(BooleanBit::set(flags(), kCompilationStateBit,
89  state == COMPILATION_STATE_COMPILED));
90 }
91 ScriptOriginOptions Script::origin_options() {
92  return ScriptOriginOptions((flags() & kOriginOptionsMask) >>
93  kOriginOptionsShift);
94 }
95 void Script::set_origin_options(ScriptOriginOptions origin_options) {
96  DCHECK(!(origin_options.Flags() & ~((1 << kOriginOptionsSize) - 1)));
97  set_flags((flags() & ~kOriginOptionsMask) |
98  (origin_options.Flags() << kOriginOptionsShift));
99 }
100 
101 bool Script::HasValidSource() {
102  Object* src = this->source();
103  if (!src->IsString()) return true;
104  String src_str = String::cast(src);
105  if (!StringShape(src_str).IsExternal()) return true;
106  if (src_str->IsOneByteRepresentation()) {
107  return ExternalOneByteString::cast(src)->resource() != nullptr;
108  } else if (src_str->IsTwoByteRepresentation()) {
109  return ExternalTwoByteString::cast(src)->resource() != nullptr;
110  }
111  return true;
112 }
113 
114 } // namespace internal
115 } // namespace v8
116 
117 #include "src/objects/object-macros-undef.h"
118 
119 #endif // V8_OBJECTS_SCRIPT_INL_H_
Definition: libplatform.h:13