Skip to content

Commit

Permalink
make use of attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
TomasVotruba committed May 12, 2022
1 parent 08f0acd commit 79dda78
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 24 deletions.
10 changes: 7 additions & 3 deletions grammar/php5.y
Expand Up @@ -690,7 +690,9 @@ array_expr:
scalar_dereference:
array_expr '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
| T_CONSTANT_ENCAPSED_STRING '[' dim_offset ']'
{ $attrs = attributes(); $attrs['kind'] = strKind($1);
{ $attrs = attributes();
$attrs['kind'] = strKind($1);
$attrs['rawValue'] = $1;
$$ = Expr\ArrayDimFetch[new Scalar\String_(Scalar\String_::parse($1), $attrs), $3]; }
| constant '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
| scalar_dereference '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
Expand Down Expand Up @@ -795,8 +797,10 @@ common_scalar:
T_LNUMBER { $$ = $this->parseLNumber($1, attributes(), true); }
| T_DNUMBER { $$ = Scalar\DNumber[Scalar\DNumber::parse($1)]; }
| T_CONSTANT_ENCAPSED_STRING
{ $attrs = attributes(); $attrs['kind'] = strKind($1);
$$ = new Scalar\String_(Scalar\String_::parse($1, false), $attrs, $1); }
{ $attrs = attributes();
$attrs['kind'] = strKind($1);
$attrs['rawValue'] = $1;
$$ = new Scalar\String_(Scalar\String_::parse($1, false), $attrs); }
| T_LINE { $$ = Scalar\MagicConst\Line[]; }
| T_FILE { $$ = Scalar\MagicConst\File[]; }
| T_DIR { $$ = Scalar\MagicConst\Dir[]; }
Expand Down
6 changes: 4 additions & 2 deletions grammar/php7.y
Expand Up @@ -1015,8 +1015,10 @@ dereferencable_scalar:
$$ = new Expr\Array_($3, $attrs); }
| array_short_syntax { $$ = $1; }
| T_CONSTANT_ENCAPSED_STRING
{ $attrs = attributes(); $attrs['kind'] = strKind($1);
$$ = new Scalar\String_(Scalar\String_::parse($1), $attrs, $1); }
{ $attrs = attributes();
$attrs['kind'] = strKind($1);
$attrs['rawValue'] = $1;
$$ = new Scalar\String_(Scalar\String_::parse($1), $attrs); }
| '"' encaps_list '"'
{ $attrs = attributes(); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
parseEncapsed($2, '"', true); $$ = new Scalar\Encapsed($2, $attrs); }
Expand Down
11 changes: 3 additions & 8 deletions lib/PhpParser/Node/Scalar/String_.php
Expand Up @@ -16,9 +16,6 @@ class String_ extends Scalar
/** @var string String value */
public $value;

/** @var string String raw value */
public $rawValue;

protected static $replacements = [
'\\' => '\\',
'$' => '$',
Expand All @@ -33,14 +30,12 @@ class String_ extends Scalar
/**
* Constructs a string scalar node.
*
* @param string $value Value of the string
* @param array $attributes Additional attributes
* @param string|null $rawValue
* @param string $value Value of the string
* @param array $attributes Additional attributes
*/
public function __construct(string $value, array $attributes = [], $rawValue = null) {
public function __construct(string $value, array $attributes = []) {
$this->attributes = $attributes;
$this->value = $value;
$this->rawValue = $rawValue ?? $value;
}

public function getSubNodeNames() : array {
Expand Down
10 changes: 7 additions & 3 deletions lib/PhpParser/Parser/Php5.php
Expand Up @@ -2147,7 +2147,9 @@ protected function initReduceCallbacks() {
$this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
},
392 => function ($stackPos) {
$attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(4-1)][0] === "'" || ($this->semStack[$stackPos-(4-1)][1] === "'" && ($this->semStack[$stackPos-(4-1)][0] === 'b' || $this->semStack[$stackPos-(4-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
$attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes;
$attrs['kind'] = ($this->semStack[$stackPos-(4-1)][0] === "'" || ($this->semStack[$stackPos-(4-1)][1] === "'" && ($this->semStack[$stackPos-(4-1)][0] === 'b' || $this->semStack[$stackPos-(4-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
$attrs['rawValue'] = $this->semStack[$stackPos-(4-1)];
$this->semValue = new Expr\ArrayDimFetch(new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(4-1)]), $attrs), $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
},
393 => function ($stackPos) {
Expand Down Expand Up @@ -2278,8 +2280,10 @@ protected function initReduceCallbacks() {
$this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
},
435 => function ($stackPos) {
$attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
$this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)], false), $attrs, $this->semStack[$stackPos-(1-1)]);
$attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes;
$attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
$attrs['rawValue'] = $this->semStack[$stackPos-(1-1)];
$this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)], false), $attrs);
},
436 => function ($stackPos) {
$this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
Expand Down
6 changes: 4 additions & 2 deletions lib/PhpParser/Parser/Php7.php
Expand Up @@ -2543,8 +2543,10 @@ protected function initReduceCallbacks() {
$this->semValue = $this->semStack[$stackPos-(1-1)];
},
512 => function ($stackPos) {
$attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
$this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)]), $attrs, $this->semStack[$stackPos-(1-1)]);
$attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes;
$attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
$attrs['rawValue'] = $this->semStack[$stackPos-(1-1)];
$this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)]), $attrs);
},
513 => function ($stackPos) {
$attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
Expand Down
2 changes: 1 addition & 1 deletion test/PhpParser/Node/Scalar/StringTest.php
Expand Up @@ -21,7 +21,7 @@ public function testRawValue()

/** @var String_ $string */
$this->assertSame('sequence A', $string->value);
$this->assertSame('"sequence \\x41"', $string->rawValue);
$this->assertSame('"sequence \\x41"', $string->getAttribute('rawValue'));
}

/**
Expand Down
10 changes: 5 additions & 5 deletions test/PhpParser/NodeAbstractTest.php
Expand Up @@ -292,11 +292,11 @@ function functionName(&$a = 0, $b = 1.0) {
{
"nodeType": "Scalar_String",
"value": "Foo",
"rawValue": "'Foo'",
"attributes": {
"startLine": 5,
"endLine": 5,
"kind": 1
"kind": 1,
"rawValue": "'Foo'"
}
}
],
Expand Down Expand Up @@ -449,10 +449,10 @@ function functionName(&$a = 0, $b = 1.0) {
"attributes": {
"startLine": 5,
"endLine": 5,
"kind": 1
"kind": 1,
"rawValue": "'Foo'"
},
"value": "Foo",
"rawValue": "'Foo'"
"value": "Foo"
}
]
}
Expand Down

0 comments on commit 79dda78

Please sign in to comment.