|  | @@ -418,16 +418,24 @@ errorShadowingVariable: aString
 | 
	
		
			
				|  |  |  !
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  errorUnknownVariable: aNode
 | 
	
		
			
				|  |  | -	"Throw an error if the variable is undeclared in the global JS scope (i.e. window)"
 | 
	
		
			
				|  |  | +	"Throw an error if the variable is undeclared in the global JS scope (i.e. window).
 | 
	
		
			
				|  |  | +    We allow four variable names in addition: `jQuery`, `window`, `process` and `global` 
 | 
	
		
			
				|  |  | +    for nodejs and browser environments. 
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    This is only to make sure compilation works on both browser-based and nodejs environments.
 | 
	
		
			
				|  |  | +    The ideal solution would be to use a pragma instead"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	| identifier |
 | 
	
		
			
				|  |  |      identifier := aNode value.
 | 
	
		
			
				|  |  | -	((#('jQuery' 'window' 'process' 'global') includes: identifier) not and: [ self isVariableGloballyUndefined: identifier ]) ifTrue: [
 | 
	
		
			
				|  |  | -			UnknownVariableError new
 | 
	
		
			
				|  |  | -				variableName: aNode value;
 | 
	
		
			
				|  |  | -				signal ]
 | 
	
		
			
				|  |  | -		ifFalse: [
 | 
	
		
			
				|  |  | -			currentScope methodScope unknownVariables add: aNode value. ]
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +	((#('jQuery' 'window' 'process' 'global') includes: identifier) not 
 | 
	
		
			
				|  |  | +        and: [ self isVariableGloballyUndefined: identifier ]) 
 | 
	
		
			
				|  |  | +        	ifTrue: [
 | 
	
		
			
				|  |  | +				UnknownVariableError new
 | 
	
		
			
				|  |  | +					variableName: aNode value;
 | 
	
		
			
				|  |  | +					signal ]
 | 
	
		
			
				|  |  | +			ifFalse: [
 | 
	
		
			
				|  |  | +				currentScope methodScope unknownVariables add: aNode value ]
 | 
	
		
			
				|  |  |  ! !
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  !SemanticAnalyzer methodsFor: 'factory'!
 |