@next-core/cook 2.2.18 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,9 +3,25 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.IsConstructor = exports.FunctionEnvironment = exports.FormalParameters = exports.ExecutionContext = exports.EnvironmentRecord = exports.Environment = exports.Empty = exports.ECMAScriptCode = exports.DeclarativeEnvironment = exports.CompletionRecord = void 0;
6
+ exports.Mode = exports.IsConstructor = exports.FunctionEnvironment = exports.FormalParameters = exports.ExecutionContext = exports.EnvironmentRecord = exports.Environment = exports.Empty = exports.ECMAScriptCode = exports.DeclarativeEnvironment = exports.DebuggerScope = exports.DebuggerReturn = exports.DebuggerNode = exports.DebuggerCall = exports.CompletionRecord = exports.BindingStatus = void 0;
7
7
  exports.NormalCompletion = NormalCompletion;
8
- exports.SourceNode = exports.ReferenceRecord = void 0;
8
+ exports.ThisMode = exports.SourceNode = exports.ReferenceRecord = void 0;
9
+ let Mode = exports.Mode = /*#__PURE__*/function (Mode) {
10
+ Mode[Mode["LEXICAL"] = 0] = "LEXICAL";
11
+ Mode[Mode["STRICT"] = 1] = "STRICT";
12
+ return Mode;
13
+ }({});
14
+ const SourceNode = exports.SourceNode = Symbol.for("SourceNode");
15
+ const FormalParameters = exports.FormalParameters = Symbol.for("FormalParameters");
16
+ const ECMAScriptCode = exports.ECMAScriptCode = Symbol.for("ECMAScriptCode");
17
+ const Environment = exports.Environment = Symbol.for("Environment");
18
+ const IsConstructor = exports.IsConstructor = Symbol.for("IsConstructor");
19
+ const ThisMode = exports.ThisMode = Symbol.for("ThisMode");
20
+ const DebuggerCall = exports.DebuggerCall = Symbol.for("$DebuggerCall$");
21
+ const DebuggerScope = exports.DebuggerScope = Symbol.for("$DebuggerScope$");
22
+ const DebuggerNode = exports.DebuggerNode = Symbol.for("$DebuggerNode$");
23
+ const DebuggerReturn = exports.DebuggerReturn = Symbol.for("$DebuggerReturn$");
24
+
9
25
  // https://tc39.es/ecma262/#sec-execution-contexts
