Skip to content

Commit 3a76206

Browse files
update MethodExperssion PlayerExperssion and Parentheses tokens
1 parent 1f22b14 commit 3a76206

4 files changed

Lines changed: 28 additions & 44 deletions

File tree

Code/TokenSystem/Tokens/ExpressionTokens/MethodExpressionToken.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using SER.Code.ContextSystem;
22
using SER.Code.Exceptions;
3+
using SER.Code.Helpers;
34
using SER.Code.Helpers.ResultSystem;
45
using SER.Code.MethodSystem.BaseMethods.Synchronous;
56
using SER.Code.MethodSystem.BaseMethods.Yielding;
@@ -9,10 +10,10 @@ namespace SER.Code.TokenSystem.Tokens.ExpressionTokens;
910

1011
public class MethodExpressionToken : ExpressionToken
1112
{
12-
private ReturningMethod? _method = null!;
13+
private Safe<ReturningMethod> _method;
1314

1415
//public override TypeOfValue PossibleValues => new UnknownTypeOfValue();
15-
public override TypeOfValue PossibleValues => _method!.Returns;
16+
public override TypeOfValue PossibleValues => _method.Value.Returns;
1617

1718
protected override IParseResult InternalParse(BaseToken[] tokens)
1819
{
@@ -42,9 +43,7 @@ protected override IParseResult InternalParse(BaseToken[] tokens)
4243

4344
public override TryGet<Value> Value()
4445
{
45-
if (_method is null) throw new AndrzejFuckedUpException();
46-
47-
_method.Execute();
48-
return _method.ReturnValue ?? throw new AndrzejFuckedUpException();
46+
_method.Value.Execute();
47+
return _method.Value.ReturnValue ?? throw new AndrzejFuckedUpException();
4948
}
5049
}

Code/TokenSystem/Tokens/ExpressionTokens/PlayerExpressionToken.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ public class Info<T>(Func<Player, T> handler, string? description) : Info
182182

183183
protected override IParseResult InternalParse(BaseToken[] tokens)
184184
{
185+
var rs = $"{RawRep} expression is invalid".AsError();
185186
if (tokens.First() is not PlayerVariableToken pvarToken)
186187
{
187188
return new Ignore();
@@ -192,16 +193,17 @@ protected override IParseResult InternalParse(BaseToken[] tokens)
192193
switch (tokens.Length)
193194
{
194195
case < 2:
195-
return new Error("A player expression expects to have an argument, but none was provided.");
196+
return new Error(rs + "A player expression expects to have an argument, " +
197+
"but none was provided.");
196198
case > 2:
197-
return new Error(
198-
$"A player expression expects to have only one argument, but {tokens.Length - 1} were provided.");
199+
return new Error(rs + "A player expression expects to have only one argument, " +
200+
$"but {tokens.Length - 1} were provided.");
199201
}
200202

201203
if (EnumArgument<PlayerProperty>.Convert(tokens.Last(), Script)
202204
.HasErrored(out var error, out var property))
203205
{
204-
return new Error(error);
206+
return new Error(rs + error);
205207
}
206208

207209
_property = property;
Lines changed: 15 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using SER.Code.Exceptions;
1+
using SER.Code.Extensions;
22
using SER.Code.Helpers;
33
using SER.Code.Helpers.ResultSystem;
44
using SER.Code.ScriptSystem;
@@ -11,51 +11,35 @@ namespace SER.Code.TokenSystem.Tokens;
1111

1212
public class ParenthesesToken : BaseToken, IValueToken
1313
{
14-
private BaseToken[]? _tokens = null;
14+
public TypeOfValue PossibleValues => typeof(LiteralValue);
15+
16+
public bool IsConstant => false;
17+
18+
public BaseToken[] Tokens { get; private set; } = [];
1519

1620
public string RawContent { get; private set; } = null!;
17-
18-
public TryGet<BaseToken[]> TryGetTokens()
19-
{
20-
if (_tokens is not null)
21-
{
22-
return _tokens;
23-
}
2421

25-
if (Slice is null)
22+
protected override IParseResult InternalParse(Script scr)
23+
{
24+
if (Slice is not CollectionSlice { Type: CollectionBrackets.Round } slice)
2625
{
27-
throw new AndrzejFuckedUpException();
26+
return new Ignore();
2827
}
2928

30-
Result error = $"Failed to get underlying tokens in the '{Slice.RawRep}' parentheses.";
29+
RawContent = slice.Value;
3130
if (Tokenizer.TokenizeLine(Slice.Value, Script, LineNum)
3231
.HasErrored(out var tokenizeError, out var tokens))
3332
{
34-
return error + tokenizeError;
35-
}
36-
37-
return _tokens = tokens.ToArray();
38-
}
39-
40-
protected override IParseResult InternalParse(Script scr)
41-
{
42-
if (Slice is CollectionSlice { Type: CollectionBrackets.Round } slice)
43-
{
44-
RawContent = slice.Value;
45-
return new Success();
33+
return new Error($"In parentheses {RawRep}".AsError() + tokenizeError.AsError());
4634
}
4735

48-
return new Ignore();
36+
Tokens = tokens;
37+
return new Success();
4938
}
5039

5140
public TryGet<object> ParseExpression()
5241
{
53-
if (TryGetTokens().HasErrored(out var error, out var tokens))
54-
{
55-
return error;
56-
}
57-
58-
if (NumericExpressionReslover.CompileExpression(tokens).HasErrored(out var error2, out var expression))
42+
if (NumericExpressionReslover.CompileExpression(Tokens).HasErrored(out var error2, out var expression))
5943
{
6044
return error2;
6145
}
@@ -77,7 +61,4 @@ public TryGet<Value> Value()
7761

7862
return literalValue;
7963
}
80-
81-
public TypeOfValue PossibleValues => new TypeOfValue<LiteralValue>();
82-
public bool IsConstant => false;
8364
}

Code/ValueSystem/TypeOfValue.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ protected TypeOfValue(Type? required)
1818
public bool AreKnown(out Type[] known) => (known = Required!) is not null;
1919

2020
public abstract override string ToString();
21+
22+
public static implicit operator TypeOfValue(Type type) => new SingleTypeOfValue(type);
2123
}
2224

2325
public class TypesOfValue : TypeOfValue

0 commit comments

Comments
 (0)