summaryrefslogtreecommitdiff
path: root/chromium/v8/src/objects/contexts.tq
blob: 1b0ae080c3e49118a03b80b5cc09f6668320397c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// Copyright 2019 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.

@abstract
extern class Context extends HeapObject {
  length: Smi;
  scope_info: ScopeInfo;
  previous: Context|Zero|Undefined;
}
extern class AwaitContext extends Context generates 'TNode<Context>';
extern class BlockContext extends Context generates 'TNode<Context>';
extern class CatchContext extends Context generates 'TNode<Context>';
extern class DebugEvaluateContext extends Context
    generates 'TNode<Context>';
extern class EvalContext extends Context generates 'TNode<Context>';
extern class FunctionContext extends Context generates 'TNode<Context>';
extern class ModuleContext extends Context generates 'TNode<Context>';
extern class NativeContext extends Context;
extern class ScriptContext extends Context generates 'TNode<Context>';
extern class WithContext extends Context generates 'TNode<Context>';

const MIN_CONTEXT_SLOTS: constexpr int31
    generates 'Context::MIN_CONTEXT_SLOTS';

extern enum NativeContextSlot extends intptr constexpr 'Context::Field' {
  AGGREGATE_ERROR_FUNCTION_INDEX,
  ARRAY_BUFFER_FUN_INDEX,
  ARRAY_BUFFER_NOINIT_FUN_INDEX,
  ARRAY_BUFFER_MAP_INDEX,
  ARRAY_FUNCTION_INDEX,
  ARRAY_JOIN_STACK_INDEX,
  OBJECT_FUNCTION_INDEX,
  ITERATOR_RESULT_MAP_INDEX,
  JS_ARRAY_PACKED_ELEMENTS_MAP_INDEX,
  JS_ARRAY_PACKED_SMI_ELEMENTS_MAP_INDEX,
  MATH_RANDOM_CACHE_INDEX,
  MATH_RANDOM_INDEX_INDEX,
  NUMBER_FUNCTION_INDEX,
  PROXY_REVOCABLE_RESULT_MAP_INDEX,
  REFLECT_APPLY_INDEX,
  REGEXP_FUNCTION_INDEX,
  REGEXP_LAST_MATCH_INFO_INDEX,
  INITIAL_STRING_ITERATOR_MAP_INDEX,
  INITIAL_ARRAY_ITERATOR_MAP_INDEX,
  SLOW_OBJECT_WITH_NULL_PROTOTYPE_MAP,
  STRICT_ARGUMENTS_MAP_INDEX,
  SLOPPY_ARGUMENTS_MAP_INDEX,
  FAST_ALIASED_ARGUMENTS_MAP_INDEX,

  PROMISE_FUNCTION_INDEX,
  PROMISE_THEN_INDEX,
  PROMISE_PROTOTYPE_INDEX,
  STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX,

  CONTINUATION_PRESERVED_EMBEDDER_DATA_INDEX,

  BOUND_FUNCTION_WITH_CONSTRUCTOR_MAP_INDEX,
  BOUND_FUNCTION_WITHOUT_CONSTRUCTOR_MAP_INDEX,
  ...
}

extern operator '[]' macro LoadContextElement(
    NativeContext, NativeContextSlot): Object;
extern operator '[]=' macro StoreContextElement(
    NativeContext, NativeContextSlot, Object): void;

type ContextSlot generates 'TNode<IntPtrT>' constexpr 'int32_t';
const PROXY_SLOT: constexpr ContextSlot
    generates 'Context::MIN_CONTEXT_SLOTS';
extern operator '[]' macro LoadContextElement(Context, ContextSlot): Object;
extern operator '[]=' macro StoreContextElement(
    Context, ContextSlot, Object): void;

extern operator '[]' macro LoadContextElement(Context, intptr): Object;
extern operator '[]' macro LoadContextElement(Context, Smi): Object;

// A dummy used instead of a context constant for runtime calls that don't need
// a context.
type NoContext extends Smi;
extern macro NoContextConstant(): NoContext;
const kNoContext: NoContext = NoContextConstant();