Archived
1

Redesign of the Evaluation System

This commit is contained in:
Kim Wittenburg
2014-09-13 23:16:44 +02:00
parent a3e1cc6df4
commit b50c444578
20 changed files with 431 additions and 135 deletions

View File

@@ -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;
}