diff --git a/DDMathParser/DDExpression.h b/DDMathParser/DDExpression.h index 2e44ee4..3431bab 100644 --- a/DDMathParser/DDExpression.h +++ b/DDMathParser/DDExpression.h @@ -34,6 +34,9 @@ typedef NS_ENUM(NSInteger, DDExpressionType) { - (DDExpression *)simplifiedExpression; - (DDExpression *)simplifiedExpressionWithEvaluator:(DDMathEvaluator *)evaluator error:(NSError **)error; +/// describe salesforce type of expression value(like CS_SALES_FORCE_TYPE_DATE, ... , ) if the field in not a nil +@property NSString *salesforceReturnType; + #pragma mark Number methods @property (readonly) NSNumber *number; diff --git a/DDMathParser/DDExpression.m b/DDMathParser/DDExpression.m index 127490f..e2d4155 100644 --- a/DDMathParser/DDExpression.m +++ b/DDMathParser/DDExpression.m @@ -49,7 +49,7 @@ - (DDExpressionType)expressionType { return DDExpressionTypeNumber; } - (NSNumber *)evaluateWithSubstitutions:(NSDictionary *)substitutions evaluator:(DDMathEvaluator *)evaluator error:(NSError **)error { - return [evaluator evaluateExpression:self withSubstitutions:substitutions error:error]; + return [evaluator unwrapFromMathResult:[evaluator evaluateExpression:self withSubstitutions:substitutions error:error]]; } - (DDExpression *)simplifiedExpression { NSError *error = nil; diff --git a/DDMathParser/DDMathEvaluator.h b/DDMathParser/DDMathEvaluator.h index 18cb48d..bd8a404 100644 --- a/DDMathParser/DDMathEvaluator.h +++ b/DDMathParser/DDMathEvaluator.h @@ -8,6 +8,7 @@ #import #import "DDTypes.h" +#import "DDMathEvaluatorResult.h" @class DDMathOperatorSet; @class DDExpression; @@ -30,14 +31,16 @@ typedef NSNumber* (^DDVariableResolver)(NSString *); - (BOOL)registerFunction:(DDMathFunction)function forName:(NSString *)functionName; - (NSArray *)registeredFunctions; -- (NSNumber *)evaluateString:(NSString *)expressionString withSubstitutions:(NSDictionary *)substitutions; -- (NSNumber *)evaluateString:(NSString *)expressionString withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error; +- (DDMathEvaluatorResult *)evaluateString:(NSString *)expressionString withSubstitutions:(NSDictionary *)substitutions; +- (DDMathEvaluatorResult *)evaluateString:(NSString *)expressionString withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error; -- (NSNumber *)evaluateExpression:(DDExpression *)expression withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error; +- (DDMathEvaluatorResult *)evaluateExpression:(DDExpression *)expression withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error; - (BOOL)addAlias:(NSString *)alias forFunctionName:(NSString *)functionName; - (void)removeAlias:(NSString *)alias; +-(id)unwrapFromMathResult:(id)value; + @end @interface DDMathEvaluator (Deprecated) diff --git a/DDMathParser/DDMathEvaluator.m b/DDMathParser/DDMathEvaluator.m index 626dd92..657b057 100644 --- a/DDMathParser/DDMathEvaluator.m +++ b/DDMathParser/DDMathEvaluator.m @@ -16,6 +16,7 @@ #import "_DDPrecisionFunctionEvaluator.h" #import "DDExpressionRewriter.h" #import +#import "DDMathEvaluatorResult.h" @implementation DDMathEvaluator { @@ -178,16 +179,16 @@ - (void)removeAlias:(NSString *)alias { #pragma mark - Evaluation -- (NSNumber *)evaluateString:(NSString *)expressionString withSubstitutions:(NSDictionary *)substitutions { +- (DDMathEvaluatorResult *)evaluateString:(NSString *)expressionString withSubstitutions:(NSDictionary *)substitutions { NSError *error = nil; - NSNumber *returnValue = [self evaluateString:expressionString withSubstitutions:substitutions error:&error]; + DDMathEvaluatorResult *returnValue = [self evaluateString:expressionString withSubstitutions:substitutions error:&error]; if (!returnValue) { NSLog(@"error: %@", error); } return returnValue; } -- (NSNumber *)evaluateString:(NSString *)expressionString withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error { +- (DDMathEvaluatorResult *)evaluateString:(NSString *)expressionString withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error { DDMathStringTokenizer *tokenizer = [[DDMathStringTokenizer alloc] initWithString:expressionString operatorSet:self.operatorSet error:error]; if (!tokenizer) { return nil; } @@ -200,9 +201,9 @@ - (NSNumber *)evaluateString:(NSString *)expressionString withSubstitutions:(NSD return [self evaluateExpression:expression withSubstitutions:substitutions error:error]; } -- (NSNumber *)evaluateExpression:(DDExpression *)expression withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error { +- (DDMathEvaluatorResult *)evaluateExpression:(DDExpression *)expression withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error { if ([expression expressionType] == DDExpressionTypeNumber) { - return [expression number]; + return [[DDMathEvaluatorResult alloc] initWithNumber: [self unwrapFromMathResult: [expression number]] salesforceType:expression.salesforceReturnType]; } else if ([expression expressionType] == DDExpressionTypeVariable) { return [self _evaluateVariableExpression:expression withSubstitutions:substitutions error:error]; } else if ([expression expressionType] == DDExpressionTypeFunction) { @@ -211,7 +212,7 @@ - (NSNumber *)evaluateExpression:(DDExpression *)expression withSubstitutions:(N return nil; } -- (NSNumber *)_evaluateVariableExpression:(DDExpression *)e withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error { +- (DDMathEvaluatorResult *)_evaluateVariableExpression:(DDExpression *)e withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error { id variableValue = [substitutions objectForKey:[e variable]]; if (variableValue == nil) { @@ -219,39 +220,44 @@ - (NSNumber *)_evaluateVariableExpression:(DDExpression *)e withSubstitutions:(N // use the variable resolver (if available) variableValue = [self variableWithName:[e variable]]; } - - NSNumber *numberValue = [self _evaluateValue:variableValue withSubstitutions:substitutions error:error]; - if (numberValue == nil && error != nil && *error == nil) { + DDMathEvaluatorResult *value = [self _evaluateValue:variableValue withSubstitutions:substitutions error:error]; + if (value == nil && error != nil && *error == nil) { *error = [NSError errorWithDomain:DDMathParserErrorDomain code:DDErrorCodeUnresolvedVariable userInfo:@{NSLocalizedDescriptionKey: [NSString stringWithFormat:@"unable to resolve variable: %@", e], DDUnknownVariableKey: [e variable]}]; } - return numberValue; - + // тут может вернуться строка в качестве результата расчета (неожиданно ...). + if(value != nil && [value isKindOfClass:[DDMathEvaluatorResult class]] && value.salesforceType == nil) { + value = [[DDMathEvaluatorResult alloc] initWithNumber:value.number salesforceType:e.salesforceReturnType]; + } + return value; } -- (NSNumber *)_evaluateFunctionExpression:(_DDFunctionExpression *)e withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error { +- (DDMathEvaluatorResult *)_evaluateFunctionExpression:(_DDFunctionExpression *)e withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error { id result = [_functionEvaluator evaluateFunction:e variables:substitutions error:error]; if (!result) { return nil; } - - NSNumber *numberValue = [self _evaluateValue:result withSubstitutions:substitutions error:error]; - if (numberValue == nil && error != nil && *error == nil) { + + DDMathEvaluatorResult *value = [self _evaluateValue:result withSubstitutions:substitutions error:error]; + if (value == nil && error != nil && *error == nil) { *error = ERR(DDErrorCodeInvalidFunctionReturnType, @"invalid return type from %@ function", [e function]); } - return numberValue; + if(value != nil && [value isKindOfClass:DDMathEvaluatorResult.class] && value.salesforceType == nil) { + value = [[DDMathEvaluatorResult alloc] initWithNumber:value.number salesforceType:e.salesforceReturnType]; + } + return value; } -- (NSNumber *)_evaluateValue:(id)value withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error { +- (DDMathEvaluatorResult *)_evaluateValue:(id)value withSubstitutions:(NSDictionary *)substitutions error:(NSError **)error { // given an object of unknown type, this evaluates it as best as it can if ([value isKindOfClass:[DDExpression class]]) { return [self evaluateExpression:value withSubstitutions:substitutions error:error]; } else if ([value isKindOfClass:[NSString class]]) { return [self evaluateString:value withSubstitutions:substitutions error:error]; } else if ([value isKindOfClass:[NSNumber class]]) { - return value; + return [[DDMathEvaluatorResult alloc] initWithNumber:value]; } return nil; } @@ -294,4 +300,13 @@ - (void)addRewriteRule:(NSString *)rule forExpressionsMatchingTemplate:(NSString [[DDExpressionRewriter defaultRewriter] addRewriteRule:rule forExpressionsMatchingTemplate:templateString condition:condition]; } +-(id)unwrapFromMathResult:(id)value { + id valueUnwrapped = value; + if ([value isKindOfClass:[DDMathEvaluatorResult class]]) { + DDMathEvaluatorResult *valueBuffer = value; + valueUnwrapped = valueBuffer.number; + } + return valueUnwrapped; +} + @end diff --git a/DDMathParser/DDMathEvaluatorResult.h b/DDMathParser/DDMathEvaluatorResult.h new file mode 100644 index 0000000..8e3cd02 --- /dev/null +++ b/DDMathParser/DDMathEvaluatorResult.h @@ -0,0 +1,22 @@ +// +// DDMathEvaluatorResult.h +// DDMathParser +// +// Created by Artem Viter on 08.12.2023. +// + +#import + + +@interface DDMathEvaluatorResult : NSObject + +@property (readonly) NSNumber * number; + +@property (readonly) NSString * salesforceType; + + +- (instancetype)initWithNumber:(NSNumber *)number salesforceType:(NSString *)salesforceType; + +- (instancetype)initWithNumber:(NSNumber *)number; + +@end diff --git a/DDMathParser/DDMathEvaluatorResult.m b/DDMathParser/DDMathEvaluatorResult.m new file mode 100644 index 0000000..921cd3a --- /dev/null +++ b/DDMathParser/DDMathEvaluatorResult.m @@ -0,0 +1,63 @@ +// +// DDMathEvaluatorResult.m +// DDMathParser +// +// Created by Artem Viter on 08.12.2023. +// + +#import +#import "DDMathEvaluatorResult.h" + +@implementation DDMathEvaluatorResult + +- (instancetype)initWithNumber:(NSNumber *)number salesforceType:(NSString *)salesforceType { + self = [super init]; + if (self) { + _number = [number copy]; + _salesforceType = [salesforceType copy]; + } + return self; +} + +- (instancetype)initWithNumber:(NSNumber *)number { + return [self initWithNumber:number salesforceType:nil]; +} + +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + + if (![object isKindOfClass:[DDMathEvaluatorResult class]]) { + return NO; + } + + DDMathEvaluatorResult *otherEvaluatorResult = (DDMathEvaluatorResult *)object; + + return [self.number isEqual:otherEvaluatorResult.number]; +} + +- (id)copyWithZone:(NSZone *)zone { + // Create a new instance of DDMathEvaluatorResult + DDMathEvaluatorResult *copy = [[[self class] allocWithZone:zone] init]; + + // Copy the properties to the new instance + copy->_number = [self.number copy]; + copy->_salesforceType = [self.salesforceType copy]; + + return copy; +} + +- (NSComparisonResult)compare:(DDMathEvaluatorResult *)otherResult { + // Compare the numbers of self and otherResult + NSNumber* compareWith = nil; + if(otherResult == nil) { + return [self.number compare:nil]; + } else if([otherResult isKindOfClass: DDMathEvaluatorResult.class]) { + return [self.number compare:otherResult.number]; + } else { + return [self.number compare:otherResult]; + } +} + +@end diff --git a/DDMathParser/NSString+DDMathParsing.h b/DDMathParser/NSString+DDMathParsing.h index 26dd7dd..1c1182b 100644 --- a/DDMathParser/NSString+DDMathParsing.h +++ b/DDMathParser/NSString+DDMathParsing.h @@ -7,12 +7,12 @@ // #import - +#import "DDMathEvaluatorResult.h" @interface NSString (DDMathParsing) -- (NSNumber *)numberByEvaluatingString; -- (NSNumber *)numberByEvaluatingStringWithSubstitutions:(NSDictionary *)substitutions; -- (NSNumber *)numberByEvaluatingStringWithSubstitutions:(NSDictionary *)substitutions error:(NSError **)error; +- (DDMathEvaluatorResult *)numberByEvaluatingString; +- (DDMathEvaluatorResult *)numberByEvaluatingStringWithSubstitutions:(NSDictionary *)substitutions; +- (DDMathEvaluatorResult *)numberByEvaluatingStringWithSubstitutions:(NSDictionary *)substitutions error:(NSError **)error; @end diff --git a/DDMathParser/NSString+DDMathParsing.m b/DDMathParser/NSString+DDMathParsing.m index 648cb37..9fa463f 100644 --- a/DDMathParser/NSString+DDMathParsing.m +++ b/DDMathParser/NSString+DDMathParsing.m @@ -12,11 +12,11 @@ @implementation NSString (DDMathParsing) -- (NSNumber *)numberByEvaluatingString { +- (DDMathEvaluatorResult *)numberByEvaluatingString { return [self numberByEvaluatingStringWithSubstitutions:nil]; } -- (NSNumber *)numberByEvaluatingStringWithSubstitutions:(NSDictionary *)substitutions { +- (DDMathEvaluatorResult *)numberByEvaluatingStringWithSubstitutions:(NSDictionary *)substitutions { NSError *error = nil; NSNumber *returnValue = [self numberByEvaluatingStringWithSubstitutions:substitutions error:&error]; if (returnValue == nil) { @@ -25,7 +25,7 @@ - (NSNumber *)numberByEvaluatingStringWithSubstitutions:(NSDictionary *)substitu return returnValue; } -- (NSNumber *)numberByEvaluatingStringWithSubstitutions:(NSDictionary *)substitutions error:(NSError **)error { +- (DDMathEvaluatorResult *)numberByEvaluatingStringWithSubstitutions:(NSDictionary *)substitutions error:(NSError **)error { return [[DDMathEvaluator defaultMathEvaluator] evaluateString:self withSubstitutions:substitutions error:error]; } diff --git a/DDMathParser/_DDFunctionEvaluator.m b/DDMathParser/_DDFunctionEvaluator.m index 80ab405..df22509 100644 --- a/DDMathParser/_DDFunctionEvaluator.m +++ b/DDMathParser/_DDFunctionEvaluator.m @@ -111,10 +111,10 @@ - (DDExpression *)evaluateFunction:(_DDFunctionExpression *)expression variables - (DDExpression *)add:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); - NSNumber *secondValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *secondValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(secondValue); NSNumber *result = @([firstValue doubleValue] + [secondValue doubleValue]); return [DDExpression numberExpressionWithNumber:result]; @@ -122,9 +122,9 @@ - (DDExpression *)add:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)subtract:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); - NSNumber *secondValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *secondValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(secondValue); NSNumber *result = @([firstValue doubleValue] - [secondValue doubleValue]); return [DDExpression numberExpressionWithNumber:result]; @@ -132,9 +132,9 @@ - (DDExpression *)subtract:(NSArray *)arguments variables:(NSDictionary *)variab - (DDExpression *)multiply:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); - NSNumber *secondValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *secondValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(secondValue); NSNumber *result = @([firstValue doubleValue] * [secondValue doubleValue]); return [DDExpression numberExpressionWithNumber:result]; @@ -142,9 +142,9 @@ - (DDExpression *)multiply:(NSArray *)arguments variables:(NSDictionary *)variab - (DDExpression *)divide:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); - NSNumber *secondValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *secondValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(secondValue); NSNumber *result = @([firstValue doubleValue] / [secondValue doubleValue]); return [DDExpression numberExpressionWithNumber:result]; @@ -152,9 +152,9 @@ - (DDExpression *)divide:(NSArray *)arguments variables:(NSDictionary *)variable - (DDExpression *)mod:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); - NSNumber *secondValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *secondValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(secondValue); NSNumber *result = @(fmod([firstValue doubleValue], [secondValue doubleValue])); return [DDExpression numberExpressionWithNumber:result]; @@ -162,7 +162,7 @@ - (DDExpression *)mod:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)negate:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); NSNumber *result = @(-1 * [firstValue doubleValue]); return [DDExpression numberExpressionWithNumber:result]; @@ -170,7 +170,7 @@ - (DDExpression *)negate:(NSArray *)arguments variables:(NSDictionary *)variable - (DDExpression *)factorial:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); NSNumber *result = nil; @@ -190,9 +190,9 @@ - (DDExpression *)factorial:(NSArray *)arguments variables:(NSDictionary *)varia - (DDExpression *)pow:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *base = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *base = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(base); - NSNumber *exponent = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *exponent = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(exponent); NSNumber *result = @(pow([base doubleValue], [exponent doubleValue])); @@ -201,9 +201,9 @@ - (DDExpression *)pow:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)nthroot:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *base = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *base = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(base); - NSNumber *root = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *root = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(root); NSNumber *result = @(pow([base doubleValue], 1/[root doubleValue])); @@ -212,9 +212,9 @@ - (DDExpression *)nthroot:(NSArray *)arguments variables:(NSDictionary *)variabl - (DDExpression *)and:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *first = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *first = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(first); - NSNumber *second = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *second = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(second); NSNumber *result = @([first integerValue] & [second integerValue]); return [DDExpression numberExpressionWithNumber:result]; @@ -222,9 +222,9 @@ - (DDExpression *)and:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)or:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *first = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *first = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(first); - NSNumber *second = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *second = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(second); NSNumber *result = @([first integerValue] | [second integerValue]); return [DDExpression numberExpressionWithNumber:result]; @@ -232,7 +232,7 @@ - (DDExpression *)or:(NSArray *)arguments variables:(NSDictionary *)variables er - (DDExpression *)not:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *first = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *first = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(first); NSNumber *result = @(~[first integerValue]); return [DDExpression numberExpressionWithNumber:result]; @@ -240,9 +240,9 @@ - (DDExpression *)not:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)xor:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *first = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *first = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(first); - NSNumber *second = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *second = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(second); NSNumber *result = @([first integerValue] ^ [second integerValue]); return [DDExpression numberExpressionWithNumber:result]; @@ -250,9 +250,9 @@ - (DDExpression *)xor:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)rshift:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *first = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *first = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(first); - NSNumber *second = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *second = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(second); NSNumber *result = @([first integerValue] >> [second integerValue]); return [DDExpression numberExpressionWithNumber:result]; @@ -260,9 +260,9 @@ - (DDExpression *)rshift:(NSArray *)arguments variables:(NSDictionary *)variable - (DDExpression *)lshift:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *first = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *first = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(first); - NSNumber *second = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *second = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(second); NSNumber *result = @([first integerValue] << [second integerValue]); return [DDExpression numberExpressionWithNumber:result]; @@ -282,7 +282,7 @@ - (DDExpression *)sum:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_GTOE_N_ARGS(1); NSMutableArray * evaluatedNumbers = [NSMutableArray array]; for (DDExpression * e in arguments) { - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); [evaluatedNumbers addObject:n]; } @@ -306,7 +306,7 @@ - (DDExpression *)min:(NSArray *)arguments variables:(NSDictionary *)variables e NSNumber *result = nil; for (NSUInteger index = 0; index < [arguments count]; ++index) { DDExpression *e = [arguments objectAtIndex:index]; - NSNumber *value = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *value = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(value); if (index == 0 || [result compare:value] == NSOrderedDescending) { //result > value (or is first index) @@ -322,7 +322,7 @@ - (DDExpression *)max:(NSArray *)arguments variables:(NSDictionary *)variables e NSNumber *result = nil; for (NSUInteger index = 0; index < [arguments count]; ++index) { DDExpression *e = [arguments objectAtIndex:index]; - NSNumber *value = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *value = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(value); if (index == 0 || [result compare:value] == NSOrderedAscending) { //result < value (or is first index) @@ -337,7 +337,7 @@ - (DDExpression *)median:(NSArray *)arguments variables:(NSDictionary *)variable REQUIRE_GTOE_N_ARGS(2); NSMutableArray *evaluatedNumbers = [NSMutableArray array]; for (DDExpression *e in arguments) { - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); [evaluatedNumbers addObject:n]; } @@ -365,7 +365,7 @@ - (DDExpression *)stddev:(NSArray *)arguments variables:(NSDictionary *)variable double avg = [[avgExpression number] doubleValue]; double stddev = 0; for (DDExpression *e in arguments) { - NSNumber *argValue = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *argValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(argValue); double diff = avg - [argValue doubleValue]; diff = diff * diff; @@ -380,7 +380,7 @@ - (DDExpression *)stddev:(NSArray *)arguments variables:(NSDictionary *)variable - (DDExpression *)sqrt:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(sqrt([n doubleValue])); @@ -397,7 +397,7 @@ - (DDExpression *)random:(NSArray *)arguments variables:(NSDictionary *)variable NSMutableArray * params = [NSMutableArray array]; for (DDExpression *e in arguments) { - NSNumber *value = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *value = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(value); [params addObject:value]; } @@ -422,7 +422,7 @@ - (DDExpression *)random:(NSArray *)arguments variables:(NSDictionary *)variable - (DDExpression *)log:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(log10([n doubleValue])); @@ -431,14 +431,14 @@ - (DDExpression *)log:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)ln:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); return [DDExpression numberExpressionWithNumber:@(log([n doubleValue]))]; } - (DDExpression *)log2:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(log2([n doubleValue])); @@ -447,7 +447,7 @@ - (DDExpression *)log2:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)exp:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(exp([n doubleValue])); @@ -456,7 +456,7 @@ - (DDExpression *)exp:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)ceil:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(ceil([n doubleValue])); return [DDExpression numberExpressionWithNumber:result]; @@ -464,7 +464,7 @@ - (DDExpression *)ceil:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)abs:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(llabs([n longLongValue])); @@ -473,7 +473,7 @@ - (DDExpression *)abs:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)floor:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(floor([n doubleValue])); @@ -499,12 +499,12 @@ - (DDExpression *)percent:(NSArray *)arguments variables:(NSDictionary *)variabl if (percentIsRightArgument) { DDExpression *baseExpression = [[percentContext arguments] objectAtIndex:0]; - context = [[self evaluator] evaluateExpression:baseExpression withSubstitutions:variables error:error]; + context = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:baseExpression withSubstitutions:variables error:error]]; } } } - NSNumber *percent = [[self evaluator] evaluateExpression:percentArgument withSubstitutions:variables error:error]; + NSNumber *percent = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:percentArgument withSubstitutions:variables error:error]]; RETURN_IF_NIL(context); RETURN_IF_NIL(percent); @@ -517,7 +517,7 @@ - (DDExpression *)sin:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(sin([n doubleValue])); @@ -528,7 +528,7 @@ - (DDExpression *)cos:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(cos([n doubleValue])); @@ -539,7 +539,7 @@ - (DDExpression *)tan:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(tan([n doubleValue])); @@ -548,7 +548,7 @@ - (DDExpression *)tan:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)asin:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(asin([n doubleValue])); @@ -557,7 +557,7 @@ - (DDExpression *)asin:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)acos:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(acos([n doubleValue])); @@ -566,7 +566,7 @@ - (DDExpression *)acos:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)atan:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(atan([n doubleValue])); @@ -577,7 +577,7 @@ - (DDExpression *)sinh:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(sinh([n doubleValue])); @@ -588,7 +588,7 @@ - (DDExpression *)cosh:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(cosh([n doubleValue])); @@ -599,7 +599,7 @@ - (DDExpression *)tanh:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(tanh([n doubleValue])); @@ -608,7 +608,7 @@ - (DDExpression *)tanh:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)asinh:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(asinh([n doubleValue])); @@ -617,7 +617,7 @@ - (DDExpression *)asinh:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)acosh:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(acosh([n doubleValue])); @@ -626,7 +626,7 @@ - (DDExpression *)acosh:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)atanh:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(atanh([n doubleValue])); @@ -637,7 +637,7 @@ - (DDExpression *)csc:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1/sin([n doubleValue])); @@ -648,7 +648,7 @@ - (DDExpression *)sec:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1/cos([n doubleValue])); @@ -659,7 +659,7 @@ - (DDExpression *)cotan:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1/tan([n doubleValue])); @@ -668,7 +668,7 @@ - (DDExpression *)cotan:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)acsc:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1/asin([n doubleValue])); @@ -677,7 +677,7 @@ - (DDExpression *)acsc:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)asec:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1/acos([n doubleValue])); @@ -686,7 +686,7 @@ - (DDExpression *)asec:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)acotan:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1/atan([n doubleValue])); @@ -697,7 +697,7 @@ - (DDExpression *)csch:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1/sinh([n doubleValue])); @@ -708,7 +708,7 @@ - (DDExpression *)sech:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1/cosh([n doubleValue])); @@ -719,7 +719,7 @@ - (DDExpression *)cotanh:(NSArray *)arguments variables:(NSDictionary *)variable REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1/tanh([n doubleValue])); @@ -728,7 +728,7 @@ - (DDExpression *)cotanh:(NSArray *)arguments variables:(NSDictionary *)variable - (DDExpression *)acsch:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1/sinh([n doubleValue])); @@ -737,7 +737,7 @@ - (DDExpression *)acsch:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)asech:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1/cosh([n doubleValue])); @@ -746,7 +746,7 @@ - (DDExpression *)asech:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)acotanh:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1/atanh([n doubleValue])); @@ -757,7 +757,7 @@ - (DDExpression *)versin:(NSArray *)arguments variables:(NSDictionary *)variable REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1-cos([n doubleValue])); @@ -768,7 +768,7 @@ - (DDExpression *)vercosin:(NSArray *)arguments variables:(NSDictionary *)variab REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1+cos([n doubleValue])); @@ -779,7 +779,7 @@ - (DDExpression *)coversin:(NSArray *)arguments variables:(NSDictionary *)variab REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1-sin([n doubleValue])); @@ -790,7 +790,7 @@ - (DDExpression *)covercosin:(NSArray *)arguments variables:(NSDictionary *)vari REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(1+sin([n doubleValue])); @@ -801,7 +801,7 @@ - (DDExpression *)haversin:(NSArray *)arguments variables:(NSDictionary *)variab REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @((1-cos([n doubleValue]))/2); @@ -812,7 +812,7 @@ - (DDExpression *)havercosin:(NSArray *)arguments variables:(NSDictionary *)vari REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @((1+cos([n doubleValue]))/2); @@ -823,7 +823,7 @@ - (DDExpression *)hacoversin:(NSArray *)arguments variables:(NSDictionary *)vari REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @((1-sin([n doubleValue]))/2); @@ -834,7 +834,7 @@ - (DDExpression *)hacovercosin:(NSArray *)arguments variables:(NSDictionary *)va REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @((1+sin([n doubleValue]))/2); @@ -845,7 +845,7 @@ - (DDExpression *)exsec:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @((1/cos([n doubleValue]))-1); @@ -856,7 +856,7 @@ - (DDExpression *)excsc:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @((1/sin([n doubleValue]))-1); @@ -867,7 +867,7 @@ - (DDExpression *)crd:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(2*sin([n doubleValue]/2)); @@ -876,7 +876,7 @@ - (DDExpression *)crd:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)dtor:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @([n doubleValue]/180 * M_PI); @@ -885,7 +885,7 @@ - (DDExpression *)dtor:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)rtod:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @([n doubleValue]/M_PI * 180); @@ -960,8 +960,8 @@ - (DDExpression *)ln10:(NSArray *)arguments variables:(NSDictionary *)variables // logical functions - (DDExpression *)l_and:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *left = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; - NSNumber *right = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *left = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; + NSNumber *right = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(left); RETURN_IF_NIL(right); NSNumber *result = @([left boolValue] && [right boolValue]); @@ -970,8 +970,8 @@ - (DDExpression *)l_and:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)l_or:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *left = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; - NSNumber *right = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *left = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; + NSNumber *right = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(left); RETURN_IF_NIL(right); NSNumber *result = @([left boolValue] || [right boolValue]); @@ -980,7 +980,7 @@ - (DDExpression *)l_or:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)l_not:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSNumber *result = @(![n boolValue]); return [DDExpression numberExpressionWithNumber:result]; @@ -988,8 +988,8 @@ - (DDExpression *)l_not:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)l_eq:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *left = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; - NSNumber *right = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *left = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; + NSNumber *right = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(left); RETURN_IF_NIL(right); NSComparisonResult compare = [left compare:right]; @@ -999,8 +999,8 @@ - (DDExpression *)l_eq:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)l_neq:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *left = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; - NSNumber *right = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *left = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; + NSNumber *right = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(left); RETURN_IF_NIL(right); NSComparisonResult compare = [left compare:right]; @@ -1010,8 +1010,8 @@ - (DDExpression *)l_neq:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)l_lt:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *left = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; - NSNumber *right = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *left = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; + NSNumber *right = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(left); RETURN_IF_NIL(right); NSComparisonResult compare = [left compare:right]; @@ -1020,9 +1020,9 @@ - (DDExpression *)l_lt:(NSArray *)arguments variables:(NSDictionary *)variables } - (DDExpression *)l_gt:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { - REQUIRE_N_ARGS(2); - NSNumber *left = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; - NSNumber *right = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + REQUIRE_N_ARGS(2); + NSNumber *left = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; + NSNumber *right = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(left); RETURN_IF_NIL(right); NSComparisonResult compare = [left compare:right]; @@ -1032,8 +1032,8 @@ - (DDExpression *)l_gt:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)l_ltoe:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *left = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; - NSNumber *right = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *left = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; + NSNumber *right = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(left); RETURN_IF_NIL(right); NSComparisonResult compare = [left compare:right]; @@ -1043,8 +1043,8 @@ - (DDExpression *)l_ltoe:(NSArray *)arguments variables:(NSDictionary *)variable - (DDExpression *)l_gtoe:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *left = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; - NSNumber *right = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *left = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; + NSNumber *right = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(left); RETURN_IF_NIL(right); NSComparisonResult compare = [left compare:right]; diff --git a/DDMathParser/_DDFunctionExpression.m b/DDMathParser/_DDFunctionExpression.m index 104100f..aa4c92d 100644 --- a/DDMathParser/_DDFunctionExpression.m +++ b/DDMathParser/_DDFunctionExpression.m @@ -85,7 +85,7 @@ - (DDExpression *)simplifiedExpressionWithEvaluator:(DDMathEvaluator *)evaluator if (canSimplify) { if (evaluator == nil) { evaluator = [DDMathEvaluator defaultMathEvaluator]; } - id result = [evaluator evaluateExpression:self withSubstitutions:nil error:error]; + id result = [evaluator unwrapFromMathResult:[evaluator evaluateExpression:self withSubstitutions:nil error:error]]; if ([result isKindOfClass:[_DDNumberExpression class]]) { return result; diff --git a/DDMathParser/_DDPrecisionFunctionEvaluator.m b/DDMathParser/_DDPrecisionFunctionEvaluator.m index 62c0dbf..03f7c59 100644 --- a/DDMathParser/_DDPrecisionFunctionEvaluator.m +++ b/DDMathParser/_DDPrecisionFunctionEvaluator.m @@ -16,10 +16,10 @@ @implementation _DDPrecisionFunctionEvaluator - (DDExpression *)add:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); - NSNumber *secondValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *secondValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(secondValue); NSDecimal decimal = DDDecimalAdd([firstValue decimalValue], [secondValue decimalValue]); @@ -29,9 +29,9 @@ - (DDExpression *)add:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)subtract:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); - NSNumber *secondValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *secondValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(secondValue); NSDecimal decimal = DDDecimalSubtract([firstValue decimalValue], [secondValue decimalValue]); NSDecimalNumber *result = [NSDecimalNumber decimalNumberWithDecimal:decimal]; @@ -40,9 +40,9 @@ - (DDExpression *)subtract:(NSArray *)arguments variables:(NSDictionary *)variab - (DDExpression *)multiply:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); - NSNumber *secondValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *secondValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(secondValue); NSDecimal decimal = DDDecimalMultiply([firstValue decimalValue], [secondValue decimalValue]); NSDecimalNumber *result = [NSDecimalNumber decimalNumberWithDecimal:decimal]; @@ -51,9 +51,9 @@ - (DDExpression *)multiply:(NSArray *)arguments variables:(NSDictionary *)variab - (DDExpression *)divide:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); - NSNumber *secondValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *secondValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(secondValue); NSDecimal decimal = DDDecimalDivide([firstValue decimalValue], [secondValue decimalValue]); NSDecimalNumber *result = [NSDecimalNumber decimalNumberWithDecimal:decimal]; @@ -62,9 +62,9 @@ - (DDExpression *)divide:(NSArray *)arguments variables:(NSDictionary *)variable - (DDExpression *)mod:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); - NSNumber *secondValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *secondValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(secondValue); NSDecimal decimal = DDDecimalMod([firstValue decimalValue], [secondValue decimalValue]); NSDecimalNumber *result = [NSDecimalNumber decimalNumberWithDecimal:decimal]; @@ -73,7 +73,7 @@ - (DDExpression *)mod:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)negate:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); NSDecimal decimal = [firstValue decimalValue]; DDDecimalNegate(&decimal); @@ -83,7 +83,7 @@ - (DDExpression *)negate:(NSArray *)arguments variables:(NSDictionary *)variable - (DDExpression *)factorial:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *firstValue = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *firstValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(firstValue); NSNumber *result = nil; @@ -109,9 +109,9 @@ - (DDExpression *)factorial:(NSArray *)arguments variables:(NSDictionary *)varia - (DDExpression *)pow:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *base = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *base = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(base); - NSNumber *exponent = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *exponent = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(exponent); NSDecimal decimal = DDDecimalPower([base decimalValue], [exponent decimalValue]); @@ -121,9 +121,9 @@ - (DDExpression *)pow:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)nthroot:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *base = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *base = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(base); - NSNumber *root = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *root = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(root); NSDecimal exponent = DDDecimalInverse([root decimalValue]); @@ -139,9 +139,9 @@ - (DDExpression *)nthroot:(NSArray *)arguments variables:(NSDictionary *)variabl - (DDExpression *)rshift:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *first = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *first = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(first); - NSNumber *second = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *second = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(second); NSDecimal decimal = DDDecimalRightShift([first decimalValue], [second decimalValue]); NSDecimalNumber *result = [NSDecimalNumber decimalNumberWithDecimal:decimal]; @@ -150,9 +150,9 @@ - (DDExpression *)rshift:(NSArray *)arguments variables:(NSDictionary *)variable - (DDExpression *)lshift:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(2); - NSNumber *first = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *first = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(first); - NSNumber *second = [[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]; + NSNumber *second = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:1] withSubstitutions:variables error:error]]; RETURN_IF_NIL(second); NSDecimal decimal = DDDecimalLeftShift([first decimalValue], [second decimalValue]); NSDecimalNumber *result = [NSDecimalNumber decimalNumberWithDecimal:decimal]; @@ -175,7 +175,7 @@ - (DDExpression *)sum:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_GTOE_N_ARGS(1); NSDecimal sum = DDDecimalZero(); for (DDExpression *e in arguments) { - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); sum = DDDecimalAdd(sum, [n decimalValue]); } @@ -197,7 +197,7 @@ - (DDExpression *)median:(NSArray *)arguments variables:(NSDictionary *)variable REQUIRE_GTOE_N_ARGS(2); NSMutableArray *evaluatedNumbers = [NSMutableArray array]; for (DDExpression *e in arguments) { - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); [evaluatedNumbers addObject:n]; } @@ -226,7 +226,7 @@ - (DDExpression *)stddev:(NSArray *)arguments variables:(NSDictionary *)variable NSDecimal avg = [[avgExpression number] decimalValue]; NSDecimal stddev = DDDecimalZero(); for (DDExpression *e in arguments) { - NSNumber *argValue = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *argValue = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(argValue); NSDecimal diff = DDDecimalSubtract(avg, [argValue decimalValue]); diff = DDDecimalPower(diff, DDDecimalTwo()); @@ -240,7 +240,7 @@ - (DDExpression *)stddev:(NSArray *)arguments variables:(NSDictionary *)variable - (DDExpression *)sqrt:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalSqrt([n decimalValue]); @@ -254,7 +254,7 @@ - (DDExpression *)sqrt:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)log:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); // FIXME: use high precision math NSNumber *result = @(log10([n doubleValue])); @@ -263,7 +263,7 @@ - (DDExpression *)log:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)ln:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); // FIXME: use high precision math return [DDExpression numberExpressionWithNumber:@(log([n doubleValue]))]; @@ -271,7 +271,7 @@ - (DDExpression *)ln:(NSArray *)arguments variables:(NSDictionary *)variables er - (DDExpression *)log2:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); // FIXME: use high precision math NSNumber *result = @(log2([n doubleValue])); @@ -280,7 +280,7 @@ - (DDExpression *)log2:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)exp:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); // FIXME: use high precision math NSNumber *result = @(exp([n doubleValue])); @@ -289,7 +289,7 @@ - (DDExpression *)exp:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)ceil:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = [n decimalValue]; @@ -300,7 +300,7 @@ - (DDExpression *)ceil:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)abs:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = [n decimalValue]; @@ -314,7 +314,7 @@ - (DDExpression *)abs:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)floor:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = [n decimalValue]; @@ -341,13 +341,13 @@ - (DDExpression *)percent:(NSArray *)arguments variables:(NSDictionary *)variabl if (percentIsRightArgument) { DDExpression *baseExpression = [[percentContext arguments] objectAtIndex:0]; - context = [[self evaluator] evaluateExpression:baseExpression withSubstitutions:variables error:error]; + context = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:baseExpression withSubstitutions:variables error:error]]; } } } - NSNumber *percent = [[self evaluator] evaluateExpression:percentArgument withSubstitutions:variables error:error]; + NSNumber *percent = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:percentArgument withSubstitutions:variables error:error]]; RETURN_IF_NIL(context); RETURN_IF_NIL(percent); @@ -364,7 +364,7 @@ - (DDExpression *)sin:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalSin([n decimalValue]); @@ -376,7 +376,7 @@ - (DDExpression *)cos:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalCos([n decimalValue]); @@ -388,7 +388,7 @@ - (DDExpression *)tan:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalTan([n decimalValue]); @@ -398,7 +398,7 @@ - (DDExpression *)tan:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)asin:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalAsin([n decimalValue]); @@ -408,7 +408,7 @@ - (DDExpression *)asin:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)acos:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalAcos([n decimalValue]); @@ -418,7 +418,7 @@ - (DDExpression *)acos:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)atan:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalAtan([n decimalValue]); @@ -430,7 +430,7 @@ - (DDExpression *)sinh:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalSinh([n decimalValue]); @@ -442,7 +442,7 @@ - (DDExpression *)cosh:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalCosh([n decimalValue]); @@ -454,7 +454,7 @@ - (DDExpression *)tanh:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalTanh([n decimalValue]); @@ -464,7 +464,7 @@ - (DDExpression *)tanh:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)asinh:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalAsinh([n decimalValue]); @@ -474,7 +474,7 @@ - (DDExpression *)asinh:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)acosh:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalAcosh([n decimalValue]); @@ -484,7 +484,7 @@ - (DDExpression *)acosh:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)atanh:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalAtanh([n decimalValue]); @@ -496,7 +496,7 @@ - (DDExpression *)csc:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalCsc([n decimalValue]); @@ -508,7 +508,7 @@ - (DDExpression *)sec:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalSec([n decimalValue]); @@ -520,7 +520,7 @@ - (DDExpression *)cotan:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalCot([n decimalValue]); @@ -530,7 +530,7 @@ - (DDExpression *)cotan:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)acsc:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalAcsc([n decimalValue]); @@ -540,7 +540,7 @@ - (DDExpression *)acsc:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)asec:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalAsec([n decimalValue]); @@ -550,7 +550,7 @@ - (DDExpression *)asec:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)acotan:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalAcot([n decimalValue]); @@ -562,7 +562,7 @@ - (DDExpression *)csch:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalCsch([n decimalValue]); @@ -574,7 +574,7 @@ - (DDExpression *)sech:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalSech([n decimalValue]); @@ -586,7 +586,7 @@ - (DDExpression *)cotanh:(NSArray *)arguments variables:(NSDictionary *)variable REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalCoth([n decimalValue]); @@ -596,7 +596,7 @@ - (DDExpression *)cotanh:(NSArray *)arguments variables:(NSDictionary *)variable - (DDExpression *)acsch:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalAcsch([n decimalValue]); @@ -606,7 +606,7 @@ - (DDExpression *)acsch:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)asech:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalAsech([n decimalValue]); @@ -616,7 +616,7 @@ - (DDExpression *)asech:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)acotanh:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalAcoth([n decimalValue]); @@ -628,7 +628,7 @@ - (DDExpression *)versin:(NSArray *)arguments variables:(NSDictionary *)variable REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalCos([n decimalValue]); @@ -641,7 +641,7 @@ - (DDExpression *)vercosin:(NSArray *)arguments variables:(NSDictionary *)variab REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalCos([n decimalValue]); @@ -654,7 +654,7 @@ - (DDExpression *)coversin:(NSArray *)arguments variables:(NSDictionary *)variab REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalSin([n decimalValue]); @@ -667,7 +667,7 @@ - (DDExpression *)covercosin:(NSArray *)arguments variables:(NSDictionary *)vari REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalSin([n decimalValue]); @@ -724,7 +724,7 @@ - (DDExpression *)exsec:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalCos([n decimalValue]); @@ -738,7 +738,7 @@ - (DDExpression *)excsc:(NSArray *)arguments variables:(NSDictionary *)variables REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalSin([n decimalValue]); @@ -752,7 +752,7 @@ - (DDExpression *)crd:(NSArray *)arguments variables:(NSDictionary *)variables e REQUIRE_N_ARGS(1); DDExpression *e = [arguments objectAtIndex:0]; e = _DDDTOR(e, [self evaluator], error); - NSNumber *n = [[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:e withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = DDDecimalCos([n decimalValue]); @@ -764,7 +764,7 @@ - (DDExpression *)crd:(NSArray *)arguments variables:(NSDictionary *)variables e - (DDExpression *)dtor:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = [n decimalValue]; @@ -776,7 +776,7 @@ - (DDExpression *)dtor:(NSArray *)arguments variables:(NSDictionary *)variables - (DDExpression *)rtod:(NSArray *)arguments variables:(NSDictionary *)variables error:(NSError **)error { REQUIRE_N_ARGS(1); - NSNumber *n = [[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]; + NSNumber *n = [[self evaluator] unwrapFromMathResult:[[self evaluator] evaluateExpression:[arguments objectAtIndex:0] withSubstitutions:variables error:error]]; RETURN_IF_NIL(n); NSDecimal decimal = [n decimalValue]; diff --git a/DDMathParser/_DDRewriteRule.m b/DDMathParser/_DDRewriteRule.m index a7b04a4..b58a51a 100644 --- a/DDMathParser/_DDRewriteRule.m +++ b/DDMathParser/_DDRewriteRule.m @@ -139,7 +139,7 @@ - (BOOL)matchExpression:(DDExpression *)target replacements:(NSMutableDictionary if (matches && _condition) { DDExpression *resolvedCondition = [self _expressionByApplyingReplacements:replacements toPattern:_condition]; NSError *evalError = nil; - NSNumber *result = [evaluator evaluateExpression:resolvedCondition withSubstitutions:replacements error:&evalError]; + NSNumber *result = [evaluator unwrapFromMathResult:[evaluator evaluateExpression:resolvedCondition withSubstitutions:replacements error:&evalError]]; matches &= [result boolValue]; } return matches;