You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					91 lines
				
				1.9 KiB
			
		
		
			
		
	
	
					91 lines
				
				1.9 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.default = void 0; | ||
|  | 
 | ||
|  | class Binding { | ||
|  |   constructor({ | ||
|  |     identifier, | ||
|  |     scope, | ||
|  |     path, | ||
|  |     kind | ||
|  |   }) { | ||
|  |     this.identifier = void 0; | ||
|  |     this.scope = void 0; | ||
|  |     this.path = void 0; | ||
|  |     this.kind = void 0; | ||
|  |     this.constantViolations = []; | ||
|  |     this.constant = true; | ||
|  |     this.referencePaths = []; | ||
|  |     this.referenced = false; | ||
|  |     this.references = 0; | ||
|  |     this.identifier = identifier; | ||
|  |     this.scope = scope; | ||
|  |     this.path = path; | ||
|  |     this.kind = kind; | ||
|  |     if ((kind === "var" || kind === "hoisted") && | ||
|  |     isDeclaredInLoop(path || (() => { | ||
|  |       throw new Error("Internal Babel error: unreachable "); | ||
|  |     })())) { | ||
|  |       this.reassign(path); | ||
|  |     } | ||
|  |     this.clearValue(); | ||
|  |   } | ||
|  |   deoptValue() { | ||
|  |     this.clearValue(); | ||
|  |     this.hasDeoptedValue = true; | ||
|  |   } | ||
|  |   setValue(value) { | ||
|  |     if (this.hasDeoptedValue) return; | ||
|  |     this.hasValue = true; | ||
|  |     this.value = value; | ||
|  |   } | ||
|  |   clearValue() { | ||
|  |     this.hasDeoptedValue = false; | ||
|  |     this.hasValue = false; | ||
|  |     this.value = null; | ||
|  |   } | ||
|  | 
 | ||
|  |   reassign(path) { | ||
|  |     this.constant = false; | ||
|  |     if (this.constantViolations.indexOf(path) !== -1) { | ||
|  |       return; | ||
|  |     } | ||
|  |     this.constantViolations.push(path); | ||
|  |   } | ||
|  | 
 | ||
|  |   reference(path) { | ||
|  |     if (this.referencePaths.indexOf(path) !== -1) { | ||
|  |       return; | ||
|  |     } | ||
|  |     this.referenced = true; | ||
|  |     this.references++; | ||
|  |     this.referencePaths.push(path); | ||
|  |   } | ||
|  | 
 | ||
|  |   dereference() { | ||
|  |     this.references--; | ||
|  |     this.referenced = !!this.references; | ||
|  |   } | ||
|  | } | ||
|  | exports.default = Binding; | ||
|  | function isDeclaredInLoop(path) { | ||
|  |   for (let { | ||
|  |     parentPath, | ||
|  |     key | ||
|  |   } = path; parentPath; ({ | ||
|  |     parentPath, | ||
|  |     key | ||
|  |   } = parentPath)) { | ||
|  |     if (parentPath.isFunctionParent()) return false; | ||
|  |     if (parentPath.isWhile() || parentPath.isForXStatement() || parentPath.isForStatement() && key === "body") { | ||
|  |       return true; | ||
|  |     } | ||
|  |   } | ||
|  |   return false; | ||
|  | } | ||
|  | 
 | ||
|  | //# sourceMappingURL=binding.js.map
 |