From 1c0bf27f00f717ddb09956bc12414529fb7fb568 Mon Sep 17 00:00:00 2001 From: Chris Seufert Date: Mon, 29 Mar 2021 21:19:53 +1100 Subject: [PATCH 1/3] Added modifier flags to parameter ASK and read param visibility params --- src/ast/parameter.js | 10 + src/parser/function.js | 28 ++- test/snapshot/__snapshots__/acid.test.js.snap | 2 + .../__snapshots__/arrowfunc.test.js.snap | 8 + .../snapshot/__snapshots__/byref.test.js.snap | 2 + .../snapshot/__snapshots__/class.test.js.snap | 233 ++++++++---------- .../__snapshots__/classreference.test.js.snap | 2 + .../__snapshots__/closure.test.js.snap | 10 + .../__snapshots__/comment.test.js.snap | 1 + .../__snapshots__/function.test.js.snap | 16 ++ .../__snapshots__/location.test.js.snap | 1 + .../parentreference.test.js.snap | 4 + test/snapshot/__snapshots__/php5.test.js.snap | 1 + .../snapshot/__snapshots__/php73.test.js.snap | 3 + .../__snapshots__/scalar.test.js.snap | 1 + .../__snapshots__/selfreference.test.js.snap | 4 + .../__snapshots__/typereference.test.js.snap | 40 +++ test/snapshot/class.test.js | 23 +- 18 files changed, 255 insertions(+), 134 deletions(-) diff --git a/src/ast/parameter.js b/src/ast/parameter.js index 6a1fe9270..8210d4d9b 100644 --- a/src/ast/parameter.js +++ b/src/ast/parameter.js @@ -8,6 +8,13 @@ const Declaration = require("./declaration"); const KIND = "parameter"; +// eslint-disable-next-line no-unused-vars +const MODIFIER_PUBLIC = 1; +// eslint-disable-next-line no-unused-vars +const MODIFIER_PROTECTED = 2; +// eslint-disable-next-line no-unused-vars +const MODIFIER_PRIVATE = 4; + /** * Defines a function parameter * @constructor Parameter @@ -17,6 +24,7 @@ const KIND = "parameter"; * @property {boolean} byref * @property {boolean} variadic * @property {boolean} nullable + * @property {MODIFIER_PUBLIC|MODIFIER_PROTECTED|MODIFIER_PRIVATE} flags */ module.exports = Declaration.extends(KIND, function Parameter( name, @@ -25,6 +33,7 @@ module.exports = Declaration.extends(KIND, function Parameter( isRef, isVariadic, nullable, + flags, docs, location ) { @@ -34,4 +43,5 @@ module.exports = Declaration.extends(KIND, function Parameter( this.byref = isRef; this.variadic = isVariadic; this.nullable = nullable; + this.flags = flags || 0; }); diff --git a/src/parser/function.js b/src/parser/function.js index f4ef967a4..067b5f989 100644 --- a/src/parser/function.js +++ b/src/parser/function.js @@ -208,6 +208,7 @@ module.exports = { this.next(); nullable = true; } + const flags = this.read_promoted(); types = this.read_types(); if (nullable && !types) { this.raiseError( @@ -225,7 +226,15 @@ module.exports = { if (this.token == "=") { value = this.next().read_expr(); } - return node(parameterName, types, value, isRef, isVariadic, nullable); + return node( + parameterName, + types, + value, + isRef, + isVariadic, + nullable, + flags + ); }, read_types() { const types = []; @@ -244,6 +253,23 @@ module.exports = { return unionType(types); } }, + read_promoted() { + const MODIFIER_PUBLIC = 1; + const MODIFIER_PROTECTED = 2; + const MODIFIER_PRIVATE = 4; + if (this.token === this.tok.T_PUBLIC) { + this.next(); + return MODIFIER_PUBLIC; + } else if (this.token === this.tok.T_PROTECTED) { + this.next(); + return MODIFIER_PROTECTED; + } else if (this.token === this.tok.T_PRIVATE) { + this.next(); + return MODIFIER_PRIVATE; + } else { + 0; + } + }, /** * Reads a list of arguments * ```ebnf diff --git a/test/snapshot/__snapshots__/acid.test.js.snap b/test/snapshot/__snapshots__/acid.test.js.snap index 8f985d852..cbd9cde19 100644 --- a/test/snapshot/__snapshots__/acid.test.js.snap +++ b/test/snapshot/__snapshots__/acid.test.js.snap @@ -2153,6 +2153,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "loc": Location { "end": Position { @@ -4107,6 +4108,7 @@ next: "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "loc": Location { "end": Position { diff --git a/test/snapshot/__snapshots__/arrowfunc.test.js.snap b/test/snapshot/__snapshots__/arrowfunc.test.js.snap index d38fb334d..656240af3 100644 --- a/test/snapshot/__snapshots__/arrowfunc.test.js.snap +++ b/test/snapshot/__snapshots__/arrowfunc.test.js.snap @@ -16,6 +16,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -65,6 +66,7 @@ Program { "arguments": Array [ Parameter { "byref": true, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -114,6 +116,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -126,6 +129,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -138,6 +142,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -216,6 +221,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -270,6 +276,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -319,6 +326,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", diff --git a/test/snapshot/__snapshots__/byref.test.js.snap b/test/snapshot/__snapshots__/byref.test.js.snap index 2f1fa3e0f..19749c2f1 100644 --- a/test/snapshot/__snapshots__/byref.test.js.snap +++ b/test/snapshot/__snapshots__/byref.test.js.snap @@ -405,6 +405,7 @@ Program { "arguments": Array [ Parameter { "byref": true, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -897,6 +898,7 @@ Program { "arguments": Array [ Parameter { "byref": true, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", diff --git a/test/snapshot/__snapshots__/class.test.js.snap b/test/snapshot/__snapshots__/class.test.js.snap index e2c5657fa..ea77ae088 100644 --- a/test/snapshot/__snapshots__/class.test.js.snap +++ b/test/snapshot/__snapshots__/class.test.js.snap @@ -508,130 +508,6 @@ Program { } `; -exports[`Test classes Test class union properties 1`] = ` -Program { - "children": Array [ - Class { - "body": Array [ - PropertyStatement { - "isStatic": true, - "kind": "propertystatement", - "properties": Array [ - Property { - "kind": "property", - "name": Identifier { - "kind": "identifier", - "name": "foo", - }, - "nullable": false, - "type": UnionType { - "kind": "uniontype", - "name": null, - "types": Array [ - TypeReference { - "kind": "typereference", - "name": "int", - "raw": "int", - }, - TypeReference { - "kind": "typereference", - "name": "float", - "raw": "float", - }, - ], - }, - "value": null, - }, - ], - "visibility": "", - }, - PropertyStatement { - "isStatic": false, - "kind": "propertystatement", - "properties": Array [ - Property { - "kind": "property", - "name": Identifier { - "kind": "identifier", - "name": "bar", - }, - "nullable": true, - "type": UnionType { - "kind": "uniontype", - "name": null, - "types": Array [ - Name { - "kind": "name", - "name": "Foo", - "resolution": "uqn", - }, - Name { - "kind": "name", - "name": "Bar", - "resolution": "uqn", - }, - ], - }, - "value": null, - }, - ], - "visibility": "private", - }, - PropertyStatement { - "isStatic": false, - "kind": "propertystatement", - "properties": Array [ - Property { - "kind": "property", - "name": Identifier { - "kind": "identifier", - "name": "a", - }, - "nullable": false, - "type": UnionType { - "kind": "uniontype", - "name": null, - "types": Array [ - Name { - "kind": "name", - "name": "Repo", - "resolution": "uqn", - }, - TypeReference { - "kind": "typereference", - "name": "string", - "raw": "string", - }, - Name { - "kind": "name", - "name": "null", - "resolution": "uqn", - }, - ], - }, - "value": null, - }, - ], - "visibility": "public", - }, - ], - "extends": null, - "implements": null, - "isAbstract": false, - "isAnonymous": false, - "isFinal": false, - "kind": "class", - "name": Identifier { - "kind": "identifier", - "name": "Test", - }, - }, - ], - "errors": Array [], - "kind": "program", -} -`; - exports[`Test classes Test js properties 1`] = ` Program { "children": Array [ @@ -866,6 +742,113 @@ Program { } `; +exports[`Test classes Test promoted class properties php 8 1`] = ` +Program { + "children": Array [ + Class { + "body": Array [ + Method { + "arguments": Array [ + Parameter { + "byref": false, + "flags": 1, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "id", + }, + "nullable": false, + "type": TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + "value": null, + "variadic": false, + }, + Parameter { + "byref": false, + "flags": 4, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "name", + }, + "nullable": false, + "type": null, + "value": null, + "variadic": false, + }, + Parameter { + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "c", + }, + "nullable": false, + "type": TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + "value": null, + "variadic": false, + }, + Parameter { + "byref": false, + "flags": 2, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "req", + }, + "nullable": false, + "type": Name { + "kind": "name", + "name": "ServerRequestInterface", + "resolution": "uqn", + }, + "value": null, + "variadic": false, + }, + ], + "body": Block { + "children": Array [], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "constructor", + }, + "nullable": false, + "type": null, + "visibility": "public", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "__proto__", + }, + }, + ], + "errors": Array [], + "kind": "program", +} +`; + exports[`Test classes Validate usual declarations 1`] = ` Program { "children": Array [ @@ -912,6 +895,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -996,6 +980,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", diff --git a/test/snapshot/__snapshots__/classreference.test.js.snap b/test/snapshot/__snapshots__/classreference.test.js.snap index cbc8d39a2..9e3b249fc 100644 --- a/test/snapshot/__snapshots__/classreference.test.js.snap +++ b/test/snapshot/__snapshots__/classreference.test.js.snap @@ -7,6 +7,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -48,6 +49,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", diff --git a/test/snapshot/__snapshots__/closure.test.js.snap b/test/snapshot/__snapshots__/closure.test.js.snap index 919e6c4eb..72468802f 100644 --- a/test/snapshot/__snapshots__/closure.test.js.snap +++ b/test/snapshot/__snapshots__/closure.test.js.snap @@ -16,6 +16,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -77,6 +78,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -144,6 +146,7 @@ Program { "arguments": Array [ Parameter { "byref": true, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -205,6 +208,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -217,6 +221,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -229,6 +234,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -290,6 +296,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -302,6 +309,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -314,6 +322,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -419,6 +428,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", diff --git a/test/snapshot/__snapshots__/comment.test.js.snap b/test/snapshot/__snapshots__/comment.test.js.snap index e56d59f40..2844bbd22 100644 --- a/test/snapshot/__snapshots__/comment.test.js.snap +++ b/test/snapshot/__snapshots__/comment.test.js.snap @@ -1014,6 +1014,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "leadingComments": Array [ CommentBlock { diff --git a/test/snapshot/__snapshots__/function.test.js.snap b/test/snapshot/__snapshots__/function.test.js.snap index 360fced5c..60998216c 100644 --- a/test/snapshot/__snapshots__/function.test.js.snap +++ b/test/snapshot/__snapshots__/function.test.js.snap @@ -7,6 +7,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -26,6 +27,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -45,6 +47,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -64,6 +67,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -80,6 +84,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -96,6 +101,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -112,6 +118,7 @@ Program { }, Parameter { "byref": true, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -157,6 +164,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "leadingComments": Array [ CommentBlock { @@ -232,6 +240,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -247,6 +256,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -263,6 +273,7 @@ Program { }, Parameter { "byref": true, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -308,6 +319,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -452,6 +464,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -482,6 +495,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -582,6 +596,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -612,6 +627,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", diff --git a/test/snapshot/__snapshots__/location.test.js.snap b/test/snapshot/__snapshots__/location.test.js.snap index 215194c72..e055be095 100644 --- a/test/snapshot/__snapshots__/location.test.js.snap +++ b/test/snapshot/__snapshots__/location.test.js.snap @@ -9468,6 +9468,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "loc": Location { "end": Position { diff --git a/test/snapshot/__snapshots__/parentreference.test.js.snap b/test/snapshot/__snapshots__/parentreference.test.js.snap index 8c058bed2..ffef15c0c 100644 --- a/test/snapshot/__snapshots__/parentreference.test.js.snap +++ b/test/snapshot/__snapshots__/parentreference.test.js.snap @@ -7,6 +7,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -47,6 +48,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -137,6 +139,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -177,6 +180,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", diff --git a/test/snapshot/__snapshots__/php5.test.js.snap b/test/snapshot/__snapshots__/php5.test.js.snap index 9c968d8c3..533edc1ab 100644 --- a/test/snapshot/__snapshots__/php5.test.js.snap +++ b/test/snapshot/__snapshots__/php5.test.js.snap @@ -9,6 +9,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": null, "nullable": false, diff --git a/test/snapshot/__snapshots__/php73.test.js.snap b/test/snapshot/__snapshots__/php73.test.js.snap index 1cfd229b9..3a0426c02 100644 --- a/test/snapshot/__snapshots__/php73.test.js.snap +++ b/test/snapshot/__snapshots__/php73.test.js.snap @@ -309,6 +309,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -321,6 +322,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -333,6 +335,7 @@ Program { }, Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": null, "nullable": false, diff --git a/test/snapshot/__snapshots__/scalar.test.js.snap b/test/snapshot/__snapshots__/scalar.test.js.snap index 2b43a7895..58753de7c 100644 --- a/test/snapshot/__snapshots__/scalar.test.js.snap +++ b/test/snapshot/__snapshots__/scalar.test.js.snap @@ -231,6 +231,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", diff --git a/test/snapshot/__snapshots__/selfreference.test.js.snap b/test/snapshot/__snapshots__/selfreference.test.js.snap index 5aad7363a..835309c1d 100644 --- a/test/snapshot/__snapshots__/selfreference.test.js.snap +++ b/test/snapshot/__snapshots__/selfreference.test.js.snap @@ -7,6 +7,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -47,6 +48,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -137,6 +139,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -177,6 +180,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", diff --git a/test/snapshot/__snapshots__/typereference.test.js.snap b/test/snapshot/__snapshots__/typereference.test.js.snap index 2a23f38d7..b31922a75 100644 --- a/test/snapshot/__snapshots__/typereference.test.js.snap +++ b/test/snapshot/__snapshots__/typereference.test.js.snap @@ -7,6 +7,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -48,6 +49,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -89,6 +91,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -130,6 +133,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -171,6 +175,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -212,6 +217,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -253,6 +259,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -294,6 +301,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -335,6 +343,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -376,6 +385,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -417,6 +427,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -458,6 +469,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -499,6 +511,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -540,6 +553,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -581,6 +595,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -622,6 +637,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -663,6 +679,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -704,6 +721,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -745,6 +763,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -786,6 +805,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -827,6 +847,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -868,6 +889,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -909,6 +931,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -950,6 +973,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -991,6 +1015,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1032,6 +1057,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1073,6 +1099,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1114,6 +1141,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1155,6 +1183,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1196,6 +1225,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1237,6 +1267,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1278,6 +1309,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1319,6 +1351,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1360,6 +1393,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1401,6 +1435,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1442,6 +1477,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1483,6 +1519,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1524,6 +1561,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1565,6 +1603,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", @@ -1606,6 +1645,7 @@ Program { "arguments": Array [ Parameter { "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", diff --git a/test/snapshot/class.test.js b/test/snapshot/class.test.js index a26a1975d..afb14f28d 100644 --- a/test/snapshot/class.test.js +++ b/test/snapshot/class.test.js @@ -129,15 +129,20 @@ describe("Test classes", function () { ).toMatchSnapshot(); }); - it("Test class union properties", function () { - expect( - parser.parseEval(` - class Test { - static int|float $foo; - private ?Foo|Bar $bar; - public Repo|string|null $a; - }`) - ).toMatchSnapshot(); + it("Test promoted class properties php 8", function () { + const ast = parser.parseEval( + ` + class __proto__ { + public function constructor(public int $id, private $name, int $c, protected ServerRequestInterface $req) {} + }`, + { + parser: { + version: "8.0", + suppressErrors: true, + }, + } + ); + expect(ast).toMatchSnapshot(); }); it("empty", function () { From b1ead38f23b14b312b8b69cc52866a05124bcff3 Mon Sep 17 00:00:00 2001 From: Chris Seufert Date: Thu, 1 Apr 2021 13:04:05 +1100 Subject: [PATCH 2/3] Fix return --- src/parser/function.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/parser/function.js b/src/parser/function.js index 067b5f989..09a7e3ef9 100644 --- a/src/parser/function.js +++ b/src/parser/function.js @@ -266,9 +266,8 @@ module.exports = { } else if (this.token === this.tok.T_PRIVATE) { this.next(); return MODIFIER_PRIVATE; - } else { - 0; - } + } + return 0; }, /** * Reads a list of arguments From dfd2abf93a09cab8b24e6eac7abf0e142cbba863 Mon Sep 17 00:00:00 2001 From: Christian Zosel Date: Thu, 1 Apr 2021 20:37:41 +0200 Subject: [PATCH 3/3] fix: formatting --- src/parser/function.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser/function.js b/src/parser/function.js index 09a7e3ef9..5b5edb407 100644 --- a/src/parser/function.js +++ b/src/parser/function.js @@ -266,7 +266,7 @@ module.exports = { } else if (this.token === this.tok.T_PRIVATE) { this.next(); return MODIFIER_PRIVATE; - } + } return 0; }, /**