Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Userdefined classes #383

Draft
wants to merge 61 commits into
base: main
Choose a base branch
from
Draft
Changes from 1 commit
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
70ed34f
Update Syntax.xml
LPeter1997 Nov 29, 2023
e998221
Update Syntax.xml
LPeter1997 Nov 29, 2023
0d837fd
Update Syntax.xml
LPeter1997 Nov 29, 2023
d010bed
Update Syntax.xml
LPeter1997 Nov 29, 2023
c6b5236
Added keywords
LPeter1997 Nov 30, 2023
0313e1f
Update Parser.cs
LPeter1997 Nov 30, 2023
ad6f290
Update Parser.cs
LPeter1997 Nov 30, 2023
c975199
Parsing mostly done
LPeter1997 Dec 1, 2023
a9e6ca8
Update SyntaxFacts.cs
LPeter1997 Dec 1, 2023
df07111
Added class declaration
LPeter1997 Dec 2, 2023
c29ac8b
Added basic class symbol
LPeter1997 Dec 2, 2023
d6572c3
Added a devhost project for easier testing
LPeter1997 Dec 2, 2023
96add9a
Update SourceClassSymbol.cs
LPeter1997 Dec 2, 2023
968fbf5
Update MetadataSymbol.cs
LPeter1997 Dec 2, 2023
d93d474
Update SourceClassSymbol.cs
LPeter1997 Dec 3, 2023
b093f5c
Added default ctor symbol
LPeter1997 Dec 3, 2023
e3c6875
Update Program.cs
LPeter1997 Dec 3, 2023
295e607
Create IClass.cs
LPeter1997 Dec 3, 2023
6135261
Update IClass.cs
LPeter1997 Dec 3, 2023
fd81bc1
Added a basic, empty impl
LPeter1997 Dec 3, 2023
9f10f29
Changed ctors to procedures
LPeter1997 Dec 3, 2023
7dbd863
Update DefaultConstructorSymbol.cs
LPeter1997 Dec 3, 2023
3f4239b
Added to the codegen flow
LPeter1997 Dec 3, 2023
45701be
Added class to module
LPeter1997 Dec 3, 2023
769fb32
Fixed ToString
LPeter1997 Dec 4, 2023
04eea0a
Update MetadataCodegen.cs
LPeter1997 Dec 4, 2023
f950ba4
Merge branch 'main' into userdefined-classes
LPeter1997 Dec 16, 2023
8836428
Fix
LPeter1997 Dec 16, 2023
3bb41d0
Added base call
LPeter1997 Dec 16, 2023
213a498
Update ModuleCodegen.cs
LPeter1997 Dec 16, 2023
32fdbd6
Generating default ctor in IL
LPeter1997 Dec 16, 2023
5dde636
Generating default ctor
LPeter1997 Dec 16, 2023
44468e8
Update DefaultConstructorSymbol.cs
LPeter1997 Dec 16, 2023
8d9bda3
Update ClassCodegen.cs
LPeter1997 Dec 17, 2023
21f57dc
Added all required attribs
LPeter1997 Dec 17, 2023
a72eead
Update DefaultConstructorSymbol.cs
LPeter1997 Dec 17, 2023
47bf4f4
Can almost invoke ctor function
LPeter1997 Dec 17, 2023
d274496
Compiles
LPeter1997 Dec 18, 2023
b21586f
Started on primary ctor
LPeter1997 Dec 19, 2023
729fc5e
Primary ctor binds, compile fails
LPeter1997 Dec 19, 2023
7607ae9
Update SourcePrimaryConstructorSymbol.cs
LPeter1997 Dec 19, 2023
8210aed
Started on field
LPeter1997 Dec 19, 2023
3ee9908
Fields generate in metadata
LPeter1997 Dec 19, 2023
80c58de
Update SourcePrimaryConstructorSymbol.cs
LPeter1997 Dec 19, 2023
76d4e61
Create SourceAutoPropertySymbol.cs
LPeter1997 Dec 21, 2023
388c60e
Update SourceAutoPropertySymbol.cs
LPeter1997 Dec 21, 2023
f75bf73
Update SourceAutoPropertySymbol.cs
LPeter1997 Dec 21, 2023
dcc8b99
Added backing field
LPeter1997 Dec 21, 2023
a5aa66e
Updates
LPeter1997 Dec 21, 2023
9b19a89
Mostly working props
LPeter1997 Dec 21, 2023
7f80da0
Update MetadataCodegen.cs
LPeter1997 Dec 21, 2023
cbfe3b1
Update SourceModuleSymbol.cs
LPeter1997 Dec 23, 2023
413e267
Update FunctionBodyCodegen.cs
LPeter1997 Dec 23, 2023
86f4534
Update ArrayConstructorSymbol.cs
LPeter1997 Dec 23, 2023
817b0cb
Started on struct
LPeter1997 Dec 23, 2023
b18f12f
Update MetadataCodegen.cs
LPeter1997 Dec 23, 2023
921bb21
Update MetadataCodegen.cs
LPeter1997 Dec 23, 2023
54690cd
Update SynthetizedThisParameterSymbol.cs
LPeter1997 Dec 24, 2023
22622e9
Update SourcePrimaryConstructorSymbol.cs
LPeter1997 Dec 24, 2023
af8935d
Merge branch 'main' into userdefined-classes
Kuinox Jun 4, 2024
338b0fa
Updated old API usage.
Kuinox Jun 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Generating default ctor
LPeter1997 committed Dec 16, 2023
commit 5dde63644b5786b79cb91db53fcf43c5f43dc2f1
13 changes: 13 additions & 0 deletions src/Draco.Compiler/Internal/Symbols/Source/SourceClassSymbol.cs
Original file line number Diff line number Diff line change
@@ -28,6 +28,10 @@ internal sealed class SourceClassSymbol : TypeSymbol
InterlockedUtils.InitializeDefault(ref this.genericParameters, this.BuildGenericParameters);
private ImmutableArray<TypeParameterSymbol> genericParameters;

