LCOV - code coverage report
Current view: top level - src/objects - script.h (source / functions) Hit Total Coverage
Test: app.info Lines: 1 1 100.0 %
Date: 2019-04-19 Functions: 0 0 -

          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_H_
       6             : #define V8_OBJECTS_SCRIPT_H_
       7             : 
       8             : #include "src/objects.h"
       9             : #include "src/objects/fixed-array.h"
      10             : #include "src/objects/struct.h"
      11             : 
      12             : // Has to be the last include (doesn't have include guards):
      13             : #include "src/objects/object-macros.h"
      14             : 
      15             : namespace v8 {
      16             : 
      17             : namespace tracing {
      18             : class TracedValue;
      19             : }
      20             : 
      21             : namespace internal {
      22             : 
      23             : // Script describes a script which has been added to the VM.
      24             : class Script : public Struct {
      25             :  public:
      26             :   NEVER_READ_ONLY_SPACE
      27             :   // Script types.
      28             :   enum Type {
      29             :     TYPE_NATIVE = 0,
      30             :     TYPE_EXTENSION = 1,
      31             :     TYPE_NORMAL = 2,
      32             :     TYPE_WASM = 3,
      33             :     TYPE_INSPECTOR = 4
      34             :   };
      35             : 
      36             :   // Script compilation types.
      37             :   enum CompilationType { COMPILATION_TYPE_HOST = 0, COMPILATION_TYPE_EVAL = 1 };
      38             : 
      39             :   // Script compilation state.
      40             :   enum CompilationState {
      41             :     COMPILATION_STATE_INITIAL = 0,
      42             :     COMPILATION_STATE_COMPILED = 1
      43             :   };
      44             : 
      45             :   // [source]: the script source.
      46             :   DECL_ACCESSORS(source, Object)
      47             : 
      48             :   // [name]: the script name.
      49             :   DECL_ACCESSORS(name, Object)
      50             : 
      51             :   // [id]: the script id.
      52             :   DECL_INT_ACCESSORS(id)
      53             : 
      54             :   // [line_offset]: script line offset in resource from where it was extracted.
      55             :   DECL_INT_ACCESSORS(line_offset)
      56             : 
      57             :   // [column_offset]: script column offset in resource from where it was
      58             :   // extracted.
      59             :   DECL_INT_ACCESSORS(column_offset)
      60             : 
      61             :   // [context_data]: context data for the context this script was compiled in.
      62             :   DECL_ACCESSORS(context_data, Object)
      63             : 
      64             :   // [type]: the script type.
      65             :   DECL_INT_ACCESSORS(type)
      66             : 
      67             :   // [line_ends]: FixedArray of line ends positions.
      68             :   DECL_ACCESSORS(line_ends, Object)
      69             : 
      70             :   DECL_ACCESSORS(eval_from_shared_or_wrapped_arguments, Object)
      71             : 
      72             :   // [eval_from_shared]: for eval scripts the shared function info for the
      73             :   // function from which eval was called.
      74             :   DECL_ACCESSORS(eval_from_shared, SharedFunctionInfo)
      75             : 
      76             :   // [wrapped_arguments]: for the list of arguments in a wrapped script.
      77             :   DECL_ACCESSORS(wrapped_arguments, FixedArray)
      78             : 
      79             :   // Whether the script is implicitly wrapped in a function.
      80             :   inline bool is_wrapped() const;
      81             : 
      82             :   // Whether the eval_from_shared field is set with a shared function info
      83             :   // for the eval site.
      84             :   inline bool has_eval_from_shared() const;
      85             : 
      86             :   // [eval_from_position]: the source position in the code for the function
      87             :   // from which eval was called, as positive integer. Or the code offset in the
      88             :   // code from which eval was called, as negative integer.
      89             :   DECL_INT_ACCESSORS(eval_from_position)
      90             : 
      91             :   // [shared_function_infos]: weak fixed array containing all shared
      92             :   // function infos created from this script.
      93             :   DECL_ACCESSORS(shared_function_infos, WeakFixedArray)
      94             : 
      95             :   // [flags]: Holds an exciting bitfield.
      96             :   DECL_INT_ACCESSORS(flags)
      97             : 
      98             :   // [source_url]: sourceURL from magic comment
      99             :   DECL_ACCESSORS(source_url, Object)
     100             : 
     101             :   // [source_mapping_url]: sourceMappingURL magic comment
     102             :   DECL_ACCESSORS(source_mapping_url, Object)
     103             : 
     104             :   // [wasm_module_object]: the wasm module object this script belongs to.
     105             :   // This must only be called if the type of this script is TYPE_WASM.
     106             :   DECL_ACCESSORS(wasm_module_object, Object)
     107             : 
     108             :   // [host_defined_options]: Options defined by the embedder.
     109             :   DECL_ACCESSORS(host_defined_options, FixedArray)
     110             : 
     111             :   // [compilation_type]: how the the script was compiled. Encoded in the
     112             :   // 'flags' field.
     113             :   inline CompilationType compilation_type();
     114             :   inline void set_compilation_type(CompilationType type);
     115             : 
     116             :   // [compilation_state]: determines whether the script has already been
     117             :   // compiled. Encoded in the 'flags' field.
     118             :   inline CompilationState compilation_state();
     119             :   inline void set_compilation_state(CompilationState state);
     120             : 
     121             :   // [origin_options]: optional attributes set by the embedder via ScriptOrigin,
     122             :   // and used by the embedder to make decisions about the script. V8 just passes
     123             :   // this through. Encoded in the 'flags' field.
     124             :   inline v8::ScriptOriginOptions origin_options();
     125             :   inline void set_origin_options(ScriptOriginOptions origin_options);
     126             : 
     127             :   DECL_CAST(Script)
     128             : 
     129             :   // If script source is an external string, check that the underlying
     130             :   // resource is accessible. Otherwise, always return true.
     131             :   inline bool HasValidSource();
     132             : 
     133             :   Object GetNameOrSourceURL();
     134             : 
     135             :   // Retrieve source position from where eval was called.
     136             :   static int GetEvalPosition(Isolate* isolate, Handle<Script> script);
     137             : 
     138             :   // Check if the script contains any Asm modules.
     139             :   bool ContainsAsmModule();
     140             : 
     141             :   // Init line_ends array with source code positions of line ends.
     142             :   V8_EXPORT_PRIVATE static void InitLineEnds(Handle<Script> script);
     143             : 
     144             :   // Carries information about a source position.
     145             :   struct PositionInfo {
     146     5347009 :     PositionInfo() : line(-1), column(-1), line_start(-1), line_end(-1) {}
     147             : 
     148             :     int line;        // Zero-based line number.
     149             :     int column;      // Zero-based column number.
     150             :     int line_start;  // Position of first character in line.
     151             :     int line_end;    // Position of final linebreak character in line.
     152             :   };
     153             : 
     154             :   // Specifies whether to add offsets to position infos.
     155             :   enum OffsetFlag { NO_OFFSET = 0, WITH_OFFSET = 1 };
     156             : 
     157             :   // Retrieves information about the given position, optionally with an offset.
     158             :   // Returns false on failure, and otherwise writes into the given info object
     159             :   // on success.
     160             :   // The static method should is preferable for handlified callsites because it
     161             :   // initializes the line ends array, avoiding expensive recomputations.
     162             :   // The non-static version is not allocating and safe for unhandlified
     163             :   // callsites.
     164             :   static bool GetPositionInfo(Handle<Script> script, int position,
     165             :                               PositionInfo* info, OffsetFlag offset_flag);
     166             :   V8_EXPORT_PRIVATE bool GetPositionInfo(int position, PositionInfo* info,
     167             :                                          OffsetFlag offset_flag) const;
     168             : 
     169             :   bool IsUserJavaScript();
     170             : 
     171             :   // Wrappers for GetPositionInfo
     172             :   static int GetColumnNumber(Handle<Script> script, int code_offset);
     173             :   int GetColumnNumber(int code_pos) const;
     174             :   V8_EXPORT_PRIVATE static int GetLineNumber(Handle<Script> script,
     175             :                                              int code_offset);
     176             :   int GetLineNumber(int code_pos) const;
     177             : 
     178             :   // Look through the list of existing shared function infos to find one
     179             :   // that matches the function literal.  Return empty handle if not found.
     180             :   MaybeHandle<SharedFunctionInfo> FindSharedFunctionInfo(
     181             :       Isolate* isolate, const FunctionLiteral* fun);
     182             : 
     183             :   // Returns the Script in a format tracing can support.
     184             :   std::unique_ptr<v8::tracing::TracedValue> ToTracedValue();
     185             : 
     186             :   // The tracing scope for Script objects.
     187             :   static const char* kTraceScope;
     188             : 
     189             :   // Returns the unique TraceID for this Script (within the kTraceScope).
     190             :   uint64_t TraceID() const;
     191             : 
     192             :   // Returns the unique trace ID reference for this Script.
     193             :   std::unique_ptr<v8::tracing::TracedValue> TraceIDRef() const;
     194             : 
     195             :   // Iterate over all script objects on the heap.
     196             :   class V8_EXPORT_PRIVATE Iterator {
     197             :    public:
     198             :     explicit Iterator(Isolate* isolate);
     199             :     Script Next();
     200             : 
     201             :    private:
     202             :     WeakArrayList::Iterator iterator_;
     203             :     DISALLOW_COPY_AND_ASSIGN(Iterator);
     204             :   };
     205             : 
     206             :   // Dispatched behavior.
     207             :   DECL_PRINTER(Script)
     208             :   DECL_VERIFIER(Script)
     209             : 
     210             :   DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize,
     211             :                                 TORQUE_GENERATED_SCRIPT_FIELDS)
     212             : 
     213             :  private:
     214             :   // Bit positions in the flags field.
     215             :   static const int kCompilationTypeBit = 0;
     216             :   static const int kCompilationStateBit = 1;
     217             :   static const int kOriginOptionsShift = 2;
     218             :   static const int kOriginOptionsSize = 4;
     219             :   static const int kOriginOptionsMask = ((1 << kOriginOptionsSize) - 1)
     220             :                                         << kOriginOptionsShift;
     221             : 
     222             :   OBJECT_CONSTRUCTORS(Script, Struct);
     223             : };
     224             : 
     225             : }  // namespace internal
     226             : }  // namespace v8
     227             : 
     228             : #include "src/objects/object-macros-undef.h"
     229             : 
     230             : #endif  // V8_OBJECTS_SCRIPT_H_

Generated by: LCOV version 1.10