33using SER . Code . ContextSystem . Structures ;
44using SER . Code . Helpers ;
55using SER . Code . Helpers . Exceptions ;
6+ using SER . Code . Helpers . Extensions ;
67using SER . Code . Helpers . ResultSystem ;
78using SER . Code . TokenSystem . Tokens ;
89
@@ -22,6 +23,8 @@ public class ElifStatementContext : StatementContext, IStatementExtender, IExten
2223
2324 private readonly List < BaseToken > _condition = [ ] ;
2425
26+ private NumericExpressionReslover . CompiledExpression _expression ;
27+
2528 public override TryAddTokenRes TryAddToken ( BaseToken token )
2629 {
2730 _condition . Add ( token ) ;
@@ -30,16 +33,29 @@ public override TryAddTokenRes TryAddToken(BaseToken token)
3033
3134 public override Result VerifyCurrentState ( )
3235 {
36+ if ( NumericExpressionReslover . CompileExpression ( _condition . ToArray ( ) )
37+ . HasErrored ( out var error , out var cond ) )
38+ {
39+ return error ;
40+ }
41+
42+ _expression = cond ;
43+
3344 return Result . Assert (
3445 _condition . Count > 0 ,
3546 "An elif statement expects to have a condition, but none was provided!" ) ;
3647 }
3748
3849 protected override IEnumerator < float > Execute ( )
3950 {
40- if ( NumericExpressionReslover . EvalCondition ( _condition . ToArray ( ) , Script ) . HasErrored ( out var error , out var result ) )
51+ if ( _expression . Evaluate ( ) . HasErrored ( out var error , out var objResult ) )
52+ {
53+ throw new ScriptRuntimeError ( error ) ;
54+ }
55+
56+ if ( objResult is not bool result )
4157 {
42- throw new ScriptRuntimeError ( $ "' elif' statement condition error: { error } ") ;
58+ throw new ScriptRuntimeError ( $ "An elif statement condition must evaluate to a boolean value, but received { objResult . FriendlyTypeName ( ) } ") ;
4359 }
4460
4561 if ( ! result )
0 commit comments