;\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