From e89e7b2ba78d53524352a9e3a3c45b8174cbc280 Mon Sep 17 00:00:00 2001 From: nub31 Date: Wed, 13 Aug 2025 20:30:43 +0200 Subject: [PATCH] Remove implicit this for now --- example/src/main.nub | 18 +----------------- .../Generation/QBE/QBEGenerator.Expression.cs | 16 ++-------------- .../NubLang/Generation/QBE/QBEGenerator.cs | 2 +- src/compiler/NubLang/Parsing/Parser.cs | 9 ++------- 4 files changed, 6 insertions(+), 39 deletions(-) diff --git a/example/src/main.nub b/example/src/main.nub index af8ed2f..eadfd8a 100644 --- a/example/src/main.nub +++ b/example/src/main.nub @@ -1,16 +1,6 @@ extern func puts(fmt: cstring) -interface Printable -{ - func print() -} - -interface Stringable -{ - func str(): cstring -} - -struct Human : Printable, Stringable +struct Human { name: cstring @@ -18,11 +8,6 @@ struct Human : Printable, Stringable { return this.name } - - func print() - { - puts(this.str()) - } } func main(args: []cstring): i64 @@ -32,7 +17,6 @@ func main(args: []cstring): i64 } puts(human.str()) - // human.print() return 0 } diff --git a/src/compiler/NubLang/Generation/QBE/QBEGenerator.Expression.cs b/src/compiler/NubLang/Generation/QBE/QBEGenerator.Expression.cs index e1b85a9..09d4c94 100644 --- a/src/compiler/NubLang/Generation/QBE/QBEGenerator.Expression.cs +++ b/src/compiler/NubLang/Generation/QBE/QBEGenerator.Expression.cs @@ -413,12 +413,10 @@ public partial class QBEGenerator private Val EmitStructFuncAccess(StructFuncAccessNode structFuncAccess) { - var target = EmitUnwrap(EmitExpression(structFuncAccess.Target)); - var structDef = _definitionTable.LookupStruct(structFuncAccess.StructType.Name); var func = StructFuncName(structDef.Name, structFuncAccess.Func); - return new Val(func, structFuncAccess.Type, ValKind.Direct, target); + return new Val(func, structFuncAccess.Type, ValKind.Direct); } private Val EmitInterfaceFuncAccess(InterfaceFuncAccessNode interfaceFuncAccess) @@ -438,13 +436,7 @@ public partial class QBEGenerator var func = TmpName(); _writer.Indented($"{func} =l loadl {funcOffset}"); - var dataPointer = TmpName(); - _writer.Indented($"{dataPointer} =l add {target}, 8"); - - var data = TmpName(); - _writer.Indented($"{data} =l loadl {dataPointer}"); - - return new Val(func, interfaceFuncAccess.Type, ValKind.Direct, data); + return new Val(func, interfaceFuncAccess.Type, ValKind.Direct); } private Val EmitInterfaceInitializer(InterfaceInitializerNode interfaceInitializer, string? destination = null) @@ -484,10 +476,6 @@ public partial class QBEGenerator var expression = EmitExpression(funcCall.Expression); var parameterStrings = new List(); - if (expression.ThisArg != null) - { - parameterStrings.Add($"l {expression.ThisArg}"); - } foreach (var parameter in funcCall.Parameters) { diff --git a/src/compiler/NubLang/Generation/QBE/QBEGenerator.cs b/src/compiler/NubLang/Generation/QBE/QBEGenerator.cs index 58a2a41..6e35a44 100644 --- a/src/compiler/NubLang/Generation/QBE/QBEGenerator.cs +++ b/src/compiler/NubLang/Generation/QBE/QBEGenerator.cs @@ -623,7 +623,7 @@ public class CStringLiteral(string value, string name) public string Name { get; } = name; } -public record Val(string Name, TypeNode Type, ValKind Kind, string? ThisArg = null); +public record Val(string Name, TypeNode Type, ValKind Kind); public class Scope(Scope? parent = null) { diff --git a/src/compiler/NubLang/Parsing/Parser.cs b/src/compiler/NubLang/Parsing/Parser.cs index c9e4863..feebccf 100644 --- a/src/compiler/NubLang/Parsing/Parser.cs +++ b/src/compiler/NubLang/Parsing/Parser.cs @@ -66,16 +66,11 @@ public sealed class Parser return new SyntaxTree(GetTokens(_tokenIndex), definitions); } - private FuncSignatureSyntax ParseFuncSignature(TypeSyntax? thisArg = null) + private FuncSignatureSyntax ParseFuncSignature() { var startIndex = _tokenIndex; List parameters = []; - if (thisArg != null) - { - parameters.Add(new FuncParameterSyntax([], "this", thisArg)); - } - ExpectSymbol(Symbol.OpenParen); while (!TryExpectSymbol(Symbol.CloseParen)) @@ -175,7 +170,7 @@ public sealed class Parser if (TryExpectSymbol(Symbol.Func)) { var funcName = ExpectIdentifier().Value; - var funcSignature = ParseFuncSignature(new CustomTypeSyntax([], name.Value)); + var funcSignature = ParseFuncSignature(); var funcBody = ParseBlock(); funcs.Add(new StructFuncSyntax(GetTokens(memberStartIndex), funcName, funcSignature, funcBody));