{\r
codegen.CurrentTypeDef.SetPack ((int) $2);\r
}\r
- | D_OVERRIDE type_spec DOUBLE_COLON method_name\r
- K_WITH call_conv type type_spec DOUBLE_COLON method_name\r
+ | D_OVERRIDE type_spec DOUBLE_COLON method_name K_WITH call_conv type\r
+ type_spec DOUBLE_COLON method_name type_list\r
+ {\r
+ //\r
+ // My copy of the spec didn't have a type_list but\r
+ // it seems pretty crucial\r
+ //\r
+ ITypeRef owner = (ITypeRef) $2;\r
+ ArrayList arg_list = (ArrayList) $11;\r
+ ITypeRef[] param_list;\r
+ IMethodRef decl;\r
+\r
+ if (arg_list != null)\r
+ param_list = (ITypeRef[]) arg_list.ToArray (typeof (ITypeRef));\r
+ else\r
+ param_list = new ITypeRef[0];\r
+\r
+ decl = owner.GetMethodRef ((ITypeRef) $7,\r
+ (CallConv) $6, (string) $4, param_list);\r
+\r
+ string sig = MethodDef.CreateSignature ((string) $10,\r
+ param_list);\r
+ codegen.CurrentTypeDef.AddOverride (sig, decl); \r
+ }\r
OPEN_PARENS sig_args CLOSE_PARENS\r
| language_decl\r
| constraint_decl\r
if ($2 != null) {\r
field_def.SetOffset ((uint) $2);\r
}\r
- /*\r
+ \r
if ($6 != null) {\r
field_def.AddDataValue ((DataConstant) $6);\r
}\r
- */\r
+ \r
if ($7 != null) {\r
field_def.SetValue ((Constant) $7);\r
}\r
at_opt : /* EMPTY */\r
| K_AT id\r
{\r
- // TODO: Implement DataTable\r
- // $$ = new DataConstant (DataTable.GetOffset ((string) $2));\r
+ // DataDef def = new DataDef ((string) $2, false);\r
+ // def.PeapiConstant = new DataConstant (DataTable.GetOffset ((string) $2));\r
}\r
;\r
\r
\r
data_decl : data_head data_body\r
{\r
- /*\r
- Console.WriteLine ("Creating data decl: '{0}' '{1}'", $1, $2);\r
-\r
DataDef datadef = (DataDef) $1;\r
\r
if ($2 is ArrayList) {\r
} else {\r
datadef.PeapiConstant = (PEAPI.Constant) $2;\r
}\r
- */\r
+ codegen.CurrentTypeDef.AddDataDef ((DataDef) $1);\r
}\r
;\r
\r
;\r
\r
dataitem_list : dataitem\r
+ {\r
+ ArrayList dataitem_list = new ArrayList ();\r
+ dataitem_list.Add ($1);\r
+ $$ = dataitem_list;\r
+ }\r
| dataitem_list COMMA dataitem\r
+ {\r
+ ArrayList list = (ArrayList) $1;\r
+ list.Add ($3);\r
+ }\r
;\r
\r
dataitem : K_CHAR STAR OPEN_PARENS comp_qstring CLOSE_PARENS\r
+ {\r
+ $$ = new StringConst ((string) $4);\r
+ }\r
| AMPERSAND OPEN_PARENS id CLOSE_PARENS\r
+ {\r
+ DataDef def = codegen.CurrentTypeDef.GetDataDef ((string) $3);\r
+ $$ = new AddressConstant ((DataConstant) def.PeapiConstant);\r
+ }\r
| K_BYTEARRAY ASSIGN OPEN_PARENS bytes CLOSE_PARENS\r
{\r
$$ = new ByteArrConst ((byte[]) $4);\r