029085 | 2005-01-02 | Martin Nilsson | | |
55355a | 2004-10-05 | Martin Nilsson | | */
#include "global.h"
#include "config.h"
#include "pike_macros.h"
#include "object.h"
#include "constants.h"
#include "interpret.h"
#include "svalue.h"
#include "threads.h"
#include "array.h"
#include "pike_error.h"
#include "operators.h"
#include "builtin_functions.h"
#include "module_support.h"
#include "mapping.h"
#include "stralloc.h"
#include "program_id.h"
#include <ctype.h>
|
b5f91a | 2017-03-18 | Martin Nilsson | | #include "whitespace.h"
|
55355a | 2004-10-05 | Martin Nilsson | |
#include "parser.h"
|
493b3a | 2010-05-11 | Henrik Grubbström (Grubba) | |
|
01b921 | 2016-01-12 | Per Hedbor | | inline static int m_isidchar( unsigned int x )
|
55355a | 2004-10-05 | Martin Nilsson | | {
|
a0d3fb | 2017-03-18 | Martin Nilsson | | if( (x>='0' && x<='9') ) return 0;
return isidchar(x);
|
55355a | 2004-10-05 | Martin Nilsson | | }
#define PUSH_TOKEN push_token0
#define TOKENIZE tokenize0
#define CHAR p_wchar0
|
b5f91a | 2017-03-18 | Martin Nilsson | | #define m_isidchar2(X) isidchar(X)
#define SPACECASE SPACECASE8
|
55355a | 2004-10-05 | Martin Nilsson | | #include "pike_tokenizer.h"
|
b5f91a | 2017-03-18 | Martin Nilsson | | #undef SPACECASE
#undef m_isidchar2
|
55355a | 2004-10-05 | Martin Nilsson | | #undef TOKENIZE
#undef CHAR
#undef PUSH_TOKEN
#define PUSH_TOKEN push_token1
#define TOKENIZE tokenize1
#define CHAR p_wchar1
|
b5f91a | 2017-03-18 | Martin Nilsson | | #define m_isidchar2(X) wide_isidchar(X)
#define SPACECASE SPACECASE16
|
55355a | 2004-10-05 | Martin Nilsson | | #include "pike_tokenizer.h"
|
b5f91a | 2017-03-18 | Martin Nilsson | | #undef SPACECASE
#undef m_isidchar2
|
55355a | 2004-10-05 | Martin Nilsson | | #undef TOKENIZE
#undef CHAR
#undef PUSH_TOKEN
#define PUSH_TOKEN push_token2
#define TOKENIZE tokenize2
#define CHAR p_wchar2
|
b5f91a | 2017-03-18 | Martin Nilsson | | #define m_isidchar2(X) wide_isidchar(X)
#define SPACECASE SPACECASE16
|
55355a | 2004-10-05 | Martin Nilsson | | #include "pike_tokenizer.h"
|
b5f91a | 2017-03-18 | Martin Nilsson | | #undef SPACECASE
#undef m_isidchar2
|
55355a | 2004-10-05 | Martin Nilsson | | #undef TOKENIZE
#undef CHAR
#undef PUSH_TOKEN
static void do_free_arrayptr( struct array **x )
{
free_array( *x );
|
13670c | 2015-05-25 | Martin Nilsson | | }
|
55355a | 2004-10-05 | Martin Nilsson | |
|
493b3a | 2010-05-11 | Henrik Grubbström (Grubba) | | |
18b795 | 2005-03-24 | Henrik Grubbström (Grubba) | | */
|
55355a | 2004-10-05 | Martin Nilsson | | static void f_tokenize( INT32 args )
{
|
00936a | 2005-03-16 | Martin Nilsson | | struct array *res;
|
18b795 | 2005-03-24 | Henrik Grubbström (Grubba) | | struct pike_string *left_s = NULL;
struct pike_string *data;
|
55355a | 2004-10-05 | Martin Nilsson | | int left;
ONERROR tmp;
|
18b795 | 2005-03-24 | Henrik Grubbström (Grubba) | | get_all_args("tokenize", args, "%W", &data);
|
55355a | 2004-10-05 | Martin Nilsson | |
|
18b795 | 2005-03-24 | Henrik Grubbström (Grubba) | | if(!data->len)
|
00936a | 2005-03-16 | Martin Nilsson | | {
pop_n_elems(args);
|
ae3513 | 2005-05-05 | Martin Nilsson | | push_empty_array();
push_empty_string();
|
00936a | 2005-03-16 | Martin Nilsson | | f_aggregate(2);
return;
}
res = allocate_array_no_init( 0, 128 );
|
55355a | 2004-10-05 | Martin Nilsson | | SET_ONERROR(tmp, do_free_arrayptr, &res);
|
13670c | 2015-05-25 | Martin Nilsson | |
|
18b795 | 2005-03-24 | Henrik Grubbström (Grubba) | | switch(data->size_shift)
|
55355a | 2004-10-05 | Martin Nilsson | | {
case 0:
|
18b795 | 2005-03-24 | Henrik Grubbström (Grubba) | | left = tokenize0(&res, STR0(data), data->len);
left_s = make_shared_binary_string0(STR0(data)+left, data->len-left);
|
55355a | 2004-10-05 | Martin Nilsson | | break;
case 1:
|
18b795 | 2005-03-24 | Henrik Grubbström (Grubba) | | left = tokenize1(&res, STR1(data), data->len);
left_s = make_shared_binary_string1(STR1(data)+left, data->len-left);
|
55355a | 2004-10-05 | Martin Nilsson | | break;
case 2:
|
18b795 | 2005-03-24 | Henrik Grubbström (Grubba) | | left = tokenize2(&res,STR2(data), data->len);
|
da6d08 | 2005-03-28 | Martin Nilsson | | left_s = make_shared_binary_string2(STR2(data)+left, data->len-left);
|
55355a | 2004-10-05 | Martin Nilsson | | break;
}
|
18b795 | 2005-03-24 | Henrik Grubbström (Grubba) | |
UNSET_ONERROR(tmp);
|
55355a | 2004-10-05 | Martin Nilsson | | pop_n_elems(args);
|
24e1fd | 2005-04-26 | Henrik Grubbström (Grubba) | | if (!res->size) {
free_array(res);
|
ae3513 | 2005-05-05 | Martin Nilsson | | push_empty_array();
|
24e1fd | 2005-04-26 | Henrik Grubbström (Grubba) | | }
|
ae3513 | 2005-05-05 | Martin Nilsson | | else
push_array(res);
|
55355a | 2004-10-05 | Martin Nilsson | | push_string( left_s );
f_aggregate( 2 );
}
|
493b3a | 2010-05-11 | Henrik Grubbström (Grubba) | |
|
55355a | 2004-10-05 | Martin Nilsson | |
void init_parser_pike()
{
|
da6d08 | 2005-03-28 | Martin Nilsson | | ADD_FUNCTION2("tokenize", f_tokenize,
tFunc(tStr,tArr(tOr(tArr(tStr),tStr))), 0, 0);
|
55355a | 2004-10-05 | Martin Nilsson | | }
void exit_parser_pike()
{
}
|