Skip to content

Commit cfcf416

Browse files
fix some broken stuff
1 parent f40a415 commit cfcf416

File tree

17 files changed

+209
-62
lines changed

17 files changed

+209
-62
lines changed

ArgumentSystem/Arguments/DurationArgument.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class DurationArgument(string name) : Argument(name)
1616
[UsedImplicitly]
1717
public DynamicTryGet<TimeSpan> GetConvertSolution(BaseToken token)
1818
{
19-
if (token is not IValueToken valueToken || valueToken.CanReturn<DurationValue>(out var get))
19+
if (token is not IValueToken valueToken || !valueToken.CanReturn<DurationValue>(out var get))
2020
{
2121
return $"Value '{token.RawRep}' is not a duration.";
2222
}

ArgumentSystem/Arguments/FloatArgument.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public DynamicTryGet<float> GetConvertSolution(BaseToken token)
5858
{
5959
return VerifyRange(number.Value.ExactValue);
6060
}
61+
6162
return new(() => token.TryGetLiteralValue<NumberValue>().OnSuccess(VerifyRange));
6263
}
6364

ArgumentSystem/Arguments/TextArgument.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@ public DynamicTryGet<string> GetConvertSolution(BaseToken token)
2020
return textToken.GetDynamicResolver();
2121
}
2222

23-
if (token is not IValueToken valToken || valToken.CanReturn<TextValue>(out var get))
23+
if (token is not IValueToken valToken || !valToken.CanReturn<LiteralValue>(out var get))
2424
{
2525
return DynamicTryGet.Error($"Value '{token.RawRep}' cannot represent text.");
2626
}
2727

2828
if (valToken.IsConstant)
2929
{
30-
return get().OnSuccess(v => v.ExactValue);
30+
return get().OnSuccess(v => v.StringRep);
3131
}
3232

33-
return new(() => get().OnSuccess(v => v.ExactValue));
33+
return new(() => get().OnSuccess(v => v.StringRep));
3434
}
3535
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using JetBrains.Annotations;
2+
using SER.ArgumentSystem.BaseArguments;
3+
using SER.Helpers.Extensions;
4+
using SER.Helpers.ResultSystem;
5+
using SER.TokenSystem.Tokens;
6+
using SER.TokenSystem.Tokens.Interfaces;
7+
using SER.ValueSystem;
8+
9+
namespace SER.ArgumentSystem.Arguments;
10+
11+
public class UnknownReferenceArgument(string name) : Argument(name)
12+
{
13+
public override string InputDescription => "an unverified reference e.g. @room";
14+
15+
[UsedImplicitly]
16+
public DynamicTryGet<bool> GetConvertSolution(BaseToken token)
17+
{
18+
if (token is TextToken textToken)
19+
{
20+
return textToken.GetDynamicResolver();
21+
}
22+
23+
if (token is not IValueToken valToken || !valToken.CanReturn<LiteralValue>(out var get))
24+
{
25+
return DynamicTryGet.Error($"Value '{token.RawRep}' cannot represent text.");
26+
}
27+
28+
if (valToken.IsConstant)
29+
{
30+
return get().OnSuccess(v => v.StringRep);
31+
}
32+
33+
return new(() => get().OnSuccess(v => v.StringRep));
34+
}
35+
}

