...
This commit is contained in:
@@ -28,7 +28,7 @@ public sealed class Parser(string fileName, List<Token> tokens)
|
||||
diagnostics.Add(e.Diagnostic);
|
||||
}
|
||||
|
||||
return new Ast(definitions);
|
||||
return new Ast(definitions, fileName);
|
||||
}
|
||||
|
||||
private NodeDefinition ParseDefinition()
|
||||
@@ -82,12 +82,6 @@ public sealed class Parser(string fileName, List<Token> tokens)
|
||||
return new NodeDefinitionModule(TokensFrom(startIndex), name);
|
||||
}
|
||||
|
||||
if (TryExpectKeyword(Keyword.Import))
|
||||
{
|
||||
var name = ExpectIdent();
|
||||
return new NodeDefinitionImport(TokensFrom(startIndex), name);
|
||||
}
|
||||
|
||||
throw new CompileException(Diagnostic.Error("Not a valid definition").At(fileName, Peek()).Build());
|
||||
}
|
||||
|
||||
@@ -244,7 +238,15 @@ public sealed class Parser(string fileName, List<Token> tokens)
|
||||
}
|
||||
else if (TryExpectIdent(out var ident))
|
||||
{
|
||||
expr = new NodeExpressionIdent(TokensFrom(startIndex), ident);
|
||||
if (TryExpectSymbol(Symbol.ColonColon))
|
||||
{
|
||||
var name = ExpectIdent();
|
||||
expr = new NodeExpressionModuleIdent(TokensFrom(startIndex), ident, name);
|
||||
}
|
||||
else
|
||||
{
|
||||
expr = new NodeExpressionLocalIdent(TokensFrom(startIndex), ident);
|
||||
}
|
||||
}
|
||||
else if (TryExpectKeyword(Keyword.Struct))
|
||||
{
|
||||
@@ -532,8 +534,9 @@ public sealed class Parser(string fileName, List<Token> tokens)
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class Ast(List<NodeDefinition> definitions)
|
||||
public sealed class Ast(List<NodeDefinition> definitions, string fileName)
|
||||
{
|
||||
public string FileName = fileName;
|
||||
public readonly List<NodeDefinition> Definitions = definitions;
|
||||
}
|
||||
|
||||
@@ -549,11 +552,6 @@ public sealed class NodeDefinitionModule(List<Token> tokens, TokenIdent name) :
|
||||
public readonly TokenIdent Name = name;
|
||||
}
|
||||
|
||||
public sealed class NodeDefinitionImport(List<Token> tokens, TokenIdent name) : NodeDefinition(tokens)
|
||||
{
|
||||
public readonly TokenIdent Name = name;
|
||||
}
|
||||
|
||||
public sealed class NodeDefinitionFunc(List<Token> tokens, TokenIdent name, List<NodeDefinitionFunc.Param> parameters, NodeStatement body, NodeType returnType) : NodeDefinition(tokens)
|
||||
{
|
||||
public readonly TokenIdent Name = name;
|
||||
@@ -660,11 +658,17 @@ public sealed class NodeExpressionMemberAccess(List<Token> tokens, NodeExpressio
|
||||
public readonly TokenIdent Name = name;
|
||||
}
|
||||
|
||||
public sealed class NodeExpressionIdent(List<Token> tokens, TokenIdent value) : NodeExpression(tokens)
|
||||
public sealed class NodeExpressionLocalIdent(List<Token> tokens, TokenIdent value) : NodeExpression(tokens)
|
||||
{
|
||||
public readonly TokenIdent Value = value;
|
||||
}
|
||||
|
||||
public sealed class NodeExpressionModuleIdent(List<Token> tokens, TokenIdent module, TokenIdent value) : NodeExpression(tokens)
|
||||
{
|
||||
public readonly TokenIdent Module = module;
|
||||
public readonly TokenIdent Value = value;
|
||||
}
|
||||
|
||||
public sealed class NodeExpressionBinary(List<Token> tokens, NodeExpression left, NodeExpressionBinary.Op operation, NodeExpression right) : NodeExpression(tokens)
|
||||
{
|
||||
public readonly NodeExpression Left = left;
|
||||
|
||||
Reference in New Issue
Block a user