Added stub for storage class specification
This commit is contained in:
parent
937a4588ec
commit
84a6922824
@ -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 */
|
||||
int code_context_set_identifier(Code * code, char const * identifier)
|
||||
{
|
||||
|
21
src/code.h
21
src/code.h
@ -67,6 +67,26 @@ typedef enum _CodeStorage
|
||||
# define CODE_STORAGE_LAST CODE_STORAGE_REGISTER
|
||||
# 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 */
|
||||
Code * code_new(C99Prefs const * prefs, char const * outfile);
|
||||
@ -76,6 +96,7 @@ int code_delete(Code * code);
|
||||
/* context */
|
||||
CodeContext code_context_get(Code * code);
|
||||
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_storage(Code * code, CodeStorage storage);
|
||||
|
||||
|
57
src/parser.c
57
src/parser.c
@ -18,6 +18,7 @@
|
||||
|
||||
|
||||
|
||||
#include <assert.h>
|
||||
#include <unistd.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
@ -438,17 +439,61 @@ static int _type_specifier(C99 * c99)
|
||||
* | _Bool | _Complex | _Imaginary | struct-or-union-specifier
|
||||
* | enum-specifier | typedef-name */
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
CodeClass cclass;
|
||||
|
||||
DEBUG_GRAMMAR();
|
||||
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))
|
||||
ret = _enum_specifier(c99);
|
||||
return _enum_specifier(c99);
|
||||
else if(_parse_in_set(c99, c99set_typedef_name))
|
||||
ret = _typedef_name(c99);
|
||||
else
|
||||
ret = scan(c99);
|
||||
return _typedef_name(c99);
|
||||
switch(_parse_get_code(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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user