UNPKG

22.4 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/completions.js"],"names":["Completion","constructor","value","precedingEffects","location","target","e","undefined","result","shallowCloneWithResult","effects","shallowCloneWithoutEffects","toDisplayString","name","NormalCompletion","SimpleNormalCompletion","AbruptCompletion","ThrowCompletion","nativeStack","Error","stack","realm","$Realm","isInPureScope","callback","reportSideEffectCallbacks","ContinueCompletion","BreakCompletion","ReturnCompletion","EmptyValue","intrinsics","ForkedAbruptCompletion","joinCondition","consequent","alternate","empty","consequentEffects","alternateEffects","updateConsequentKeepingCurrentEffects","newConsequent","updateAlternateKeepingCurrentEffects","newAlternate","superString","slice","containsCompletion","CompletionType","containsBreakOrContinue","transferChildrenToPossiblyNormalCompletion","PossiblyNormalCompletion","savedPathConditions","savedEffects","getNormalCompletion"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { BabelNodeSourceLocation } from \"@babel/types\";\nimport invariant from \"./invariant.js\";\nimport { Effects, Realm } from \"./realm.js\";\nimport { AbstractValue, EmptyValue, Value } from \"./values/index.js\";\n\nexport class Completion {\n constructor(value: Value, precedingEffects: void | Effects, location: ?BabelNodeSourceLocation, target?: ?string) {\n let e = precedingEffects;\n if (e !== undefined) {\n if (e.result === undefined) e.result = this;\n else e = e.shallowCloneWithResult(this);\n }\n this.value = value;\n this.effects = e;\n this.target = target;\n this.location = location;\n invariant(this.constructor !== Completion, \"Completion is an abstract base class\");\n }\n\n value: Value;\n effects: void | Effects;\n target: ?string;\n location: ?BabelNodeSourceLocation;\n\n shallowCloneWithoutEffects(): Completion {\n invariant(false, \"Completion.shallowCloneWithoutEffects is an abstract base method and should not be called\");\n }\n\n toDisplayString(): string {\n return \"[\" + this.constructor.name + \" value \" + (this.value ? this.value.toDisplayString() : \"undefined\") + \"]\";\n }\n}\n\n// Normal completions are returned just like spec completions\nexport class NormalCompletion extends Completion {\n constructor(value: Value, precedingEffects: void | Effects, location: ?BabelNodeSourceLocation, target?: ?string) {\n super(value, precedingEffects, location, target);\n invariant(this.constructor !== NormalCompletion, \"NormalCompletion is an abstract base class\");\n }\n\n shallowCloneWithoutEffects(): NormalCompletion {\n invariant(false, \"NormalCompletion.shallowCloneWithoutEffects is an abstract base method and should not be called\");\n }\n}\n\n// SimpleNormalCompletions are returned just like spec completions. This class exists as the parallel for\n// PossiblyNormalCompletion to make comparisons easier.\nexport class SimpleNormalCompletion extends NormalCompletion {\n shallowCloneWithoutEffects(): SimpleNormalCompletion {\n return new SimpleNormalCompletion(this.value, undefined, this.location, this.target);\n }\n}\n\n// Abrupt completions are thrown as exeptions, to make it a easier\n// to quickly get to the matching high level construct.\nexport class AbruptCompletion extends Completion {\n constructor(value: Value, precedingEffects: void | Effects, location: ?BabelNodeSourceLocation, target?: ?string) {\n super(value, precedingEffects, location, target);\n invariant(this.constructor !== AbruptCompletion, \"AbruptCompletion is an abstract base class\");\n }\n\n shallowCloneWithoutEffects(): AbruptCompletion {\n invariant(false, \"AbruptCompletion.shallowCloneWithoutEffects is an abstract base method and should not be called\");\n }\n}\n\nexport class ThrowCompletion extends AbruptCompletion {\n constructor(\n value: Value,\n precedingEffects: void | Effects,\n location: ?BabelNodeSourceLocation,\n nativeStack?: ?string\n ) {\n super(value, precedingEffects, location);\n this.nativeStack = nativeStack || new Error().stack;\n let realm = value.$Realm;\n if (realm.isInPureScope()) {\n for (let callback of realm.reportSideEffectCallbacks) {\n callback(\"EXCEPTION_THROWN\", undefined, location);\n }\n }\n }\n\n nativeStack: string;\n\n shallowCloneWithoutEffects(): ThrowCompletion {\n return new ThrowCompletion(this.value, undefined, this.location, this.nativeStack);\n }\n}\n\nexport class ContinueCompletion extends AbruptCompletion {\n constructor(value: Value, precedingEffects: void | Effects, location: ?BabelNodeSourceLocation, target: ?string) {\n super(value, precedingEffects, location, target || null);\n }\n\n shallowCloneWithoutEffects(): ContinueCompletion {\n return new ContinueCompletion(this.value, undefined, this.location, this.target);\n }\n}\n\nexport class BreakCompletion extends AbruptCompletion {\n constructor(value: Value, precedingEffects: void | Effects, location: ?BabelNodeSourceLocation, target: ?string) {\n super(value, precedingEffects, location, target || null);\n }\n\n shallowCloneWithoutEffects(): BreakCompletion {\n return new BreakCompletion(this.value, undefined, this.location, this.target);\n }\n}\n\nexport class ReturnCompletion extends AbruptCompletion {\n constructor(value: Value, precedingEffects: void | Effects, location: ?BabelNodeSourceLocation) {\n super(value, precedingEffects, location);\n if (value instanceof EmptyValue) {\n this.value = value.$Realm.intrinsics.undefined;\n }\n }\n\n shallowCloneWithoutEffects(): ReturnCompletion {\n return new ReturnCompletion(this.value, undefined, this.location);\n }\n}\n\nexport class ForkedAbruptCompletion extends AbruptCompletion {\n constructor(realm: Realm, joinCondition: AbstractValue, consequent: AbruptCompletion, alternate: AbruptCompletion) {\n super(realm.intrinsics.empty, undefined, consequent.location);\n this.joinCondition = joinCondition;\n this.consequent = consequent;\n this.alternate = alternate;\n }\n\n joinCondition: AbstractValue;\n consequent: AbruptCompletion;\n alternate: AbruptCompletion;\n\n shallowCloneWithoutEffects(): ForkedAbruptCompletion {\n return new ForkedAbruptCompletion(this.value.$Realm, this.joinCondition, this.consequent, this.alternate);\n }\n\n // For convenience, this.consequent.effects should always be defined, but accessing it directly requires\n // verifying that with an invariant.\n get consequentEffects(): Effects {\n invariant(this.consequent.effects);\n return this.consequent.effects;\n }\n\n get alternateEffects(): Effects {\n invariant(this.alternate.effects);\n return this.alternate.effects;\n }\n\n updateConsequentKeepingCurrentEffects(newConsequent: AbruptCompletion): AbruptCompletion {\n let e = this.consequent.effects;\n invariant(e);\n newConsequent.effects = e.shallowCloneWithResult(newConsequent);\n this.consequent = newConsequent;\n return this;\n }\n\n updateAlternateKeepingCurrentEffects(newAlternate: AbruptCompletion): AbruptCompletion {\n let e = this.alternate.effects;\n invariant(e);\n newAlternate.effects = e.shallowCloneWithResult(newAlternate);\n this.alternate = newAlternate;\n return this;\n }\n\n toDisplayString(): string {\n let superString = super.toDisplayString().slice(0, -1);\n return (\n superString + \" c: [\" + this.consequent.toDisplayString() + \"] a: [\" + this.alternate.toDisplayString() + \"]]\"\n );\n }\n\n containsCompletion(CompletionType: typeof Completion): boolean {\n if (this.consequent instanceof CompletionType) return true;\n if (this.alternate instanceof CompletionType) return true;\n if (this.consequent instanceof ForkedAbruptCompletion) {\n if (this.consequent.containsCompletion(CompletionType)) return true;\n }\n if (this.alternate instanceof ForkedAbruptCompletion) {\n if (this.alternate.containsCompletion(CompletionType)) return true;\n }\n return false;\n }\n\n containsBreakOrContinue(): boolean {\n if (this.consequent instanceof BreakCompletion || this.consequent instanceof ContinueCompletion) return true;\n if (this.alternate instanceof BreakCompletion || this.alternate instanceof ContinueCompletion) return true;\n if (this.consequent instanceof ForkedAbruptCompletion) {\n if (this.consequent.containsBreakOrContinue()) return true;\n }\n if (this.alternate instanceof ForkedAbruptCompletion) {\n if (this.alternate.containsBreakOrContinue()) return true;\n }\n return false;\n }\n\n transferChildrenToPossiblyNormalCompletion(): PossiblyNormalCompletion {\n invariant(this.consequent.value instanceof EmptyValue || this.alternate.value instanceof EmptyValue);\n return new PossiblyNormalCompletion(\n this.value.$Realm.intrinsics.empty,\n this.joinCondition,\n this.consequent,\n this.alternate,\n []\n );\n }\n}\n\n// Possibly normal completions have to be treated like normal completions\n// and are thus never thrown. At the end of a try block or loop body, however,\n// action must be taken to deal with the possibly abrupt case of the completion.\nexport class PossiblyNormalCompletion extends NormalCompletion {\n constructor(\n value: Value,\n joinCondition: AbstractValue,\n consequent: Completion,\n alternate: Completion,\n savedPathConditions: Array<AbstractValue>,\n savedEffects: void | Effects = undefined\n ) {\n invariant(consequent instanceof NormalCompletion || alternate instanceof NormalCompletion);\n super(value, undefined, consequent.location);\n this.joinCondition = joinCondition;\n this.consequent = consequent;\n this.alternate = alternate;\n this.savedEffects = savedEffects;\n this.savedPathConditions = savedPathConditions;\n }\n\n joinCondition: AbstractValue;\n consequent: Completion;\n alternate: Completion;\n savedEffects: void | Effects;\n // The path conditions that applied at the time of the oldest fork that caused this completion to arise.\n savedPathConditions: Array<AbstractValue>;\n\n shallowCloneWithoutEffects(): PossiblyNormalCompletion {\n let consequentEffects = this.consequentEffects;\n let alternateEffects = this.alternateEffects;\n invariant(this.consequent === consequentEffects.result);\n invariant(this.alternate === alternateEffects.result);\n return new PossiblyNormalCompletion(\n this.value,\n this.joinCondition,\n this.consequent,\n this.alternate,\n this.savedPathConditions,\n this.savedEffects\n );\n }\n\n // For convenience, this.consequent.effects should always be defined, but accessing it directly requires\n // verifying that with an invariant.\n get consequentEffects(): Effects {\n invariant(this.consequent.effects);\n return this.consequent.effects;\n }\n\n get alternateEffects(): Effects {\n invariant(this.alternate.effects);\n return this.alternate.effects;\n }\n\n updateConsequentKeepingCurrentEffects(newConsequent: Completion): PossiblyNormalCompletion {\n if (newConsequent instanceof NormalCompletion) this.value = newConsequent.value;\n let e = this.consequentEffects;\n let effects = e.shallowCloneWithResult(newConsequent);\n this.consequent = effects.result;\n return this;\n }\n\n updateAlternateKeepingCurrentEffects(newAlternate: Completion): PossiblyNormalCompletion {\n if (newAlternate instanceof NormalCompletion) this.value = newAlternate.value;\n let e = this.alternateEffects;\n let effects = e.shallowCloneWithResult(newAlternate);\n this.alternate = effects.result;\n return this;\n }\n\n toDisplayString(): string {\n let superString = super.toDisplayString().slice(0, -1);\n return (\n superString + \" c: [\" + this.consequent.toDisplayString() + \"] a: [\" + this.alternate.toDisplayString() + \"]]\"\n );\n }\n\n getNormalCompletion(): SimpleNormalCompletion {\n let result;\n if (this.alternate instanceof SimpleNormalCompletion) {\n result = this.alternate;\n } else if (this.consequent instanceof SimpleNormalCompletion) {\n result = this.consequent;\n } else {\n if (this.alternate instanceof PossiblyNormalCompletion) {\n result = this.alternate.getNormalCompletion();\n } else {\n invariant(this.consequent instanceof PossiblyNormalCompletion);\n result = this.consequent.getNormalCompletion();\n }\n }\n invariant(result.value === this.value);\n return result;\n }\n\n containsCompletion(CompletionType: typeof Completion): boolean {\n if (this.consequent instanceof CompletionType) return true;\n if (this.alternate instanceof CompletionType) return true;\n if (this.consequent instanceof ForkedAbruptCompletion || this.consequent instanceof PossiblyNormalCompletion) {\n if (this.consequent.containsCompletion(CompletionType)) return true;\n }\n if (this.alternate instanceof ForkedAbruptCompletion || this.alternate instanceof PossiblyNormalCompletion) {\n if (this.alternate.containsCompletion(CompletionType)) return true;\n }\n return false;\n }\n\n containsBreakOrContinue(): boolean {\n if (this.consequent instanceof BreakCompletion || this.consequent instanceof ContinueCompletion) return true;\n if (this.alternate instanceof BreakCompletion || this.alternate instanceof ContinueCompletion) return true;\n if (this.consequent instanceof ForkedAbruptCompletion || this.consequent instanceof PossiblyNormalCompletion) {\n if (this.consequent.containsBreakOrContinue()) return true;\n }\n if (this.alternate instanceof ForkedAbruptCompletion || this.alternate instanceof PossiblyNormalCompletion) {\n if (this.alternate.containsBreakOrContinue()) return true;\n }\n return false;\n }\n}\n"],"file":"completions.js"}
\No newline at end of file