forked from pmougin/F-Script
-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathFScriptFunctions.m
73 lines (59 loc) · 2.32 KB
/
FScriptFunctions.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/* FScriptFunctions.m Copyright (c) 1998-2009 Philippe Mougin. */
/* This software is open source. See the licence. */
#import "FScriptFunctions.h"
#import "FSNSObject.h"
#import "FSMiscTools.h"
NSString *FSExecutionErrorException = @"FSExecutionErrorException";
NSString *FSUserAbortedException = @"FSUserAbortedException";
void FSVerifClassArgs(NSString *methodName, NSInteger nbArgs, ...)
{
va_list pa;
id currentArg;
id currentClass;
BOOL currentNilOK;
NSInteger i;
va_start(pa,nbArgs);
for (i = 1; i <= nbArgs; i++)
{
currentArg = va_arg(pa,id);
currentClass = va_arg(pa,id);
currentNilOK = va_arg(pa,NSInteger);
//printf("\n%d\n",currentNilOK);
if (((currentArg == nil) && (currentNilOK == 0)) || (currentArg!=nil && currentClass!=nil && ![currentArg isKindOfClass:currentClass]))
FSArgumentError(currentArg,i,NSStringFromClass(currentClass),methodName);
}
va_end(pa);
}
void FSVerifClassArgsNoNil(NSString *methodName, NSInteger nbArgs, ...)
{
va_list pa;
id currentArg;
id currentClass;
NSInteger i;
va_start(pa,nbArgs);
for (i = 1; i <= nbArgs; i++)
{
currentArg = va_arg(pa,id);
currentClass = va_arg(pa,id);
if (currentArg == nil || (currentClass!=nil && ![currentArg isKindOfClass:currentClass]))
FSArgumentError(currentArg,i,NSStringFromClass(currentClass),methodName);
}
va_end(pa);
}
void FSArgumentError(id argument, NSInteger index, NSString *expectedClass, NSString *methodName)
{
if (argument == nil)
FSExecError([NSString stringWithFormat:@"argument %ld of method \"%@\" is nil. An instance of %@ was expected", (long)index, methodName, expectedClass]);
else
FSExecError([NSString stringWithFormat:@"argument %ld of method \"%@\" is %@. An instance of %@ was expected", (long)index, methodName, descriptionForFSMessage(argument),expectedClass]);
}
void FSExecError(NSString *errorStr)
{
[NSException raise:FSExecutionErrorException format:@"error: %@", errorStr];
exit(0); // to avoid a warning "noreturn function does return"
}
void FSUserAborted(void)
{
[NSException raise:FSUserAbortedException format:@"execution stopped by user\n"];
exit(0); // to avoid a warning "noreturn function does return"
}