My first commit of codes
This commit is contained in:
		
							
								
								
									
										60
									
								
								vendor/psy/psysh/src/Psy/CodeCleaner/ValidFunctionNamePass.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								vendor/psy/psysh/src/Psy/CodeCleaner/ValidFunctionNamePass.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
| <?php | ||||
|  | ||||
| /* | ||||
|  * This file is part of Psy Shell | ||||
|  * | ||||
|  * (c) 2012-2014 Justin Hileman | ||||
|  * | ||||
|  * For the full copyright and license information, please view the LICENSE | ||||
|  * file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| namespace Psy\CodeCleaner; | ||||
|  | ||||
| use PhpParser\Node; | ||||
| use PhpParser\Node\Expr\FuncCall; | ||||
| use PhpParser\Node\Expr\Variable; | ||||
| use PhpParser\Node\Stmt\Function_ as FunctionStmt; | ||||
| use Psy\Exception\FatalErrorException; | ||||
|  | ||||
| /** | ||||
|  * Validate that function calls will succeed. | ||||
|  * | ||||
|  * This pass throws a FatalErrorException rather than letting PHP run | ||||
|  * headfirst into a real fatal error and die. | ||||
|  */ | ||||
| class ValidFunctionNamePass extends NamespaceAwarePass | ||||
| { | ||||
|     /** | ||||
|      * Validate that function calls will succeed. | ||||
|      * | ||||
|      * @throws FatalErrorException if a function is redefined. | ||||
|      * @throws FatalErrorException if the function name is a string (not an expression) and is not defined. | ||||
|      * | ||||
|      * @param Node $node | ||||
|      */ | ||||
|     public function leaveNode(Node $node) | ||||
|     { | ||||
|         if ($node instanceof FunctionStmt) { | ||||
|             $name = $this->getFullyQualifiedName($node->name); | ||||
|  | ||||
|             if (function_exists($name) || isset($this->currentScope[strtolower($name)])) { | ||||
|                 throw new FatalErrorException(sprintf('Cannot redeclare %s()', $name), 0, 1, null, $node->getLine()); | ||||
|             } | ||||
|  | ||||
|             $this->currentScope[strtolower($name)] = true; | ||||
|         } elseif ($node instanceof FuncCall) { | ||||
|             // if function name is an expression or a variable, give it a pass for now. | ||||
|             $name = $node->name; | ||||
|             if (!$name instanceof Expression && !$name instanceof Variable) { | ||||
|                 $shortName = implode('\\', $name->parts); | ||||
|                 $fullName  = $this->getFullyQualifiedName($name); | ||||
|                 $inScope = isset($this->currentScope[strtolower($fullName)]); | ||||
|                 if (!$inScope && !function_exists($shortName) && !function_exists($fullName)) { | ||||
|                     $message = sprintf('Call to undefined function %s()', $name); | ||||
|                     throw new FatalErrorException($message, 0, 1, null, $node->getLine()); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 sujitprasad
					sujitprasad