Skip to content

Commit

Permalink
#235 fix
Browse files Browse the repository at this point in the history
  • Loading branch information
ichiriac committed Nov 18, 2018
1 parent 2bfe692 commit b73c136
Show file tree
Hide file tree
Showing 5 changed files with 185 additions and 8 deletions.
2 changes: 1 addition & 1 deletion src/parser/expr.js
Original file line number Diff line number Diff line change
Expand Up @@ -502,7 +502,7 @@ module.exports = {
this.token === this.tok.T_STRING ||
this.token === this.tok.T_NAMESPACE
) {
let result = this.read_namespace_name();
let result = this.read_namespace_name(true);
if (this.token === this.tok.T_DOUBLE_COLON) {
result = this.read_static_getter(result);
}
Expand Down
8 changes: 6 additions & 2 deletions src/parser/namespace.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ module.exports = {
* @see http://php.net/manual/en/language.namespaces.rules.php
* @return {Reference}
*/
read_namespace_name: function() {
read_namespace_name: function(resolveReference) {
const result = this.node();
let relative = false;
if (this.token === this.tok.T_NAMESPACE) {
Expand All @@ -73,7 +73,11 @@ module.exports = {
this.tok.T_NS_SEPARATOR,
true
);
if (!relative && names.length === 1) {
if (
!relative &&
names.length === 1 &&
(resolveReference || this.token !== "(")
) {
if (names[0].toLowerCase() === "parent") {
return result("parentreference", names[0]);
} else if (names[0].toLowerCase() === "self") {
Expand Down
11 changes: 6 additions & 5 deletions test/debug.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@
]
}
*/
var parser = require("../src/index");
parser.parseEval(`
new foo;
$a = (new foo)[0];
const parser = require("../src/index");
const ast = parser.parseEval(`
self();
paRenT();
`, {
parser: {
debug: true
}
}
);
);
console.log(ast);
150 changes: 150 additions & 0 deletions test/snapshot/__snapshots__/expr.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,99 @@ Program {
}
`;

exports[`Test expressions fix #235 1`] = `
Program {
"children": Array [
Call {
"arguments": Array [],
"kind": "call",
"what": ClassReference {
"kind": "classreference",
"name": "self",
"resolution": "uqn",
},
},
Call {
"arguments": Array [],
"kind": "call",
"what": ClassReference {
"kind": "classreference",
"name": "sElF",
"resolution": "uqn",
},
},
Call {
"arguments": Array [],
"kind": "call",
"what": ClassReference {
"kind": "classreference",
"name": "parent",
"resolution": "uqn",
},
},
Call {
"arguments": Array [],
"kind": "call",
"what": ClassReference {
"kind": "classreference",
"name": "pArEnT",
"resolution": "uqn",
},
},
Call {
"arguments": Array [],
"kind": "call",
"what": StaticLookup {
"kind": "staticlookup",
"offset": Identifier {
"kind": "identifier",
"name": "foo",
},
"what": ParentReference {
"kind": "parentreference",
"raw": "parent",
},
},
},
ExpressionStatement {
"expression": New {
"arguments": Array [],
"kind": "new",
"what": SelfReference {
"kind": "selfreference",
"raw": "self",
},
},
"kind": "expressionstatement",
},
ExpressionStatement {
"expression": New {
"arguments": Array [],
"kind": "new",
"what": StaticReference {
"kind": "staticreference",
"raw": "static",
},
},
"kind": "expressionstatement",
},
ExpressionStatement {
"expression": New {
"arguments": Array [],
"kind": "new",
"what": ParentReference {
"kind": "parentreference",
"raw": "parent",
},
},
"kind": "expressionstatement",
},
],
"errors": Array [],
"kind": "program",
}
`;

exports[`Test expressions should assign class static 1`] = `
Program {
"children": Array [
Expand Down Expand Up @@ -2208,6 +2301,63 @@ Program {
}
`;

exports[`Test expressions test node references 1`] = `
Program {
"children": Array [
Call {
"arguments": Array [],
"kind": "call",
"what": StaticLookup {
"kind": "staticlookup",
"offset": Identifier {
"kind": "identifier",
"name": "foo",
},
"what": ParentReference {
"kind": "parentreference",
"raw": "parent",
},
},
},
ExpressionStatement {
"expression": New {
"arguments": Array [],
"kind": "new",
"what": SelfReference {
"kind": "selfreference",
"raw": "self",
},
},
"kind": "expressionstatement",
},
ExpressionStatement {
"expression": New {
"arguments": Array [],
"kind": "new",
"what": StaticReference {
"kind": "staticreference",
"raw": "static",
},
},
"kind": "expressionstatement",
},
ExpressionStatement {
"expression": New {
"arguments": Array [],
"kind": "new",
"what": ParentReference {
"kind": "parentreference",
"raw": "parent",
},
},
"kind": "expressionstatement",
},
],
"errors": Array [],
"kind": "program",
}
`;

exports[`Test expressions test silent 1`] = `
Program {
"children": Array [
Expand Down
22 changes: 22 additions & 0 deletions test/snapshot/expr.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,28 @@ describe("Test expressions", function() {
`, { parser: { debug: false } })).toMatchSnapshot();
});

it("fix #235", function() {
expect(parser.parseEval(`
self();
sElF();
parent();
pArEnT();
parent::foo();
new self();
new static();
new parent();
`, { parser: { debug: false } })).toMatchSnapshot();
});

it("test node references", function() {
expect(parser.parseEval(`
parent::foo();
new self();
new static();
new parent();
`, { parser: { debug: false } })).toMatchSnapshot();
});

it("test fail new", function() {
expect(parser.parseEval(`
$a = new foo[0];
Expand Down

0 comments on commit b73c136

Please sign in to comment.