* ILParser.jay: Implement label form structured exception handling.
authorJackson Harper <jackson@novell.com>
Fri, 23 May 2003 07:29:15 +0000 (07:29 -0000)
committerJackson Harper <jackson@novell.com>
Fri, 23 May 2003 07:29:15 +0000 (07:29 -0000)
svn path=/trunk/mcs/; revision=14828

mcs/ilasm/parser/ChangeLog
mcs/ilasm/parser/ILParser.jay

index d53681cb4ce205a1b692636e13f4ffb2972e932f..b617b35b500d6cb994ca33a8c03c40ed4966f8e0 100644 (file)
@@ -1,3 +1,7 @@
+2003-05-23 Jackson Harper <jackson@latitudegeo.com>
+
+       * ILParser.jay: Implement label form structured exception handling.
+               
 2003-05-22 Jackson Harper <jackson@latitudegeo.com>
 
        * ILParser.jay: Comment out K_IMF and K_NAN these are not used in
index 1a3d54423f820c542ad93706e32422bc8d16e732..9c1965356841348ffba9174a23a9693f44e748d2 100644 (file)
@@ -1548,30 +1548,85 @@ scope_block             : OPEN_BRACE method_decls CLOSE_BRACE
                        ;\r
 \r
 seh_block              : try_block seh_clauses\r
+                          {\r
+                                Console.WriteLine ($1);\r
+                                Console.WriteLine ($2);\r
+                                TryBlock try_block = (TryBlock) $1;\r
+                                try_block.SetMethod (codegen.CurrentMethodDef);\r
+\r
+                                ArrayList clause_list = (ArrayList) $2;\r
+                                foreach (object clause in clause_list) {\r
+                                        Console.WriteLine ("clause:  " + clause);\r
+                                        try_block.AddSehClause ((ISehClause) clause);\r
+                                }\r
+\r
+                                codegen.CurrentMethodDef.AddInstr (try_block);\r
+                          }\r
                        ;\r
 \r
 try_block              : D_TRY scope_block\r
                        | D_TRY id K_TO id\r
+                          {\r
+                                $$ = new TryBlock ((string) $2, (string) $4);\r
+                          }\r
                        | D_TRY int32 K_TO int32\r
                        ;\r
 \r
 seh_clauses            : seh_clause\r
+                          {\r
+                                ArrayList clause_list = new ArrayList ();\r
+                                clause_list.Add ($1);\r
+                                $$ = clause_list;\r
+                          }\r
                        | seh_clauses seh_clause\r
+                          {\r
+                                ArrayList clause_list = (ArrayList) $1;\r
+                                clause_list.Add ($2);\r
+                          }\r
                        ;\r
 \r
 seh_clause             : K_CATCH class_ref handler_block\r
+                          {\r
+                                Console.WriteLine ($2);\r
+                                Console.WriteLine ($3);\r
+                                ITypeRef type = (ITypeRef) $2;\r
+                                CatchBlock cb = new CatchBlock (type.AsClassRef (codegen));\r
+                                cb.SetHandlerBlock ((HandlerBlock) $3);\r
+                                $$ = cb;\r
+                          }\r
                        | K_FINALLY handler_block\r
+                          {\r
+                                FinallyBlock fb = new FinallyBlock ();\r
+                                fb.SetHandlerBlock ((HandlerBlock) $2);\r
+                                $$ = fb;\r
+                          }\r
                        | K_FAULT handler_block\r
+                          {\r
+                                FaultBlock fb = new FaultBlock ();\r
+                                fb.SetHandlerBlock ((HandlerBlock) $2);\r
+                                $$ = fb;\r
+                          }\r
                        | filter_clause handler_block\r
+                          {\r
+                                FilterBlock fb = (FilterBlock) $1;\r
+                                fb.SetHandlerBlock ((HandlerBlock) $2);\r
+                          }\r
                        ;\r
 \r
 filter_clause          : K_FILTER scope_block\r
                        | K_FILTER id\r
+                          {\r
+                                FilterBlock fb = new FilterBlock ((string) $2);\r
+                                $$ = fb;\r
+                          }\r
                        | K_FILTER int32\r
                        ;\r
 \r
 handler_block          : scope_block\r
                        | K_HANDLER id K_TO id\r
+                          {\r
+                                $$ = new HandlerBlock ((string) $2, (string) $4);\r
+                          }\r
                        | K_HANDLER int32 K_TO int32\r
                        ;\r
 \r