allow defaults everywhere

This commit is contained in:
David Rose 2004-07-02 00:54:54 +00:00
parent d264437d91
commit 842dd7bf26
3 changed files with 626 additions and 541 deletions

View File

@ -753,6 +753,20 @@ write(ostream &out, bool brief, int indent_level) const {
Fields::const_iterator fi;
for (fi = _fields.begin(); fi != _fields.end(); ++fi) {
(*fi)->write(out, brief, indent_level + 2);
/*
if (true || (*fi)->has_default_value()) {
indent(out, indent_level + 2) << "// = ";
DCPacker packer;
packer.set_unpack_data((*fi)->get_default_value());
packer.begin_unpack(*fi);
packer.unpack_and_format(out);
if (!packer.end_unpack()) {
out << "<error>";
}
out << "\n";
}
*/
}
indent(out, indent_level) << "};\n";

File diff suppressed because it is too large Load Diff

View File

@ -132,7 +132,10 @@ dc_cleanup_parser() {
%type <u.parameter> type_definition
%type <u.parameter> named_parameter
%type <u.parameter> unnamed_parameter
%type <u.parameter> named_parameter_with_default
%type <u.parameter> unnamed_parameter_with_default
%type <u.parameter> parameter
%type <u.parameter> parameter_with_default
%type <u.parameter> parameter_definition
%type <str> import_identifier
%type <str> slash_identifier
@ -223,7 +226,7 @@ import_symbol_list:
;
typedef_decl:
KW_TYPEDEF parameter
KW_TYPEDEF parameter_with_default
{
DCTypedef *dtypedef = new DCTypedef($2);
@ -311,12 +314,12 @@ dclass_field:
$$->set_flags($2);
}
| molecular_field
| unnamed_parameter server_flags ';'
| unnamed_parameter_with_default server_flags ';'
{
$$ = $1;
$$->set_flags($2);
}
| named_parameter server_flags
| named_parameter_with_default server_flags
{
$$ = $1;
$$->set_flags($2);
@ -387,11 +390,11 @@ struct_fields:
struct_field:
atomic_field
| molecular_field
| unnamed_parameter ';'
| unnamed_parameter_with_default ';'
{
$$ = $1;
}
| named_parameter
| named_parameter_with_default
{
$$ = $1;
}
@ -421,31 +424,9 @@ nonempty_parameter_list:
;
atomic_element:
parameter
parameter_with_default
{
current_atomic->add_element($1);
}
| parameter '='
{
current_packer = &default_packer;
current_packer->clear_data();
current_packer->begin_pack($1);
}
parameter_value
{
bool is_valid = $1->is_valid();
if (current_packer->end_pack()) {
$1->set_default_value(current_packer->get_string());
} else {
if (is_valid) {
yyerror("Invalid default value for type");
}
// If the current parameter isn't valid, we don't mind a pack
// error (there's no way for us to validate the syntax). So we'll
// just ignore the default value in this case.
}
current_atomic->add_element($1);
}
;
@ -464,11 +445,66 @@ unnamed_parameter:
type_definition
;
named_parameter_with_default:
named_parameter
| named_parameter '='
{
current_packer = &default_packer;
current_packer->clear_data();
current_packer->begin_pack($1);
}
parameter_value
{
bool is_valid = $1->is_valid();
if (current_packer->end_pack()) {
$1->set_default_value(current_packer->get_string());
} else {
if (is_valid) {
yyerror("Invalid default value for type");
}
// If the current parameter isn't valid, we don't mind a pack
// error (there's no way for us to validate the syntax). So we'll
// just ignore the default value in this case.
}
}
;
unnamed_parameter_with_default:
unnamed_parameter
| unnamed_parameter '='
{
current_packer = &default_packer;
current_packer->clear_data();
current_packer->begin_pack($1);
}
parameter_value
{
bool is_valid = $1->is_valid();
if (current_packer->end_pack()) {
$1->set_default_value(current_packer->get_string());
} else {
if (is_valid) {
yyerror("Invalid default value for type");
}
// If the current parameter isn't valid, we don't mind a pack
// error (there's no way for us to validate the syntax). So we'll
// just ignore the default value in this case.
}
}
;
parameter:
named_parameter
| unnamed_parameter
;
parameter_with_default:
named_parameter_with_default
| unnamed_parameter_with_default
;
type_name:
type_token
{
@ -1052,11 +1088,11 @@ switch_case:
;
switch_field:
unnamed_parameter ';'
unnamed_parameter_with_default ';'
{
$$ = $1;
}
| named_parameter
| named_parameter_with_default
{
$$ = $1;
}