public override ImmutableArray<TypeSymbol> ImmediateBaseTypes =>
InterlockedUtils.InitializeDefault(ref this.immediateBaseTypes, this.BuildImmediateBaseTypes);
private ImmutableArray<TypeSymbol> immediateBaseTypes;

public override bool IsValueType => this.DeclaringSyntax.ValueModifier is not null;

public override Symbol ContainingSymbol { get; }
@@ -58,6 +62,15 @@ private ImmutableArray<TypeParameterSymbol> BuildGenericParameters()
.ToImmutableArray();
}

private ImmutableArray<TypeSymbol> BuildImmediateBaseTypes()
{
var result = ImmutableArray.CreateBuilder<TypeSymbol>();
// NOTE: For now we always just inherit from object
result.Add(this.DeclaringCompilation!.WellKnownTypes.SystemObject);
// Done
return result.ToImmutable();
}

private ImmutableArray<Symbol> BuildMembers()
{
var result = ImmutableArray.CreateBuilder<Symbol>();
Original file line number Diff line number Diff line change
@@ -45,12 +45,17 @@ private BoundStatement BuildBody()

// We have a base type, call base constructor
var defaultCtor = this.ContainingSymbol.BaseType.Constructors
.FirstOrDefault(ctor => ctor.Parameters.Length == 1);
.FirstOrDefault(ctor => ctor.Parameters.Length == 0);
// TODO: Error if base has no default constructor?
if (defaultCtor is null) throw new NotImplementedException();
return ExpressionStatement(CallExpression(
receiver: ParameterExpression(this.Parameters[0]),
method: defaultCtor,
arguments: ImmutableArray<BoundExpression>.Empty));
return ExpressionStatement(BlockExpression(
locals: ImmutableArray<LocalSymbol>.Empty,
statements: ImmutableArray.Create<BoundStatement>(
ExpressionStatement(CallExpression(
receiver: ParameterExpression(this.Parameters[0]),
method: defaultCtor,
arguments: ImmutableArray<BoundExpression>.Empty)),
ExpressionStatement(ReturnExpression(BoundUnitExpression.Default))),
value: BoundUnitExpression.Default));
}
}