Redesign of the Evaluation System
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
#import "MPExpression.h"
|
||||
|
||||
#import "MPExpressionEvaluator.h"
|
||||
#import "MPEvaluationContext.h"
|
||||
|
||||
@implementation MPSumFunction
|
||||
|
||||
@@ -99,7 +100,7 @@
|
||||
}
|
||||
|
||||
#pragma mark Evaluating Functions
|
||||
- (NSDecimalNumber *)evaluate:(MPParseError *__autoreleasing *)error
|
||||
- (NSDecimalNumber *)evaluateWithError:(MPParseError *__autoreleasing *)error
|
||||
{
|
||||
MPExpressionEvaluator *startEvaluator = self.startExpression.evaluator;
|
||||
NSDecimalNumber *start = [startEvaluator evaluateVariableDefinition:YES error:error];
|
||||
@@ -111,10 +112,12 @@
|
||||
return nil;
|
||||
}
|
||||
|
||||
[[MPEvaluationContext sharedContext] push];
|
||||
|
||||
MPExpressionEvaluator *sumEvaluator = self.sumExpression.evaluator;
|
||||
NSDecimalNumber *value = [NSDecimalNumber zero];
|
||||
for (NSDecimalNumber *iterator = start; [iterator compare:target] <= 0; iterator = [iterator decimalNumberByAdding:[[NSDecimalNumber alloc] initWithInteger:1]]) {
|
||||
[sumEvaluator bindValue:iterator toVariableName:startEvaluator.definedVariable];
|
||||
[[MPEvaluationContext sharedContext] bindValue:iterator toName:startEvaluator.definedVariable];
|
||||
NSDecimalNumber *summand = [sumEvaluator evaluateWithError:error];
|
||||
if (summand) {
|
||||
value = [value decimalNumberByAdding:summand];
|
||||
@@ -122,6 +125,9 @@
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
[[MPEvaluationContext sharedContext] pop];
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user