Fix problem with generated consts in .h files for OS/2 - also handle the internal const value more sensibly, and lose wrong 'is_long' distinction.

Thanks to Henry Sobotka <sobotka@axess.com> for finding this problem and suggesting a fix.

r=mccabe
This commit is contained in:
mccabe%netscape.com 2000-01-18 05:16:48 +00:00
parent 25576d106c
commit 3924a1c44a

View File

@ -516,7 +516,7 @@ do_const_dcl(TreeState *state)
{ {
struct _IDL_CONST_DCL *dcl = &IDL_CONST_DCL(state->tree); struct _IDL_CONST_DCL *dcl = &IDL_CONST_DCL(state->tree);
const char *name = IDL_IDENT(dcl->ident).str; const char *name = IDL_IDENT(dcl->ident).str;
gboolean success, is_signed, is_long; gboolean success, is_signed;
/* const -> list -> interface */ /* const -> list -> interface */
if (!IDL_NODE_UP(IDL_NODE_UP(state->tree)) || if (!IDL_NODE_UP(IDL_NODE_UP(state->tree)) ||
@ -529,27 +529,22 @@ do_const_dcl(TreeState *state)
} }
success = (IDLN_TYPE_INTEGER == IDL_NODE_TYPE(dcl->const_type)); success = (IDLN_TYPE_INTEGER == IDL_NODE_TYPE(dcl->const_type));
if(success) { if (success) {
switch(IDL_TYPE_INTEGER(dcl->const_type).f_type) { switch(IDL_TYPE_INTEGER(dcl->const_type).f_type) {
case IDL_INTEGER_TYPE_SHORT: case IDL_INTEGER_TYPE_SHORT:
is_long = FALSE;
break;
case IDL_INTEGER_TYPE_LONG: case IDL_INTEGER_TYPE_LONG:
is_long = TRUE;
break; break;
default: default:
success = FALSE; success = FALSE;
break;
} }
is_signed = IDL_TYPE_INTEGER(dcl->const_type).f_signed; is_signed = IDL_TYPE_INTEGER(dcl->const_type).f_signed;
} }
if(success) { if (success) {
const char *const_format = const char *const_format = is_signed ? "%" IDL_LL "d" : "%" IDL_LL "u";
is_long ? (is_signed ? "%ld" : "%lu")
: (is_signed ? "%d" : "%u");
fprintf(state->file, "\n enum { %s = ", name); fprintf(state->file, "\n enum { %s = ", name);
fprintf(state->file, const_format, fprintf(state->file, const_format, IDL_INTEGER(dcl->const_exp).value);
(int)IDL_INTEGER(dcl->const_exp).value);
fprintf(state->file, " };\n"); fprintf(state->file, " };\n");
} else { } else {
IDL_tree_error(state->tree, IDL_tree_error(state->tree,