[eros-cvs] cvs commit: eros/src/base/cross/bin/capidl SymTab.cxx SymTab.hxx gram.y test-input
shap@eros.cs.jhu.edu
shap@eros.cs.jhu.edu
Sun, 1 Apr 2001 16:48:06 -0400
shap 01/04/01 16:48:06
Modified: src/base/cross/bin/capidl SymTab.cxx SymTab.hxx gram.y
test-input
Log:
Check in the current status of CapIDL
Revision Changes Path
1.6 +6 -0 eros/src/base/cross/bin/capidl/SymTab.cxx
Index: SymTab.cxx
===================================================================
RCS file: /cvs/eros/src/base/cross/bin/capidl/SymTab.cxx,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SymTab.cxx 2001/01/31 23:00:48 1.5
+++ SymTab.cxx 2001/04/01 20:48:06 1.6
@@ -467,6 +467,11 @@
Diag::printf("<exception \"%s\">", name.str());
break;
}
+ case sc_caseTag:
+ {
+ Diag::printf("<caseTag \"%s\">", name.str());
+ break;
+ }
default:
{
Diag::printf("UNKNOWN/BAD SYMBOL TYPE %d FOR: %s", cls, name.str());
@@ -488,6 +493,7 @@
switch(cls){
case sc_enum:
case sc_Scope:
+ case sc_switch:
{
for(Symbol *child = children; child; child = child->next)
child->DumpTree(indent + 2);
1.7 +2 -0 eros/src/base/cross/bin/capidl/SymTab.hxx
Index: SymTab.hxx
===================================================================
RCS file: /cvs/eros/src/base/cross/bin/capidl/SymTab.hxx,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- SymTab.hxx 2001/01/31 23:00:48 1.6
+++ SymTab.hxx 2001/04/01 20:48:06 1.7
@@ -62,6 +62,8 @@
sc_outformal, /* OUT formal parameter name */
sc_exception, /* exception name */
sc_interface, /* interface name */
+ sc_switch, /* switch scope */
+ sc_caseTag, /* case discriminator */
};
struct Symbol {
1.8 +41 -4 eros/src/base/cross/bin/capidl/gram.y
Index: gram.y
===================================================================
RCS file: /cvs/eros/src/base/cross/bin/capidl/gram.y,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- gram.y 2001/01/31 23:00:48 1.7
+++ gram.y 2001/04/01 20:48:06 1.8
@@ -159,6 +159,8 @@
%type <NONE> top_definition
%type <NONE> mod_definitions
%type <NONE> mod_definition
+%type <NONE> case_definitions
+%type <NONE> case_definition
%type <NONE> if_definitions
%type <NONE> if_definition
%type <tok> name_def
@@ -551,8 +553,15 @@
| members member
;
+/*SHAP: top_definition /* defines a name inside this scope */
member:
- top_definition /* defines a name inside this scope */
+ struct_dcl ';' // a struct
+ | union_dcl ';' // a discriminated union
+ | enum_dcl ';' // a set of const unsigneds
+ | TYPEDEF type name_def ';' // names a type
+ | TYPEDEF name_def ';' // forward declaration
+ | const_dcl ';' // constant value
+ | repr_dcl ';' // advises on representation
| type name_def ';' /* defines an actual member (ie, field) */ {
Symbol *sym = Symbol::create($2.is, sc_member);
if (sym == 0) {
@@ -654,17 +663,45 @@
* possible scoping rule resolutions.
*/
case:
- case_labels top_definitions element_dcl
+ case_labels case_definitions element_dcl
;
+case_definitions:
+ /* empty */ {}
+ | case_definitions case_definition
+ ;
+
+case_definition:
+ struct_dcl ';' // a struct
+ | union_dcl ';' // a discriminated union
+ | enum_dcl ';' // a set of const unsigneds
+ | TYPEDEF type name_def ';' // names a type
+ | TYPEDEF name_def ';' // forward declaration
+ | const_dcl ';' // constant value
+ | repr_dcl ';' // advises on representation
+
case_labels:
case_label
| case_labels case_label
;
case_label:
- CASE const_expr ':'
- | DEFAULT ':'
+ CASE const_expr ':' {
+ char *s = mpz_get_str(NULL, 10, $2->v.i);
+ Symbol *sym = Symbol::create(s, sc_caseTag);
+ if (sym == 0) {
+ Diag::printf("%s:%d: syntax error -- identifier reused\n",
+ current_file.str(), current_line);
+ }
+ delete s;
+ }
+ | DEFAULT ':' {
+ Symbol *sym = Symbol::create(".default:", sc_caseTag);
+ if (sym == 0) {
+ Diag::printf("%s:%d: syntax error -- identifier reused\n",
+ current_file.str(), current_line);
+ }
+ }
;
element_dcl:
1.4 +6 -0 eros/src/base/cross/bin/capidl/test-input
Index: test-input
===================================================================
RCS file: /cvs/eros/src/base/cross/bin/capidl/test-input,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- test-input 2001/01/25 03:30:20 1.3
+++ test-input 2001/04/01 20:48:06 1.4
@@ -15,3 +15,9 @@
const integer kt = min ( integer<32> );
exception RC_RequestError ;
+
+union fred {
+ switch (int sw) {
+ case 0: int i;
+ };
+};