scriptbox

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

DslFor.class.php (865B)


      1 <?php
      2 
      3 namespace dsl\ast;
      4 
      5 use dsl\DslRuntimeException;
      6 use dsl\DslToken;
      7 
      8 class DslFor implements DslStatement
      9 {
     10 	private $name;
     11 	private $list;
     12 	private $statements;
     13 
     14 	/**
     15 	 * DslFor constructor.
     16 	 *
     17 	 * @param $name String
     18 	 * @param $list DslToken[]
     19 	 * @param $statements DslToken[]
     20 	 */
     21 	public function __construct($name, $list, $statements)
     22 	{
     23 		$this->name = $name;
     24 		$this->list = new DslExpression( $list );
     25 		$this->statements = new DslStatementList( $statements );
     26 	}
     27 
     28 
     29 	public function execute( & $context ) {
     30 
     31 		$list = $this->list->execute( $context );
     32 
     33 		if   ( !is_array( $list ) )
     34 			throw new DslRuntimeException('for value is not a list');
     35 
     36 		$copiedContext = $context;
     37 		foreach( $list as $loopVar ) {
     38 			$copiedContext[ $this->name ] = $loopVar;
     39 			$this->statements->execute( $copiedContext );
     40 		}
     41 	}
     42 
     43 	public function parse($tokens)
     44 	{
     45 	}
     46 }