Skip to content

Commit 06aa4a0

Browse files
committed
add support for explicitly-special ctors and operators
going wide in supported syntax, will narrow down again later
1 parent ca17f70 commit 06aa4a0

File tree

17 files changed

+8061
-7363
lines changed

17 files changed

+8061
-7363
lines changed

Documentation/design_doc_cpp_myll_1.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,16 @@ unique_ptr<BigOne> blah()
8686
unique_ptr<BigOne> ret = new unique_ptr<BigOne>();
8787
return ret;
8888
}
89+
90+
// attributes
91+
92+
linkage = reachability (not accessability)
93+
[extern,external,global?] var int i; // extern int i;
94+
[intern,internal,local?] var int j; // static int j;
95+
96+
[virtual(forbidden,discouraged,encouraged,enforced), pod == (virtual=forbidden)]
97+
class X {
98+
[abstract,virtual,override,final,hide]
99+
func a() {}
100+
}
101+

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ Give professionals the comfort of known semantics with less repetition and fewer
3939
- DONE: prototypes for simple gen
4040
- subclasses
4141
- test cases for thesis: the_final_test.myll
42+
- generate functions above the variables
43+
- gen proper globals:
44+
- either:
45+
- extern int a; // in .h
46+
- int a = 9; // in one single .cpp
47+
- extern const int b; // in .h
48+
- extern const int b = 9; // in other .cpps
49+
- or:
50+
- inline int a = 9; // in .h
51+
- inline const int b = 9; // in .h
4252

4353
- Prio 2:
4454
- Benchmark the compiler

