From 349c15058d1cb90d265edd34e015c77875ef8c81 Mon Sep 17 00:00:00 2001 From: parsons Date: Mon, 31 May 2010 20:50:00 +0000 Subject: ChangeLogTag: Mon May 31 20:48:24 UTC 2010 Jeff Parsons --- TAO/ChangeLog | 33 +++++++++++++ TAO/TAO_IDL/ast/ast_expression.cpp | 48 ++++++++++++++++++- TAO/TAO_IDL/ast/ast_generator.cpp | 36 ++++++++++++++- TAO/TAO_IDL/be/be_expression.cpp | 18 +++++++- TAO/TAO_IDL/be/be_generator.cpp | 36 ++++++++++++++- TAO/TAO_IDL/be/be_visitor_constant.cpp | 1 - TAO/TAO_IDL/be/be_visitor_constant/constant_ch.cpp | 1 - TAO/TAO_IDL/be_include/be_expression.h | 7 ++- TAO/TAO_IDL/be_include/be_generator.h | 8 +++- TAO/TAO_IDL/fe/idl.ll | 54 +++++++++++----------- TAO/TAO_IDL/fe/idl.yy | 3 +- TAO/TAO_IDL/fe/lex.yy.cpp | 52 ++++++++++----------- TAO/TAO_IDL/fe/y.tab.cpp | 7 ++- TAO/TAO_IDL/fe/y.tab.h | 4 +- TAO/TAO_IDL/include/ast_expression.h | 6 ++- TAO/TAO_IDL/include/ast_generator.h | 6 +++ TAO/tests/IDL_Test/constants.idl | 10 +++- TAO/tests/IDL_Test/including.idl | 2 +- TAO/tests/IDL_Test/main.cpp | 42 +++++++++++++++-- 19 files changed, 292 insertions(+), 82 deletions(-) diff --git a/TAO/ChangeLog b/TAO/ChangeLog index 26df173d153..d0e31fda8ff 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,3 +1,36 @@ +Mon May 31 20:48:24 UTC 2010 Jeff Parsons + + * TAO_IDL/include/ast_generator.h: + * TAO_IDL/include/ast_expression.h: + * TAO_IDL/be/be_expression.cpp: + * TAO_IDL/be/be_visitor_constant.cpp: + * TAO_IDL/be/be_visitor_constant/constant_ch.cpp: + * TAO_IDL/be/be_generator.cpp: + * TAO_IDL/ast/ast_expression.cpp: + * TAO_IDL/ast/ast_generator.cpp: + * TAO_IDL/be_include/be_generator.h: + * TAO_IDL/be_include/be_expression.h: + * TAO_IDL/fe/y.tab.cpp: + * TAO_IDL/fe/y.tab.h: + * TAO_IDL/fe/idl.yy: + * TAO_IDL/fe/lex.yy.cpp: + * TAO_IDL/fe/idl.ll: + + Changes to handling of signed/unsigned + long long integer literals. Values larger + than the 32-bit max were not generated + correctly. + + * tests/IDL_Test/main.cpp: + * tests/IDL_Test/including.idl: + * tests/IDL_Test/constants.idl: + + Added test case to IDL_Test, executable + checks correctness of generated values. + Thanks to Bogdan Jeram + for reporting the problem and sending in a + test example. + Mon May 31 20:34:36 UTC 2010 Jeff Parsons * TAO_IDL/be/be_visitor_union_branch/public_cs.cpp: diff --git a/TAO/TAO_IDL/ast/ast_expression.cpp b/TAO/TAO_IDL/ast/ast_expression.cpp index dbac1f291b6..9a366e7c4e1 100644 --- a/TAO/TAO_IDL/ast/ast_expression.cpp +++ b/TAO/TAO_IDL/ast/ast_expression.cpp @@ -255,6 +255,25 @@ AST_Expression::AST_Expression (ACE_CDR::Long lv) this->pd_ev->u.lval = lv; } +// An AST_Expression denoting a long integer. +AST_Expression::AST_Expression (ACE_CDR::LongLong llv) + : pd_ec (EC_none), + pd_ev (0), + pd_v1 (0), + pd_v2 (0), + pd_n (0), + tdef (0), + param_holder_ (0) +{ + this->fill_definition_details (); + + ACE_NEW (this->pd_ev, + AST_ExprValue); + + this->pd_ev->et = EV_longlong; + this->pd_ev->u.llval = llv; +} + // An AST_Expression denoting a boolean. AST_Expression::AST_Expression (ACE_CDR::Boolean b) : pd_ec (EC_none), @@ -293,6 +312,29 @@ AST_Expression::AST_Expression (ACE_CDR::ULong ulv) this->pd_ev->u.ulval = ulv; } +// An AST_Expression denoting an unsigned long long integer. +AST_Expression::AST_Expression (ACE_CDR::ULongLong ulv) + : pd_ec (EC_none), + pd_ev (0), + pd_v1 (0), + pd_v2 (0), + pd_n (0), + tdef (0), + param_holder_ (0) +{ + this->fill_definition_details (); + + ACE_NEW (this->pd_ev, + AST_ExprValue); + + this->pd_ev->et = EV_ulonglong; +#if defined (ACE_LACKS_LONGLONG_T) + this->pd_ev->u.ulval = ulv; +#else + this->pd_ev->u.ullval = ulv; +#endif +} + // An AST_Expression denoting an unsigned long integer. AST_Expression::AST_Expression (ACE_CDR::ULong ulv, ExprType t) @@ -927,7 +969,8 @@ coerce_value (AST_Expression::AST_ExprValue *ev, return 0; } - ev->u.llval = (ACE_CDR::LongLong) ev->u.ullval; + ev->u.llval = + static_cast (ev->u.ullval); ev->et = AST_Expression::EV_longlong; return ev; case AST_Expression::EV_bool: @@ -1015,7 +1058,8 @@ coerce_value (AST_Expression::AST_ExprValue *ev, return 0; } - ev->u.ullval = (ACE_CDR::LongLong) ev->u.llval; + ev->u.ullval = + static_cast (ev->u.llval); ev->et = AST_Expression::EV_ulonglong; return ev; case AST_Expression::EV_ulonglong: diff --git a/TAO/TAO_IDL/ast/ast_generator.cpp b/TAO/TAO_IDL/ast/ast_generator.cpp index fbc8b0d0e7d..4d9d631e449 100644 --- a/TAO/TAO_IDL/ast/ast_generator.cpp +++ b/TAO/TAO_IDL/ast/ast_generator.cpp @@ -715,6 +715,17 @@ AST_Generator::create_expr (ACE_CDR::Long v) return retval; } +AST_Expression * +AST_Generator::create_expr (ACE_CDR::LongLong l) +{ + AST_Expression *retval = 0; + ACE_NEW_RETURN (retval, + AST_Expression (l), + 0); + + return retval; +} + AST_Expression * AST_Generator::create_expr (ACE_CDR::Boolean b) { @@ -726,14 +737,35 @@ AST_Generator::create_expr (ACE_CDR::Boolean b) return retval; } +AST_Expression * +AST_Generator::create_expr (ACE_CDR::ULong v) +{ + AST_Expression *retval = 0; + ACE_NEW_RETURN (retval, + AST_Expression (v), + 0); + + return retval; +} + +AST_Expression * +AST_Generator::create_expr (ACE_CDR::ULongLong l) +{ + AST_Expression *retval = 0; + ACE_NEW_RETURN (retval, + AST_Expression (l), + 0); + + return retval; +} + AST_Expression * AST_Generator::create_expr (ACE_CDR::ULong v, AST_Expression::ExprType t) { AST_Expression *retval = 0; ACE_NEW_RETURN (retval, - AST_Expression (v, - t), + AST_Expression (v, t), 0); return retval; diff --git a/TAO/TAO_IDL/be/be_expression.cpp b/TAO/TAO_IDL/be/be_expression.cpp index 2802dc46423..70ec5f5fba2 100644 --- a/TAO/TAO_IDL/be/be_expression.cpp +++ b/TAO/TAO_IDL/be/be_expression.cpp @@ -42,15 +42,29 @@ be_expression::be_expression (ACE_CDR::Long l) { } +be_expression::be_expression (ACE_CDR::LongLong l) + : AST_Expression (l) +{ +} + be_expression::be_expression (ACE_CDR::Boolean b) : AST_Expression (b) { } +be_expression::be_expression (ACE_CDR::ULong l) + : AST_Expression (l) +{ +} + +be_expression::be_expression (ACE_CDR::ULongLong l) + : AST_Expression (l) +{ +} + be_expression::be_expression (ACE_CDR::ULong l, AST_Expression::ExprType t) - : AST_Expression (l, - t) + : AST_Expression (l, t) { } diff --git a/TAO/TAO_IDL/be/be_generator.cpp b/TAO/TAO_IDL/be/be_generator.cpp index a305a7e7ac3..c77240dc860 100644 --- a/TAO/TAO_IDL/be/be_generator.cpp +++ b/TAO/TAO_IDL/be/be_generator.cpp @@ -719,6 +719,17 @@ be_generator::create_expr (ACE_CDR::Long l) return retval; } +AST_Expression * +be_generator::create_expr (ACE_CDR::LongLong l) +{ + be_expression *retval = 0; + ACE_NEW_RETURN (retval, + be_expression (l), + 0); + + return retval; +} + AST_Expression * be_generator::create_expr (ACE_CDR::Boolean b) { @@ -730,14 +741,35 @@ be_generator::create_expr (ACE_CDR::Boolean b) return retval; } +AST_Expression * +be_generator::create_expr (ACE_CDR::ULong l) +{ + be_expression *retval = 0; + ACE_NEW_RETURN (retval, + be_expression (l), + 0); + + return retval; +} + +AST_Expression * +be_generator::create_expr (ACE_CDR::ULongLong l) +{ + be_expression *retval = 0; + ACE_NEW_RETURN (retval, + be_expression (l), + 0); + + return retval; +} + AST_Expression * be_generator::create_expr (ACE_CDR::ULong l, AST_Expression::ExprType t) { be_expression *retval = 0; ACE_NEW_RETURN (retval, - be_expression (l, - t), + be_expression (l, t), 0); return retval; diff --git a/TAO/TAO_IDL/be/be_visitor_constant.cpp b/TAO/TAO_IDL/be/be_visitor_constant.cpp index 1a9bf45abe7..b65bdc620ef 100644 --- a/TAO/TAO_IDL/be/be_visitor_constant.cpp +++ b/TAO/TAO_IDL/be/be_visitor_constant.cpp @@ -12,7 +12,6 @@ */ //============================================================================= - #include "be_constant.h" #include "be_module.h" #include "be_helper.h" diff --git a/TAO/TAO_IDL/be/be_visitor_constant/constant_ch.cpp b/TAO/TAO_IDL/be/be_visitor_constant/constant_ch.cpp index 4c78540881c..9dfca5fbe24 100644 --- a/TAO/TAO_IDL/be/be_visitor_constant/constant_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_constant/constant_ch.cpp @@ -12,7 +12,6 @@ */ //============================================================================= - // ******************************************************************** // Visitor implementation for the Constant type // This one for the client header file diff --git a/TAO/TAO_IDL/be_include/be_expression.h b/TAO/TAO_IDL/be_include/be_expression.h index 2888fbaaa7d..23053aee870 100644 --- a/TAO/TAO_IDL/be_include/be_expression.h +++ b/TAO/TAO_IDL/be_include/be_expression.h @@ -14,7 +14,6 @@ */ //============================================================================= - #ifndef BE_EXPRESSION_H #define BE_EXPRESSION_H @@ -37,8 +36,14 @@ public: be_expression (ACE_CDR::Long l); + be_expression (ACE_CDR::LongLong ll); + be_expression (ACE_CDR::Boolean b); + be_expression (ACE_CDR::ULong ul); + + be_expression (ACE_CDR::ULongLong ull); + be_expression (ACE_CDR::ULong l, AST_Expression::ExprType t); diff --git a/TAO/TAO_IDL/be_include/be_generator.h b/TAO/TAO_IDL/be_include/be_generator.h index 6146a363bd1..358ac3eb084 100644 --- a/TAO/TAO_IDL/be_include/be_generator.h +++ b/TAO/TAO_IDL/be_include/be_generator.h @@ -220,12 +220,18 @@ public: virtual AST_Expression *create_expr (ACE_CDR::Long v); + virtual AST_Expression *create_expr (ACE_CDR::LongLong v); + virtual AST_Expression *create_expr (ACE_CDR::Boolean b); + virtual AST_Expression *create_expr (ACE_CDR::ULong v); + + virtual AST_Expression *create_expr (ACE_CDR::ULongLong v); + virtual AST_Expression *create_expr (ACE_CDR::ULong v, AST_Expression::ExprType t); - virtual AST_Expression *create_expr( UTL_String *s); + virtual AST_Expression *create_expr (UTL_String *s); virtual AST_Expression *create_expr (char *s); diff --git a/TAO/TAO_IDL/fe/idl.ll b/TAO/TAO_IDL/fe/idl.ll index 40b16b774d5..b36c3ecf26f 100644 --- a/TAO/TAO_IDL/fe/idl.ll +++ b/TAO/TAO_IDL/fe/idl.ll @@ -89,17 +89,17 @@ trademarks or registered trademarks of Sun Microsystems, Inc. #include "fe_extern.h" #include "y.tab.h" -static char * idl_wstring_escape_reader (char *); -static ACE_CDR::WChar idl_wchar_escape_reader (char *); -static ACE_CDR::Char idl_escape_reader (char *); -static ACE_CDR::Double idl_atof (char *); -static ACE_CDR::Long idl_atoi (char *, long); -static ACE_CDR::ULong idl_atoui (char *, long); -static void idl_parse_line_and_file (char *); -static void idl_store_pragma (char *); -static char * idl_get_pragma_string (char *); -static bool idl_valid_version (char *); -static AST_Decl * idl_find_node (char *); +static char * idl_wstring_escape_reader (char *); +static ACE_CDR::WChar idl_wchar_escape_reader (char *); +static ACE_CDR::Char idl_escape_reader (char *); +static ACE_CDR::Double idl_atof (char *); +static ACE_CDR::LongLong idl_atoi (char *, long); +static ACE_CDR::ULongLong idl_atoui (char *, long); +static void idl_parse_line_and_file (char *); +static void idl_store_pragma (char *); +static char * idl_get_pragma_string (char *); +static bool idl_valid_version (char *); +static AST_Decl * idl_find_node (char *); #define ace_yytext yytext @@ -234,36 +234,36 @@ oneway return IDL_ONEWAY; } "-"?(([0-9]+"."[0-9]*)|("."[0-9]+))([eE][+-]?[0-9]+)?[lLfF]? { - yylval.dval = idl_atof(ace_yytext); + yylval.dval = idl_atof (ace_yytext); return IDL_FLOATING_PT_LITERAL; } "-"?[0-9]+[eE][+-]?[0-9]+[lLfF]? { - yylval.dval = idl_atof(ace_yytext); + yylval.dval = idl_atof (ace_yytext); return IDL_FLOATING_PT_LITERAL; } "-"[1-9][0-9]* { - yylval.ival = idl_atoi(ace_yytext, 10); + yylval.ival = idl_atoi (ace_yytext, 10); return IDL_INTEGER_LITERAL; } [1-9][0-9]* { - yylval.uival = idl_atoui(ace_yytext, 10); + yylval.uival = idl_atoui (ace_yytext, 10); return IDL_UINTEGER_LITERAL; } "-"0[xX][a-fA-F0-9]+ { - yylval.ival = idl_atoi(ace_yytext, 16); + yylval.ival = idl_atoi (ace_yytext, 16); return IDL_INTEGER_LITERAL; } 0[xX][a-fA-F0-9]+ { - yylval.uival = idl_atoui(ace_yytext, 16); + yylval.uival = idl_atoui (ace_yytext, 16); return IDL_UINTEGER_LITERAL; } "-"0[0-7]* { - yylval.ival = idl_atoi(ace_yytext, 8); + yylval.ival = idl_atoi (ace_yytext, 8); return IDL_INTEGER_LITERAL; } 0[0-7]* { - yylval.uival = idl_atoui(ace_yytext, 8); + yylval.uival = idl_atoui (ace_yytext, 8); return IDL_UINTEGER_LITERAL; } @@ -305,16 +305,16 @@ oneway return IDL_ONEWAY; } "'"\\([0-7]{1,3})"'" { // octal character constant - yylval.cval = idl_escape_reader(ace_yytext + 1); + yylval.cval = idl_escape_reader (ace_yytext + 1); return IDL_CHARACTER_LITERAL; } "'"\\[xX]([0-9a-fA-F]{1,2})"'" { // hexadecimal character constant - yylval.cval = idl_escape_reader(ace_yytext + 1); + yylval.cval = idl_escape_reader (ace_yytext + 1); return IDL_CHARACTER_LITERAL; } "'"\\."'" { - yylval.cval = idl_escape_reader(ace_yytext + 1); + yylval.cval = idl_escape_reader (ace_yytext + 1); return IDL_CHARACTER_LITERAL; } L"'"."'" { @@ -849,10 +849,10 @@ idl_store_pragma (char *buf) /* * idl_atoi - Convert a string of digits into a negative integer according to base b */ -static ACE_CDR::Long -idl_atoi(char *s, long b) +static ACE_CDR::LongLong +idl_atoi (char *s, long b) { - long r = 0; + ACE_CDR::LongLong r = ACE_CDR_LONGLONG_INITIALIZER; // Skip over the dash and possibly spaces after the dash while (*s == '-' || *s == ' ' || *s == '\t') @@ -895,10 +895,10 @@ idl_atoi(char *s, long b) /* * idl_atoui - Convert a string of digits into an unsigned integer according to base b */ -static ACE_CDR::ULong +static ACE_CDR::ULongLong idl_atoui(char *s, long b) { - ACE_CDR::ULong r = 0; + ACE_CDR::ULongLong r = 0; if (b == 8 && *s == '0') { diff --git a/TAO/TAO_IDL/fe/idl.yy b/TAO/TAO_IDL/fe/idl.yy index 7af14081bfe..36449a1f295 100644 --- a/TAO/TAO_IDL/fe/idl.yy +++ b/TAO/TAO_IDL/fe/idl.yy @@ -2173,8 +2173,7 @@ literal { // | IDL_UINTEGER_LITERAL $$ = - idl_global->gen ()->create_expr ($1, - AST_Expression::EV_ulonglong); + idl_global->gen ()->create_expr ($1); } | IDL_STRING_LITERAL { diff --git a/TAO/TAO_IDL/fe/lex.yy.cpp b/TAO/TAO_IDL/fe/lex.yy.cpp index 858fc9ef19d..810b098521e 100644 --- a/TAO/TAO_IDL/fe/lex.yy.cpp +++ b/TAO/TAO_IDL/fe/lex.yy.cpp @@ -1009,17 +1009,17 @@ trademarks or registered trademarks of Sun Microsystems, Inc. #include "fe_extern.h" #include "y.tab.h" -static char * idl_wstring_escape_reader (char *); -static ACE_CDR::WChar idl_wchar_escape_reader (char *); -static ACE_CDR::Char idl_escape_reader (char *); -static ACE_CDR::Double idl_atof (char *); -static ACE_CDR::Long idl_atoi (char *, long); -static ACE_CDR::ULong idl_atoui (char *, long); -static void idl_parse_line_and_file (char *); -static void idl_store_pragma (char *); -static char * idl_get_pragma_string (char *); -static bool idl_valid_version (char *); -static AST_Decl * idl_find_node (char *); +static char * idl_wstring_escape_reader (char *); +static ACE_CDR::WChar idl_wchar_escape_reader (char *); +static ACE_CDR::Char idl_escape_reader (char *); +static ACE_CDR::Double idl_atof (char *); +static ACE_CDR::LongLong idl_atoi (char *, long); +static ACE_CDR::ULongLong idl_atoui (char *, long); +static void idl_parse_line_and_file (char *); +static void idl_store_pragma (char *); +static char * idl_get_pragma_string (char *); +static bool idl_valid_version (char *); +static AST_Decl * idl_find_node (char *); #define ace_tao_yytext tao_yytext @@ -1623,56 +1623,56 @@ TAO_YY_RULE_SETUP case 75: TAO_YY_RULE_SETUP { - tao_yylval.dval = idl_atof(ace_tao_yytext); + tao_yylval.dval = idl_atof (ace_tao_yytext); return IDL_FLOATING_PT_LITERAL; } TAO_YY_BREAK case 76: TAO_YY_RULE_SETUP { - tao_yylval.dval = idl_atof(ace_tao_yytext); + tao_yylval.dval = idl_atof (ace_tao_yytext); return IDL_FLOATING_PT_LITERAL; } TAO_YY_BREAK case 77: TAO_YY_RULE_SETUP { - tao_yylval.ival = idl_atoi(ace_tao_yytext, 10); + tao_yylval.ival = idl_atoi (ace_tao_yytext, 10); return IDL_INTEGER_LITERAL; } TAO_YY_BREAK case 78: TAO_YY_RULE_SETUP { - tao_yylval.uival = idl_atoui(ace_tao_yytext, 10); + tao_yylval.uival = idl_atoui (ace_tao_yytext, 10); return IDL_UINTEGER_LITERAL; } TAO_YY_BREAK case 79: TAO_YY_RULE_SETUP { - tao_yylval.ival = idl_atoi(ace_tao_yytext, 16); + tao_yylval.ival = idl_atoi (ace_tao_yytext, 16); return IDL_INTEGER_LITERAL; } TAO_YY_BREAK case 80: TAO_YY_RULE_SETUP { - tao_yylval.uival = idl_atoui(ace_tao_yytext, 16); + tao_yylval.uival = idl_atoui (ace_tao_yytext, 16); return IDL_UINTEGER_LITERAL; } TAO_YY_BREAK case 81: TAO_YY_RULE_SETUP { - tao_yylval.ival = idl_atoi(ace_tao_yytext, 8); + tao_yylval.ival = idl_atoi (ace_tao_yytext, 8); return IDL_INTEGER_LITERAL; } TAO_YY_BREAK case 82: TAO_YY_RULE_SETUP { - tao_yylval.uival = idl_atoui(ace_tao_yytext, 8); + tao_yylval.uival = idl_atoui (ace_tao_yytext, 8); return IDL_UINTEGER_LITERAL; } TAO_YY_BREAK @@ -3335,10 +3335,10 @@ idl_store_pragma (char *buf) /* * idl_atoi - Convert a string of digits into a negative integer according to base b */ -static ACE_CDR::Long -idl_atoi(char *s, long b) +static ACE_CDR::LongLong +idl_atoi (char *s, long b) { - long r = 0; + ACE_CDR::LongLong r = ACE_CDR_LONGLONG_INITIALIZER; // Skip over the dash and possibly spaces after the dash while (*s == '-' || *s == ' ' || *s == '\t') @@ -3381,11 +3381,11 @@ idl_atoi(char *s, long b) /* * idl_atoui - Convert a string of digits into an unsigned integer according to base b */ -static ACE_CDR::ULong -idl_atoui(char *s, long b) +static ACE_CDR::ULongLong +idl_atoui (char *s, long b) { - ACE_CDR::ULong r = 0; - + ACE_CDR::ULongLong r = 0; + if (b == 8 && *s == '0') { ++s; diff --git a/TAO/TAO_IDL/fe/y.tab.cpp b/TAO/TAO_IDL/fe/y.tab.cpp index 4034958b887..9230691d5ce 100644 --- a/TAO/TAO_IDL/fe/y.tab.cpp +++ b/TAO/TAO_IDL/fe/y.tab.cpp @@ -357,8 +357,8 @@ typedef union TAO_YYSTYPE AST_Operation::Flags ofval; /* Operation flags */ FE_Declarator *deval; /* Declarator value */ ACE_CDR::Boolean bval; /* Boolean value */ - ACE_CDR::Long ival; /* Long value */ - ACE_CDR::ULong uival; /* Unsigned long value */ + ACE_CDR::LongLong ival; /* Long value */ + ACE_CDR::ULongLong uival; /* Unsigned long value */ ACE_CDR::Double dval; /* Double value */ ACE_CDR::Float fval; /* Float value */ ACE_CDR::Char cval; /* Char value */ @@ -4631,8 +4631,7 @@ tao_yyreduce: { // | IDL_UINTEGER_LITERAL (tao_yyval.exval) = - idl_global->gen ()->create_expr ((tao_yyvsp[(1) - (1)].uival), - AST_Expression::EV_ulonglong); + idl_global->gen ()->create_expr ((tao_yyvsp[(1) - (1)].uival)); } break; diff --git a/TAO/TAO_IDL/fe/y.tab.h b/TAO/TAO_IDL/fe/y.tab.h index 2e7576bdf7c..be9a457180d 100644 --- a/TAO/TAO_IDL/fe/y.tab.h +++ b/TAO/TAO_IDL/fe/y.tab.h @@ -234,8 +234,8 @@ typedef union TAO_YYSTYPE AST_Operation::Flags ofval; /* Operation flags */ FE_Declarator *deval; /* Declarator value */ ACE_CDR::Boolean bval; /* Boolean value */ - ACE_CDR::Long ival; /* Long value */ - ACE_CDR::ULong uival; /* Unsigned long value */ + ACE_CDR::LongLong ival; /* Long value */ + ACE_CDR::ULongLong uival; /* Unsigned long value */ ACE_CDR::Double dval; /* Double value */ ACE_CDR::Float fval; /* Float value */ ACE_CDR::Char cval; /* Char value */ diff --git a/TAO/TAO_IDL/include/ast_expression.h b/TAO/TAO_IDL/include/ast_expression.h index b3cc116b91e..70f49839ca0 100644 --- a/TAO/TAO_IDL/include/ast_expression.h +++ b/TAO/TAO_IDL/include/ast_expression.h @@ -168,9 +168,7 @@ public: ACE_CDR::Long lval; // Contains long expression value. ACE_CDR::ULong ulval; // Contains unsigned long expr value. ACE_CDR::Boolean bval; // Contains boolean expression value. -#if ! defined (ACE_LACKS_LONGLONG_T) ACE_CDR::LongLong llval; // Contains long long expr value. -#endif /* ! defined (ACE_LACKS_LONGLONG_T) */ #if defined (ACE_LACKS_UNSIGNEDLONGLONG_T) && ! defined (ACE_LACKS_LONGLONG_T) ACE_CDR::LongLong ullval; // Contains unsigned long long expr value #elif ! defined (ACE_LACKS_LONGLONG_T) @@ -204,11 +202,15 @@ public: AST_Expression (ACE_CDR::UShort us); AST_Expression (ACE_CDR::Long l); + + AST_Expression (ACE_CDR::LongLong ll); AST_Expression (ACE_CDR::Boolean b); AST_Expression (ACE_CDR::ULong ul); + AST_Expression (ACE_CDR::ULongLong ull); + AST_Expression (ACE_CDR::ULong, ExprType t); diff --git a/TAO/TAO_IDL/include/ast_generator.h b/TAO/TAO_IDL/include/ast_generator.h index 291dd6efabc..bc8e6dda13d 100644 --- a/TAO/TAO_IDL/include/ast_generator.h +++ b/TAO/TAO_IDL/include/ast_generator.h @@ -299,8 +299,14 @@ public: virtual AST_Expression *create_expr (ACE_CDR::Long v); + virtual AST_Expression *create_expr (ACE_CDR::LongLong v); + virtual AST_Expression *create_expr (ACE_CDR::Boolean b); + virtual AST_Expression *create_expr (ACE_CDR::ULong v); + + virtual AST_Expression *create_expr (ACE_CDR::ULongLong v); + virtual AST_Expression *create_expr (ACE_CDR::ULong v, AST_Expression::ExprType t); diff --git a/TAO/tests/IDL_Test/constants.idl b/TAO/tests/IDL_Test/constants.idl index 8716634da3d..a5ba3bc4f4d 100644 --- a/TAO/tests/IDL_Test/constants.idl +++ b/TAO/tests/IDL_Test/constants.idl @@ -19,7 +19,6 @@ // // ============================================================================ - const string all_escape = "\n\t\v\b\r\f\a\\\?\'\""; const char tick = '\''; @@ -51,11 +50,18 @@ const char max_char_hex = '\xff'; // const wstring wstr = L"wstr"; // unsigned longs greater than LONG_MAX - const unsigned long in_range = 3222111000; const unsigned long max_ulong_oct = 037777777777; const unsigned long max_ulong_hex = 0XFFFFFFFF; +// Testing 64-bit integers. The executable will +// verify that the generated values are correct. +const unsigned long long AAA = 122192928000000000; +const unsigned long AA = 3538947897; +const long long NAAA = -122192928000000000; +const long long PAAA = 122192928000000000; +const long NAA = -1538947897; + // various uncommon but legal formats for floats and doubles const float root_beer = .2; diff --git a/TAO/tests/IDL_Test/including.idl b/TAO/tests/IDL_Test/including.idl index 5b0d601d69f..ef47816effb 100644 --- a/TAO/tests/IDL_Test/including.idl +++ b/TAO/tests/IDL_Test/including.idl @@ -88,7 +88,7 @@ struct TestStr A::MyStructA field; }; -union TestUnion switch (long) +union TestUn switch (long) { case 0: A::MyStructA value1; case 1: string value2; diff --git a/TAO/tests/IDL_Test/main.cpp b/TAO/tests/IDL_Test/main.cpp index e020f04c1d5..91bebd23bd6 100644 --- a/TAO/tests/IDL_Test/main.cpp +++ b/TAO/tests/IDL_Test/main.cpp @@ -9,9 +9,8 @@ // main.cpp // // = DESCRIPTION -// The only things that needs to be tested in execution -// are the pragma prefixes generated in pragma.idl, so -// we check them here. The rest needs only to build cleanly +// We test the pragma prefixes generated in pragma.idl, and +// the values of some generated constants in constants.idl. // // = AUTHORS // Jeff Parsons @@ -80,7 +79,8 @@ class schmegegging_i : public virtual gleep::schmegegging { }; -struct something_handler : public POA_bug_1985_c::d::AMI_somethingHandler +struct something_handler + : public POA_bug_1985_c::d::AMI_somethingHandler { }; @@ -88,7 +88,41 @@ int ACE_TMAIN(int argc, ACE_TCHAR *argv[]) { int error_count = 0; + + const ACE_CDR::ULongLong test_ull = + ACE_UINT64_LITERAL (122192928000000000); + + if (test_ull != AAA) + { + ++error_count; + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Generated value of unsigned") + ACE_TEXT (" long long AAA in constants.idl") + ACE_TEXT (" is incorrect\n"))); + } + + const CORBA::LongLong test_nll = ACE_INT64_LITERAL (-122192928000000000); + if (test_nll != NAAA) + { + ++error_count; + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Generated value of signed") + ACE_TEXT (" long long NAAA in constants.idl") + ACE_TEXT (" is incorrect\n"))); + } + + const CORBA::LongLong test_pll = ACE_INT64_LITERAL (122192928000000000); + + if (test_pll != PAAA) + { + ++error_count; + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Generated value of signed") + ACE_TEXT (" long long PAAA in constants.idl") + ACE_TEXT (" is incorrect\n"))); + } + try { CORBA::ORB_var orb = CORBA::ORB_init (argc, -- cgit v1.2.1