diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/convert.c | 216 | ||||
| -rw-r--r-- | src/core/convert.h | 55 | ||||
| -rw-r--r-- | src/core/frame.c | 30 | ||||
| -rw-r--r-- | src/core/frame.h | 30 | ||||
| -rw-r--r-- | src/core/function.c | 51 | ||||
| -rw-r--r-- | src/core/function.h | 46 | ||||
| -rw-r--r-- | src/core/functions.c | 985 | ||||
| -rw-r--r-- | src/core/functions.h | 64 | ||||
| -rw-r--r-- | src/core/garbage.c | 144 | ||||
| -rw-r--r-- | src/core/garbage.h | 60 | ||||
| -rw-r--r-- | src/core/interpret.c | 32 | ||||
| -rw-r--r-- | src/core/interpret.h | 32 | ||||
| -rw-r--r-- | src/core/lambda.c | 30 | ||||
| -rw-r--r-- | src/core/lambda.h | 30 | ||||
| -rw-r--r-- | src/core/promise.c | 30 | ||||
| -rw-r--r-- | src/core/promise.h | 30 | ||||
| -rw-r--r-- | src/core/reference.c | 57 | ||||
| -rw-r--r-- | src/core/reference.h | 52 | ||||
| -rw-r--r-- | src/core/scanner.c | 32 | ||||
| -rw-r--r-- | src/core/scanner.h | 32 | ||||
| -rw-r--r-- | src/core/scope.c | 169 | ||||
| -rw-r--r-- | src/core/scope.h | 60 | ||||
| -rw-r--r-- | src/core/symbol.c | 122 | ||||
| -rw-r--r-- | src/core/symbol.h | 71 | ||||
| -rw-r--r-- | src/core/token.c | 30 | ||||
| -rw-r--r-- | src/core/token.h | 30 | ||||
| -rw-r--r-- | src/core/tools.c | 30 | ||||
| -rw-r--r-- | src/core/tools.h | 30 | ||||
| -rw-r--r-- | src/core/variable.c | 30 | ||||
| -rw-r--r-- | src/core/variable.h | 30 |
30 files changed, 244 insertions, 2396 deletions
diff --git a/src/core/convert.c b/src/core/convert.c deleted file mode 100644 index cf8987e..0000000 --- a/src/core/convert.c +++ /dev/null @@ -1,216 +0,0 @@ -/*:* - *: File: ./src/core/convert.c - *: A simple interpreter - *: - *: WWW : http://fype.buetow.org - *: AUTHOR : http://paul.buetow.org - *: E-Mail : fype at dev.buetow.org - *: - *: Copyright (c) 2005 - 2009, Dipl.-Inform. (FH) Paul C. Buetow - *: All rights reserved. - *: - *: Redistribution and use in source and binary forms, with or without modi- - *: fication, are permitted provided that the following conditions are met: - *: * Redistributions of source code must retain the above copyright - *: notice, this list of conditions and the following disclaimer. - *: * Redistributions in binary form must reproduce the above copyright - *: notice, this list of conditions and the following disclaimer in the - *: documentation and/or other materials provided with the distribution. - *: * Neither the name of buetow.org nor the names of its contributors may - *: be used to endorse or promote products derived from this software - *: without specific prior written permission. - *: - *: THIS SOFTWARE IS PROVIDED BY PAUL C. BUETOW AS IS'' AND ANY EXPRESS OR - *: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - *: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *: DISCLAIMED. IN NO EVENT SHALL PAUL C. BUETOW BE LIABLE FOR ANY DIRECT, - *: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - *: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - *: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - *: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - *: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - *: POSSIBILITY OF SUCH DAMAGE. - *:*/ - -#include "convert.h" -#include "../data/array.h" - -void -convert_to_integer(Token *p_token) { - switch (token_get_tt(p_token)) { - case TT_INTEGER: - break; - case TT_DOUBLE: - token_set_tt(p_token, TT_INTEGER); - token_set_ival(p_token, (int)token_get_dval(p_token)); - break; - case TT_STRING: - token_set_tt(p_token, TT_INTEGER); - token_set_ival(p_token, atoi(token_get_val(p_token))); - break; - case TT_ARRAY: - token_set_tt(p_token, TT_INTEGER); - token_set_ival(p_token, array_get_size(p_token->p_array)); - break; - default: - ERROR("Ouups(%s)", tt_get_name(token_get_tt(p_token))); - break; - } -} - -int -convert_to_integer_get(Token *p_token) { - switch (token_get_tt(p_token)) { - case TT_INTEGER: - return (token_get_ival(p_token)); - case TT_DOUBLE: - return ((int) token_get_dval(p_token)); - case TT_STRING: - return (atoi(token_get_val(p_token))); - case TT_ARRAY: - return (array_get_size(p_token->p_array)); - break; - default: - ERROR("Ouups(%s)", tt_get_name(token_get_tt(p_token))); - } - - return (0); /* Never reach this point */ -} - -void -convert_to_double(Token *p_token) { - switch (token_get_tt(p_token)) { - case TT_INTEGER: - token_set_tt(p_token, TT_DOUBLE); - token_set_dval(p_token, token_get_ival(p_token)); - break; - case TT_DOUBLE: - break; - case TT_STRING: - token_set_tt(p_token, TT_DOUBLE); - token_set_dval(p_token, atof(token_get_val(p_token))); - break; - case TT_ARRAY: - token_set_tt(p_token, TT_DOUBLE); - token_set_dval(p_token, array_get_size(p_token->p_array)); - break; - default: - token_print_val(p_token); - ERROR("Datatype conversion error '%s'", token_get_val(p_token)); - break; - } -} - -void -convert_to_string(Token *p_token) { - switch (token_get_tt(p_token)) { - case TT_INTEGER: - { - token_set_tt(p_token, TT_STRING); - char c_tmp[1024]; - sprintf(c_tmp, "%d", token_get_ival(p_token)); - int i_len = strlen(c_tmp); - p_token->c_val = realloc(p_token->c_val, sizeof(char) * (i_len + 1)); - strcpy(p_token->c_val, c_tmp); - p_token->c_val[i_len] = 0; - } - break; - case TT_DOUBLE: - { - token_set_tt(p_token, TT_STRING); - char c_tmp[1024]; - sprintf(c_tmp, "%f", token_get_dval(p_token)); - int i_len = strlen(c_tmp); - p_token->c_val = realloc(p_token->c_val, sizeof(char) * (i_len + 1)); - strcpy(p_token->c_val, c_tmp); - p_token->c_val[i_len] = 0; - } - case TT_ARRAY: - { - token_set_tt(p_token, TT_STRING); - char c_tmp[1024]; - sprintf(c_tmp, "%d", array_get_size(p_token->p_array)); - int i_len = strlen(c_tmp); - p_token->c_val = realloc(p_token->c_val, sizeof(char) * (i_len + 1)); - strcpy(p_token->c_val, c_tmp); - p_token->c_val[i_len] = 0; - } - break; - case TT_STRING: - break; - default: - ERROR("Datatype conversion error"); - break; - } -} - -void -convert_to_array(Token *p_token) { - ERROR("not yet implemented"); -} - -void -convert_to_tt(Token *p_token, TokenType tt) { - switch (tt) { - case TT_INTEGER: - convert_to_integer(p_token); - break; - case TT_DOUBLE: - convert_to_double(p_token); - break; - case TT_STRING: - convert_to_string(p_token); - break; - case TT_ARRAY: - convert_to_array(p_token); - break; - default: - ERROR("Ouups!"); - } -} - -TokenType -convert_to_highest(Token *p_token1, Token *p_token2) { - TokenType tt_highest = token_get_tt(p_token1); - - if (tt_highest < token_get_tt(p_token2)) { - tt_highest = token_get_tt(p_token2); - - convert_to_tt(p_token1, tt_highest); - - } else { - convert_to_tt(p_token2, tt_highest); - } - - return (tt_highest); -} - -TokenType -convert_function_arg_types_to_highest(Stack *p_stack_args, int i_args) { - - if (i_args <= 0) - i_args = stack_size(p_stack_args); - - StackIterator *p_iter = stackiterator_new(p_stack_args); - TokenType tt_highest = TT_INTEGER; - - for (int i = 0; i < i_args && stackiterator_has_next(p_iter); ++i) { - Token *p_token = stackiterator_next(p_iter); - if (token_get_tt(p_token) > tt_highest) - tt_highest = token_get_tt(p_token); - } - - stackiterator_delete(p_iter); - p_iter = stackiterator_new(p_stack_args); - - for (int i = 0; i < i_args && stackiterator_has_next(p_iter); ++i) { - Token *p_token = stackiterator_next(p_iter); - convert_to_tt(p_token, tt_highest); - } - - stackiterator_delete(p_iter); - - return (tt_highest); -} - diff --git a/src/core/convert.h b/src/core/convert.h deleted file mode 100644 index 9dcf23e..0000000 --- a/src/core/convert.h +++ /dev/null @@ -1,55 +0,0 @@ -/*:* - *: File: ./src/core/convert.h - *: A simple interpreter - *: - *: WWW : http://fype.buetow.org - *: AUTHOR : http://paul.buetow.org - *: E-Mail : fype at dev.buetow.org - *: - *: Copyright (c) 2005 - 2009, Dipl.-Inform. (FH) Paul C. Buetow - *: All rights reserved. - *: - *: Redistribution and use in source and binary forms, with or without modi- - *: fication, are permitted provided that the following conditions are met: - *: * Redistributions of source code must retain the above copyright - *: notice, this list of conditions and the following disclaimer. - *: * Redistributions in binary form must reproduce the above copyright - *: notice, this list of conditions and the following disclaimer in the - *: documentation and/or other materials provided with the distribution. - *: * Neither the name of buetow.org nor the names of its contributors may - *: be used to endorse or promote products derived from this software - *: without specific prior written permission. - *: - *: THIS SOFTWARE IS PROVIDED BY PAUL C. BUETOW AS IS'' AND ANY EXPRESS OR - *: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - *: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *: DISCLAIMED. IN NO EVENT SHALL PAUL C. BUETOW BE LIABLE FOR ANY DIRECT, - *: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - *: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - *: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - *: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - *: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - *: POSSIBILITY OF SUCH DAMAGE. - *:*/ - -#ifndef CONVERT_H -#define CONVERT_H - -#include "../defines.h" - -#include "../data/stack.h" - -#include "token.h" - -int convert_to_integer_get(Token *p_token); -void convert_to_integer(Token *p_token); -void convert_to_double(Token *p_token); -void convert_to_string(Token *p_token); -void convert_to_array(Token *p_token); -void convert_to_tt(Token *p_token, TokenType tt); -TokenType convert_to_highest(Token *p_token1, Token *p_token2); -TokenType convert_function_arg_types_to_highest(Stack *p_stack_args, int - i_args); - -#endif diff --git a/src/core/frame.c b/src/core/frame.c index 9143a0d..fb4665d 100644 --- a/src/core/frame.c +++ b/src/core/frame.c @@ -1,13 +1,13 @@ /*:* *: File: ./src/core/frame.c *: A simple Fype interpreter - *: + *: *: WWW: http://fype.buetow.org *: AUTHOR: http://paul.buetow.org *: E-Mail: fype at dev.buetow.org - *: - *: The Fype Language; (c) 2005 - 2010 - Dipl.-Inform. (FH) Paul C. Buetow - *: + *: + *: The Fype Language; (c) 2005 - 2010 Paul Buetow + *: *: Redistribution and use in source and binary forms, with or without modi- *: fication, are permitted provided that the following conditions are met: *: * Redistributions of source code must retain the above copyright @@ -15,20 +15,20 @@ *: * Redistributions in binary form must reproduce the above copyright *: notice, this list of conditions and the following disclaimer in the *: documentation and/or other materials provided with the distribution. - *: * Neither the name of buetow.org nor the names of its contributors may - *: be used to endorse or promote products derived from this software + *: * Neither the name of buetow.org nor the names of its contributors may + *: be used to endorse or promote products derived from this software *: without specific prior written permission. - *: - *: THIS SOFTWARE IS PROVIDED BY PAUL C. BUETOW AS IS'' AND ANY EXPRESS OR - *: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + *: + *: THIS SOFTWARE IS PROVIDED BY PAUL C. BUETOW AS IS'' AND ANY EXPRESS OR + *: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *: DISCLAIMED. IN NO EVENT SHALL PAUL C. BUETOW BE LIABLE FOR ANY DIRECT, - *: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - *: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - *: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + *: DISCLAIMED. IN NO EVENT SHALL PAUL C. BUETOW BE LIABLE FOR ANY DIRECT, + *: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + *: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + *: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - *: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - *: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + *: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + *: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *: POSSIBILITY OF SUCH DAMAGE. *:*/ diff --git a/src/core/frame.h b/src/core/frame.h index d1e01f5..d9d3970 100644 --- a/src/core/frame.h +++ b/src/core/frame.h @@ -1,13 +1,13 @@ /*:* *: File: ./src/core/frame.h *: A simple Fype interpreter - *: + *: *: WWW: http://fype.buetow.org *: AUTHOR: http://paul.buetow.org *: E-Mail: fype at dev.buetow.org - *: - *: The Fype Language; (c) 2005 - 2010 - Dipl.-Inform. (FH) Paul C. Buetow - *: + *: + *: The Fype Language; (c) 2005 - 2010 Paul Buetow + *: *: Redistribution and use in source and binary forms, with or without modi- *: fication, are permitted provided that the following conditions are met: *: * Redistributions of source code must retain the above copyright @@ -15,20 +15,20 @@ *: * Redistributions in binary form must reproduce the above copyright *: notice, this list of conditions and the following disclaimer in the *: documentation and/or other materials provided with the distribution. - *: * Neither the name of buetow.org nor the names of its contributors may - *: be used to endorse or promote products derived from this software + *: * Neither the name of buetow.org nor the names of its contributors may + *: be used to endorse or promote products derived from this software *: without specific prior written permission. - *: - *: THIS SOFTWARE IS PROVIDED BY PAUL C. BUETOW AS IS'' AND ANY EXPRESS OR - *: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + *: + *: THIS SOFTWARE IS PROVIDED BY PAUL C. BUETOW AS IS'' AND ANY EXPRESS OR + *: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *: DISCLAIMED. IN NO EVENT SHALL PAUL C. BUETOW BE LIABLE FOR ANY DIRECT, - *: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - *: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - *: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + *: DISCLAIMED. IN NO EVENT SHALL PAUL C. BUETOW BE LIABLE FOR ANY DIRECT, + *: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + *: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + *: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - *: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - *: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + *: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + *: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *: POSSIBILITY OF SUCH DAMAGE. *:*/ diff --git a/src/core/function.c b/src/core/function.c deleted file mode 100644 index 70166ed..0000000 --- a/src/core/function.c +++ /dev/null @@ -1,51 +0,0 @@ -/*:* - *: File: ./src/core/function.c - *: A simple interpreter - *: - *: WWW : http://fype.buetow.org - *: AUTHOR : http://paul.buetow.org - *: E-Mail : fype at dev.buetow.org - *: - *: Copyright (c) 2005 - 2009, Dipl.-Inform. (FH) Paul C. Buetow - *: All rights reserved. - *: - *: Redistribution and use in source and binary forms, with or without modi- - *: fication, are permitted provided that the following conditions are met: - *: * Redistributions of source code must retain the above copyright - *: notice, this list of conditions and the following disclaimer. - *: * Redistributions in binary form must reproduce the above copyright - *: notice, this list of conditions and the following disclaimer in the - *: documentation and/or other materials provided with the distribution. - *: * Neither the name of buetow.org nor the names of its contributors may - *: be used to endorse or promote products derived from this software - *: without specific prior written permission. - *: - *: THIS SOFTWARE IS PROVIDED BY PAUL C. BUETOW AS IS'' AND ANY EXPRESS OR - *: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - *: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *: DISCLAIMED. IN NO EVENT SHALL PAUL C. BUETOW BE LIABLE FOR ANY DIRECT, - *: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - *: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - *: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - *: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - *: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - *: POSSIBILITY OF SUCH DAMAGE. - *:*/ - -#include "../defines.h" - -#include "function.h" - -Function* -function_new() { - Function *p_function = malloc(sizeof(Function)); - - return (p_function); -} - -void -function_delete(Function *p_function) { - free(p_function); -} - diff --git a/src/core/function.h b/src/core/function.h deleted file mode 100644 index 748ebce..0000000 --- a/src/core/function.h +++ /dev/null @@ -1,46 +0,0 @@ -/*:* - *: File: ./src/core/function.h - *: A simple interpreter - *: - *: WWW : http://fype.buetow.org - *: AUTHOR : http://paul.buetow.org - *: E-Mail : fype at dev.buetow.org - *: - *: Copyright (c) 2005 - 2009, Dipl.-Inform. (FH) Paul C. Buetow - *: All rights reserved. - *: - *: Redistribution and use in source and binary forms, with or without modi- - *: fication, are permitted provided that the following conditions are met: - *: * Redistributions of source code must retain the above copyright - *: notice, this list of conditions and the following disclaimer. - *: * Redistributions in binary form must reproduce the above copyright - *: notice, this list of conditions and the following disclaimer in the - *: documentation and/or other materials provided with the distribution. - *: * Neither the name of buetow.org nor the names of its contributors may - *: be used to endorse or promote products derived from this software - *: without specific prior written permission. - *: - *: THIS SOFTWARE IS PROVIDED BY PAUL C. BUETOW AS IS'' AND ANY EXPRESS OR - *: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - *: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *: DISCLAIMED. IN NO EVENT SHALL PAUL C. BUETOW BE LIABLE FOR ANY DIRECT, - *: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - *: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - *: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - *: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - *: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - *: POSSIBILITY OF SUCH DAMAGE. - *:*/ - -#ifndef FUNCTION_H -#define FUNCTION_H - -typedef struct { - char *c_name; -} Function; - -Function* function_new(); -void function_delete(Function *p_function); - -#endif /* FUNCTION_H */ diff --git a/src/core/functions.c b/src/core/functions.c deleted file mode 100644 index 82efc4f..0000000 --- a/src/core/functions.c +++ /dev/null @@ -1,985 +0,0 @@ -/*:* - *: File: ./src/core/functions.c - *: A simple interpreter - *: - *: WWW : http://fype.buetow.org - *: AUTHOR : http://paul.buetow.org - *: E-Mail : fype at dev.buetow.org - *: - *: Copyright (c) 2005 - 2009, Dipl.-Inform. (FH) Paul C. Buetow - *: All rights reserved. - *: - *: Redistribution and use in source and binary forms, with or without modi- - *: fication, are permitted provided that the following conditions are met: - *: * Redistributions of source code must retain the above copyright - *: notice, this list of conditions and the following disclaimer. - *: * Redistributions in binary form must reproduce the above copyright - *: notice, this list of conditions and the following disclaimer in the - *: documentation and/or other materials provided with the distribution. - *: * Neither the name of buetow.org nor the names of its contributors may - *: be used to endorse or promote products derived from this software - *: without specific prior written permission. - *: - *: THIS SOFTWARE IS PROVIDED BY PAUL C. BUETOW AS IS'' AND ANY EXPRESS OR - *: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - *: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *: DISCLAIMED. IN NO EVENT SHALL PAUL C. BUETOW BE LIABLE FOR ANY DIRECT, - *: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - *: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - *: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - *: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - *: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - *: POSSIBILITY OF SUCH DAMAGE. - *:*/ - -#include <stdlib.h> -#include <sys/types.h> -#include <unistd.h> - -#include "functions.h" - -#include "convert.h" -#include "scope.h" -#include "symbol.h" - -#define _FUNCTIONS_ERROR(m,t) \ - ERROR(\ - "%s: Function error in %s line %d pos %d near '%s'", m, \ - token_get_filename(t), \ - token_get_line_nr(t), \ - token_get_pos_nr(t), \ - token_get_val(t) \ - ) - -Functions* -functions_new() { - Functions *p_functions = malloc(sizeof(Functions)); - - p_functions->p_hash_functions = hash_new(1024); - functions_init(p_functions); - - return (p_functions); -} - -void -functions_delete(Functions *p_functions) { - hash_delete(p_functions->p_hash_functions); - free(p_functions); -} - - -void -_process(Interpret *p_interpret, Token *p_token_store, Token *p_token_op, - Token *p_token_op2, Token *p_token_next) { - - TokenType tt_op = token_get_tt(p_token_op); - TokenType tt_op2 = p_token_op2 == NULL - ? TT_NONE - : token_get_tt(p_token_op2); - -#ifdef DEBUG_FUNCTION_PROCESS - if (p_token_op2 == NULL) - printf("DEBUG::FUNCTION::PROCESS: Operator %s\n", tt_get_name(tt_op)); - else - printf("DEBUG::FUNCTION::PROCESS: Operator %s %s\n", tt_get_name(tt_op), - tt_get_name(tt_op2)); - - token_print(p_token_next); - printf("\n"); - token_print(p_token_store); - printf("\n"); -#endif /* DEBUG_FUNCTION_PROCESS */ - - if (p_token_op2 != NULL) { - switch (tt_op) { - case TT_NOT: - switch (tt_op2) { - case TT_ASSIGN: - tt_op = TT_NEQ; - break; - default: - break; - } - break; - case TT_ASSIGN: - switch (tt_op2) { - case TT_ASSIGN: - tt_op = TT_EQ; - break; - default: - break; - } - break; - case TT_LT: - switch (tt_op2) { - case TT_ASSIGN: - tt_op = TT_LE; - break; - default: - break; - } - break; - case TT_GT: - switch (tt_op2) { - case TT_ASSIGN: - tt_op = TT_GE; - break; - default: - break; - } - break; - case TT_DDOT: - switch (tt_op2) { - case TT_LT: - tt_op = TT_LSHIFT; - break; - case TT_GT: - tt_op = TT_RSHIFT; - break; - default: - break; - } - break; - default: - break; - } - } else { - switch (tt_op) { - case TT_ASSIGN: - { - Token *p_token_assign = p_interpret->p_token_temp; - TokenType tt_assign = token_get_tt(p_token_assign); - - if (tt_assign != TT_IDENT) { - _FUNCTIONS_ERROR("Can only assign to symbols", - p_token_store); - } - - Symbol *p_symbol = scope_get(p_interpret->p_scope, - token_get_val(p_token_assign)); - - if (p_symbol == NULL) { - _FUNCTIONS_ERROR("No such symbol", - p_token_assign); - } - - symbol_set_val(p_symbol, p_token_store); - symbol_set_sym(p_symbol, SYM_VARIABLE); - - return; - } - - break; - NO_DEFAULT; - } - } - - p_token_next = token_new_copy(p_token_next); - TokenType tt_highest = convert_to_highest(p_token_store, p_token_next); - -#ifdef DEBUG_FUNCTION_PROCESS - printf("DEBUG::FUNCTION::PROCESS: ===> %s %s %s\n", - tt_get_name(tt_highest), - tt_get_name(tt_op), - tt_get_name(tt_highest)); -#endif /* DEBUG_FUNCTION_PROCESS */ - - switch (tt_op) { - case TT_ADD: - switch (tt_highest) { - case TT_INTEGER: - token_set_ival(p_token_store, - token_get_ival(p_token_next) + - token_get_ival(p_token_store)); - break; - case TT_DOUBLE: - token_set_dval(p_token_store, - token_get_dval(p_token_next) + - token_get_dval(p_token_store)); - break; - case TT_STRING: - token_set_ival(p_token_store, - atoi(token_get_val(p_token_next)) + - atoi(token_get_val(p_token_store))); - token_set_tt(p_token_store, TT_INTEGER); - break; - case TT_ARRAY: - array_append(p_token_store->p_array, - p_token_next->p_array); - break; - NO_DEFAULT; - } - break; - case TT_SUB: - switch (tt_highest) { - case TT_INTEGER: - token_set_ival(p_token_store, - token_get_ival(p_token_next) - - token_get_ival(p_token_store)); - break; - case TT_DOUBLE: - token_set_dval(p_token_store, - token_get_dval(p_token_next) - - token_get_dval(p_token_store)); - break; - case TT_STRING: - token_set_ival(p_token_store, - atoi(token_get_val(p_token_next)) - - atoi(token_get_val(p_token_store))); - token_set_tt(p_token_store, TT_INTEGER); - break; - case TT_ARRAY: - ERROR("TT_ARRAY - TT_ARRAY not yet implemented"); - break; - NO_DEFAULT; - } - break; - case TT_MULT: - switch (tt_highest) { - case TT_INTEGER: - token_set_ival(p_token_store, - token_get_ival(p_token_next) * - token_get_ival(p_token_store)); - break; - case TT_DOUBLE: - token_set_dval(p_token_store, - token_get_dval(p_token_next) * - token_get_dval(p_token_store)); - break; - case TT_STRING: - token_set_ival(p_token_store, - atoi(token_get_val(p_token_next)) * - atoi(token_get_val(p_token_store))); - token_set_tt(p_token_store, TT_INTEGER); - break; - case TT_ARRAY: - ERROR("TT_ARRAY * TT_ARRAY not yet implemented"); - break; - NO_DEFAULT; - } - break; - case TT_DIV: - switch (tt_highest) { - case TT_INTEGER: - token_set_ival(p_token_store, - (int) token_get_ival(p_token_next) / - token_get_ival(p_token_store)); - break; - case TT_DOUBLE: - token_set_dval(p_token_store, - token_get_dval(p_token_next) / - token_get_dval(p_token_store)); - break; - case TT_STRING: - token_set_dval(p_token_store, - atof(token_get_val(p_token_next)) / - atof(token_get_val(p_token_store))); - token_set_tt(p_token_store, TT_DOUBLE); - break; - case TT_ARRAY: - ERROR("TT_ARRAY / TT_ARRAY not yet implemented"); - break; - NO_DEFAULT; - } - break; - case TT_EQ: - switch (tt_highest) { - case TT_INTEGER: - token_set_ival(p_token_store, - (int) token_get_ival(p_token_next) == - token_get_ival(p_token_store)); - break; - case TT_DOUBLE: - token_set_ival(p_token_store, - token_get_dval(p_token_next) == - token_get_dval(p_token_store)); - token_set_tt(p_token_store, TT_INTEGER); - break; - case TT_STRING: - token_set_ival(p_token_store, - strcmp(token_get_val(p_token_next), - token_get_val(p_token_store)) == 0); - token_set_tt(p_token_store, TT_INTEGER); - break; - case TT_ARRAY: - ERROR("TT_ARRAY eq TT_ARRAY not yet implemented"); - break; - NO_DEFAULT; - } - break; - case TT_NEQ: - switch (tt_highest) { - case TT_INTEGER: - token_set_ival(p_token_store, - (int) token_get_ival(p_token_next) != - token_get_ival(p_token_store)); - break; - case TT_DOUBLE: - token_set_ival(p_token_store, - token_get_dval(p_token_next) != - token_get_dval(p_token_store)); - token_set_tt(p_token_store, TT_INTEGER); |
