Line data Source code
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 : OBJECT_CONSTRUCTORS_IMPL(Script, Struct)
21 :
22 : NEVER_READ_ONLY_SPACE_IMPL(Script)
23 :
24 : CAST_ACCESSOR(Script)
25 :
26 38953055 : ACCESSORS(Script, source, Object, kSourceOffset)
27 16672810 : ACCESSORS(Script, name, Object, kNameOffset)
28 14803102 : SMI_ACCESSORS(Script, id, kIdOffset)
29 8478598 : SMI_ACCESSORS(Script, line_offset, kLineOffsetOffset)
30 3596892 : SMI_ACCESSORS(Script, column_offset, kColumnOffsetOffset)
31 36665709 : ACCESSORS(Script, context_data, Object, kContextOffset)
32 25114368 : SMI_ACCESSORS(Script, type, kScriptTypeOffset)
33 22934783 : ACCESSORS(Script, line_ends, Object, kLineEndsOffset)
34 22840482 : ACCESSORS_CHECKED(Script, eval_from_shared_or_wrapped_arguments, Object,
35 : kEvalFromSharedOrWrappedArgumentsOffset,
36 : this->type() != TYPE_WASM)
37 3868588 : SMI_ACCESSORS_CHECKED(Script, eval_from_position, kEvalFromPositionOffset,
38 : this->type() != TYPE_WASM)
39 16992418 : ACCESSORS(Script, shared_function_infos, WeakFixedArray,
40 : kSharedFunctionInfosOffset)
41 13437765 : SMI_ACCESSORS(Script, flags, kFlagsOffset)
42 820546 : ACCESSORS(Script, source_url, Object, kSourceUrlOffset)
43 77650 : ACCESSORS(Script, source_mapping_url, Object, kSourceMappingUrlOffset)
44 15263830 : ACCESSORS(Script, host_defined_options, FixedArray, kHostDefinedOptionsOffset)
45 6159370 : ACCESSORS_CHECKED(Script, wasm_module_object, Object,
46 : kEvalFromSharedOrWrappedArgumentsOffset,
47 : this->type() == TYPE_WASM)
48 :
49 1730908 : bool Script::is_wrapped() const {
50 1730908 : return eval_from_shared_or_wrapped_arguments()->IsFixedArray();
51 : }
52 :
53 3277 : bool Script::has_eval_from_shared() const {
54 3277 : return eval_from_shared_or_wrapped_arguments()->IsSharedFunctionInfo();
55 : }
56 :
57 : void Script::set_eval_from_shared(SharedFunctionInfo shared,
58 : WriteBarrierMode mode) {
59 : DCHECK(!is_wrapped());
60 1317196 : set_eval_from_shared_or_wrapped_arguments(shared, mode);
61 : }
62 :
63 : SharedFunctionInfo Script::eval_from_shared() const {
64 : DCHECK(has_eval_from_shared());
65 : return SharedFunctionInfo::cast(eval_from_shared_or_wrapped_arguments());
66 : }
67 :
68 : void Script::set_wrapped_arguments(FixedArray value, WriteBarrierMode mode) {
69 : DCHECK(!has_eval_from_shared());
70 74 : set_eval_from_shared_or_wrapped_arguments(value, mode);
71 : }
72 :
73 : FixedArray Script::wrapped_arguments() const {
74 : DCHECK(is_wrapped());
75 : return FixedArray::cast(eval_from_shared_or_wrapped_arguments());
76 : }
77 :
78 : Script::CompilationType Script::compilation_type() {
79 : return BooleanBit::get(flags(), kCompilationTypeBit) ? COMPILATION_TYPE_EVAL
80 2542783 : : COMPILATION_TYPE_HOST;
81 : }
82 : void Script::set_compilation_type(CompilationType type) {
83 : set_flags(BooleanBit::set(flags(), kCompilationTypeBit,
84 : type == COMPILATION_TYPE_EVAL));
85 : }
86 : Script::CompilationState Script::compilation_state() {
87 : return BooleanBit::get(flags(), kCompilationStateBit)
88 : ? COMPILATION_STATE_COMPILED
89 33907 : : COMPILATION_STATE_INITIAL;
90 : }
91 : void Script::set_compilation_state(CompilationState state) {
92 : set_flags(BooleanBit::set(flags(), kCompilationStateBit,
93 : state == COMPILATION_STATE_COMPILED));
94 : }
95 : ScriptOriginOptions Script::origin_options() {
96 4510512 : return ScriptOriginOptions((flags() & kOriginOptionsMask) >>
97 4510512 : kOriginOptionsShift);
98 : }
99 1474621 : void Script::set_origin_options(ScriptOriginOptions origin_options) {
100 : DCHECK(!(origin_options.Flags() & ~((1 << kOriginOptionsSize) - 1)));
101 2949242 : set_flags((flags() & ~kOriginOptionsMask) |
102 1474621 : (origin_options.Flags() << kOriginOptionsShift));
103 1474621 : }
104 :
105 2061308 : bool Script::HasValidSource() {
106 : Object src = this->source();
107 2061308 : if (!src->IsString()) return true;
108 : String src_str = String::cast(src);
109 2061308 : if (!StringShape(src_str).IsExternal()) return true;
110 17064 : if (src_str->IsOneByteRepresentation()) {
111 17024 : return ExternalOneByteString::cast(src)->resource() != nullptr;
112 40 : } else if (src_str->IsTwoByteRepresentation()) {
113 40 : return ExternalTwoByteString::cast(src)->resource() != nullptr;
114 : }
115 : return true;
116 : }
117 :
118 : } // namespace internal
119 : } // namespace v8
120 :
121 : #include "src/objects/object-macros-undef.h"
122 :
123 : #endif // V8_OBJECTS_SCRIPT_INL_H_
|