/* Authors: Arnaud Legrand, Martin Quinson */
-#include "gs/gs_private.h"
-#include "gs/parse.yy.h"
+#include "DataDesc/gs_private.h"
+#include "DataDesc/parse.yy.h"
GRAS_LOG_NEW_DEFAULT_SUBCATEGORY(NDR_parse,NDR);
short is_ref;
} type_modifier_t;
-extern char *gs_parse_text;
+extern char *gras_datadesc_parse_text;
/* prototypes */
static void parse_type_modifier(type_modifier_t *type_modifier);
/* local functions */
static void parse_type_modifier(type_modifier_t *type_modifier) {
do {
- if (gs_parse_tok_num == GS_PARSE_TOKEN_STAR) {
+ if (gras_datadesc_parse_tok_num == GRAS_DATADESC_PARSE_TOKEN_STAR) {
DEBUG0("This is a reference");
type_modifier->is_ref++;
- } else if (!strcmp(gs_parse_text,"unsigned")) {
+ } else if (!strcmp(gras_datadesc_parse_text,"unsigned")) {
DEBUG0("This is an unsigned");
type_modifier->is_unsigned = 1;
- } else if (!strcmp(gs_parse_text,"short")) {
+ } else if (!strcmp(gras_datadesc_parse_text,"short")) {
DEBUG0("This is short");
type_modifier->is_short = 1;
- } else if (!strcmp(gs_parse_text,"long")) {
+ } else if (!strcmp(gras_datadesc_parse_text,"long")) {
DEBUG0("This is long");
type_modifier->is_long++; /* "long long" needs love */
- } else if (!strcmp(gs_parse_text,"struct")) {
+ } else if (!strcmp(gras_datadesc_parse_text,"struct")) {
DEBUG0("This is a struct");
type_modifier->is_struct = 1;
- } else if (!strcmp(gs_parse_text,"union")) {
+ } else if (!strcmp(gras_datadesc_parse_text,"union")) {
DEBUG0("This is an union");
type_modifier->is_union = 1;
- } else if (!strcmp(gs_parse_text,"enum")) {
+ } else if (!strcmp(gras_datadesc_parse_text,"enum")) {
DEBUG0("This is an enum");
type_modifier->is_enum = 1;
}
- gs_parse_tok_num = gs_parse_lex_n_dump();
- if((gs_parse_tok_num != GS_PARSE_TOKEN_WORD) &&
- (gs_parse_tok_num != GS_PARSE_TOKEN_STAR))
+ gras_datadesc_parse_tok_num = gras_datadesc_parse_lex_n_dump();
+ if((gras_datadesc_parse_tok_num != GRAS_DATADESC_PARSE_TOKEN_WORD) &&
+ (gras_datadesc_parse_tok_num != GRAS_DATADESC_PARSE_TOKEN_STAR))
break;
} while(1);
}
gras_dynar_reset(*dynar);
memset(&tm,0,sizeof(tm));
- gs_parse_tok_num = gs_parse_lex_n_dump();
- if(gs_parse_tok_num == GS_PARSE_TOKEN_RP) {
+ gras_datadesc_parse_tok_num = gras_datadesc_parse_lex_n_dump();
+ if(gras_datadesc_parse_tok_num == GRAS_DATADESC_PARSE_TOKEN_RP) {
return mismatch_error; /* end of the englobing structure or union */
}
DEBUG0("Parse a new statement.");
- if(gs_parse_tok_num != GS_PARSE_TOKEN_WORD) {
+ if(gras_datadesc_parse_tok_num != GRAS_DATADESC_PARSE_TOKEN_WORD) {
fprintf(stderr,
"Unparsable symbol: found a typeless statement (got '%s' instead). Definition was:\n%s\n",
- gs_parse_text, definition);
+ gras_datadesc_parse_text, definition);
abort();
}
(tm.is_short || tm.is_long || tm.is_unsigned) &&
- strcmp(gs_parse_text,"char") &&
- strcmp(gs_parse_text,"float") &&
- strcmp(gs_parse_text,"double") &&
- strcmp(gs_parse_text,"int") ) {
+ strcmp(gras_datadesc_parse_text,"char") &&
+ strcmp(gras_datadesc_parse_text,"float") &&
+ strcmp(gras_datadesc_parse_text,"double") &&
+ strcmp(gras_datadesc_parse_text,"int") ) {
/* bastard user, they omited "int" ! */
base_type=strdup("int");
DEBUG0("the base type is 'int', which were omited");
} else {
- base_type=strdup(gs_parse_text);
+ base_type=strdup(gras_datadesc_parse_text);
DEBUG1("the base type is '%s'",base_type);
- gs_parse_tok_num = gs_parse_lex_n_dump();
+ gras_datadesc_parse_tok_num = gras_datadesc_parse_lex_n_dump();
}
/**** build the base type for latter use ****/
}
/* Let's code like Alvin ;) */
-#define gs_parse_get_or_create(name,func) \
+#define gras_datadesc_parse_get_or_create(name,func) \
(bag->bag_ops->get_type_by_name(bag, NULL, #name) ? \
bag->bag_ops->get_type_by_name(bag, NULL, #name) : \
gs_type_new_##func##_elemental(bag, NULL, \
} else if (tm.is_unsigned) {
if (!strcmp(base_type,"int")) {
if (tm.is_long == 2) {
- res = gs_parse_get_or_create(unsigned long long int,unsigned_integer);
+ res = gras_datadesc_parse_get_or_create(unsigned long long int,unsigned_integer);
} else if (tm.is_long) {
- res = gs_parse_get_or_create(unsigned long int,unsigned_integer);
+ res = gras_datadesc_parse_get_or_create(unsigned long int,unsigned_integer);
} else if (tm.is_short) {
- res = gs_parse_get_or_create(unsigned short int,unsigned_integer);
+ res = gras_datadesc_parse_get_or_create(unsigned short int,unsigned_integer);
} else {
- res = gs_parse_get_or_create(unsigned int,unsigned_integer);
+ res = gras_datadesc_parse_get_or_create(unsigned int,unsigned_integer);
}
} else if (!strcmp(base_type, "char")) {
- res = gs_parse_get_or_create(unsigned char,unsigned_integer);
+ res = gras_datadesc_parse_get_or_create(unsigned char,unsigned_integer);
} else { /* impossible, gcc parses this shit before us */
abort();
} else if (!strcmp(base_type, "float")) {
/* no modificator allowed by gcc */
- res = gs_parse_get_or_create(float,floating_point);
+ res = gras_datadesc_parse_get_or_create(float,floating_point);
} else { /* signed integer elemental */
if (!strcmp(base_type,"int")) {
if (tm.is_long == 2) {
- res = gs_parse_get_or_create(signed long long int,signed_integer);
+ res = gras_datadesc_parse_get_or_create(signed long long int,signed_integer);
} else if (tm.is_long) {
- res = gs_parse_get_or_create(signed long int,signed_integer);
+ res = gras_datadesc_parse_get_or_create(signed long int,signed_integer);
} else if (tm.is_short) {
- res = gs_parse_get_or_create(signed short int,signed_integer);
+ res = gras_datadesc_parse_get_or_create(signed short int,signed_integer);
} else {
- res = gs_parse_get_or_create(int,unsigned_integer);
+ res = gras_datadesc_parse_get_or_create(int,unsigned_integer);
}
} else if (!strcmp(base_type, "char")) {
- res = gs_parse_get_or_create(char,unsigned_integer);
+ res = gras_datadesc_parse_get_or_create(char,unsigned_integer);
} else { /* impossible */
abort();
expect_a_colon = 0;
for( /* no initialization */ ;
- ((gs_parse_tok_num != GS_PARSE_TOKEN_EMPTY) &&
- (gs_parse_tok_num != GS_PARSE_TOKEN_SEMI_COLON)) ;
+ ((gras_datadesc_parse_tok_num != GRAS_DATADESC_PARSE_TOKEN_EMPTY) &&
+ (gras_datadesc_parse_tok_num != GRAS_DATADESC_PARSE_TOKEN_SEMI_COLON)) ;
- gs_parse_tok_num = gs_parse_lex_n_dump() ) {
+ gras_datadesc_parse_tok_num = gras_datadesc_parse_lex_n_dump() ) {
if(expect_a_colon) {
- if(gs_parse_tok_num == GS_PARSE_TOKEN_COLON) {
+ if(gras_datadesc_parse_tok_num == GRAS_DATADESC_PARSE_TOKEN_COLON) {
expect_a_colon = 0;
continue;
} else {
fprintf(stderr,
"Unparsable symbol: Expected a comma (','), got '%s' instead. Definition was:\n%s\n",
- gs_parse_text, definition);
+ gras_datadesc_parse_text, definition);
abort();
}
- } else if(gs_parse_tok_num == GS_PARSE_TOKEN_COLON) {
+ } else if(gras_datadesc_parse_tok_num == GRAS_DATADESC_PARSE_TOKEN_COLON) {
fprintf(stderr,
"Unparsable symbol: Unexpected comma (','). Definition was:\n%s\n",
definition);
abort();
}
- if(gs_parse_tok_num == GS_PARSE_TOKEN_STAR) {
+ if(gras_datadesc_parse_tok_num == GRAS_DATADESC_PARSE_TOKEN_STAR) {
starred = 1;
}
/* found a symbol name. Build the type and push it to dynar */
- if(gs_parse_tok_num == GS_PARSE_TOKEN_WORD) {
+ if(gras_datadesc_parse_tok_num == GRAS_DATADESC_PARSE_TOKEN_WORD) {
if (starred) {
/* FIXME: Build a ref or array on the base type */
fprintf(stderr,
definition);
abort();
}
- DEBUG1("Encountered the variable (field?) %s",gs_parse_text);
+ DEBUG1("Encountered the variable (field?) %s",gras_datadesc_parse_text);
TRY(gras_dynar_push(*dynar, &gs_type_copy(base_type)));
starred = 0;
*/
/* Create the struct descriptor */
- if (gs_parse_tok_num == GS_PARSE_TOKEN_WORD) {
- struct_type = gs_type_new_struct(bag,NULL, gs_parse_text);
- DEBUG1("Parse the struct '%s'", gs_parse_text);
- gs_parse_tok_num = gs_parse_lex_n_dump();
+ if (gras_datadesc_parse_tok_num == GRAS_DATADESC_PARSE_TOKEN_WORD) {
+ struct_type = gs_type_new_struct(bag,NULL, gras_datadesc_parse_text);
+ DEBUG1("Parse the struct '%s'", gras_datadesc_parse_text);
+ gras_datadesc_parse_tok_num = gras_datadesc_parse_lex_n_dump();
} else {
sprintf(buffname,"anonymous struct %d",anonymous_struct++);
DEBUG1("Parse the anonymous struct nb %d", anonymous_struct);
struct_type = gs_type_new_struct(bag,NULL,buffname);
}
- if (gs_parse_tok_num != GS_PARSE_TOKEN_LP) {
+ if (gras_datadesc_parse_tok_num != GRAS_DATADESC_PARSE_TOKEN_LP) {
fprintf(stderr,
"Unparasable symbol: I looked for a struct definition, but got %s instead of '{'. The definition was:\n%s\n",
- gs_parse_text,definition);
+ gras_datadesc_parse_text,definition);
abort();
}
return NULL; /* FIXME: LEAK! */
/* terminates */
- if (gs_parse_tok_num != GS_PARSE_TOKEN_RP) {
+ if (gras_datadesc_parse_tok_num != GRAS_DATADESC_PARSE_TOKEN_RP) {
fprintf(stderr,
"Unparasable symbol: Expected '}' at the end of struct definition, got '%s'. The definition was:\n%s\n",
- gs_parse_text,definition);
+ gras_datadesc_parse_text,definition);
abort();
}
- gs_parse_tok_num = gs_parse_lex_n_dump();
+ gras_datadesc_parse_tok_num = gras_datadesc_parse_lex_n_dump();
gras_dynar_free(fields);
return struct_type;
}
/* get the aliasing name */
- if (gs_parse_tok_num != GS_PARSE_TOKEN_WORD) {
+ if (gras_datadesc_parse_tok_num != GRAS_DATADESC_PARSE_TOKEN_WORD) {
fprintf(stderr,
"Unparsable typedef: Expected the alias name, and got '%s'.\n%s\n",
- gs_parse_text,definition);
+ gras_datadesc_parse_text,definition);
abort();
}
fprintf(stderr, "Cannot handle typedef yet (need love from grassouillet), sorry. Definition was: \n%s\n",definition);
abort();
- // res=gs_type_new_typedef(bag, NULL, strdup(gs_parse_text) );
+ // res=gs_type_new_typedef(bag, NULL, strdup(gras_datadesc_parse_text) );
return typedef_desc;
}
/* init */
DEBUG1("_gs_type_parse(%s)",definition);
- gs_parse_pointer_string_init(definition);
+ gras_datadesc_parse_pointer_string_init(definition);
/* Do I have a typedef, or a raw struct ?*/
- gs_parse_tok_num = gs_parse_lex_n_dump();
+ gras_datadesc_parse_tok_num = gras_datadesc_parse_lex_n_dump();
- if ((gs_parse_tok_num == GS_PARSE_TOKEN_WORD) && (!strcmp(gs_parse_text,"struct"))) {
- gs_parse_tok_num = gs_parse_lex_n_dump();
+ if ((gras_datadesc_parse_tok_num == GRAS_DATADESC_PARSE_TOKEN_WORD) && (!strcmp(gras_datadesc_parse_text,"struct"))) {
+ gras_datadesc_parse_tok_num = gras_datadesc_parse_lex_n_dump();
res = parse_struct(bag,definition);
- } else if ((gs_parse_tok_num == GS_PARSE_TOKEN_WORD) && (!strcmp(gs_parse_text,"typedef"))) {
- gs_parse_tok_num = gs_parse_lex_n_dump();
+ } else if ((gras_datadesc_parse_tok_num == GRAS_DATADESC_PARSE_TOKEN_WORD) && (!strcmp(gras_datadesc_parse_text,"typedef"))) {
+ gras_datadesc_parse_tok_num = gras_datadesc_parse_lex_n_dump();
res = parse_typedef(bag,definition);
} else {
abort();
}
- gs_parse_pointer_string_close();
+ gras_datadesc_parse_pointer_string_close();
DEBUG1("end of _gs_type_parse(%s)",definition);
return res;