adding some stdlib randomizaton functions

This commit is contained in:
Justin Meza 2014-08-31 15:40:21 -07:00
parent 46590f3886
commit e8dd671a27
3 changed files with 61 additions and 1 deletions

View File

@ -201,6 +201,27 @@ ReturnObject *stratWrapper(struct scopeobject *scope)
return createReturnObject(RT_RETURN, ret);
}
ReturnObject *srandWrapper(struct scopeobject *scope)
{
ValueObject *arg1 = getArg(scope, "seed");
int seed = getInteger(arg1);
srand(seed);
return createReturnObject(RT_DEFAULT, NULL);
}
ReturnObject *randWrapper(struct scopeobject *scope)
{
ValueObject *arg1 = getArg(scope, "max");
unsigned int max = getInteger(arg1);
unsigned int val = (rand() % max);
ValueObject *ret = createIntegerValueObject(val);
return createReturnObject(RT_RETURN, ret);
}
void loadLibrary(ScopeObject *scope, IdentifierNode *target)
{
char *name = NULL;
@ -213,7 +234,25 @@ void loadLibrary(ScopeObject *scope, IdentifierNode *target)
name = resolveIdentifierName(target, scope);
if (!name) goto loadLibraryAbort;
if (!strcmp(name, "STDIO")) {
if (!strcmp(name, "STDLIB")) {
lib = createScopeObject(scope);
if (!lib) goto loadLibraryAbort;
loadBinding(lib, "MIX", "seed", &srandWrapper);
loadBinding(lib, "BLOW", "max", &randWrapper);
id = createIdentifierNode(IT_DIRECT, (void *)copyString("STDLIB"), NULL, NULL, 0);
if (!id) goto loadLibraryAbort;
if (!createScopeValue(scope, scope, id)) goto loadLibraryAbort;
val = createArrayValueObject(lib);
if (!val) goto loadLibraryAbort;
lib = NULL;
if (!updateScopeValue(scope, scope, id, val)) goto loadLibraryAbort;
deleteIdentifierNode(id);
} else if (!strcmp(name, "STDIO")) {
lib = createScopeObject(scope);
if (!lib) goto loadLibraryAbort;

View File

@ -0,0 +1,12 @@
HAI 1.4
CAN HAS STDLIB?
I IZ STDLIB'Z MIX YR 0 MKAY
I HAS A val1 ITZ I IZ STDLIB'Z BLOW YR 10 MKAY
I IZ STDLIB'Z MIX YR 1 MKAY
I HAS A val2 ITZ I IZ STDLIB'Z BLOW YR 10 MKAY
I IZ STDLIB'Z MIX YR 2 MKAY
I HAS A val3 ITZ I IZ STDLIB'Z BLOW YR 10 MKAY
VISIBLE val1
VISIBLE val2
VISIBLE val3
KTHXBYE

View File

@ -0,0 +1,9 @@
HAI 1.4
CAN HAS STDLIB?
I HAS A val1 ITZ I IZ STDLIB'Z BLOW YR 10 MKAY
I HAS A val2 ITZ I IZ STDLIB'Z BLOW YR 10 MKAY
I HAS A val3 ITZ I IZ STDLIB'Z BLOW YR 10 MKAY
VISIBLE val1
VISIBLE val2
VISIBLE val3
KTHXBYE