diff options
author | Tianqi Zhang <tianzh@microsoft.com> | 2021-07-05 14:44:28 +0300 |
---|---|---|
committer | Tianqi Zhang <tianzh@microsoft.com> | 2021-07-05 14:44:28 +0300 |
commit | 6f7cbac26e4bc2c998249e0059a3b732d8519a68 (patch) | |
tree | 804f9eeec1efdeade9d9188d1b52a48a93dbbea0 /monodoc | |
parent | f2559731388b930cc7f5dc32987bcf23ac5716dd (diff) |
add instructions about how to run jay
Diffstat (limited to 'monodoc')
-rw-r--r-- | monodoc/Monodoc.Ecma/EcmaUrlParser.jay | 6 | ||||
-rw-r--r-- | monodoc/Monodoc.Ecma/prebuilt/EcmaUrlParser.cs | 116 | ||||
-rw-r--r-- | monodoc/Test/Monodoc.Ecma/EcmaUrlTests.cs | 28 |
3 files changed, 95 insertions, 55 deletions
diff --git a/monodoc/Monodoc.Ecma/EcmaUrlParser.jay b/monodoc/Monodoc.Ecma/EcmaUrlParser.jay index 0ce1dc25..54ef5a3d 100644 --- a/monodoc/Monodoc.Ecma/EcmaUrlParser.jay +++ b/monodoc/Monodoc.Ecma/EcmaUrlParser.jay @@ -1,4 +1,10 @@ %{ + +// To Generate this file: +// 1. Download and install mono-jay via https://packages.ubuntu.com/bionic/mono-jay +// 2. Run command: +// jay -ct Monodoc.Ecma/EcmaUrlParser.jay < Monodoc.Ecma/jay/skeleton.cs > Monodoc.Ecma/prebuilt/EcmaUrlParser.cs + using System.Text; using System.IO; using System; diff --git a/monodoc/Monodoc.Ecma/prebuilt/EcmaUrlParser.cs b/monodoc/Monodoc.Ecma/prebuilt/EcmaUrlParser.cs index c52640bd..c7bbd887 100644 --- a/monodoc/Monodoc.Ecma/prebuilt/EcmaUrlParser.cs +++ b/monodoc/Monodoc.Ecma/prebuilt/EcmaUrlParser.cs @@ -2,6 +2,12 @@ #line 1 "Monodoc.Ecma/EcmaUrlParser.jay" + +// To Generate this file: +// 1. Download and install mono-jay via https://packages.ubuntu.com/bionic/mono-jay +// 2. Run command: +// jay -ct Monodoc.Ecma/EcmaUrlParser.jay < Monodoc.Ecma/jay/skeleton.cs > Monodoc.Ecma/prebuilt/EcmaUrlParser.cs + using System.Text; using System.IO; using System; @@ -367,47 +373,47 @@ namespace Monodoc.Ecma yyVal = yyV > yyTop ? null : yyVals[yyV]; // yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 1: -#line 79 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 85 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Type); } break; case 2: -#line 80 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 86 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Namespace); } break; case 3: -#line 81 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 87 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Method); } break; case 4: -#line 82 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 88 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Field); } break; case 5: -#line 83 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 89 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Constructor); } break; case 6: -#line 84 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 90 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Property); } break; case 7: -#line 85 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 91 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Event); } break; case 8: -#line 86 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 92 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Operator); } break; case 9: -#line 90 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 96 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = new List<string> { (string)yyVals[0+yyTop] }; } break; case 10: -#line 91 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 97 "Monodoc.Ecma/EcmaUrlParser.jay" { ((ICollection<string>)yyVals[0+yyTop]).Add ((string)yyVals[-2+yyTop]); yyVal = yyVals[0+yyTop]; } break; case 11: -#line 94 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 100 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = new EcmaDesc { Namespace = string.Join (".", ((IEnumerable<string>)yyVals[0+yyTop]).Reverse ()) }; } break; case 12: @@ -420,74 +426,74 @@ case 14: case_14(); break; case 15: -#line 136 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 142 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = null; } break; case 16: -#line 137 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 143 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = yyVals[0+yyTop]; } break; case 17: -#line 140 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 146 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = null; } break; case 18: -#line 141 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 147 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = Enumerable.Repeat<EcmaDesc> (null, (int)yyVals[0+yyTop]).ToList (); } break; case 19: -#line 142 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 148 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 20: -#line 145 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 151 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = new List<EcmaDesc> () { (EcmaDesc)yyVals[0+yyTop] }; } break; case 21: -#line 146 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 152 "Monodoc.Ecma/EcmaUrlParser.jay" { ((List<EcmaDesc>)yyVals[-2+yyTop]).Add ((EcmaDesc)yyVals[0+yyTop]); yyVal = yyVals[-2+yyTop]; } break; case 22: -#line 149 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 155 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = null; } break; case 23: -#line 150 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 156 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = "?"; } break; case 24: -#line 153 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 159 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = null; } break; case 25: case_25(); break; case 26: -#line 161 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 167 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = 1; } break; case 27: -#line 162 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 168 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = ((int)yyVals[0+yyTop]) + 1; } break; case 28: -#line 165 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 171 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = null; } break; case 29: -#line 166 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 172 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = Tuple.Create<char, string> (((string)yyVals[0+yyTop])[0], null); } break; case 30: -#line 167 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 173 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = Tuple.Create<char, string> (((string)yyVals[-2+yyTop])[0], (string)yyVals[0+yyTop]); } break; case 31: -#line 171 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 177 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = "*"; } break; case 32: -#line 172 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 178 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = yyVals[0+yyTop]; } break; case 33: @@ -500,42 +506,42 @@ case 35: case_35(); break; case 36: -#line 200 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 206 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = (string)yyVals[-1+yyTop] + (yyVals[0+yyTop] == null ? string.Empty : "<" + string.Join (",", ((IEnumerable<EcmaDesc>)yyVals[0+yyTop]).Select (t => t.ToCompleteTypeName ())) + ">"); } break; case 37: case_37(); break; case 38: -#line 208 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 214 "Monodoc.Ecma/EcmaUrlParser.jay" { var desc = (EcmaDesc)yyVals[-1+yyTop]; desc.DescModifier = (EcmaDesc.Mod)yyVals[0+yyTop]; yyVal = desc; } break; case 39: -#line 211 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 217 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = EcmaDesc.Mod.Normal; } break; case 40: -#line 212 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 218 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = EcmaDesc.Mod.Pointer; } break; case 41: -#line 213 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 219 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = EcmaDesc.Mod.Ref; } break; case 42: -#line 214 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 220 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = EcmaDesc.Mod.Out; } break; case 43: -#line 217 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 223 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = null; } break; case 44: -#line 218 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 224 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = new List<EcmaDesc> () { (EcmaDesc)yyVals[0+yyTop] }; } break; case 45: -#line 219 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 225 "Monodoc.Ecma/EcmaUrlParser.jay" { ((List<EcmaDesc>)yyVals[0+yyTop]).Add ((EcmaDesc)yyVals[-2+yyTop]); yyVal = yyVals[0+yyTop]; } break; case 46: @@ -548,26 +554,26 @@ case 48: case_48(); break; case 49: -#line 244 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 250 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = yyVals[0+yyTop]; } break; case 50: -#line 247 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 253 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = yyVals[0+yyTop]; } break; case 51: case_51(); break; case 52: -#line 257 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 263 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = yyVals[0+yyTop]; } break; case 53: -#line 265 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 271 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = null; } break; case 54: -#line 266 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 272 "Monodoc.Ecma/EcmaUrlParser.jay" { yyVal = yyVals[-1+yyTop]; } break; #line default @@ -606,7 +612,7 @@ case 54: All more than 3 lines long rules are wrapped into a method */ void case_12() -#line 97 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 103 "Monodoc.Ecma/EcmaUrlParser.jay" { var dotExpr = ((List<string>)yyVals[-1+yyTop]); dotExpr.Reverse (); @@ -618,7 +624,7 @@ void case_12() } void case_13() -#line 109 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 115 "Monodoc.Ecma/EcmaUrlParser.jay" { var desc = yyVals[0+yyTop] as EcmaDesc; desc.DescKind = EcmaDesc.Kind.Type; @@ -627,7 +633,7 @@ void case_13() } void case_14() -#line 117 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 123 "Monodoc.Ecma/EcmaUrlParser.jay" { bool nestedDescHasEtc = yyVals[-4+yyTop] != null && ((EcmaDesc)yyVals[-4+yyTop]).IsEtc; EcmaDesc nestedType = (EcmaDesc)yyVals[-4+yyTop]; @@ -647,7 +653,7 @@ void case_14() } void case_25() -#line 154 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 160 "Monodoc.Ecma/EcmaUrlParser.jay" { var dims = ((IList<int>)yyVals[0+yyTop]) ?? new List<int> (2); dims.Add ((int)yyVals[-2+yyTop]); @@ -655,7 +661,7 @@ void case_25() } void case_33() -#line 175 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 181 "Monodoc.Ecma/EcmaUrlParser.jay" { var desc = yyVals[-4+yyTop] as EcmaDesc; desc.MemberName = yyVals[-2+yyTop] as string; @@ -665,7 +671,7 @@ void case_33() } void case_34() -#line 182 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 188 "Monodoc.Ecma/EcmaUrlParser.jay" { var dotExpr = ((List<string>)yyVals[-2+yyTop]); yyVal = new EcmaDesc { @@ -678,7 +684,7 @@ void case_34() } void case_35() -#line 192 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 198 "Monodoc.Ecma/EcmaUrlParser.jay" { var desc = yyVals[-2+yyTop] as EcmaDesc; desc.ExplicitImplMember = yyVals[0+yyTop] as EcmaDesc; @@ -686,7 +692,7 @@ void case_35() } void case_37() -#line 201 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 207 "Monodoc.Ecma/EcmaUrlParser.jay" { var existing = yyVals[0+yyTop] as string; var expr = (string)yyVals[-3+yyTop] + (yyVals[-2+yyTop] == null ? string.Empty : "<" + string.Join (",", ((IEnumerable<EcmaDesc>)yyVals[-2+yyTop]).Select (t => t.ToCompleteTypeName ())) + ">"); @@ -694,7 +700,7 @@ void case_37() } void case_46() -#line 222 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 228 "Monodoc.Ecma/EcmaUrlParser.jay" { var dotExpr = ((List<string>)yyVals[0+yyTop]); dotExpr.Reverse (); @@ -707,7 +713,7 @@ void case_46() } void case_47() -#line 232 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 238 "Monodoc.Ecma/EcmaUrlParser.jay" { var desc = yyVals[-2+yyTop] as EcmaDesc; desc.MemberName = yyVals[0+yyTop] as string; @@ -715,7 +721,7 @@ void case_47() } void case_48() -#line 237 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 243 "Monodoc.Ecma/EcmaUrlParser.jay" { var desc = yyVals[-2+yyTop] as EcmaDesc; desc.ExplicitImplMember = yyVals[0+yyTop] as EcmaDesc; @@ -723,7 +729,7 @@ void case_48() } void case_51() -#line 250 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 256 "Monodoc.Ecma/EcmaUrlParser.jay" { var desc = yyVals[-1+yyTop] as EcmaDesc; (desc.ExplicitImplMember ?? desc).MemberArguments = SafeReverse (yyVals[0+yyTop] as List<EcmaDesc>); @@ -890,7 +896,7 @@ void case_51() 269, -1, 271, 272, 273, 274, 275, }; -#line 268 "Monodoc.Ecma/EcmaUrlParser.jay" +#line 274 "Monodoc.Ecma/EcmaUrlParser.jay" } diff --git a/monodoc/Test/Monodoc.Ecma/EcmaUrlTests.cs b/monodoc/Test/Monodoc.Ecma/EcmaUrlTests.cs index a4c1e210..c65ad708 100644 --- a/monodoc/Test/Monodoc.Ecma/EcmaUrlTests.cs +++ b/monodoc/Test/Monodoc.Ecma/EcmaUrlTests.cs @@ -246,6 +246,34 @@ namespace MonoTests.Monodoc.Ecma } [Test] + public void NullableMethodParameterTest() + { + string stringCref = "M:Foo.Bar.FooBar(int,System.Drawing.Imaging?)"; + var desc = parser.Parse(stringCref); + Assert.IsTrue(desc.MemberArguments[1].DescIsNullable); + string generatedEcmaCref = desc.ToEcmaCref(); + Assert.AreEqual(stringCref, generatedEcmaCref); + + stringCref = "M:Foo.Bar.FooBar(int?,System.Drawing.Imaging)"; + desc = parser.Parse(stringCref); + Assert.IsTrue(desc.MemberArguments[0].DescIsNullable); + generatedEcmaCref = desc.ToEcmaCref(); + Assert.AreEqual(stringCref, generatedEcmaCref); + + stringCref = "M:Foo.Bar.FooBar(int[]?,System.Drawing.Imaging)"; + desc = parser.Parse(stringCref); + Assert.IsTrue(desc.MemberArguments[0].ArrayIsNullable); + generatedEcmaCref = desc.ToEcmaCref(); + Assert.AreEqual(stringCref, generatedEcmaCref); + + stringCref = "M:Foo.Bar.FooBar(int,System.Drawing.Imaging?[])"; + desc = parser.Parse(stringCref); + Assert.IsTrue(desc.MemberArguments[1].DescIsNullable); + generatedEcmaCref = desc.ToEcmaCref(); + Assert.AreEqual(stringCref, generatedEcmaCref); + } + + [Test] public void MetaEtcNodeTest () { var ast = new EcmaDesc () { DescKind = EcmaDesc.Kind.Type, |