ArgumentSystem/Arguments/ValueArgument.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class ValueArgument<T>(string name) : Argument(name) where T : Value
1414
[UsedImplicitly]
1515
public DynamicTryGet<T> GetConvertSolution(BaseToken token)
1616
{
17-
if (token.CanReturn<T>(out var get))
17+
if (!token.CanReturn<T>(out var get))
1818
{
1919
return $"Value '{token.RawRep}' cannot represent {InputDescription}";
2020
}

ContextSystem/Contexts/Control/Loops/RepeatLoopContext.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@ public override TryAddTokenRes TryAddToken(BaseToken token)
3838

3939
_repeatCount = (uint)numberToken.Value;
4040
return TryAddTokenRes.End();
41-
case IValueToken valToken when valToken.CanReturn<NumberValue>(out var getNumber):
41+
case IValueToken valToken:
42+
if (!valToken.CanReturn<NumberValue>(out var getNumber))
43+
{
44+
return TryAddTokenRes.Error($"Value '{token.RawRep}' returns a value, but.");
45+
}
46+
4247
_repeatCountExpression = () =>
4348
{
4449
if (getNumber().HasErrored(out var error, out var value))

Helpers/Extensions/SerExtensions.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Linq;
3+
using System.Runtime.InteropServices;
34
using JetBrains.Annotations;
45
using SER.Helpers.Exceptions;
56
using SER.Helpers.ResultSystem;
@@ -37,16 +38,22 @@ public static bool CanReturn<T>(this BaseToken token, out Func<TryGet<T>> get) w
3738
{
3839
get = null!;
3940
if (token is not IValueToken valToken) return false;
40-
return valToken.CanReturn<T>(out get);
41+
return valToken.CanReturn(out get);
4142
}
4243

4344
public static bool CanReturn<T>(this IValueToken valToken, out Func<TryGet<T>> get) where T : Value
4445
{
45-
get = null!;
46+
get = valToken.TryGet<T>;
47+
4648
if (valToken.PossibleValueTypes is null) return true;
49+
return valToken.PossibleValueTypes.Any(type => typeof(T).IsAssignableFrom(type) || type.IsAssignableFrom(typeof(T)));
50+
}
51+
52+
public static TryGet<T> TryGet<T>(this BaseToken token) where T : Value
53+
{
54+
if (token is not IValueToken valToken) return $"Value '{token.RawRep}' cannot represent a {typeof(T).FriendlyTypeName()}";
4755

48-
get = valToken.TryGet<T>;
49-
return valToken.PossibleValueTypes.Any(type => typeof(T).IsAssignableFrom(type));
56+
return valToken.Value().SuccessTryCast<Value, T>();
5057
}
5158

5259
public static TryGet<T> TryGet<T>(this IValueToken valToken) where T : Value

Helpers/MustSet.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System;
2+
3+
namespace SER.Helpers;
4+
5+
public struct MustSet<T>
6+
{
7+
private bool _set;
8+
9+
public T Value
10+
{
11+
get
12+
{
13+
if (!_set)
14+
throw new InvalidOperationException($"Attempted to get {typeof(T).Name} before it was set.");
15+
return field;
16+
}
17+
set
18+
{
19+
field = value;
20+
_set = true;
21+
}
22+
}
23+
24+
public static implicit operator T(MustSet<T> wrapper) => wrapper.Value;
25+
public static implicit operator MustSet<T>(T value) => new MustSet<T> { Value = value };
26+
}

Plugin/MainPlugin.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ public override void Enable()
7373

7474
public override void Disable()
7575
{
76-
ScriptExecutor.Disable();
7776
Script.StopAll();
7877
SetPlayerDataMethod.PlayerData.Clear();
7978
}

SER.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@
108108
<Compile Include="ArgumentSystem\Arguments\ScriptArgument.cs" />
109109
<Compile Include="ArgumentSystem\Arguments\TextArgument.cs" />
110110
<Compile Include="ArgumentSystem\Arguments\TokenArgument.cs" />
111+
<Compile Include="ArgumentSystem\Arguments\UnknownReferenceArgument.cs" />
111112
<Compile Include="ArgumentSystem\Arguments\ValueArgument.cs" />
112113
<Compile Include="ArgumentSystem\Arguments\VariableArgument.cs" />
113114
<Compile Include="ArgumentSystem\BaseArguments\Argument.cs" />
@@ -160,6 +161,7 @@
160161
<Compile Include="Helpers\Exceptions\AndrzejFuckedUpException.cs" />
161162
<Compile Include="Helpers\Exceptions\ScriptRuntimeError.cs" />
162163
<Compile Include="Helpers\Extensions\SerExtensions.cs" />
164+
<Compile Include="Helpers\MustSet.cs" />
163165
<Compile Include="Helpers\NumericExpressionReslover.cs" />
164166
<Compile Include="Helpers\Extensions\CollectionExtensions.cs" />
165167
<Compile Include="Helpers\Extensions\DictionaryExtensions.cs" />
@@ -319,6 +321,7 @@
319321
<Compile Include="TokenSystem\Tokens\CommentToken.cs" />
320322
<Compile Include="TokenSystem\Tokens\DurationToken.cs" />
321323
<Compile Include="TokenSystem\Tokens\ExpressionTokens\ExpressionToken.cs" />
324+
<Compile Include="TokenSystem\Tokens\ExpressionTokens\LiteralVariableExpressionToken.cs" />
322325
<Compile Include="TokenSystem\Tokens\ExpressionTokens\MethodExpressionToken.cs" />
323326
<Compile Include="TokenSystem\Tokens\ExpressionTokens\PlayerExpressionToken.cs" />
324327
<Compile Include="TokenSystem\Tokens\FlagArgumentToken.cs" />

0 commit comments

Comments
 (0)