Skip to content

Commit e3c0cbb

Browse files
committed
#370 - add nullkeyword node & fix classreference usage
1 parent 72c5699 commit e3c0cbb

21 files changed

+216
-314
lines changed

src/ast.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const Position = require("./ast/position");
1515
* - [Position](#position)
1616
* - [Node](#node)
1717
* - [Noop](#noop)
18+
* - [NullKeyword](#nullkeyword)
1819
* - [StaticVariable](#staticvariable)
1920
* - [EncapsedPart](#encapsedpart)
2021
* - [Constant](#constant)
@@ -514,6 +515,7 @@ AST.prototype.checkNodes = function() {
514515
require("./ast/node"),
515516
require("./ast/noop"),
516517
require("./ast/nowdoc"),
518+
require("./ast/nullkeyword"),
517519
require("./ast/number"),
518520
require("./ast/offsetlookup"),
519521
require("./ast/operation"),

src/ast/nullkeyword.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* Copyright (C) 2018 Glayzzle (BSD3 License)
3+
* @authors https://github.com/glayzzle/php-parser/graphs/contributors
4+
* @url http://glayzzle.com
5+
*/
6+
"use strict";
7+
8+
const Node = require("./node");
9+
const KIND = "nullkeyword";
10+
11+
/**
12+
* Represents the null keyword
13+
* @constructor NullKeyword
14+
* @extends {Node}
15+
*/
16+
module.exports = Node.extends(KIND, function NullKeyword(raw, docs, location) {
17+
Node.apply(this, [KIND, docs, location]);
18+
this.raw = raw;
19+
});

src/parser/variable.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,11 @@ module.exports = {
5555
result = name.destroy(result("boolean", true, name.name));
5656
} else if (literal === "false") {
5757
result = name.destroy(result("boolean", false, name.name));
58+
} else if (literal === "null") {
59+
result = name.destroy(result("nullkeyword", name.name));
5860
} else {
59-
// @todo null keyword ?
60-
result = result("identifier", name);
61+
result.destroy(name);
62+
result = name;
6163
}
6264
} else {
6365
// @fixme possible #193 bug

test/snapshot/__snapshots__/acid.test.js.snap

Lines changed: 12 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -5992,8 +5992,8 @@ next:
59925992
},
59935993
},
59945994
"parenthesizedExpression": true,
5995-
"right": Identifier {
5996-
"kind": "identifier",
5995+
"right": ClassReference {
5996+
"kind": "classreference",
59975997
"loc": Location {
59985998
"end": Position {
59995999
"column": 45,
@@ -6007,24 +6007,8 @@ next:
60076007
"offset": 2236,
60086008
},
60096009
},
6010-
"name": ClassReference {
6011-
"kind": "classreference",
6012-
"loc": Location {
6013-
"end": Position {
6014-
"column": 45,
6015-
"line": 108,
6016-
"offset": 2242,
6017-
},
6018-
"source": "Banana",
6019-
"start": Position {
6020-
"column": 39,
6021-
"line": 108,
6022-
"offset": 2236,
6023-
},
6024-
},
6025-
"name": "Banana",
6026-
"resolution": "uqn",
6027-
},
6010+
"name": "Banana",
6011+
"resolution": "uqn",
60286012
},
60296013
"type": "instanceof",
60306014
},
@@ -6057,8 +6041,8 @@ next:
60576041
"children": Array [
60586042
Break {
60596043
"kind": "break",
6060-
"level": Identifier {
6061-
"kind": "identifier",
6044+
"level": ClassReference {
6045+
"kind": "classreference",
60626046
"loc": Location {
60636047
"end": Position {
60646048
"column": 19,
@@ -6072,24 +6056,8 @@ next:
60726056
"offset": 2074,
60736057
},
60746058
},
6075-
"name": ClassReference {
6076-
"kind": "classreference",
6077-
"loc": Location {
6078-
"end": Position {
6079-
"column": 19,
6080-
"line": 100,
6081-
"offset": 2077,
6082-
},
6083-
"source": "foo",
6084-
"start": Position {
6085-
"column": 16,
6086-
"line": 100,
6087-
"offset": 2074,
6088-
},
6089-
},
6090-
"name": "foo",
6091-
"resolution": "uqn",
6092-
},
6059+
"name": "foo",
6060+
"resolution": "uqn",
60936061
},
60946062
"loc": Location {
60956063
"end": Position {
@@ -6531,8 +6499,8 @@ next:
65316499
},
65326500
Return {
65336501
"expr": Empty {
6534-
"expression": Identifier {
6535-
"kind": "identifier",
6502+
"expression": ClassReference {
6503+
"kind": "classreference",
65366504
"loc": Location {
65376505
"end": Position {
65386506
"column": 33,
@@ -6546,24 +6514,8 @@ next:
65466514
"offset": 2855,
65476515
},
65486516
},
6549-
"name": ClassReference {
6550-
"kind": "classreference",
6551-
"loc": Location {
6552-
"end": Position {
6553-
"column": 33,
6554-
"line": 130,
6555-
"offset": 2871,
6556-
},
6557-
"source": "namespace\\\\FOOBAR",
6558-
"start": Position {
6559-
"column": 17,
6560-
"line": 130,
6561-
"offset": 2855,
6562-
},
6563-
},
6564-
"name": "FOOBAR",
6565-
"resolution": "rn",
6566-
},
6517+
"name": "FOOBAR",
6518+
"resolution": "rn",
65676519
},
65686520
"kind": "empty",
65696521
"loc": Location {

test/snapshot/__snapshots__/ast.test.js.snap

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,57 @@ Program {
127127
}
128128
`;
129129

130+
exports[`Test AST structure fix #370 - classreference instead identifier(classreferent) 1`] = `
131+
Program {
132+
"children": Array [
133+
ExpressionStatement {
134+
"expression": Assign {
135+
"kind": "assign",
136+
"left": Variable {
137+
"curly": false,
138+
"kind": "variable",
139+
"name": "a",
140+
},
141+
"operator": "=",
142+
"right": ClassReference {
143+
"kind": "classreference",
144+
"name": "test",
145+
"resolution": "uqn",
146+
},
147+
},
148+
"kind": "expressionstatement",
149+
},
150+
],
151+
"errors": Array [],
152+
"kind": "program",
153+
}
154+
`;
155+
156+
exports[`Test AST structure fix #370 - nullkeyword 1`] = `
157+
Program {
158+
"children": Array [
159+
ExpressionStatement {
160+
"expression": Assign {
161+
"kind": "assign",
162+
"left": Variable {
163+
"curly": false,
164+
"kind": "variable",
165+
"name": "a",
166+
},
167+
"operator": "=",
168+
"right": NullKeyword {
169+
"kind": "nullkeyword",
170+
"raw": "Null",
171+
},
172+
},
173+
"kind": "expressionstatement",
174+
},
175+
],
176+
"errors": Array [],
177+
"kind": "program",
178+
}
179+
`;
180+
130181
exports[`Test AST structure test clone 1`] = `
131182
Program {
132183
"children": Array [
@@ -391,13 +442,10 @@ Program {
391442
"require": false,
392443
"target": Bin {
393444
"kind": "bin",
394-
"left": Identifier {
395-
"kind": "identifier",
396-
"name": ClassReference {
397-
"kind": "classreference",
398-
"name": "PATH",
399-
"resolution": "uqn",
400-
},
445+
"left": ClassReference {
446+
"kind": "classreference",
447+
"name": "PATH",
448+
"resolution": "uqn",
401449
},
402450
"parenthesizedExpression": true,
403451
"right": String {

test/snapshot/__snapshots__/bin.test.js.snap

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -696,13 +696,10 @@ Program {
696696
"kind": "variable",
697697
"name": "foo",
698698
},
699-
"right": Identifier {
700-
"kind": "identifier",
701-
"name": ClassReference {
702-
"kind": "classreference",
703-
"name": "MyClass",
704-
"resolution": "uqn",
705-
},
699+
"right": ClassReference {
700+
"kind": "classreference",
701+
"name": "MyClass",
702+
"resolution": "uqn",
706703
},
707704
"type": "instanceof",
708705
},

test/snapshot/__snapshots__/byref.test.js.snap

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,13 +159,10 @@ Program {
159159
"kind": "variable",
160160
"name": "var",
161161
},
162-
"what": Identifier {
163-
"kind": "identifier",
164-
"name": ClassReference {
165-
"kind": "classreference",
166-
"name": "CONSTANT",
167-
"resolution": "uqn",
168-
},
162+
"what": ClassReference {
163+
"kind": "classreference",
164+
"name": "CONSTANT",
165+
"resolution": "uqn",
169166
},
170167
},
171168
},

test/snapshot/__snapshots__/class.test.js.snap

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -486,13 +486,9 @@ Program {
486486
},
487487
},
488488
"operator": "=",
489-
"right": Identifier {
490-
"kind": "identifier",
491-
"name": ClassReference {
492-
"kind": "classreference",
493-
"name": "null",
494-
"resolution": "uqn",
495-
},
489+
"right": NullKeyword {
490+
"kind": "nullkeyword",
491+
"raw": "null",
496492
},
497493
},
498494
"kind": "expressionstatement",
@@ -513,13 +509,9 @@ Program {
513509
},
514510
},
515511
"operator": "=",
516-
"right": Identifier {
517-
"kind": "identifier",
518-
"name": ClassReference {
519-
"kind": "classreference",
520-
"name": "null",
521-
"resolution": "uqn",
522-
},
512+
"right": NullKeyword {
513+
"kind": "nullkeyword",
514+
"raw": "null",
523515
},
524516
},
525517
"kind": "expressionstatement",
@@ -722,13 +714,9 @@ Program {
722714
"name": "array",
723715
"raw": "array",
724716
},
725-
"value": Identifier {
726-
"kind": "identifier",
727-
"name": ClassReference {
728-
"kind": "classreference",
729-
"name": "null",
730-
"resolution": "uqn",
731-
},
717+
"value": NullKeyword {
718+
"kind": "nullkeyword",
719+
"raw": "null",
732720
},
733721
"variadic": false,
734722
},

test/snapshot/__snapshots__/encapsed.test.js.snap

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -440,13 +440,10 @@ Program {
440440
},
441441
"what": OffsetLookup {
442442
"kind": "offsetlookup",
443-
"offset": Identifier {
444-
"kind": "identifier",
445-
"name": ClassReference {
446-
"kind": "classreference",
447-
"name": "foo",
448-
"resolution": "uqn",
449-
},
443+
"offset": ClassReference {
444+
"kind": "classreference",
445+
"name": "foo",
446+
"resolution": "uqn",
450447
},
451448
"what": Variable {
452449
"curly": false,

test/snapshot/__snapshots__/expr.test.js.snap

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -498,13 +498,10 @@ Program {
498498
ExpressionStatement {
499499
"expression": Assign {
500500
"kind": "assign",
501-
"left": Identifier {
502-
"kind": "identifier",
503-
"name": ClassReference {
504-
"kind": "classreference",
505-
"name": "a",
506-
"resolution": "uqn",
507-
},
501+
"left": ClassReference {
502+
"kind": "classreference",
503+
"name": "a",
504+
"resolution": "uqn",
508505
},
509506
"operator": "=",
510507
"right": Number {
@@ -515,15 +512,7 @@ Program {
515512
"kind": "expressionstatement",
516513
},
517514
],
518-
"errors": Array [
519-
Error {
520-
"expected": "VARIABLE",
521-
"kind": "error",
522-
"line": 1,
523-
"message": "Parse Error : syntax error, unexpected '=' on line 1",
524-
"token": "'='",
525-
},
526-
],
515+
"errors": Array [],
527516
"kind": "program",
528517
}
529518
`;

0 commit comments

Comments
 (0)