| // Copyright 2017 the V8 project authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef V8_OBJECTS_SCRIPT_INL_H_ | |
| #define V8_OBJECTS_SCRIPT_INL_H_ | |
| #include "src/objects/script.h" | |
| #include "src/objects/shared-function-info.h" | |
| #include "src/objects/string-inl.h" | |
| // Has to be the last include (doesn't have include guards): | |
| #include "src/objects/object-macros.h" | |
| namespace v8 { | |
| namespace internal { | |
| CAST_ACCESSOR(Script) | |
| ACCESSORS(Script, source, Object, kSourceOffset) | |
| ACCESSORS(Script, name, Object, kNameOffset) | |
| SMI_ACCESSORS(Script, id, kIdOffset) | |
| SMI_ACCESSORS(Script, line_offset, kLineOffsetOffset) | |
| SMI_ACCESSORS(Script, column_offset, kColumnOffsetOffset) | |
| ACCESSORS(Script, context_data, Object, kContextOffset) | |
| SMI_ACCESSORS(Script, type, kTypeOffset) | |
| ACCESSORS(Script, line_ends, Object, kLineEndsOffset) | |
| ACCESSORS_CHECKED(Script, eval_from_shared_or_wrapped_arguments, Object, | |
| kEvalFromSharedOrWrappedArgumentsOffset, | |
| this->type() != TYPE_WASM) | |
| SMI_ACCESSORS_CHECKED(Script, eval_from_position, kEvalFromPositionOffset, | |
| this->type() != TYPE_WASM) | |
| ACCESSORS(Script, shared_function_infos, WeakFixedArray, | |
| kSharedFunctionInfosOffset) | |
| SMI_ACCESSORS(Script, flags, kFlagsOffset) | |
| ACCESSORS(Script, source_url, Object, kSourceUrlOffset) | |
| ACCESSORS(Script, source_mapping_url, Object, kSourceMappingUrlOffset) | |
| ACCESSORS(Script, host_defined_options, FixedArray, kHostDefinedOptionsOffset) | |
| ACCESSORS_CHECKED(Script, wasm_module_object, Object, | |
| kEvalFromSharedOrWrappedArgumentsOffset, | |
| this->type() == TYPE_WASM) | |
| bool Script::is_wrapped() const { | |
| return eval_from_shared_or_wrapped_arguments()->IsFixedArray(); | |
| } | |
| bool Script::has_eval_from_shared() const { | |
| return eval_from_shared_or_wrapped_arguments()->IsSharedFunctionInfo(); | |
| } | |
| void Script::set_eval_from_shared(SharedFunctionInfo* shared, | |
| WriteBarrierMode mode) { | |
| DCHECK(!is_wrapped()); | |
| set_eval_from_shared_or_wrapped_arguments(shared, mode); | |
| } | |
| SharedFunctionInfo* Script::eval_from_shared() const { | |
| DCHECK(has_eval_from_shared()); | |
| return SharedFunctionInfo::cast(eval_from_shared_or_wrapped_arguments()); | |
| } | |
| void Script::set_wrapped_arguments(FixedArray* value, WriteBarrierMode mode) { | |
| DCHECK(!has_eval_from_shared()); | |
| set_eval_from_shared_or_wrapped_arguments(value, mode); | |
| } | |
| FixedArray* Script::wrapped_arguments() const { | |
| DCHECK(is_wrapped()); | |
| return FixedArray::cast(eval_from_shared_or_wrapped_arguments()); | |
| } | |
| Script::CompilationType Script::compilation_type() { | |
| return BooleanBit::get(flags(), kCompilationTypeBit) ? COMPILATION_TYPE_EVAL | |
| : COMPILATION_TYPE_HOST; | |
| } | |
| void Script::set_compilation_type(CompilationType type) { | |
| set_flags(BooleanBit::set(flags(), kCompilationTypeBit, | |
| type == COMPILATION_TYPE_EVAL)); | |
| } | |
| Script::CompilationState Script::compilation_state() { | |
| return BooleanBit::get(flags(), kCompilationStateBit) | |
| ? COMPILATION_STATE_COMPILED | |
| : COMPILATION_STATE_INITIAL; | |
| } | |
| void Script::set_compilation_state(CompilationState state) { | |
| set_flags(BooleanBit::set(flags(), kCompilationStateBit, | |
| state == COMPILATION_STATE_COMPILED)); | |
| } | |
| ScriptOriginOptions Script::origin_options() { | |
| return ScriptOriginOptions((flags() & kOriginOptionsMask) >> | |
| kOriginOptionsShift); | |
| } | |
| void Script::set_origin_options(ScriptOriginOptions origin_options) { | |
| DCHECK(!(origin_options.Flags() & ~((1 << kOriginOptionsSize) - 1))); | |
| set_flags((flags() & ~kOriginOptionsMask) | | |
| (origin_options.Flags() << kOriginOptionsShift)); | |
| } | |
| bool Script::HasValidSource() { | |
| Object* src = this->source(); | |
| if (!src->IsString()) return true; | |
| String* src_str = String::cast(src); | |
| if (!StringShape(src_str).IsExternal()) return true; | |
| if (src_str->IsOneByteRepresentation()) { | |
| return ExternalOneByteString::cast(src)->resource() != nullptr; | |
| } else if (src_str->IsTwoByteRepresentation()) { | |
| return ExternalTwoByteString::cast(src)->resource() != nullptr; | |
| } | |
| return true; | |
| } | |
| } // namespace internal | |
| } // namespace v8 | |
| #include "src/objects/object-macros-undef.h" | |
| #endif // V8_OBJECTS_SCRIPT_INL_H_ |