/** * This method parses an array as it is used for for parameter or property * default values. * * Note: At the moment the implementation of this method only returns an * empty array, but consumes all tokens that belong to the array * declaration. * * TODO: Implement array content/value handling, but how should we handle * constant values like array(self::FOO, FOOBAR)? * * @return array * @since 0.9.5 */ private function _parseStaticArray() { $staticValue = array(); // Fetch all tokens that belong to this array $this->consumeToken(self::T_ARRAY); $this->consumeComments(); $this->consumeToken(self::T_PARENTHESIS_OPEN); $parenthesis = 1; $tokenType = $this->tokenizer->peek(); while ($tokenType !== self::T_EOF) { switch ($tokenType) { case self::T_PARENTHESIS_CLOSE: if (--$parenthesis === 0) { break 2; } $this->consumeToken(self::T_PARENTHESIS_CLOSE); break; case self::T_PARENTHESIS_OPEN: $this->consumeToken(self::T_PARENTHESIS_OPEN); ++$parenthesis; break; case self::T_DIR: case self::T_NULL: case self::T_TRUE: case self::T_FILE: case self::T_LINE: case self::T_NS_C: case self::T_PLUS: case self::T_SELF: case self::T_ARRAY: case self::T_FALSE: case self::T_EQUAL: case self::T_COMMA: case self::T_MINUS: case self::T_COMMENT: case self::T_DOC_COMMENT: case self::T_DOUBLE_COLON: case self::T_STRING: case self::T_BACKSLASH: case self::T_DNUMBER: case self::T_LNUMBER: case self::T_FUNC_C: case self::T_CLASS_C: case self::T_METHOD_C: case self::T_STATIC: case self::T_PARENT: case self::T_NUM_STRING: case self::T_DOUBLE_ARROW: case self::T_CONSTANT_ENCAPSED_STRING: $this->consumeToken($tokenType); break; default: break 2; } $tokenType = $this->tokenizer->peek(); } // Read closing parenthesis $this->consumeToken(self::T_PARENTHESIS_CLOSE); $defaultValue = new PHP_Depend_Code_Value(); $defaultValue->setValue($staticValue); return $defaultValue; }
/** * testSetValueMutatesInternalStateOnlyOnce * * @return void */ public function testSetValueMutatesInternalStateOnlyOnce() { $value = new PHP_Depend_Code_Value(); $value->setValue(42); $value->setValue(23); self::assertEquals(42, $value->getValue()); }
private function isBooleanValue(PHP_Depend_Code_Value $value = null) { return $value && $value->isValueAvailable() && ($value->getValue() === true || $value->getValue() === false); }
/** * This method will parse a static default value as it is used for a * parameter, property or constant declaration. * * @return PHP_Depend_Code_Value * @since 0.9.5 */ private function parseStaticValue() { $defaultValue = new PHP_Depend_Code_Value(); $this->consumeComments(); // By default all parameters positive signed $signed = 1; $tokenType = $this->tokenizer->peek(); while ($tokenType !== self::T_EOF) { switch ($tokenType) { case self::T_COMMA: case self::T_SEMICOLON: case self::T_PARENTHESIS_CLOSE: if ($defaultValue->isValueAvailable() === true) { return $defaultValue; } throw new PHP_Depend_Parser_MissingValueException($this->tokenizer); case self::T_NULL: $token = $this->consumeToken(self::T_NULL); $defaultValue->setValue(null); break; case self::T_TRUE: $token = $this->consumeToken(self::T_TRUE); $defaultValue->setValue(true); break; case self::T_FALSE: $token = $this->consumeToken(self::T_FALSE); $defaultValue->setValue(false); break; case self::T_LNUMBER: $token = $this->consumeToken(self::T_LNUMBER); $defaultValue->setValue($signed * (int) $token->image); break; case self::T_DNUMBER: $token = $this->consumeToken(self::T_DNUMBER); $defaultValue->setValue($signed * (double) $token->image); break; case self::T_CONSTANT_ENCAPSED_STRING: $token = $this->consumeToken(self::T_CONSTANT_ENCAPSED_STRING); $defaultValue->setValue(substr($token->image, 1, -1)); break; case self::T_DOUBLE_COLON: $this->consumeToken(self::T_DOUBLE_COLON); break; case self::T_PLUS: $this->consumeToken(self::T_PLUS); break; case self::T_MINUS: $this->consumeToken(self::T_MINUS); $signed *= -1; break; case self::T_DOUBLE_QUOTE: $defaultValue->setValue($this->parseStringSequence($tokenType)); break; case self::T_DIR: case self::T_FILE: case self::T_LINE: case self::T_SELF: case self::T_NS_C: case self::T_FUNC_C: case self::T_PARENT: case self::T_STRING: case self::T_STATIC: case self::T_CLASS_C: case self::T_METHOD_C: case self::T_BACKSLASH: case self::T_SQUARED_BRACKET_OPEN: case self::T_SQUARED_BRACKET_CLOSE: // There is a default value but we don't handle it at the moment. $defaultValue->setValue(null); $this->consumeToken($tokenType); break; case self::T_START_HEREDOC: $defaultValue->setValue($this->parseHeredoc()->getChild(0)->getImage()); break; default: throw new PHP_Depend_Parser_UnexpectedTokenException($this->tokenizer->next(), $this->tokenizer->getSourceFile()); } $this->consumeComments(); $tokenType = $this->tokenizer->peek(); } // We should never reach this, so throw an exception throw new PHP_Depend_Parser_TokenStreamEndException($this->tokenizer); }