10
26
  class ExecutionContext {
11
27
  VariableEnvironment;
@@ -13,10 +29,17 @@ class ExecutionContext {
13
29
  Function;
14
30
  }
15
31
  exports.ExecutionContext = ExecutionContext;
16
- // https://tc39.es/ecma262/#sec-environment-records
32
+ let BindingStatus = exports.BindingStatus = /*#__PURE__*/function (BindingStatus) {
33
+ BindingStatus[BindingStatus["UNINITIALIZED"] = 0] = "UNINITIALIZED";
34
+ BindingStatus[BindingStatus["LEXICAL"] = 1] = "LEXICAL";
35
+ BindingStatus[BindingStatus["INITIALIZED"] = 2] = "INITIALIZED";
36
+ return BindingStatus;
37
+ }({}); // https://tc39.es/ecma262/#sec-environment-records
17
38
  class EnvironmentRecord {
18
39
  OuterEnv;
19
40
  bindingMap = new Map();
41
+ ThisValue = undefined;
42
+ ThisBindingStatus;
20
43
  constructor(outer) {
21
44
  this.OuterEnv = outer;
22
45
  }
@@ -64,7 +87,7 @@ class EnvironmentRecord {
64
87
  * @param strict - For functions, strict is always false, otherwise it depends on strict-mode.
65
88
  * @returns
66
89
  */
67
- SetMutableBinding(name, value, strict) {
90
+ SetMutableBinding(name, value, _strict) {
68
91
  const binding = this.bindingMap.get(name);
69
92
  // Assert: binding exists.
70
93
  if (!binding.initialized) {
@@ -76,7 +99,7 @@ class EnvironmentRecord {
76
99
  }
77
100
  return NormalCompletion(undefined);
78
101
  }
79
- GetBindingValue(name, strict) {
102
+ GetBindingValue(name, _strict) {
80
103
  const binding = this.bindingMap.get(name);
81
104
  // Assert: binding exists.
82
105
  if (!binding.initialized) {
@@ -84,17 +107,42 @@ class EnvironmentRecord {
84
107
  }
85
108
  return binding.value;
86
109
  }
110
+ HasThisBinding() {
111
+ return false;
112
+ }
87
113
  }
88
114
  exports.EnvironmentRecord = EnvironmentRecord;
89
115
  class DeclarativeEnvironment extends EnvironmentRecord {}
90
116
  exports.DeclarativeEnvironment = DeclarativeEnvironment;
91
- class FunctionEnvironment extends EnvironmentRecord {}
117
+ class FunctionEnvironment extends EnvironmentRecord {
118
+ constructor(F) {
119
+ super(F[Environment]);
120
+ if (F[ThisMode] === Mode.LEXICAL) {
121
+ this.ThisBindingStatus = BindingStatus.LEXICAL;
122
+ } else {
123
+ this.ThisBindingStatus = BindingStatus.UNINITIALIZED;
124
+ }
125
+ }
126
+ HasThisBinding() {
127
+ return this.ThisBindingStatus !== BindingStatus.LEXICAL;
128
+ }
129
+ BindThisValue(value) {
130
+ // Assert: envRec.[[ThisBindingStatus]] is not LEXICAL.
131
+ if (this.ThisBindingStatus === BindingStatus.INITIALIZED) {
132
+ throw new Error("This binding has been initialized");
133
+ }
134
+ this.ThisValue = value;
135
+ this.ThisBindingStatus = BindingStatus.INITIALIZED;
136
+ }
137
+ GetThisBinding() {
138
+ // Assert: envRec.[[ThisBindingStatus]] is not LEXICAL.
139
+ if (this.ThisBindingStatus === BindingStatus.UNINITIALIZED) {
140
+ throw new Error("This binding is not initialized");
141
+ }
142
+ return this.ThisValue;
143
+ }
144
+ }
92
145
  exports.FunctionEnvironment = FunctionEnvironment;
93
- const SourceNode = exports.SourceNode = Symbol.for("SourceNode");
94
- const FormalParameters = exports.FormalParameters = Symbol.for("FormalParameters");
95
- const ECMAScriptCode = exports.ECMAScriptCode = Symbol.for("ECMAScriptCode");
96
- const Environment = exports.Environment = Symbol.for("Environment");
97
- const IsConstructor = exports.IsConstructor = Symbol.for("IsConstructor");
98
146
  // https://tc39.es/ecma262/#sec-reference-record-specification-type
99
147
  class ReferenceRecord {
100
148
  Base;
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionContext.js","names":["ExecutionContext","VariableEnvironment","LexicalEnvironment","Function","exports","EnvironmentRecord","OuterEnv","bindingMap","Map","constructor","outer","HasBinding","name","has","CreateMutableBinding","deletable","set","mutable","NormalCompletion","undefined","CreateImmutableBinding","strict","InitializeBinding","value","binding","get","Object","assign","initialized","SetMutableBinding","ReferenceError","TypeError","GetBindingValue","DeclarativeEnvironment","FunctionEnvironment","SourceNode","Symbol","for","FormalParameters","ECMAScriptCode","Environment","IsConstructor","ReferenceRecord","Base","ReferenceName","Strict","base","referenceName","CompletionRecord","Type","Value","type","Empty"],"sources":["../../src/ExecutionContext.ts"],"sourcesContent":["import {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n} from \"@babel/types\";\n\n// https://tc39.es/ecma262/#sec-execution-contexts\nexport class ExecutionContext {\n VariableEnvironment?: EnvironmentRecord;\n LexicalEnvironment?: EnvironmentRecord;\n Function?: FunctionObject;\n}\n\nexport type EnvironmentRecordType = \"function\" | \"declarative\";\n\n// https://tc39.es/ecma262/#sec-environment-records\nexport class EnvironmentRecord {\n readonly OuterEnv: EnvironmentRecord | null | undefined;\n private readonly bindingMap = new Map<string, BindingState>();\n\n constructor(outer: EnvironmentRecord | null | undefined) {\n this.OuterEnv = outer;\n }\n\n HasBinding(name: string): boolean {\n return this.bindingMap.has(name);\n }\n\n CreateMutableBinding(name: string, deletable: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n mutable: true,\n deletable,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Create an immutable binding.\n *\n * @param name - The binding name.\n * @param strict - For named function expressions, strict is false, otherwise it's true.\n * @returns CompletionRecord.\n */\n CreateImmutableBinding(name: string, strict: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n strict,\n });\n return NormalCompletion(undefined);\n }\n\n InitializeBinding(name: string, value: unknown): CompletionRecord {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists and uninitialized.\n Object.assign<BindingState, Partial<BindingState>>(binding, {\n initialized: true,\n value,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Update a mutable binding value, including function declarations.\n *\n * @param name - The binding name.\n * @param value - The binding value.\n * @param strict - For functions, strict is always false, otherwise it depends on strict-mode.\n * @returns\n */\n SetMutableBinding(\n name: string,\n value: unknown,\n strict?: boolean\n ): CompletionRecord {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n } else if (binding.mutable) {\n binding.value = value;\n } else {\n throw new TypeError(`Assignment to constant variable`);\n }\n return NormalCompletion(undefined);\n }\n\n GetBindingValue(name: string, strict?: boolean): unknown {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n }\n return binding.value;\n }\n}\n\nexport class DeclarativeEnvironment extends EnvironmentRecord {}\n\nexport class FunctionEnvironment extends EnvironmentRecord {}\n\nexport interface BindingState {\n initialized?: boolean;\n value?: unknown;\n mutable?: boolean;\n\n /** This is used for mutable bindings only. */\n deletable?: boolean;\n\n /**\n * This is used for immutable bindings only.\n * For named function expressions, `strict` is false,\n * otherwise it's true.\n */\n strict?: boolean;\n}\n\nexport const SourceNode = Symbol.for(\"SourceNode\");\nexport const FormalParameters = Symbol.for(\"FormalParameters\");\nexport const ECMAScriptCode = Symbol.for(\"ECMAScriptCode\");\nexport const Environment = Symbol.for(\"Environment\");\nexport const IsConstructor = Symbol.for(\"IsConstructor\");\n\nexport interface FunctionObject {\n (...args: unknown[]): unknown;\n [SourceNode]:\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression;\n [FormalParameters]: FunctionDeclaration[\"params\"];\n [ECMAScriptCode]: Statement[] | Expression;\n [Environment]: EnvironmentRecord;\n [IsConstructor]: boolean;\n}\n\n// https://tc39.es/ecma262/#sec-reference-record-specification-type\nexport class ReferenceRecord {\n readonly Base:\n | Record<PropertyKey, unknown>\n | EnvironmentRecord\n | \"unresolvable\";\n readonly ReferenceName: PropertyKey;\n /** Whether the reference is in strict mode. */\n readonly Strict?: boolean;\n\n constructor(\n base: Record<PropertyKey, unknown> | EnvironmentRecord | \"unresolvable\",\n referenceName: PropertyKey,\n strict: boolean\n ) {\n this.Base = base;\n this.ReferenceName = referenceName;\n this.Strict = strict;\n }\n}\n\n// https://tc39.es/ecma262/#sec-completion-record-specification-type\nexport class CompletionRecord {\n readonly Type: CompletionRecordType;\n readonly Value: unknown;\n\n constructor(type: CompletionRecordType, value: unknown) {\n this.Type = type;\n this.Value = value;\n }\n}\n\nexport type CompletionRecordType =\n | \"normal\"\n | \"break\"\n | \"continue\"\n | \"return\"\n | \"throw\";\n\n// https://tc39.es/ecma262/#sec-normalcompletion\nexport function NormalCompletion(value: unknown): CompletionRecord {\n return new CompletionRecord(\"normal\", value);\n}\n\nexport const Empty = Symbol(\"empty completion\");\n\nexport interface OptionalChainRef {\n skipped?: boolean;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ExecutionContext.js","names":["Mode","exports","SourceNode","Symbol","for","FormalParameters","ECMAScriptCode","Environment","IsConstructor","ThisMode","DebuggerCall","DebuggerScope","DebuggerNode","DebuggerReturn","ExecutionContext","VariableEnvironment","LexicalEnvironment","Function","BindingStatus","EnvironmentRecord","OuterEnv","bindingMap","Map","ThisValue","undefined","ThisBindingStatus","constructor","outer","HasBinding","name","has","CreateMutableBinding","deletable","set","mutable","NormalCompletion","CreateImmutableBinding","strict","InitializeBinding","value","binding","get","Object","assign","initialized","SetMutableBinding","_strict","ReferenceError","TypeError","GetBindingValue","HasThisBinding","DeclarativeEnvironment","FunctionEnvironment","F","LEXICAL","UNINITIALIZED","BindThisValue","INITIALIZED","Error","GetThisBinding","ReferenceRecord","Base","ReferenceName","Strict","base","referenceName","CompletionRecord","Type","Value","type","Empty"],"sources":["../../src/ExecutionContext.ts"],"sourcesContent":["import type {\n ArrowFunctionExpression,\n Expression,\n FunctionDeclaration,\n FunctionExpression,\n Statement,\n} from \"@babel/types\";\nimport type { EstreeNode } from \"./interfaces.js\";\n\nexport enum Mode {\n LEXICAL,\n STRICT,\n}\n\nexport const SourceNode = Symbol.for(\"SourceNode\");\nexport const FormalParameters = Symbol.for(\"FormalParameters\");\nexport const ECMAScriptCode = Symbol.for(\"ECMAScriptCode\");\nexport const Environment = Symbol.for(\"Environment\");\nexport const IsConstructor = Symbol.for(\"IsConstructor\");\nexport const ThisMode = Symbol.for(\"ThisMode\");\nexport const DebuggerCall = Symbol.for(\"$DebuggerCall$\");\nexport const DebuggerScope = Symbol.for(\"$DebuggerScope$\");\nexport const DebuggerNode = Symbol.for(\"$DebuggerNode$\");\nexport const DebuggerReturn = Symbol.for(\"$DebuggerReturn$\");\n\n// https://tc39.es/ecma262/#sec-execution-contexts\nexport class ExecutionContext {\n VariableEnvironment?: EnvironmentRecord;\n LexicalEnvironment?: EnvironmentRecord;\n Function?: FunctionObject;\n}\n\nexport type EnvironmentRecordType = \"function\" | \"declarative\";\n\nexport enum BindingStatus {\n UNINITIALIZED,\n LEXICAL,\n INITIALIZED,\n}\n\n// https://tc39.es/ecma262/#sec-environment-records\nexport class EnvironmentRecord {\n readonly OuterEnv: EnvironmentRecord | null | undefined;\n private readonly bindingMap = new Map<string, BindingState>();\n protected ThisValue: unknown = undefined;\n protected ThisBindingStatus: BindingStatus | undefined;\n\n constructor(outer: EnvironmentRecord | null | undefined) {\n this.OuterEnv = outer;\n }\n\n HasBinding(name: string): boolean {\n return this.bindingMap.has(name);\n }\n\n CreateMutableBinding(name: string, deletable: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n mutable: true,\n deletable,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Create an immutable binding.\n *\n * @param name - The binding name.\n * @param strict - For named function expressions, strict is false, otherwise it's true.\n * @returns CompletionRecord.\n */\n CreateImmutableBinding(name: string, strict: boolean): CompletionRecord {\n // Assert: binding does not exist.\n this.bindingMap.set(name, {\n strict,\n });\n return NormalCompletion(undefined);\n }\n\n InitializeBinding(name: string, value: unknown): CompletionRecord {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists and uninitialized.\n Object.assign<BindingState, Partial<BindingState>>(binding, {\n initialized: true,\n value,\n });\n return NormalCompletion(undefined);\n }\n\n /**\n * Update a mutable binding value, including function declarations.\n *\n * @param name - The binding name.\n * @param value - The binding value.\n * @param strict - For functions, strict is always false, otherwise it depends on strict-mode.\n * @returns\n */\n SetMutableBinding(\n name: string,\n value: unknown,\n _strict?: boolean\n ): CompletionRecord {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n } else if (binding.mutable) {\n binding.value = value;\n } else {\n throw new TypeError(`Assignment to constant variable`);\n }\n return NormalCompletion(undefined);\n }\n\n GetBindingValue(name: string, _strict?: boolean): unknown {\n const binding = this.bindingMap.get(name) as BindingState;\n // Assert: binding exists.\n if (!binding.initialized) {\n throw new ReferenceError(`${name} is not initialized`);\n }\n return binding.value;\n }\n\n HasThisBinding() {\n return false;\n }\n}\n\nexport class DeclarativeEnvironment extends EnvironmentRecord {}\n\nexport class FunctionEnvironment extends EnvironmentRecord {\n constructor(F: FunctionObject) {\n super(F[Environment]);\n if (F[ThisMode] === Mode.LEXICAL) {\n this.ThisBindingStatus = BindingStatus.LEXICAL;\n } else {\n this.ThisBindingStatus = BindingStatus.UNINITIALIZED;\n }\n }\n\n HasThisBinding() {\n return this.ThisBindingStatus !== BindingStatus.LEXICAL;\n }\n\n BindThisValue(value: unknown) {\n // Assert: envRec.[[ThisBindingStatus]] is not LEXICAL.\n if (this.ThisBindingStatus === BindingStatus.INITIALIZED) {\n throw new Error(\"This binding has been initialized\");\n }\n this.ThisValue = value;\n this.ThisBindingStatus = BindingStatus.INITIALIZED;\n }\n\n GetThisBinding() {\n // Assert: envRec.[[ThisBindingStatus]] is not LEXICAL.\n if (this.ThisBindingStatus === BindingStatus.UNINITIALIZED) {\n throw new Error(\"This binding is not initialized\");\n }\n return this.ThisValue;\n }\n}\n\nexport interface BindingState {\n initialized?: boolean;\n value?: unknown;\n mutable?: boolean;\n\n /** This is used for mutable bindings only. */\n deletable?: boolean;\n\n /**\n * This is used for immutable bindings only.\n * For named function expressions, `strict` is false,\n * otherwise it's true.\n */\n strict?: boolean;\n}\n\nexport interface FunctionObject {\n (...args: unknown[]): unknown;\n [SourceNode]:\n | FunctionDeclaration\n | FunctionExpression\n | ArrowFunctionExpression;\n [FormalParameters]: FunctionDeclaration[\"params\"];\n [ECMAScriptCode]: Statement[] | Expression;\n [Environment]: EnvironmentRecord;\n [IsConstructor]: boolean;\n [ThisMode]?: Mode;\n [DebuggerCall]?: (...args: unknown[]) => IterableIterator<unknown>;\n [DebuggerScope]?: () => EnvironmentRecord | null | undefined;\n [DebuggerNode]?: () => EstreeNode | undefined;\n}\n\n// https://tc39.es/ecma262/#sec-reference-record-specification-type\nexport class ReferenceRecord {\n readonly Base:\n | Record<PropertyKey, unknown>\n | EnvironmentRecord\n | \"unresolvable\";\n readonly ReferenceName: PropertyKey;\n /** Whether the reference is in strict mode. */\n readonly Strict?: boolean;\n\n constructor(\n base: Record<PropertyKey, unknown> | EnvironmentRecord | \"unresolvable\",\n referenceName: PropertyKey,\n strict: boolean\n ) {\n this.Base = base;\n this.ReferenceName = referenceName;\n this.Strict = strict;\n }\n}\n\n// https://tc39.es/ecma262/#sec-completion-record-specification-type\nexport class CompletionRecord {\n readonly Type: CompletionRecordType;\n readonly Value: unknown;\n\n constructor(type: CompletionRecordType, value: unknown) {\n this.Type = type;\n this.Value = value;\n }\n}\n\nexport type CompletionRecordType =\n | \"normal\"\n | \"break\"\n | \"continue\"\n | \"return\"\n | \"throw\";\n\n// https://tc39.es/ecma262/#sec-normalcompletion\nexport function NormalCompletion(value: unknown): CompletionRecord {\n return new CompletionRecord(\"normal\", value);\n}\n\nexport const Empty = Symbol(\"empty completion\");\n\nexport interface OptionalChainRef {\n skipped?: boolean;\n}\n"],"mappings":";;;;;;;;IASYA,IAAI,GAAAC,OAAA,CAAAD,IAAA,0BAAJA,IAAI;EAAJA,IAAI,CAAJA,IAAI;EAAJA,IAAI,CAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA;AAKT,MAAME,UAAU,GAAAD,OAAA,CAAAC,UAAA,GAAGC,MAAM,CAACC,GAAG,CAAC,YAAY,CAAC;AAC3C,MAAMC,gBAAgB,GAAAJ,OAAA,CAAAI,gBAAA,GAAGF,MAAM,CAACC,GAAG,CAAC,kBAAkB,CAAC;AACvD,MAAME,cAAc,GAAAL,OAAA,CAAAK,cAAA,GAAGH,MAAM,CAACC,GAAG,CAAC,gBAAgB,CAAC;AACnD,MAAMG,WAAW,GAAAN,OAAA,CAAAM,WAAA,GAAGJ,MAAM,CAACC,GAAG,CAAC,aAAa,CAAC;AAC7C,MAAMI,aAAa,GAAAP,OAAA,CAAAO,aAAA,GAAGL,MAAM,CAACC,GAAG,CAAC,eAAe,CAAC;AACjD,MAAMK,QAAQ,GAAAR,OAAA,CAAAQ,QAAA,GAAGN,MAAM,CAACC,GAAG,CAAC,UAAU,CAAC;AACvC,MAAMM,YAAY,GAAAT,OAAA,CAAAS,YAAA,GAAGP,MAAM,CAACC,GAAG,CAAC,gBAAgB,CAAC;AACjD,MAAMO,aAAa,GAAAV,OAAA,CAAAU,aAAA,GAAGR,MAAM,CAACC,GAAG,CAAC,iBAAiB,CAAC;AACnD,MAAMQ,YAAY,GAAAX,OAAA,CAAAW,YAAA,GAAGT,MAAM,CAACC,GAAG,CAAC,gBAAgB,CAAC;AACjD,MAAMS,cAAc,GAAAZ,OAAA,CAAAY,cAAA,GAAGV,MAAM,CAACC,GAAG,CAAC,kBAAkB,CAAC;;AAE5D;AACO,MAAMU,gBAAgB,CAAC;EAC5BC,mBAAmB;EACnBC,kBAAkB;EAClBC,QAAQ;AACV;AAAChB,OAAA,CAAAa,gBAAA,GAAAA,gBAAA;AAAA,IAIWI,aAAa,GAAAjB,OAAA,CAAAiB,aAAA,0BAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA,OAMzB;AACO,MAAMC,iBAAiB,CAAC;EACpBC,QAAQ;EACAC,UAAU,GAAG,IAAIC,GAAG,CAAuB,CAAC;EACnDC,SAAS,GAAYC,SAAS;EAC9BC,iBAAiB;EAE3BC,WAAWA,CAACC,KAA2C,EAAE;IACvD,IAAI,CAACP,QAAQ,GAAGO,KAAK;EACvB;EAEAC,UAAUA,CAACC,IAAY,EAAW;IAChC,OAAO,IAAI,CAACR,UAAU,CAACS,GAAG,CAACD,IAAI,CAAC;EAClC;EAEAE,oBAAoBA,CAACF,IAAY,EAAEG,SAAkB,EAAoB;IACvE;IACA,IAAI,CAACX,UAAU,CAACY,GAAG,CAACJ,IAAI,EAAE;MACxBK,OAAO,EAAE,IAAI;MACbF;IACF,CAAC,CAAC;IACF,OAAOG,gBAAgB,CAACX,SAAS,CAAC;EACpC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEY,sBAAsBA,CAACP,IAAY,EAAEQ,MAAe,EAAoB;IACtE;IACA,IAAI,CAAChB,UAAU,CAACY,GAAG,CAACJ,IAAI,EAAE;MACxBQ;IACF,CAAC,CAAC;IACF,OAAOF,gBAAgB,CAACX,SAAS,CAAC;EACpC;EAEAc,iBAAiBA,CAACT,IAAY,EAAEU,KAAc,EAAoB;IAChE,MAAMC,OAAO,GAAG,IAAI,CAACnB,UAAU,CAACoB,GAAG,CAACZ,IAAI,CAAiB;IACzD;IACAa,MAAM,CAACC,MAAM,CAAsCH,OAAO,EAAE;MAC1DI,WAAW,EAAE,IAAI;MACjBL;IACF,CAAC,CAAC;IACF,OAAOJ,gBAAgB,CAACX,SAAS,CAAC;EACpC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEqB,iBAAiBA,CACfhB,IAAY,EACZU,KAAc,EACdO,OAAiB,EACC;IAClB,MAAMN,OAAO,GAAG,IAAI,CAACnB,UAAU,CAACoB,GAAG,CAACZ,IAAI,CAAiB;IACzD;IACA,IAAI,CAACW,OAAO,CAACI,WAAW,EAAE;MACxB,MAAM,IAAIG,cAAc,CAAC,GAAGlB,IAAI,qBAAqB,CAAC;IACxD,CAAC,MAAM,IAAIW,OAAO,CAACN,OAAO,EAAE;MAC1BM,OAAO,CAACD,KAAK,GAAGA,KAAK;IACvB,CAAC,MAAM;MACL,MAAM,IAAIS,SAAS,CAAC,iCAAiC,CAAC;IACxD;IACA,OAAOb,gBAAgB,CAACX,SAAS,CAAC;EACpC;EAEAyB,eAAeA,CAACpB,IAAY,EAAEiB,OAAiB,EAAW;IACxD,MAAMN,OAAO,GAAG,IAAI,CAACnB,UAAU,CAACoB,GAAG,CAACZ,IAAI,CAAiB;IACzD;IACA,IAAI,CAACW,OAAO,CAACI,WAAW,EAAE;MACxB,MAAM,IAAIG,cAAc,CAAC,GAAGlB,IAAI,qBAAqB,CAAC;IACxD;IACA,OAAOW,OAAO,CAACD,KAAK;EACtB;EAEAW,cAAcA,CAAA,EAAG;IACf,OAAO,KAAK;EACd;AACF;AAACjD,OAAA,CAAAkB,iBAAA,GAAAA,iBAAA;AAEM,MAAMgC,sBAAsB,SAAShC,iBAAiB,CAAC;AAAElB,OAAA,CAAAkD,sBAAA,GAAAA,sBAAA;AAEzD,MAAMC,mBAAmB,SAASjC,iBAAiB,CAAC;EACzDO,WAAWA,CAAC2B,CAAiB,EAAE;IAC7B,KAAK,CAACA,CAAC,CAAC9C,WAAW,CAAC,CAAC;IACrB,IAAI8C,CAAC,CAAC5C,QAAQ,CAAC,KAAKT,IAAI,CAACsD,OAAO,EAAE;MAChC,IAAI,CAAC7B,iBAAiB,GAAGP,aAAa,CAACoC,OAAO;IAChD,CAAC,MAAM;MACL,IAAI,CAAC7B,iBAAiB,GAAGP,aAAa,CAACqC,aAAa;IACtD;EACF;EAEAL,cAAcA,CAAA,EAAG;IACf,OAAO,IAAI,CAACzB,iBAAiB,KAAKP,aAAa,CAACoC,OAAO;EACzD;EAEAE,aAAaA,CAACjB,KAAc,EAAE;IAC5B;IACA,IAAI,IAAI,CAACd,iBAAiB,KAAKP,aAAa,CAACuC,WAAW,EAAE;MACxD,MAAM,IAAIC,KAAK,CAAC,mCAAmC,CAAC;IACtD;IACA,IAAI,CAACnC,SAAS,GAAGgB,KAAK;IACtB,IAAI,CAACd,iBAAiB,GAAGP,aAAa,CAACuC,WAAW;EACpD;EAEAE,cAAcA,CAAA,EAAG;IACf;IACA,IAAI,IAAI,CAAClC,iBAAiB,KAAKP,aAAa,CAACqC,aAAa,EAAE;MAC1D,MAAM,IAAIG,KAAK,CAAC,iCAAiC,CAAC;IACpD;IACA,OAAO,IAAI,CAACnC,SAAS;EACvB;AACF;AAACtB,OAAA,CAAAmD,mBAAA,GAAAA,mBAAA;AAkCD;AACO,MAAMQ,eAAe,CAAC;EAClBC,IAAI;EAIJC,aAAa;EACtB;EACSC,MAAM;EAEfrC,WAAWA,CACTsC,IAAuE,EACvEC,aAA0B,EAC1B5B,MAAe,EACf;IACA,IAAI,CAACwB,IAAI,GAAGG,IAAI;IAChB,IAAI,CAACF,aAAa,GAAGG,aAAa;IAClC,IAAI,CAACF,MAAM,GAAG1B,MAAM;EACtB;AACF;;AAEA;AAAApC,OAAA,CAAA2D,eAAA,GAAAA,eAAA;AACO,MAAMM,gBAAgB,CAAC;EACnBC,IAAI;EACJC,KAAK;EAEd1C,WAAWA,CAAC2C,IAA0B,EAAE9B,KAAc,EAAE;IACtD,IAAI,CAAC4B,IAAI,GAAGE,IAAI;IAChB,IAAI,CAACD,KAAK,GAAG7B,KAAK;EACpB;AACF;AAACtC,OAAA,CAAAiE,gBAAA,GAAAA,gBAAA;AASD;AACO,SAAS/B,gBAAgBA,CAACI,KAAc,EAAoB;EACjE,OAAO,IAAI2B,gBAAgB,CAAC,QAAQ,EAAE3B,KAAK,CAAC;AAC9C;AAEO,MAAM+B,KAAK,GAAArE,OAAA,CAAAqE,KAAA,GAAGnE,MAAM,CAAC,kBAAkB,CAAC","ignoreList":[]}
@@ -177,6 +177,8 @@ function ApplyStringOrNumericBinaryOperator(leftValue, operator, rightValue) {
177
177
  return leftValue >= rightValue;
178
178
  case "<=":
179
179
  return leftValue <= rightValue;
180
+ case "in":
181
+ return leftValue in rightValue;
180
182
  }
181
183
  throw new SyntaxError(`Unsupported binary operator \`${operator}\``);
182
184
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context-free.js","names":["_ExecutionContext","require","_traverse","IsPropertyReference","V","Base","EnvironmentRecord","InitializeReferencedBinding","W","base","InitializeBinding","ReferenceName","CopyDataProperties","target","source","excludedItems","undefined","keys","Object","getOwnPropertyNames","concat","getOwnPropertySymbols","nextKey","has","desc","getOwnPropertyDescriptor","enumerable","ForDeclarationBindingInstantiation","forDeclaration","env","isConst","kind","name","collectBoundNames","CreateImmutableBinding","CreateMutableBinding","LoopContinues","completion","Type","UpdateEmpty","value","Value","Empty","CompletionRecord","GetValue","ReferenceRecord","ReferenceError","GetBindingValue","Strict","ToPropertyKey","arg","String","GetV","P","PutValue","SetMutableBinding","NormalCompletion","CreateListIteratorRecord","args","isIterable","TypeError","Symbol","iterator","RequireObjectCoercible","GetIdentifierReference","strict","HasBinding","OuterEnv","ApplyStringOrNumericBinaryOperator","leftValue","operator","rightValue","SyntaxError","ApplyStringOrNumericAssignment","substr","length","ApplyUnaryOperator","cooked","Array","isArray"],"sources":["../../src/context-free.ts"],"sourcesContent":["import {\n BinaryExpression,\n UnaryExpression,\n VariableDeclaration,\n} from \"@babel/types\";\nimport {\n CompletionRecord,\n Empty,\n EnvironmentRecord,\n NormalCompletion,\n ReferenceRecord,\n} from \"./ExecutionContext.js\";\nimport { collectBoundNames } from \"./traverse.js\";\n\n// https://tc39.es/ecma262/#sec-ispropertyreference\nexport function IsPropertyReference(V: ReferenceRecord): boolean {\n return V.Base !== \"unresolvable\" && !(V.Base instanceof EnvironmentRecord);\n}\n\n// https://tc39.es/ecma262/#sec-initializereferencedbinding\nexport function InitializeReferencedBinding(\n V: ReferenceRecord,\n W: unknown\n): CompletionRecord {\n const base = V.Base as EnvironmentRecord;\n return base.InitializeBinding(V.ReferenceName as string, W);\n}\n\n// https://tc39.es/ecma262/#sec-copydataproperties\nexport function CopyDataProperties(\n target: Record<PropertyKey, unknown>,\n source: unknown,\n excludedItems: Set<PropertyKey>\n): Record<PropertyKey, unknown> {\n if (source === undefined || source === null) {\n return target;\n }\n const keys = (Object.getOwnPropertyNames(source) as PropertyKey[]).concat(\n Object.getOwnPropertySymbols(source)\n );\n for (const nextKey of keys) {\n if (!excludedItems.has(nextKey)) {\n const desc = Object.getOwnPropertyDescriptor(source, nextKey);\n if (desc?.enumerable) {\n target[nextKey] = (source as Record<PropertyKey, unknown>)[nextKey];\n }\n }\n }\n return target;\n}\n\n// https://tc39.es/ecma262/#sec-runtime-semantics-fordeclarationbindinginstantiation\nexport function ForDeclarationBindingInstantiation(\n forDeclaration: VariableDeclaration,\n env: EnvironmentRecord\n): void {\n const isConst = forDeclaration.kind === \"const\";\n for (const name of collectBoundNames(forDeclaration)) {\n if (isConst) {\n env.CreateImmutableBinding(name, true);\n } else {\n env.CreateMutableBinding(name, false);\n }\n }\n}\n\n// https://tc39.es/ecma262/#sec-loopcontinues\nexport function LoopContinues(completion: CompletionRecord): boolean {\n return completion.Type === \"normal\" || completion.Type == \"continue\";\n}\n\n// https://tc39.es/ecma262/#sec-updateempty\nexport function UpdateEmpty(\n completion: CompletionRecord,\n value: unknown\n): CompletionRecord {\n if (completion.Value !== Empty) {\n return completion;\n }\n return new CompletionRecord(completion.Type, value);\n}\n\n// https://tc39.es/ecma262/#sec-getvalue\nexport function GetValue(V: unknown): unknown {\n if (V instanceof CompletionRecord) {\n // Assert: V.Type is normal.\n V = V.Value;\n }\n if (!(V instanceof ReferenceRecord)) {\n return V;\n }\n if (V.Base === \"unresolvable\") {\n throw new ReferenceError(`${V.ReferenceName as string} is not defined`);\n }\n if (V.Base instanceof EnvironmentRecord) {\n const base = V.Base as EnvironmentRecord;\n return base.GetBindingValue(V.ReferenceName as string, V.Strict);\n }\n return V.Base[V.ReferenceName];\n}\n\n// https://tc39.es/ecma262/#sec-topropertykey\nexport function ToPropertyKey(arg: unknown): string | symbol {\n if (typeof arg === \"symbol\") {\n return arg;\n }\n return String(arg);\n}\n\n// https://tc39.es/ecma262/#sec-getv\nexport function GetV(V: unknown, P: PropertyKey): unknown {\n return (V as Record<PropertyKey, unknown>)[P];\n}\n\n// https://tc39.es/ecma262/#sec-putvalue\nexport function PutValue(V: ReferenceRecord, W: unknown): CompletionRecord {\n // Assert: V is a ReferenceRecord.\n if (V.Base === \"unresolvable\") {\n throw new ReferenceError(`${V.ReferenceName as string} is not defined`);\n }\n if (V.Base instanceof EnvironmentRecord) {\n return V.Base.SetMutableBinding(V.ReferenceName as string, W, V.Strict);\n }\n V.Base[V.ReferenceName] = W;\n return NormalCompletion(undefined);\n}\n\n// https://tc39.es/ecma262/#sec-createlistiteratorRecord\nexport function CreateListIteratorRecord(\n args: Iterable<unknown>\n): Iterator<unknown> {\n if (!isIterable(args)) {\n throw new TypeError(`${typeof args} is not iterable`);\n }\n return args[Symbol.iterator]();\n}\n\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nexport function RequireObjectCoercible(arg: unknown): void {\n if (arg === null || arg === undefined) {\n throw new TypeError(\"Cannot destructure properties of undefined or null\");\n }\n}\n\n// https://tc39.es/ecma262/#sec-getidentifierreference\nexport function GetIdentifierReference(\n env: EnvironmentRecord | null | undefined,\n name: string,\n strict: boolean\n): ReferenceRecord {\n if (!env) {\n return new ReferenceRecord(\"unresolvable\", name, strict);\n }\n if (env.HasBinding(name)) {\n return new ReferenceRecord(env, name, strict);\n }\n return GetIdentifierReference(env.OuterEnv, name, strict);\n}\n\n// https://tc39.es/ecma262/#sec-applystringornumericbinaryoperator\nexport function ApplyStringOrNumericBinaryOperator(\n leftValue: number,\n operator: BinaryExpression[\"operator\"] | \"|>\",\n rightValue: number\n): unknown {\n switch (operator) {\n case \"+\":\n return leftValue + rightValue;\n case \"-\":\n return leftValue - rightValue;\n case \"/\":\n return leftValue / rightValue;\n case \"%\":\n return leftValue % rightValue;\n case \"*\":\n return leftValue * rightValue;\n case \"**\":\n return leftValue ** rightValue;\n case \"==\":\n return leftValue == rightValue;\n case \"===\":\n return leftValue === rightValue;\n case \"!=\":\n return leftValue != rightValue;\n case \"!==\":\n return leftValue !== rightValue;\n case \">\":\n return leftValue > rightValue;\n case \"<\":\n return leftValue < rightValue;\n case \">=\":\n return leftValue >= rightValue;\n case \"<=\":\n return leftValue <= rightValue;\n }\n throw new SyntaxError(`Unsupported binary operator \\`${operator}\\``);\n}\n\n// https://tc39.es/ecma262/#sec-assignment-operators\nexport function ApplyStringOrNumericAssignment(\n leftValue: string | number,\n operator: string,\n rightValue: string | number\n): unknown {\n switch (operator) {\n case \"+=\":\n case \"-=\":\n case \"*=\":\n case \"/=\":\n case \"%=\":\n case \"**=\":\n return ApplyStringOrNumericBinaryOperator(\n leftValue as number,\n operator.substr(0, operator.length - 1) as BinaryExpression[\"operator\"],\n rightValue as number\n );\n }\n\n throw new SyntaxError(`Unsupported assignment operator \\`${operator}\\``);\n}\n\n// https://tc39.es/ecma262/#sec-unary-operators\nexport function ApplyUnaryOperator(\n target: unknown,\n operator: UnaryExpression[\"operator\"]\n): unknown {\n switch (operator) {\n case \"!\":\n return !target;\n case \"+\":\n return +(target as string | number);\n case \"-\":\n return -(target as string | number);\n case \"void\":\n return undefined;\n }\n throw new SyntaxError(`Unsupported unary operator \\`${operator}\\``);\n}\n\nexport function isIterable(cooked: unknown): boolean {\n if (Array.isArray(cooked)) {\n return true;\n }\n if (cooked === null || cooked === undefined) {\n return false;\n }\n return typeof (cooked as Iterable<unknown>)[Symbol.iterator] === \"function\";\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"context-free.js","names":["_ExecutionContext","require","_traverse","IsPropertyReference","V","Base","EnvironmentRecord","InitializeReferencedBinding","W","base","InitializeBinding","ReferenceName","CopyDataProperties","target","source","excludedItems","undefined","keys","Object","getOwnPropertyNames","concat","getOwnPropertySymbols","nextKey","has","desc","getOwnPropertyDescriptor","enumerable","ForDeclarationBindingInstantiation","forDeclaration","env","isConst","kind","name","collectBoundNames","CreateImmutableBinding","CreateMutableBinding","LoopContinues","completion","Type","UpdateEmpty","value","Value","Empty","CompletionRecord","GetValue","ReferenceRecord","ReferenceError","GetBindingValue","Strict","ToPropertyKey","arg","String","GetV","P","PutValue","SetMutableBinding","NormalCompletion","CreateListIteratorRecord","args","isIterable","TypeError","Symbol","iterator","RequireObjectCoercible","GetIdentifierReference","strict","HasBinding","OuterEnv","ApplyStringOrNumericBinaryOperator","leftValue","operator","rightValue","SyntaxError","ApplyStringOrNumericAssignment","substr","length","ApplyUnaryOperator","cooked","Array","isArray"],"sources":["../../src/context-free.ts"],"sourcesContent":["import {\n BinaryExpression,\n UnaryExpression,\n VariableDeclaration,\n} from \"@babel/types\";\nimport {\n CompletionRecord,\n Empty,\n EnvironmentRecord,\n NormalCompletion,\n ReferenceRecord,\n} from \"./ExecutionContext.js\";\nimport { collectBoundNames } from \"./traverse.js\";\n\n// https://tc39.es/ecma262/#sec-ispropertyreference\nexport function IsPropertyReference(V: ReferenceRecord): boolean {\n return V.Base !== \"unresolvable\" && !(V.Base instanceof EnvironmentRecord);\n}\n\n// https://tc39.es/ecma262/#sec-initializereferencedbinding\nexport function InitializeReferencedBinding(\n V: ReferenceRecord,\n W: unknown\n): CompletionRecord {\n const base = V.Base as EnvironmentRecord;\n return base.InitializeBinding(V.ReferenceName as string, W);\n}\n\n// https://tc39.es/ecma262/#sec-copydataproperties\nexport function CopyDataProperties(\n target: Record<PropertyKey, unknown>,\n source: unknown,\n excludedItems: Set<PropertyKey>\n): Record<PropertyKey, unknown> {\n if (source === undefined || source === null) {\n return target;\n }\n const keys = (Object.getOwnPropertyNames(source) as PropertyKey[]).concat(\n Object.getOwnPropertySymbols(source)\n );\n for (const nextKey of keys) {\n if (!excludedItems.has(nextKey)) {\n const desc = Object.getOwnPropertyDescriptor(source, nextKey);\n if (desc?.enumerable) {\n target[nextKey] = (source as Record<PropertyKey, unknown>)[nextKey];\n }\n }\n }\n return target;\n}\n\n// https://tc39.es/ecma262/#sec-runtime-semantics-fordeclarationbindinginstantiation\nexport function ForDeclarationBindingInstantiation(\n forDeclaration: VariableDeclaration,\n env: EnvironmentRecord\n): void {\n const isConst = forDeclaration.kind === \"const\";\n for (const name of collectBoundNames(forDeclaration)) {\n if (isConst) {\n env.CreateImmutableBinding(name, true);\n } else {\n env.CreateMutableBinding(name, false);\n }\n }\n}\n\n// https://tc39.es/ecma262/#sec-loopcontinues\nexport function LoopContinues(completion: CompletionRecord): boolean {\n return completion.Type === \"normal\" || completion.Type == \"continue\";\n}\n\n// https://tc39.es/ecma262/#sec-updateempty\nexport function UpdateEmpty(\n completion: CompletionRecord,\n value: unknown\n): CompletionRecord {\n if (completion.Value !== Empty) {\n return completion;\n }\n return new CompletionRecord(completion.Type, value);\n}\n\n// https://tc39.es/ecma262/#sec-getvalue\nexport function GetValue(\n V: CompletionRecord | ReferenceRecord | unknown\n): unknown {\n if (V instanceof CompletionRecord) {\n // Assert: V.Type is normal.\n V = V.Value;\n }\n if (!(V instanceof ReferenceRecord)) {\n return V;\n }\n if (V.Base === \"unresolvable\") {\n throw new ReferenceError(`${V.ReferenceName as string} is not defined`);\n }\n if (V.Base instanceof EnvironmentRecord) {\n const base = V.Base as EnvironmentRecord;\n return base.GetBindingValue(V.ReferenceName as string, V.Strict);\n }\n return V.Base[V.ReferenceName];\n}\n\n// https://tc39.es/ecma262/#sec-topropertykey\nexport function ToPropertyKey(arg: unknown): string | symbol {\n if (typeof arg === \"symbol\") {\n return arg;\n }\n return String(arg);\n}\n\n// https://tc39.es/ecma262/#sec-getv\nexport function GetV(V: unknown, P: PropertyKey): unknown {\n return (V as Record<PropertyKey, unknown>)[P];\n}\n\n// https://tc39.es/ecma262/#sec-putvalue\nexport function PutValue(V: ReferenceRecord, W: unknown): CompletionRecord {\n // Assert: V is a ReferenceRecord.\n if (V.Base === \"unresolvable\") {\n throw new ReferenceError(`${V.ReferenceName as string} is not defined`);\n }\n if (V.Base instanceof EnvironmentRecord) {\n return V.Base.SetMutableBinding(V.ReferenceName as string, W, V.Strict);\n }\n V.Base[V.ReferenceName] = W;\n return NormalCompletion(undefined);\n}\n\n// https://tc39.es/ecma262/#sec-createlistiteratorRecord\nexport function CreateListIteratorRecord(\n args: Iterable<unknown>\n): Iterator<unknown> {\n if (!isIterable(args)) {\n throw new TypeError(`${typeof args} is not iterable`);\n }\n return args[Symbol.iterator]();\n}\n\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nexport function RequireObjectCoercible(arg: unknown): void {\n if (arg === null || arg === undefined) {\n throw new TypeError(\"Cannot destructure properties of undefined or null\");\n }\n}\n\n// https://tc39.es/ecma262/#sec-getidentifierreference\nexport function GetIdentifierReference(\n env: EnvironmentRecord | null | undefined,\n name: string,\n strict: boolean\n): ReferenceRecord {\n if (!env) {\n return new ReferenceRecord(\"unresolvable\", name, strict);\n }\n if (env.HasBinding(name)) {\n return new ReferenceRecord(env, name, strict);\n }\n return GetIdentifierReference(env.OuterEnv, name, strict);\n}\n\n// https://tc39.es/ecma262/#sec-applystringornumericbinaryoperator\nexport function ApplyStringOrNumericBinaryOperator(\n leftValue: number,\n operator: BinaryExpression[\"operator\"] | \"|>\",\n rightValue: number\n): unknown {\n switch (operator) {\n case \"+\":\n return leftValue + rightValue;\n case \"-\":\n return leftValue - rightValue;\n case \"/\":\n return leftValue / rightValue;\n case \"%\":\n return leftValue % rightValue;\n case \"*\":\n return leftValue * rightValue;\n case \"**\":\n return leftValue ** rightValue;\n case \"==\":\n return leftValue == rightValue;\n case \"===\":\n return leftValue === rightValue;\n case \"!=\":\n return leftValue != rightValue;\n case \"!==\":\n return leftValue !== rightValue;\n case \">\":\n return leftValue > rightValue;\n case \"<\":\n return leftValue < rightValue;\n case \">=\":\n return leftValue >= rightValue;\n case \"<=\":\n return leftValue <= rightValue;\n case \"in\":\n return leftValue in (rightValue as unknown as Record<number, unknown>);\n }\n throw new SyntaxError(`Unsupported binary operator \\`${operator}\\``);\n}\n\n// https://tc39.es/ecma262/#sec-assignment-operators\nexport function ApplyStringOrNumericAssignment(\n leftValue: string | number,\n operator: string,\n rightValue: string | number\n): unknown {\n switch (operator) {\n case \"+=\":\n case \"-=\":\n case \"*=\":\n case \"/=\":\n case \"%=\":\n case \"**=\":\n return ApplyStringOrNumericBinaryOperator(\n leftValue as number,\n operator.substr(0, operator.length - 1) as BinaryExpression[\"operator\"],\n rightValue as number\n );\n }\n\n throw new SyntaxError(`Unsupported assignment operator \\`${operator}\\``);\n}\n\n// https://tc39.es/ecma262/#sec-unary-operators\nexport function ApplyUnaryOperator(\n target: unknown,\n operator: UnaryExpression[\"operator\"]\n): unknown {\n switch (operator) {\n case \"!\":\n return !target;\n case \"+\":\n return +(target as string | number);\n case \"-\":\n return -(target as string | number);\n case \"void\":\n return undefined;\n }\n throw new SyntaxError(`Unsupported unary operator \\`${operator}\\``);\n}\n\nexport function isIterable(cooked: unknown): boolean {\n if (Array.isArray(cooked)) {\n return true;\n }\n if (cooked === null || cooked === undefined) {\n return false;\n }\n return typeof (cooked as Iterable<unknown>)[Symbol.iterator] === \"function\";\n}\n"],"mappings":"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","ignoreList":[]}