...
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
namespace Nub.Lang.Frontend.Parsing;
|
||||
|
||||
public class StructDefinitionNode(string name, List<StructField> members) : DefinitionNode
|
||||
public class StructDefinitionNode(string name, List<StructField> fields) : DefinitionNode
|
||||
{
|
||||
public string Name { get; } = name;
|
||||
public List<StructField> Members { get; } = members;
|
||||
public List<StructField> Fields { get; } = fields;
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace Nub.Lang.Frontend.Parsing;
|
||||
|
||||
public class StructMemberAccessorNode(List<string> members) : ExpressionNode
|
||||
public class StructMemberAccessorNode(List<string> fields) : ExpressionNode
|
||||
{
|
||||
public List<string> Members { get; } = members;
|
||||
public List<string> Fields { get; } = fields;
|
||||
}
|
||||
@@ -43,7 +43,7 @@ public class ExpressionTyper
|
||||
|
||||
foreach (var @class in _structDefinitions)
|
||||
{
|
||||
foreach (var variable in @class.Members)
|
||||
foreach (var variable in @class.Fields)
|
||||
{
|
||||
if (variable.Value.HasValue)
|
||||
{
|
||||
@@ -265,37 +265,37 @@ public class ExpressionTyper
|
||||
// TODO: Fix this ugly ass code
|
||||
private void GenerateStructMemberAccessorNode(StructMemberAccessorNode structMemberAccessor)
|
||||
{
|
||||
var variable = _variables.FirstOrDefault(v => v.Name == structMemberAccessor.Members[0]);
|
||||
var variable = _variables.FirstOrDefault(v => v.Name == structMemberAccessor.Fields[0]);
|
||||
if (variable == null)
|
||||
{
|
||||
throw new Exception($"Variable {structMemberAccessor.Members[0]} is not defined");
|
||||
throw new Exception($"Variable {structMemberAccessor.Fields[0]} is not defined");
|
||||
}
|
||||
|
||||
var definition = _structDefinitions.FirstOrDefault(sd => sd.Name == variable.Type.Name);
|
||||
if (definition == null)
|
||||
{
|
||||
throw new Exception($"Struct {structMemberAccessor.Members[0]} is not defined");
|
||||
throw new Exception($"Struct {structMemberAccessor.Fields[0]} is not defined");
|
||||
}
|
||||
|
||||
for (var i = 1; i < structMemberAccessor.Members.Count - 1; i++)
|
||||
for (var i = 1; i < structMemberAccessor.Fields.Count - 1; i++)
|
||||
{
|
||||
var member = definition.Members.FirstOrDefault(m => m.Name == structMemberAccessor.Members[i]);
|
||||
var member = definition.Fields.FirstOrDefault(m => m.Name == structMemberAccessor.Fields[i]);
|
||||
if (member == null)
|
||||
{
|
||||
throw new Exception($"Member {structMemberAccessor.Members[i]} does not exist on struct {definition.Name}");
|
||||
throw new Exception($"Member {structMemberAccessor.Fields[i]} does not exist on struct {definition.Name}");
|
||||
}
|
||||
|
||||
definition = _structDefinitions.FirstOrDefault(sd => sd.Name == member.Type.Name);
|
||||
if (definition == null)
|
||||
{
|
||||
throw new Exception($"Struct {structMemberAccessor.Members[i]} is not defined");
|
||||
throw new Exception($"Struct {structMemberAccessor.Fields[i]} is not defined");
|
||||
}
|
||||
}
|
||||
|
||||
var tmp = definition.Members.FirstOrDefault(m => m.Name == structMemberAccessor.Members.Last());
|
||||
var tmp = definition.Fields.FirstOrDefault(m => m.Name == structMemberAccessor.Fields.Last());
|
||||
if (tmp == null)
|
||||
{
|
||||
throw new Exception($"Member {structMemberAccessor.Members.Last()} does not exist on struct {definition.Name}");
|
||||
throw new Exception($"Member {structMemberAccessor.Fields.Last()} does not exist on struct {definition.Name}");
|
||||
}
|
||||
|
||||
structMemberAccessor.Type = tmp.Type;
|
||||
|
||||
Reference in New Issue
Block a user