1
1
import type {
2
- CompileTimeConstants ,
3
2
ComponentDefinition ,
4
3
ComponentDefinitionState ,
5
4
ConstantPool ,
6
5
HelperDefinitionState ,
7
6
ModifierDefinitionState ,
8
- ResolutionTimeConstants ,
9
- ResolvedComponentDefinition ,
10
7
ProgramConstants ,
8
+ ResolvedComponentDefinition ,
11
9
Template ,
12
10
} from '@glimmer/interfaces' ;
13
11
import { constants } from '@glimmer/constants' ;
@@ -30,14 +28,33 @@ const WELL_KNOWN_EMPTY_ARRAY: unknown = Object.freeze([]);
30
28
const STARTER_CONSTANTS = constants ( WELL_KNOWN_EMPTY_ARRAY ) ;
31
29
const WELL_KNOWN_EMPTY_ARRAY_POSITION : number = STARTER_CONSTANTS . indexOf ( WELL_KNOWN_EMPTY_ARRAY ) ;
32
30
33
- export class CompileTimeConstantImpl implements CompileTimeConstants {
34
- // `0` means NULL
31
+ export class ConstantsImpl implements ProgramConstants {
32
+ protected reifiedArrs : { [ key : number ] : unknown [ ] } = {
33
+ [ WELL_KNOWN_EMPTY_ARRAY_POSITION ] : WELL_KNOWN_EMPTY_ARRAY as unknown [ ] ,
34
+ } ;
35
+
36
+ defaultTemplate : Template = templateFactory ( DEFAULT_TEMPLATE ) ( ) ;
37
+
38
+ // Used for tests and debugging purposes, and to be able to analyze large apps
39
+ // This is why it's enabled even in production
40
+ helperDefinitionCount = 0 ;
41
+ modifierDefinitionCount = 0 ;
42
+ componentDefinitionCount = 0 ;
35
43
36
- protected values : unknown [ ] = STARTER_CONSTANTS . slice ( ) ;
37
- protected indexMap : Map < unknown , number > = new Map (
44
+ private values : unknown [ ] = STARTER_CONSTANTS . slice ( ) ;
45
+ private indexMap : Map < unknown , number > = new Map (
38
46
this . values . map ( ( value , index ) => [ value , index ] )
39
47
) ;
40
48
49
+ private helperDefinitionCache = new WeakMap < HelperDefinitionState , number | null > ( ) ;
50
+
51
+ private modifierDefinitionCache = new WeakMap < ModifierDefinitionState , number | null > ( ) ;
52
+
53
+ private componentDefinitionCache = new WeakMap <
54
+ ComponentDefinitionState | ResolvedComponentDefinition ,
55
+ ComponentDefinition | null
56
+ > ( ) ;
57
+
41
58
value ( value : unknown ) {
42
59
let indexMap = this . indexMap ;
43
60
let index = indexMap . get ( value ) ;
@@ -67,55 +84,6 @@ export class CompileTimeConstantImpl implements CompileTimeConstants {
67
84
toPool ( ) : ConstantPool {
68
85
return this . values ;
69
86
}
70
- }
71
-
72
- export class RuntimeConstantsImpl implements ProgramConstants {
73
- protected values : unknown [ ] ;
74
-
75
- constructor ( pool : ConstantPool ) {
76
- this . values = pool ;
77
- }
78
-
79
- getValue < T > ( handle : number ) {
80
- return this . values [ handle ] as T ;
81
- }
82
-
83
- getArray < T > ( value : number ) : T [ ] {
84
- let handles = this . getValue < number [ ] > ( value ) ;
85
- let reified : T [ ] = new Array ( handles . length ) ;
86
-
87
- for ( const [ i , n ] of enumerate ( handles ) ) {
88
- reified [ i ] = this . getValue ( n ) ;
89
- }
90
-
91
- return reified ;
92
- }
93
- }
94
-
95
- export class ConstantsImpl
96
- extends CompileTimeConstantImpl
97
- implements ProgramConstants , ResolutionTimeConstants
98
- {
99
- protected reifiedArrs : { [ key : number ] : unknown [ ] } = {
100
- [ WELL_KNOWN_EMPTY_ARRAY_POSITION ] : WELL_KNOWN_EMPTY_ARRAY as unknown [ ] ,
101
- } ;
102
-
103
- defaultTemplate : Template = templateFactory ( DEFAULT_TEMPLATE ) ( ) ;
104
-
105
- // Used for tests and debugging purposes, and to be able to analyze large apps
106
- // This is why it's enabled even in production
107
- helperDefinitionCount = 0 ;
108
- modifierDefinitionCount = 0 ;
109
- componentDefinitionCount = 0 ;
110
-
111
- private helperDefinitionCache = new WeakMap < HelperDefinitionState , number | null > ( ) ;
112
-
113
- private modifierDefinitionCache = new WeakMap < ModifierDefinitionState , number | null > ( ) ;
114
-
115
- private componentDefinitionCache = new WeakMap <
116
- ComponentDefinitionState | ResolvedComponentDefinition ,
117
- ComponentDefinition | null
118
- > ( ) ;
119
87
120
88
helper (
121
89
definitionState : HelperDefinitionState ,
0 commit comments