...
This commit is contained in:
@@ -86,7 +86,7 @@ public static class QBEGenerator
|
|||||||
return $"$cstring{++_cStringLiteralIndex}";
|
return $"$cstring{++_cStringLiteralIndex}";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string FuncName(IBoundFuncSignature funcDef)
|
private static string FuncName(BoundFuncDefinition funcDef)
|
||||||
{
|
{
|
||||||
return funcDef switch
|
return funcDef switch
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ public class DefinitionTable
|
|||||||
_syntaxTrees = syntaxTrees;
|
_syntaxTrees = syntaxTrees;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<IFuncSignature> LookupFunc(string @namespace, string name)
|
public Optional<FuncDefinition> LookupFunc(string @namespace, string name)
|
||||||
{
|
{
|
||||||
var definition = _syntaxTrees
|
var definition = _syntaxTrees
|
||||||
.Where(c => c.Namespace == @namespace)
|
.Where(c => c.Namespace == @namespace)
|
||||||
.SelectMany(c => c.Definitions)
|
.SelectMany(c => c.Definitions)
|
||||||
.OfType<IFuncSignature>()
|
.OfType<FuncDefinition>()
|
||||||
.SingleOrDefault(f => f.Name == name);
|
.SingleOrDefault(f => f.Name == name);
|
||||||
|
|
||||||
return Optional.OfNullable(definition);
|
return Optional.OfNullable(definition);
|
||||||
@@ -54,12 +54,12 @@ public class BoundDefinitionTable
|
|||||||
_syntaxTrees = syntaxTrees;
|
_syntaxTrees = syntaxTrees;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<IBoundFuncSignature> LookupFunc(string @namespace, string name)
|
public Optional<BoundFuncDefinition> LookupFunc(string @namespace, string name)
|
||||||
{
|
{
|
||||||
var definition = _syntaxTrees
|
var definition = _syntaxTrees
|
||||||
.Where(c => c.Namespace == @namespace)
|
.Where(c => c.Namespace == @namespace)
|
||||||
.SelectMany(c => c.Definitions)
|
.SelectMany(c => c.Definitions)
|
||||||
.OfType<IBoundFuncSignature>()
|
.OfType<BoundFuncDefinition>()
|
||||||
.SingleOrDefault(f => f.Name == name);
|
.SingleOrDefault(f => f.Name == name);
|
||||||
|
|
||||||
return Optional.OfNullable(definition);
|
return Optional.OfNullable(definition);
|
||||||
|
|||||||
@@ -6,29 +6,10 @@ namespace Syntax.Parsing.Node;
|
|||||||
|
|
||||||
public abstract record DefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace) : Node(Tokens);
|
public abstract record DefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace) : Node(Tokens);
|
||||||
|
|
||||||
public record FuncParameter(string Name, NubType Type)
|
public record FuncParameter(string Name, NubType Type);
|
||||||
{
|
public abstract record FuncDefinition(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, List<FuncParameter> Parameters, NubType ReturnType) : DefinitionNode(Tokens, Documentation, Namespace);
|
||||||
public override string ToString() => $"{Name}: {Type}";
|
public record LocalFuncDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, List<FuncParameter> Parameters, BlockNode Body, NubType ReturnType, bool Exported) : FuncDefinition(Tokens, Documentation, Namespace, Name, Parameters, ReturnType);
|
||||||
}
|
public record ExternFuncDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, string CallName, List<FuncParameter> Parameters, NubType ReturnType) : FuncDefinition(Tokens, Documentation, Namespace, Name, Parameters, ReturnType);
|
||||||
|
|
||||||
public interface IFuncSignature
|
|
||||||
{
|
|
||||||
public string Name { get; }
|
|
||||||
public List<FuncParameter> Parameters { get; }
|
|
||||||
public NubType ReturnType { get; }
|
|
||||||
|
|
||||||
public string ToString() => $"{Name}({string.Join(", ", Parameters.Select(p => p.ToString()))}){": " + ReturnType}";
|
|
||||||
}
|
|
||||||
|
|
||||||
public record LocalFuncDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, List<FuncParameter> Parameters, BlockNode Body, NubType ReturnType, bool Exported) : DefinitionNode(Tokens, Documentation, Namespace), IFuncSignature
|
|
||||||
{
|
|
||||||
public override string ToString() => $"{Name}({string.Join(", ", Parameters.Select(p => p.ToString()))}){": " + ReturnType}";
|
|
||||||
}
|
|
||||||
|
|
||||||
public record ExternFuncDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, string CallName, List<FuncParameter> Parameters, NubType ReturnType) : DefinitionNode(Tokens, Documentation, Namespace), IFuncSignature
|
|
||||||
{
|
|
||||||
public override string ToString() => $"{Name}({string.Join(", ", Parameters.Select(p => p.ToString()))}){": " + ReturnType}";
|
|
||||||
}
|
|
||||||
|
|
||||||
public record StructField(string Name, NubType Type, Optional<ExpressionNode> Value);
|
public record StructField(string Name, NubType Type, Optional<ExpressionNode> Value);
|
||||||
public record StructDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, List<StructField> Fields) : DefinitionNode(Tokens, Documentation, Namespace);
|
public record StructDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, List<StructField> Fields) : DefinitionNode(Tokens, Documentation, Namespace);
|
||||||
|
|||||||
@@ -5,29 +5,10 @@ namespace Syntax.Typing.BoundNode;
|
|||||||
|
|
||||||
public abstract record BoundDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace) : BoundNode(Tokens);
|
public abstract record BoundDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace) : BoundNode(Tokens);
|
||||||
|
|
||||||
public record BoundFuncParameter(string Name, NubType Type)
|
public record BoundFuncParameter(string Name, NubType Type);
|
||||||
{
|
public abstract record BoundFuncDefinition(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, List<BoundFuncParameter> Parameters, NubType ReturnType) : BoundDefinitionNode(Tokens, Documentation, Namespace);
|
||||||
public override string ToString() => $"{Name}: {Type}";
|
public record BoundLocalFuncDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, List<BoundFuncParameter> Parameters, BoundBlockNode Body, NubType ReturnType, bool Exported) : BoundFuncDefinition(Tokens, Documentation, Namespace, Name, Parameters, ReturnType);
|
||||||
}
|
public record BoundExternFuncDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, string CallName, List<BoundFuncParameter> Parameters, NubType ReturnType) : BoundFuncDefinition(Tokens, Documentation, Namespace, Name, Parameters, ReturnType);
|
||||||
|
|
||||||
public interface IBoundFuncSignature
|
|
||||||
{
|
|
||||||
public string Name { get; }
|
|
||||||
public List<BoundFuncParameter> Parameters { get; }
|
|
||||||
public NubType ReturnType { get; }
|
|
||||||
|
|
||||||
public string ToString() => $"{Name}({string.Join(", ", Parameters.Select(p => p.ToString()))}){": " + ReturnType}";
|
|
||||||
}
|
|
||||||
|
|
||||||
public record BoundLocalFuncDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, List<BoundFuncParameter> Parameters, BoundBlockNode Body, NubType ReturnType, bool Exported) : BoundDefinitionNode(Tokens, Documentation, Namespace), IBoundFuncSignature
|
|
||||||
{
|
|
||||||
public override string ToString() => $"{Name}({string.Join(", ", Parameters.Select(p => p.ToString()))}){": " + ReturnType}";
|
|
||||||
}
|
|
||||||
|
|
||||||
public record BoundExternFuncDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, string CallName, List<BoundFuncParameter> Parameters, NubType ReturnType) : BoundDefinitionNode(Tokens, Documentation, Namespace), IBoundFuncSignature
|
|
||||||
{
|
|
||||||
public override string ToString() => $"{Name}({string.Join(", ", Parameters.Select(p => p.ToString()))}){": " + ReturnType}";
|
|
||||||
}
|
|
||||||
|
|
||||||
public record BoundStructField(string Name, NubType Type, Optional<BoundExpressionNode> Value);
|
public record BoundStructField(string Name, NubType Type, Optional<BoundExpressionNode> Value);
|
||||||
public record BoundStructDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, List<BoundStructField> Fields) : BoundDefinitionNode(Tokens, Documentation, Namespace);
|
public record BoundStructDefinitionNode(IEnumerable<Token> Tokens, Optional<string> Documentation, string Namespace, string Name, List<BoundStructField> Fields) : BoundDefinitionNode(Tokens, Documentation, Namespace);
|
||||||
|
|||||||
Reference in New Issue
Block a user