diff options
| author | admin (centauri.fritz.box) <puppet@mx.buetow.org> | 2014-06-30 23:53:04 +0200 |
|---|---|---|
| committer | admin (centauri.fritz.box) <puppet@mx.buetow.org> | 2014-06-30 23:53:04 +0200 |
| commit | adc4b59a3e7c9db6f33670164490830d87331228 (patch) | |
| tree | adc5d21856852bfb5c3cca794a9c07ad476d877e /src/core/convert.c | |
| parent | 63cf3028445d8d213ffc774f77aafd7283cb4fbd (diff) | |
| parent | 5ab5de91eb0ae6ed9db78a2c8c47ec67f105e504 (diff) | |
Mergebuild-010393-lambda
Diffstat (limited to 'src/core/convert.c')
| -rw-r--r-- | src/core/convert.c | 216 |
1 files changed, 0 insertions, 216 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); -} - |