backend/Core/Decl.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public void AddChild( Decl decl )
119119
// functions, methods, operators, accessors (in the end)
120120
public class Func : Decl, ITplParams
121121
{
122-
public List<TplParam> TplParams { get; set; }
122+
public List<TplParam> TplParams { get; init; } = new();
123123
public List<Param> paras;
124124
public Block? body;
125125
public Typespec retType;

backend/Grammar/Generated/Myll/MyllLexer.cs

Lines changed: 1038 additions & 988 deletions
Large diffs are not rendered by default.

backend/Grammar/Generated/Myll/MyllParser.cs

Lines changed: 6509 additions & 6118 deletions
Large diffs are not rendered by default.

backend/Grammar/Generated/Myll/MyllParserBaseVisitor.cs

Lines changed: 115 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,110 @@ namespace Myll {
3535
[System.Diagnostics.DebuggerNonUserCode]
3636
[System.CLSCompliant(false)]
3737
public partial class MyllParserBaseVisitor<Result> : AbstractParseTreeVisitor<Result>, IMyllParserVisitor<Result> {
38+
/// <summary>
39+
/// Visit a parse tree produced by <see cref="MyllParser.prog"/>.
40+
/// <para>
41+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
42+
/// on <paramref name="context"/>.
43+
/// </para>
44+
/// </summary>
45+
/// <param name="context">The parse tree.</param>
46+
/// <return>The visitor result.</return>
47+
public virtual Result VisitProg([NotNull] MyllParser.ProgContext context) { return VisitChildren(context); }
48+
/// <summary>
49+
/// Visit a parse tree produced by <see cref="MyllParser.module"/>.
50+
/// <para>
51+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
52+
/// on <paramref name="context"/>.
53+
/// </para>
54+
/// </summary>
55+
/// <param name="context">The parse tree.</param>
56+
/// <return>The visitor result.</return>
57+
public virtual Result VisitModule([NotNull] MyllParser.ModuleContext context) { return VisitChildren(context); }
58+
/// <summary>
59+
/// Visit a parse tree produced by <see cref="MyllParser.imports"/>.
60+
/// <para>
61+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
62+
/// on <paramref name="context"/>.
63+
/// </para>
64+
/// </summary>
65+
/// <param name="context">The parse tree.</param>
66+
/// <return>The visitor result.</return>
67+
public virtual Result VisitImports([NotNull] MyllParser.ImportsContext context) { return VisitChildren(context); }
68+
/// <summary>
69+
/// Visit a parse tree produced by the <c>AttribDeclBlock</c>
70+
/// labeled alternative in <see cref="MyllParser.levDecl"/>.
71+
/// <para>
72+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
73+
/// on <paramref name="context"/>.
74+
/// </para>
75+
/// </summary>
76+
/// <param name="context">The parse tree.</param>
77+
/// <return>The visitor result.</return>
78+
public virtual Result VisitAttribDeclBlock([NotNull] MyllParser.AttribDeclBlockContext context) { return VisitChildren(context); }
79+
/// <summary>
80+
/// Visit a parse tree produced by the <c>AttribState</c>
81+
/// labeled alternative in <see cref="MyllParser.levDecl"/>.
82+
/// <para>
83+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
84+
/// on <paramref name="context"/>.
85+
/// </para>
86+
/// </summary>
87+
/// <param name="context">The parse tree.</param>
88+
/// <return>The visitor result.</return>
89+
public virtual Result VisitAttribState([NotNull] MyllParser.AttribStateContext context) { return VisitChildren(context); }
90+
/// <summary>
91+
/// Visit a parse tree produced by the <c>AttribDecl</c>
92+
/// labeled alternative in <see cref="MyllParser.levDecl"/>.
93+
/// <para>
94+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
95+
/// on <paramref name="context"/>.
96+
/// </para>
97+
/// </summary>
98+
/// <param name="context">The parse tree.</param>
99+
/// <return>The visitor result.</return>
100+
public virtual Result VisitAttribDecl([NotNull] MyllParser.AttribDeclContext context) { return VisitChildren(context); }
101+
/// <summary>
102+
/// Visit a parse tree produced by the <c>AttribStmt</c>
103+
/// labeled alternative in <see cref="MyllParser.levStmt"/>.
104+
/// <para>
105+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
106+
/// on <paramref name="context"/>.
107+
/// </para>
108+
/// </summary>
109+
/// <param name="context">The parse tree.</param>
110+
/// <return>The visitor result.</return>
111+
public virtual Result VisitAttribStmt([NotNull] MyllParser.AttribStmtContext context) { return VisitChildren(context); }
112+
/// <summary>
113+
/// Visit a parse tree produced by <see cref="MyllParser.attribBlk"/>.
114+
/// <para>
115+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
116+
/// on <paramref name="context"/>.
117+
/// </para>
118+
/// </summary>
119+
/// <param name="context">The parse tree.</param>
120+
/// <return>The visitor result.</return>
121+
public virtual Result VisitAttribBlk([NotNull] MyllParser.AttribBlkContext context) { return VisitChildren(context); }
122+
/// <summary>
123+
/// Visit a parse tree produced by <see cref="MyllParser.attrib"/>.
124+
/// <para>
125+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
126+
/// on <paramref name="context"/>.
127+
/// </para>
128+
/// </summary>
129+
/// <param name="context">The parse tree.</param>
130+
/// <return>The visitor result.</return>
131+
public virtual Result VisitAttrib([NotNull] MyllParser.AttribContext context) { return VisitChildren(context); }
132+
/// <summary>
133+
/// Visit a parse tree produced by <see cref="MyllParser.attribId"/>.
134+
/// <para>
135+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
136+
/// on <paramref name="context"/>.
137+
/// </para>
138+
/// </summary>
139+
/// <param name="context">The parse tree.</param>
140+
/// <return>The visitor result.</return>
141+
public virtual Result VisitAttribId([NotNull] MyllParser.AttribIdContext context) { return VisitChildren(context); }
38142
/// <summary>
39143
/// Visit a parse tree produced by <see cref="MyllParser.comment"/>.
40144
/// <para>
@@ -810,36 +914,6 @@ public partial class MyllParserBaseVisitor<Result> : AbstractParseTreeVisitor<Re
810914
/// <return>The visitor result.</return>
811915
public virtual Result VisitTypedIdAcors([NotNull] MyllParser.TypedIdAcorsContext context) { return VisitChildren(context); }
812916
/// <summary>
813-
/// Visit a parse tree produced by <see cref="MyllParser.attribId"/>.
814-
/// <para>
815-
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
816-
/// on <paramref name="context"/>.
817-
/// </para>
818-
/// </summary>
819-
/// <param name="context">The parse tree.</param>
820-
/// <return>The visitor result.</return>
821-
public virtual Result VisitAttribId([NotNull] MyllParser.AttribIdContext context) { return VisitChildren(context); }
822-
/// <summary>
823-
/// Visit a parse tree produced by <see cref="MyllParser.attrib"/>.
824-
/// <para>
825-
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
826-
/// on <paramref name="context"/>.
827-
/// </para>
828-
/// </summary>
829-
/// <param name="context">The parse tree.</param>
830-
/// <return>The visitor result.</return>
831-
public virtual Result VisitAttrib([NotNull] MyllParser.AttribContext context) { return VisitChildren(context); }
832-
/// <summary>
833-
/// Visit a parse tree produced by <see cref="MyllParser.attribBlk"/>.
834-
/// <para>
835-
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
836-
/// on <paramref name="context"/>.
837-
/// </para>
838-
/// </summary>
839-
/// <param name="context">The parse tree.</param>
840-
/// <return>The visitor result.</return>
841-
public virtual Result VisitAttribBlk([NotNull] MyllParser.AttribBlkContext context) { return VisitChildren(context); }
842-
/// <summary>
843917
/// Visit a parse tree produced by <see cref="MyllParser.caseBlock"/>.
844918
/// <para>
845919
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
@@ -953,6 +1027,17 @@ public partial class MyllParserBaseVisitor<Result> : AbstractParseTreeVisitor<Re
9531027
/// <return>The visitor result.</return>
9541028
public virtual Result VisitConceptDecl([NotNull] MyllParser.ConceptDeclContext context) { return VisitChildren(context); }
9551029
/// <summary>
1030+
/// Visit a parse tree produced by the <c>AspectDecl</c>
1031+
/// labeled alternative in <see cref="MyllParser.inDecl"/>.
1032+
/// <para>
1033+
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
1034+
/// on <paramref name="context"/>.
1035+
/// </para>
1036+
/// </summary>
1037+
/// <param name="context">The parse tree.</param>
1038+
/// <return>The visitor result.</return>
1039+
public virtual Result VisitAspectDecl([NotNull] MyllParser.AspectDeclContext context) { return VisitChildren(context); }
1040+
/// <summary>
9561041
/// Visit a parse tree produced by the <c>EnumDecl</c>
9571042
/// labeled alternative in <see cref="MyllParser.inDecl"/>.
9581043
/// <para>
@@ -1271,79 +1356,5 @@ public partial class MyllParserBaseVisitor<Result> : AbstractParseTreeVisitor<Re
12711356
/// <param name="context">The parse tree.</param>
12721357
/// <return>The visitor result.</return>
12731358
public virtual Result VisitExpressionStmt([NotNull] MyllParser.ExpressionStmtContext context) { return VisitChildren(context); }
1274-
/// <summary>
1275-
/// Visit a parse tree produced by the <c>AttribDeclBlock</c>
1276-
/// labeled alternative in <see cref="MyllParser.levDecl"/>.
1277-
/// <para>
1278-
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
1279-
/// on <paramref name="context"/>.
1280-
/// </para>
1281-
/// </summary>
1282-
/// <param name="context">The parse tree.</param>
1283-
/// <return>The visitor result.</return>
1284-
public virtual Result VisitAttribDeclBlock([NotNull] MyllParser.AttribDeclBlockContext context) { return VisitChildren(context); }
1285-
/// <summary>
1286-
/// Visit a parse tree produced by the <c>AttribState</c>
1287-
/// labeled alternative in <see cref="MyllParser.levDecl"/>.
1288-
/// <para>
1289-
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
1290-
/// on <paramref name="context"/>.
1291-
/// </para>
1292-
/// </summary>
1293-
/// <param name="context">The parse tree.</param>
1294-
/// <return>The visitor result.</return>
1295-
public virtual Result VisitAttribState([NotNull] MyllParser.AttribStateContext context) { return VisitChildren(context); }
1296-
/// <summary>
1297-
/// Visit a parse tree produced by the <c>AttribDecl</c>
1298-
/// labeled alternative in <see cref="MyllParser.levDecl"/>.
1299-
/// <para>
1300-
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
1301-
/// on <paramref name="context"/>.
1302-
/// </para>
1303-
/// </summary>
1304-
/// <param name="context">The parse tree.</param>
1305-
/// <return>The visitor result.</return>
1306-
public virtual Result VisitAttribDecl([NotNull] MyllParser.AttribDeclContext context) { return VisitChildren(context); }
1307-
/// <summary>
1308-
/// Visit a parse tree produced by the <c>AttribStmt</c>
1309-
/// labeled alternative in <see cref="MyllParser.levStmt"/>.
1310-
/// <para>
1311-
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
1312-
/// on <paramref name="context"/>.
1313-
/// </para>
1314-
/// </summary>
1315-
/// <param name="context">The parse tree.</param>
1316-
/// <return>The visitor result.</return>
1317-
public virtual Result VisitAttribStmt([NotNull] MyllParser.AttribStmtContext context) { return VisitChildren(context); }
1318-
/// <summary>
1319-
/// Visit a parse tree produced by <see cref="MyllParser.module"/>.
1320-
/// <para>
1321-
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
1322-
/// on <paramref name="context"/>.
1323-
/// </para>
1324-
/// </summary>
1325-
/// <param name="context">The parse tree.</param>
1326-
/// <return>The visitor result.</return>
1327-
public virtual Result VisitModule([NotNull] MyllParser.ModuleContext context) { return VisitChildren(context); }
1328-
/// <summary>
1329-
/// Visit a parse tree produced by <see cref="MyllParser.imports"/>.
1330-
/// <para>
1331-
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
1332-
/// on <paramref name="context"/>.
1333-
/// </para>
1334-
/// </summary>
1335-
/// <param name="context">The parse tree.</param>
1336-
/// <return>The visitor result.</return>
1337-
public virtual Result VisitImports([NotNull] MyllParser.ImportsContext context) { return VisitChildren(context); }
1338-
/// <summary>
1339-
/// Visit a parse tree produced by <see cref="MyllParser.prog"/>.
1340-
/// <para>
1341-
/// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
1342-
/// on <paramref name="context"/>.
1343-
/// </para>
1344-
/// </summary>
1345-
/// <param name="context">The parse tree.</param>
1346-
/// <return>The visitor result.</return>
1347-
public virtual Result VisitProg([NotNull] MyllParser.ProgContext context) { return VisitChildren(context); }
13481359
}
13491360
} // namespace Myll

0 commit comments

Comments
 (0)