Added stub for storage class specification

This commit is contained in:
Pierre Pronchery 2008-06-12 23:44:35 +00:00
parent 937a4588ec
commit 84a6922824
3 changed files with 80 additions and 6 deletions

View File

@ -403,6 +403,14 @@ int code_context_set(Code * code, CodeContext context)
} }
/* code_context_set_class */
int code_context_set_class(Code * code, CodeClass cclass)
{
/* FIXME implement */
return 0;
}
/* code_context_set_identifier */ /* code_context_set_identifier */
int code_context_set_identifier(Code * code, char const * identifier) int code_context_set_identifier(Code * code, char const * identifier)
{ {

View File

@ -67,6 +67,26 @@ typedef enum _CodeStorage
# define CODE_STORAGE_LAST CODE_STORAGE_REGISTER # define CODE_STORAGE_LAST CODE_STORAGE_REGISTER
# define CODE_STORAGE_COUNT (CODE_STORAGE_LAST + 1) # define CODE_STORAGE_COUNT (CODE_STORAGE_LAST + 1)
typedef enum _CodeClass
{
CODE_CLASS_NULL = 0x0000,
CODE_CLASS_VOID = 0x0001,
CODE_CLASS_CHAR = 0x0002,
CODE_CLASS_SHORT = 0x0004,
CODE_CLASS_INT = 0x0008,
CODE_CLASS_LONG = 0x0010,
CODE_CLASS_LONG_LONG = 0x0020,
CODE_CLASS_FLOAT = 0x0040,
CODE_CLASS_DOUBLE = 0x0080,
CODE_CLASS_SIGNED = 0x0100,
CODE_CLASS_UNSIGNED = 0x0200,
CODE_CLASS__BOOL = 0x0400,
CODE_CLASS__COMPLEX = 0x0800,
CODE_CLASS__IMAGINARY = 0x1000
} CodeClass;
# define CODE_CLASS_LAST CODE_CLASS__IMAGINARY
# define CODE_CLASS_COUNT (CODE_CLASS_LAST + 1)
/* functions */ /* functions */
Code * code_new(C99Prefs const * prefs, char const * outfile); Code * code_new(C99Prefs const * prefs, char const * outfile);
@ -76,6 +96,7 @@ int code_delete(Code * code);
/* context */ /* context */
CodeContext code_context_get(Code * code); CodeContext code_context_get(Code * code);
int code_context_set(Code * code, CodeContext context); int code_context_set(Code * code, CodeContext context);
int code_context_set_class(Code * code, CodeClass cclass);
int code_context_set_identifier(Code * code, char const * identifier); int code_context_set_identifier(Code * code, char const * identifier);
int code_context_set_storage(Code * code, CodeStorage storage); int code_context_set_storage(Code * code, CodeStorage storage);

View File

@ -18,6 +18,7 @@
#include <assert.h>
#include <unistd.h> #include <unistd.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdlib.h> #include <stdlib.h>
@ -438,17 +439,61 @@ static int _type_specifier(C99 * c99)
* | _Bool | _Complex | _Imaginary | struct-or-union-specifier * | _Bool | _Complex | _Imaginary | struct-or-union-specifier
* | enum-specifier | typedef-name */ * | enum-specifier | typedef-name */
{ {
int ret; int ret = 0;
CodeClass cclass;
DEBUG_GRAMMAR(); DEBUG_GRAMMAR();
if(_parse_in_set(c99, c99set_struct_or_union_specifier)) if(_parse_in_set(c99, c99set_struct_or_union_specifier))
ret = _struct_or_union_specifier(c99); return _struct_or_union_specifier(c99);
else if(_parse_in_set(c99, c99set_enum_specifier)) else if(_parse_in_set(c99, c99set_enum_specifier))
ret = _enum_specifier(c99); return _enum_specifier(c99);
else if(_parse_in_set(c99, c99set_typedef_name)) else if(_parse_in_set(c99, c99set_typedef_name))
ret = _typedef_name(c99); return _typedef_name(c99);
else switch(_parse_get_code(c99))
ret = scan(c99); {
case C99_CODE_KEYWORD_VOID:
cclass = CODE_CLASS_VOID;
break;
case C99_CODE_KEYWORD_CHAR:
cclass = CODE_CLASS_CHAR;
break;
case C99_CODE_KEYWORD_SHORT:
cclass = CODE_CLASS_SHORT;
break;
case C99_CODE_KEYWORD_INT:
cclass = CODE_CLASS_INT;
break;
case C99_CODE_KEYWORD_LONG:
cclass = CODE_CLASS_LONG;
break;
case C99_CODE_KEYWORD_FLOAT:
cclass = CODE_CLASS_FLOAT;
break;
case C99_CODE_KEYWORD_DOUBLE:
cclass = CODE_CLASS_DOUBLE;
break;
case C99_CODE_KEYWORD_SIGNED:
cclass = CODE_CLASS_SIGNED;
break;
case C99_CODE_KEYWORD_UNSIGNED:
cclass = CODE_CLASS_UNSIGNED;
break;
case C99_CODE_KEYWORD__BOOL:
cclass = CODE_CLASS__BOOL;
break;
case C99_CODE_KEYWORD__COMPLEX:
cclass = CODE_CLASS__COMPLEX;
break;
case C99_CODE_KEYWORD__IMAGINARY:
cclass = CODE_CLASS__IMAGINARY;
break;
default:
assert(0);
break;
}
if((ret = code_context_set_class(c99->code, cclass)) != 0)
_parse_error(c99, error_get());
ret |= scan(c99);
return ret; return ret;
} }