summaryrefslogtreecommitdiff
path: root/src/core/function.c
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-09-16 17:05:51 +0000
committerPaul Buetow <paul@buetow.org>2008-09-16 17:05:51 +0000
commit71185ab0ab0b08b4d5bb2e750ff85e11f105a453 (patch)
treea6ad933176f92b60d2f1560d2f1bac46ec6b9566 /src/core/function.c
parent8b31b18a43dea55489e70d5b2ea6fc183cc67533 (diff)
array progress
Diffstat (limited to 'src/core/function.c')
-rw-r--r--src/core/function.c86
1 files changed, 62 insertions, 24 deletions
diff --git a/src/core/function.c b/src/core/function.c
index fda40b8..979454d 100644
--- a/src/core/function.c
+++ b/src/core/function.c
@@ -52,6 +52,34 @@
)
void
+_print_val(Token *p_token) {
+ switch (token_get_tt(p_token)) {
+ case TT_INTEGER:
+ printf("%d", token_get_ival(p_token));
+ break;
+ case TT_DOUBLE:
+ printf("%f", token_get_dval(p_token));
+ break;
+ case TT_STRING:
+ printf("%s", token_get_val(p_token));
+ break;
+ case TT_ARRAY:
+ {
+ Array *p_array = p_token->p_array;
+ ArrayIterator *p_iter = arrayiterator_new(p_array);
+ while (arrayiterator_has_next(p_iter)) {
+ Token *p_next = arrayiterator_next(p_iter);
+ _print_val(p_next);
+ printf(" ");
+ }
+ arrayiterator_delete(p_iter);
+ }
+ break;
+ NO_DEFAULT;
+ }
+}
+
+void
_process(Interpret *p_interpret, Token *p_token_store, Token *p_token_op,
Token *p_token_op2, Token *p_token_next) {
@@ -575,6 +603,9 @@ function_is_buildin(Token *p_token_ident) {
if (strcmp("not", token_get_val(p_token_ident)) == 0)
return (true);
+ if (strcmp("type", token_get_val(p_token_ident)) == 0)
+ return (true);
+
return (false);
}
@@ -734,18 +765,7 @@ function_process_buildin(Interpret *p_interpret, Token *p_token_ident,
StackIterator *p_iter = stackiterator_new(p_stack_args);
while (stackiterator_has_next(p_iter)) {
Token *p_token = stackiterator_next(p_iter);
- switch (token_get_tt(p_token)) {
- case TT_INTEGER:
- printf("%d", token_get_ival(p_token));
- break;
- case TT_DOUBLE:
- printf("%f", token_get_dval(p_token));
- break;
- case TT_STRING:
- printf("%s", token_get_val(p_token));
- break;
- NO_DEFAULT;
- }
+ _print_val(p_token);
}
stackiterator_delete(p_iter);
@@ -753,18 +773,7 @@ function_process_buildin(Interpret *p_interpret, Token *p_token_ident,
StackIterator *p_iter = stackiterator_new(p_stack_args);
while (stackiterator_has_next(p_iter)) {
Token *p_token = stackiterator_next(p_iter);
- switch (token_get_tt(p_token)) {
- case TT_INTEGER:
- printf("%d", token_get_ival(p_token));
- break;
- case TT_DOUBLE:
- printf("%f", token_get_dval(p_token));
- break;
- case TT_STRING:
- printf("%s", token_get_val(p_token));
- break;
- NO_DEFAULT;
- }
+ _print_val(p_token);
}
stackiterator_delete(p_iter);
printf("\n");
@@ -812,6 +821,35 @@ function_process_buildin(Interpret *p_interpret, Token *p_token_ident,
break;
NO_DEFAULT;
}
+ } else if (strcmp("not", token_get_val(p_token_ident)) == 0) {
+ if (0 == stack_size(p_stack_args))
+ _FUNCTION_ERROR("No argument given", p_token_ident);
+
+ Token *p_token = token_new_copy(stack_pop(p_stack_args));
+ stack_push(p_stack_args, p_token);
+
+ switch (token_get_tt(p_token)) {
+ case TT_INTEGER:
+ token_set_ival(p_token, !token_get_ival(p_token));
+ break;
+ case TT_DOUBLE:
+ token_set_dval(p_token, !token_get_dval(p_token));
+ break;
+ case TT_STRING:
+ token_set_ival(p_token, !atoi(token_get_val(p_token)));
+ token_set_tt(p_token, TT_INTEGER);
+ break;
+ NO_DEFAULT;
+ }
+ } else if (strcmp("type", token_get_val(p_token_ident)) == 0) {
+ if (0 == stack_size(p_stack_args))
+ _FUNCTION_ERROR("No argument given", p_token_ident);
+
+ Token *p_token = stack_pop(p_stack_args);
+ TokenType tt = token_get_tt(p_token);
+
+ Token *p_token_type = token_new_string(tt_get_name(tt));
+ stack_push(p_stack_args, p_token_type);
}
}