2 // Mono::ILASM::ILParser
\r
4 // (C) Sergey Chaban (serge@wildwestsoftware.com)
\r
8 using System.Collections;
\r
10 namespace Mono.ILASM {
\r
12 public class ILParser {
\r
14 private CodeGen codegen;
\r
16 public ILParser (CodeGen codegen) {
\r
17 this.codegen = codegen;
\r
20 public CodeGen CodeGen {
\r
21 get { return codegen; }
\r
28 /* ID - alpha-numeric identifier */
\r
31 /* QSTRING - quoted string */
\r
34 /* SQSTRING - single quoted string */
\r
37 /* INT32 - 32 bit integer */
\r
40 /* INT64 - 64 bit integer */
\r
43 /* FLOAT64 - floating point number */
\r
50 %token OPEN_BRACE "{"
\r
51 %token CLOSE_BRACE "}"
\r
52 %token OPEN_BRACKET "["
\r
53 %token CLOSE_BRACKET "]"
\r
54 %token OPEN_PARENS "("
\r
55 %token CLOSE_PARENS ")"
\r
58 %token DOUBLE_COLON "::"
\r
59 %token SEMICOLON ";"
\r
62 %token AMPERSAND "&"
\r
66 %token ELLIPSIS "..."
\r
75 /* INSTR_* instruction types */
\r
81 %token INSTR_BRTARGET
\r
99 /* Mechanically generated - DO NOT EDIT! */
\r
108 %token D_CAPABILITY
\r
118 %token D_ENTRYPOINT
\r
127 %token D_IMPLICITCOM
\r
133 %token D_MANIFESTRES
\r
140 %token D_ORIGINATOR
\r
146 %token D_PERMISSION
\r
147 %token D_PERMISSIONSET
\r
151 %token D_PUBLICKEYTOKEN
\r
168 %token K_IMPLICITCOM
\r
169 %token K_IMPLICITRES
\r
170 %token K_NOAPPDOMAIN
\r
194 %token K_RTSPECIALNAME
\r
195 %token K_SPECIALNAME
\r
197 %token K_FAMANDASSEM
\r
198 %token K_FAMORASSEM
\r
199 %token K_PRIVATESCOPE
\r
201 %token K_NOTSERIALIZED
\r
203 %token K_NOT_IN_GC_HEAP
\r
208 %token K_SEQUENTIAL
\r
213 %token K_SERIALIZABLE
\r
217 %token K_IMPLEMENTS
\r
222 %token K_UNMANAGEDEXP
\r
223 %token K_PINVOKEIMPL
\r
233 %token K_FORWARDREF
\r
235 %token K_INTERNALCALL
\r
236 %token K_SYNCHRONIZED
\r
237 %token K_NOINLINING
\r
278 %token K_USERDEFINED
\r
284 %token K_STREAMED_OBJECT
\r
285 %token K_STORED_OBJECT
\r
286 %token K_BLOB_OBJECT
\r
297 %token K_FROMUNMANAGED
\r
298 %token K_CALLMOSTDERIVED
\r
314 %token K_PERMITONLY
\r
316 %token K_INHERITCHECK
\r
320 %token K_PREJITGRANT
\r
321 %token K_PREJITDENY
\r
322 %token K_NONCASDEMAND
\r
323 %token K_NONCASLINKDEMAND
\r
324 %token K_NONCASINHERITANCE
\r
326 %token K_NOMETADATA
\r
328 %token K_FULLORIGIN
\r
332 %token K_ENABLEJITTRACKING
\r
333 %token K_DISABLEJITOPTIMIZER
\r
334 %token K_PRESERVESIG
\r
335 %token K_BEFOREFIELDINIT
\r
339 %token K_COMPILERCONTROLLED
\r
347 /* end generated */
\r
360 decls : /* EMPTY */
\r
365 | nameSpaceHead OPEN_BRACE decls CLOSE_BRACE { codegen.CurrentNameSpace = String.Empty; }
\r
373 | assemblyHead OPEN_BRACE assemblyDecls CLOSE_BRACE
\r
374 | assemblyRefHead OPEN_BRACE assemblyRefDecls CLOSE_BRACE
\r
375 | comtypeHead OPEN_BRACE comtypeDecls CLOSE_BRACE
\r
376 | manifestResHead OPEN_BRACE manifestResDecls CLOSE_BRACE
\r
380 | D_SUBSYSTEM int32
\r
381 | D_CORFLAGS int32
\r
382 | D_FILE K_ALIGNMENT int32
\r
386 compQstring : QSTRING
\r
387 | compQstring PLUS QSTRING {$$ = ($1 as string) + ($3 as string);}
\r
390 languageDecl : D_LANGUAGE SQSTRING
\r
391 | D_LANGUAGE SQSTRING COMMA SQSTRING
\r
392 | D_LANGUAGE SQSTRING COMMA SQSTRING COMMA SQSTRING
\r
395 customAttrDecl : D_CUSTOM customType
\r
396 | D_CUSTOM customType ASSIGN compQstring
\r
397 | customHead bytes CLOSE_PARENS
\r
398 | D_CUSTOM OPEN_PARENS customType CLOSE_PARENS customType
\r
399 | D_CUSTOM OPEN_PARENS customType CLOSE_PARENS customType ASSIGN compQstring
\r
400 | customHeadWithOwner bytes CLOSE_PARENS
\r
403 moduleHead : D_MODULE
\r
405 | D_MODULE K_EXTERN name1
\r
408 vtfixupDecl : D_VTFIXUP OPEN_BRACKET int32 CLOSE_BRACKET vtfixupAttr K_AT id
\r
411 vtfixupAttr : /* EMPTY */
\r
412 | vtfixupAttr K_INT32
\r
413 | vtfixupAttr K_INT64
\r
414 | vtfixupAttr K_FROMUNMANAGED
\r
415 | vtfixupAttr K_CALLMOSTDERIVED
\r
418 vtableDecl : vtableHead bytes CLOSE_PARENS
\r
421 vtableHead : D_VTABLE ASSIGN OPEN_PARENS
\r
424 nameSpaceHead : D_NAMESPACE name1
\r
426 codegen.CurrentNameSpace = (string) $2;
\r
430 classHead : D_CLASS type_attr id extendsClause implClause
\r
433 codegen.AddClass ((TypeAttr) $2, (string) $3,
\r
434 ((TypeRef)$4).Type as Class, null);
\r
436 codegen.AddClass ((TypeAttr)$2, (string) $3, null);
\r
439 ArrayList impl_list = (ArrayList) $5;
\r
440 if (impl_list != null) {
\r
441 foreach (TypeRef type_ref in impl_list)
\r
442 codegen.CurrentClass.AddImplementedInterface (type_ref.Type as Class);
\r
447 type_attr : /* EMPTY */ { $$ = new TypeAttr (); }
\r
448 | type_attr K_PUBLIC { $$ = (TypeAttr)$1 | TypeAttr.Public; }
\r
449 | type_attr K_PRIVATE { $$ = (TypeAttr)$1 | TypeAttr.Private; }
\r
450 | type_attr K_INTERFACE { $$ = (TypeAttr)$1 | TypeAttr.Interface; }
\r
451 | type_attr K_SEALED { $$ = (TypeAttr)$1 | TypeAttr.Sealed; }
\r
452 | type_attr K_ABSTRACT { $$ = (TypeAttr)$1 | TypeAttr.Abstract; }
\r
453 | type_attr K_AUTO { /* */ }
\r
454 | type_attr K_SEQUENTIAL { $$ = (TypeAttr)$1 | TypeAttr.SequentialLayout; }
\r
455 | type_attr K_EXPLICIT { $$ = (TypeAttr)$1 | TypeAttr.ExplicitLayout; }
\r
456 | type_attr K_ANSI { /* */ }
\r
457 | type_attr K_UNICODE { $$ = (TypeAttr)$1 | TypeAttr.UnicodeClass; }
\r
458 | type_attr K_AUTOCHAR { $$ = (TypeAttr)$1 | TypeAttr.AutoClass; }
\r
459 | type_attr K_IMPORT { $$ = (TypeAttr)$1 | TypeAttr.Import; }
\r
460 | type_attr K_SERIALIZABLE { $$ = (TypeAttr)$1 | TypeAttr.Serializable; }
\r
461 | type_attr K_NESTED K_PUBLIC { $$ = (TypeAttr)$1 | TypeAttr.NestedPublic; }
\r
462 | type_attr K_NESTED K_PRIVATE { $$ = (TypeAttr)$1 | TypeAttr.NestedPrivate; }
\r
463 | type_attr K_NESTED K_FAMILY { $$ = (TypeAttr)$1 | TypeAttr.NestedFamily; }
\r
464 | type_attr K_NESTED K_ASSEMBLY { $$ = (TypeAttr)$1 | TypeAttr.NestedAssembly; }
\r
465 | type_attr K_NESTED K_FAMANDASSEM { $$ = (TypeAttr)$1 | TypeAttr.NestedFamAndAssem; }
\r
466 | type_attr K_NESTED K_FAMORASSEM { $$ = (TypeAttr)$1 | TypeAttr.NestedFamOrAssem; }
\r
467 | type_attr K_BEFOREFIELDINIT { $$ = (TypeAttr)$1 | TypeAttr.BeforeFieldInit; }
\r
468 | type_attr K_SPECIALNAME { $$ = (TypeAttr)$1 | TypeAttr.SpecialName; }
\r
469 | type_attr K_RTSPECIALNAME { $$ = (TypeAttr)$1 | TypeAttr.RTSpecialName; }
\r
472 classAttr : /* EMPTY */
\r
473 | classAttr K_PUBLIC { /* currentTypeAttrs |= TypeAttributes.Public; */}
\r
474 | classAttr K_PRIVATE { /* currentTypeAttrs &= ~TypeAttributes.Public; */}
\r
475 | classAttr K_VALUE { /* FIXME */ }
\r
476 | classAttr K_ENUM { /* FIXME */ }
\r
477 | classAttr K_INTERFACE { /* currentTypeAttrs |= TypeAttributes.Interface; */ }
\r
478 | classAttr K_SEALED { /* currentTypeAttrs |= TypeAttributes.Sealed; */ }
\r
479 | classAttr K_ABSTRACT { /* currentTypeAttrs |= TypeAttributes.Abstract; */ }
\r
480 | classAttr K_AUTO { /* currentTypeAttrs |= TypeAttributes.AutoLayout; */ }
\r
481 | classAttr K_SEQUENTIAL { /* currentTypeAttrs |= TypeAttributes.SequentialLayout; */ }
\r
482 | classAttr K_EXPLICIT { /* currentTypeAttrs |= TypeAttributes.ExplicitLayout; */ }
\r
483 | classAttr K_ANSI { /* currentTypeAttrs |= TypeAttributes.AnsiClass; */ }
\r
484 | classAttr K_UNICODE { /* currentTypeAttrs |= TypeAttributes.UnicodeClass; */ }
\r
485 | classAttr K_AUTOCHAR { /* currentTypeAttrs |= TypeAttributes.AutoClass; */ }
\r
486 | classAttr K_IMPORT { /* currentTypeAttrs |= TypeAttributes.Import; */ }
\r
487 | classAttr K_SERIALIZABLE { /* currentTypeAttrs |= TypeAttributes.Serializable; */ }
\r
488 | classAttr K_NESTED K_PUBLIC { /* currentTypeAttrs |= TypeAttributes.NestedPublic; */ }
\r
489 | classAttr K_NESTED K_PRIVATE { /* currentTypeAttrs |= TypeAttributes.NestedPrivate; */ }
\r
490 | classAttr K_NESTED K_FAMILY { /* currentTypeAttrs |= TypeAttributes.NestedFamily; */ }
\r
491 | classAttr K_NESTED K_ASSEMBLY { /* currentTypeAttrs |= TypeAttributes.NestedAssembly; */ }
\r
492 | classAttr K_NESTED K_FAMANDASSEM { /* currentTypeAttrs |= TypeAttributes.NestedFamANDAssem; */ }
\r
493 | classAttr K_NESTED K_FAMORASSEM { /* currentTypeAttrs |= TypeAttributes.NestedFamORAssem; */ }
\r
494 | classAttr K_BEFOREFIELDINIT { /* currentTypeAttrs |= TypeAttributes.BeforeFieldInit; */ }
\r
495 | classAttr K_SPECIALNAME { /* currentTypeAttrs |= TypeAttributes.SpecialName; */ }
\r
496 | classAttr K_RTSPECIALNAME { /* currentTypeAttrs |= TypeAttributes.RTSpecialName; */ }
\r
499 extendsClause : /* EMPTY */
\r
500 | K_EXTENDS class_ref {$$ = $2;}
\r
503 implClause : /* EMPTY */
\r
504 | K_IMPLEMENTS classNames {$$ = $2; }
\r
507 classNames : classNames COMMA class_ref
\r
509 ArrayList class_list = (ArrayList) $1;
\r
510 class_list.Add ($3);
\r
514 ArrayList class_list = new ArrayList ();
\r
515 class_list.Add ($1);
\r
520 classDecls : /* EMPTY */
\r
521 | classDecls classDecl
\r
525 classAll : classHead OPEN_BRACE classDecls CLOSE_BRACE
\r
528 codegen.AddClass (currentClass);
\r
529 currentClass = null;
\r
535 classDecl : methodAll
\r
537 | eventHead OPEN_BRACE eventDecls CLOSE_BRACE
\r
538 | propHead OPEN_BRACE propDecls CLOSE_BRACE
\r
546 | exportHead OPEN_BRACE comtypeDecls CLOSE_BRACE
\r
547 | D_OVERRIDE typeSpec DOUBLE_COLON methodName K_WITH callConv type_ref typeSpec DOUBLE_COLON methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
551 fieldDecl : D_FIELD repeatOpt fieldAttr type_ref id atOpt initOpt
\r
553 codegen.AddField ((FieldAttr) $3,
\r
554 (string) $5, (TypeRef) $4, null);
\r
558 type_ref : primative_type_ref
\r
559 | internal_type_ref
\r
560 | external_type_ref
\r
563 class_ref : internal_type_ref
\r
564 | external_type_ref
\r
567 primative_type_ref : K_CHAR
\r
568 {$$ = new TypeRef (PrimitiveType.Char, "System.Char"); }
\r
570 {$$ = new TypeRef (PrimitiveType.Void, "System.Void"); }
\r
572 {$$ = new TypeRef (PrimitiveType.Boolean, "System.Bool"); }
\r
574 {$$ = new TypeRef (PrimitiveType.Int8, "System.Int8"); }
\r
576 {$$ = new TypeRef (PrimitiveType.Int16, "System.Int16"); }
\r
578 {$$ = new TypeRef (PrimitiveType.Int32, "System.Int32"); }
\r
580 {$$ = new TypeRef (PrimitiveType.Int64, "System.Int64"); }
\r
582 {$$ = new TypeRef (PrimitiveType.Float32, "System.Float32"); }
\r
584 {$$ = new TypeRef (PrimitiveType.Float64, "System.Float64"); }
\r
585 | K_UNSIGNED K_INT8
\r
586 {$$ = new TypeRef (PrimitiveType.UInt8, "System.UInt8"); }
\r
587 | K_UNSIGNED K_INT16
\r
588 {$$ = new TypeRef (PrimitiveType.UInt16, "System.UInt16"); }
\r
589 | K_UNSIGNED K_INT32
\r
590 {$$ = new TypeRef (PrimitiveType.UInt32, "System.UInt32"); }
\r
591 | K_UNSIGNED K_INT64
\r
592 {$$ = new TypeRef (PrimitiveType.UInt64, "System.UInt64"); }
\r
594 {$$ = new TypeRef (PrimitiveType.String, "System.String"); }
\r
596 { $$ = new TypeRef (PrimitiveType.Object, "System.Object"); }
\r
599 internal_type_ref : name1
\r
601 $$ = new TypeRef (codegen.ClassTable.GetReference ((string) $1, null),
\r
606 external_type_ref : assembly_name namespace_name DOT id
\r
608 $$ = new TypeRef (codegen.ExternTable.GetClass ($1 as string,
\r
609 $2 as string, $4 as string), String.Format ("{0}.{1}", $2, $4));
\r
613 namespace_name : /* EMPTY */
\r
615 | namespace_name DOT id {$$ = String.Format ("{0}.{1}", $1, $3); }
\r
618 atOpt : /* EMPTY */
\r
622 initOpt : /* EMPTY */
\r
623 | ASSIGN fieldInit
\r
626 repeatOpt : /* EMPTY */
\r
627 | OPEN_BRACKET int32 CLOSE_BRACKET
\r
630 customHead : D_CUSTOM customType ASSIGN OPEN_PARENS
\r
633 customHeadWithOwner : D_CUSTOM OPEN_PARENS customType CLOSE_PARENS customType ASSIGN OPEN_PARENS
\r
636 customType : typeSpec
\r
637 | callConv type typeSpec DOUBLE_COLON methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
638 | callConv type methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
641 eventHead : D_EVENT eventAttr typeSpec id
\r
642 | D_EVENT eventAttr id
\r
646 eventAttr : /* EMPTY */
\r
647 | eventAttr K_RTSPECIALNAME /**/
\r
648 | eventAttr K_SPECIALNAME
\r
651 eventDecls : /* EMPTY */
\r
652 | eventDecls eventDecl
\r
655 eventDecl : D_ADDON callConv type typeSpec DOUBLE_COLON methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
656 | D_ADDON callConv type methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
657 | D_REMOVEON callConv type typeSpec DOUBLE_COLON methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
658 | D_REMOVEON callConv type methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
659 | D_FIRE callConv type typeSpec DOUBLE_COLON methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
660 | D_FIRE callConv type methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
661 | D_OTHER callConv type typeSpec DOUBLE_COLON methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
662 | D_OTHER callConv type methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
668 propHead : D_PROPERTY propAttr callConv type id OPEN_PARENS sigArgs0 CLOSE_PARENS initOpt
\r
671 propAttr : /* EMPTY */
\r
672 | propAttr K_RTSPECIALNAME /**/
\r
673 | propAttr K_SPECIALNAME
\r
676 propDecls : /* EMPTY */
\r
677 | propDecls propDecl
\r
681 propDecl : D_SET callConv type typeSpec DOUBLE_COLON methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
682 | D_SET callConv type methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
683 | D_GET callConv type typeSpec DOUBLE_COLON methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
684 | D_GET callConv type methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
685 | D_OTHER callConv type typeSpec DOUBLE_COLON methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
686 | D_OTHER callConv type methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
692 field_ref : internal_field_ref
\r
693 | external_field_ref
\r
696 internal_field_ref : type_ref internal_type_ref DOUBLE_COLON id
\r
698 $$ = codegen.GetFieldRef ((TypeRef) $1, (TypeRef) $2, (string) $4, null);
\r
702 external_field_ref : type_ref external_type_ref DOUBLE_COLON id
\r
704 ClassRef parent = ((TypeRef) $2).Type as ClassRef;
\r
705 TypeRef type = (TypeRef) $1;
\r
707 $$ = parent.AddField ((string) $4, type.Type);
\r
711 method_name : name1
\r
716 method_ref : internal_method_ref
\r
717 | external_method_ref
\r
720 external_method_ref : type_ref external_type_ref DOUBLE_COLON method_name OPEN_PARENS param_list CLOSE_PARENS
\r
722 TypeRef ret_type = (TypeRef)$1;
\r
723 ClassRef parent = (ClassRef) ((TypeRef) $2).Type;
\r
724 PEAPI.Type[] type_array;
\r
726 ArrayList param_list = $6 as ArrayList;
\r
728 type_array = new PEAPI.Type[param_list.Count];
\r
729 foreach (TypeRef type in param_list) {
\r
730 type_array[index] = type.Type;
\r
734 type_array = new PEAPI.Type[0];
\r
736 $$ = parent.AddMethod ((string) $4, ret_type.Type, type_array);
\r
741 internal_method_ref : type_ref internal_type_ref DOUBLE_COLON method_name OPEN_PARENS param_list CLOSE_PARENS
\r
743 TypeRef parent, return_type;
\r
744 parent = (TypeRef) $2;
\r
745 return_type = (TypeRef) $1;
\r
747 Param[] param_array;
\r
748 TypeRef[] typeref_array;
\r
750 ArrayList param_list = $6 as ArrayList;
\r
752 param_array = new Param[param_list.Count];
\r
753 typeref_array = new TypeRef[param_list.Count];
\r
754 foreach (TypeRef type in param_list) {
\r
755 param_array[index] = new Param (ParamAttr.Default,
\r
756 String.Empty, type.Type);
\r
757 typeref_array[index] = type;
\r
761 param_array = new Param[0];
\r
762 typeref_array = new TypeRef[0];
\r
765 $$ = codegen.GetMethodRef (parent, (string) $4, return_type, param_array,
\r
766 typeref_array, null);
\r
771 methodHead : D_METHOD methAttr callConv type_ref methodName
\r
772 OPEN_PARENS arg_list CLOSE_PARENS implAttr OPEN_BRACE
\r
774 Param[] param_array;
\r
775 TypeRef[] typeref_array;
\r
777 ArrayList param_list = $7 as ArrayList;
\r
779 param_array = new Param[param_list.Count];
\r
780 typeref_array = new TypeRef[param_list.Count];
\r
781 foreach (DictionaryEntry entry in param_list) {
\r
782 param_array[index] = entry.Key as Param;
\r
783 typeref_array[index] = entry.Value as TypeRef;
\r
787 param_array = new Param[0];
\r
788 typeref_array = new TypeRef[0];
\r
791 codegen.AddMethod ((MethAttr) $2, (ImplAttr) $9, (CallConv) $3, (string) $5,
\r
792 (TypeRef) $4, param_array, typeref_array, null);
\r
794 | D_METHOD methAttr callConv paramAttr type K_MARSHAL OPEN_PARENS nativeType CLOSE_PARENS methodName OPEN_PARENS sigArgs0 CLOSE_PARENS implAttr OPEN_BRACE
\r
798 methodAll : methodHead methodDecls CLOSE_BRACE
\r
801 // Console.WriteLine (method);
\r
802 currentClass.AddMethod (method);
\r
808 methAttr : /* EMPTY */ { $$ = new MethAttr (); }
\r
809 | methAttr K_STATIC { $$ = (MethAttr) $1 | MethAttr.Static; }
\r
810 | methAttr K_PUBLIC { $$ = (MethAttr) $1 | MethAttr.Public; }
\r
811 | methAttr K_PRIVATE { $$ = (MethAttr) $1 | MethAttr.Private; }
\r
812 | methAttr K_FAMILY { $$ = (MethAttr) $1 | MethAttr.Family; }
\r
813 | methAttr K_FINAL { $$ = (MethAttr) $1 | MethAttr.Final; }
\r
814 | methAttr K_SPECIALNAME { $$ = (MethAttr) $1 | MethAttr.SpecialName; }
\r
815 | methAttr K_VIRTUAL { $$ = (MethAttr) $1 | MethAttr.Virtual; }
\r
816 | methAttr K_ABSTRACT { $$ = (MethAttr) $1 | MethAttr.Abstract; }
\r
817 | methAttr K_ASSEMBLY { $$ = (MethAttr) $1 | MethAttr.Assembly; }
\r
818 | methAttr K_FAMANDASSEM { $$ = (MethAttr) $1 | MethAttr.FamAndAssem; }
\r
819 | methAttr K_FAMORASSEM { $$ = (MethAttr) $1 | MethAttr.FamOrAssem; }
\r
820 | methAttr K_COMPILERCONTROLLED {/* FIXME */}
\r
821 | methAttr K_HIDEBYSIG { $$ = (MethAttr) $1 | MethAttr.HideBySig; }
\r
822 | methAttr K_NEWSLOT { $$ = (MethAttr) $1 | MethAttr.NewSlot; }
\r
823 | methAttr K_RTSPECIALNAME { $$ = (MethAttr) $1 | MethAttr.RTSpecialName; }
\r
824 | methAttr K_UNMANAGEDEXP {/* FIXME */}
\r
825 | methAttr K_REQSECOBJ { $$ = (MethAttr) $1 | MethAttr.RequireSecObject; }
\r
827 | methAttr K_PINVOKEIMPL OPEN_PARENS compQstring K_AS compQstring pinvAttr CLOSE_PARENS { }
\r
828 | methAttr K_PINVOKEIMPL OPEN_PARENS compQstring pinvAttr CLOSE_PARENS { }
\r
829 | methAttr K_PINVOKEIMPL OPEN_PARENS pinvAttr CLOSE_PARENS { }
\r
833 pinvAttr : /* EMPTY */
\r
834 | pinvAttr K_NOMANGLE
\r
836 | pinvAttr K_UNICODE
\r
837 | pinvAttr K_AUTOCHAR
\r
838 | pinvAttr K_LASTERR
\r
839 | pinvAttr K_WINAPI
\r
840 | pinvAttr K_CDECL
\r
841 | pinvAttr K_STDCALL
\r
842 | pinvAttr K_THISCALL
\r
843 | pinvAttr K_FASTCALL
\r
846 methodName : D_CTOR
\r
851 paramAttr : /* EMPTY */ {$$ = ParamAttr.Default; }
\r
852 | paramAttr OPEN_BRACKET K_IN CLOSE_BRACKET {$$ = (ParamAttr) $1 | ParamAttr.In; }
\r
853 | paramAttr OPEN_BRACKET K_OUT CLOSE_BRACKET {$$ = (ParamAttr) $1 | ParamAttr.Out; }
\r
854 | paramAttr OPEN_BRACKET K_OPT CLOSE_BRACKET {$$ = (ParamAttr) $1 | ParamAttr.Opt; }
\r
855 /* | paramAttr OPEN_BRACKET int32 CLOSE_BRACKET */
\r
858 fieldAttr : /* EMPTY */ {$$ = FieldAttr.Default; }
\r
859 | fieldAttr K_STATIC {$$ = FieldAttr.Static; }
\r
860 | fieldAttr K_PUBLIC {$$ = FieldAttr.Public; }
\r
861 | fieldAttr K_PRIVATE {$$ = FieldAttr.Private; }
\r
862 | fieldAttr K_FAMILY {$$ = FieldAttr.Family; }
\r
863 | fieldAttr K_INITONLY {$$ = FieldAttr.Initonly; }
\r
864 | fieldAttr K_RTSPECIALNAME {$$ = FieldAttr.RTSpecialName; }
\r
865 | fieldAttr K_SPECIALNAME {$$ = FieldAttr.SpecialName; }
\r
866 /* commented out because PInvoke for fields is not supported by EE
\r
867 | fieldAttr K_PINVOKEIMPL OPEN_PARENS compQstring K_AS compQstring pinvAttr CLOSE_PARENS
\r
868 | fieldAttr K_PINVOKEIMPL OPEN_PARENS compQstring pinvAttr CLOSE_PARENS
\r
869 | fieldAttr K_PINVOKEIMPL OPEN_PARENS pinvAttr CLOSE_PARENS
\r
871 | fieldAttr K_MARSHAL OPEN_PARENS nativeType CLOSE_PARENS
\r
873 | fieldAttr K_ASSEMBLY {$$ = FieldAttr.Assembly; }
\r
874 | fieldAttr K_FAMANDASSEM {$$ = FieldAttr.FamAndAssem; }
\r
875 | fieldAttr K_FAMORASSEM {$$ = FieldAttr.FamOrAssem; }
\r
876 /* | fieldAttr K_COMPILERCONTROLLED {$$ = FieldAttr. */
\r
877 | fieldAttr K_LITERAL {$$ = FieldAttr.Literal; }
\r
878 | fieldAttr K_NOTSERIALIZED {$$ = FieldAttr.Notserialized; }
\r
882 implAttr : /* empty */ {$$ = new ImplAttr (); }
\r
883 | implAttr K_NATIVE {$$ = (ImplAttr) $1 | ImplAttr.Native; }
\r
884 | implAttr K_IL {$$ = (ImplAttr) $1 | ImplAttr.IL; }
\r
885 | implAttr K_CIL { /* Do nothing */ }
\r
886 | implAttr K_OPTIL {$$ = (ImplAttr) $1 | ImplAttr.Optil; }
\r
887 | implAttr K_MANAGED { /* Do nothing */ }
\r
888 | implAttr K_UNMANAGED {$$ = (ImplAttr) $1 | ImplAttr.Unmanaged; }
\r
889 | implAttr K_FORWARDREF {$$ = (ImplAttr) $1 | ImplAttr.ForwardRef; }
\r
890 | implAttr K_PRESERVESIG {$$ = (ImplAttr) $1 | ImplAttr.PreserveSig; }
\r
891 | implAttr K_RUNTIME {$$ = (ImplAttr) $1 | ImplAttr.PreserveSig; }
\r
892 | implAttr K_INTERNALCALL {$$ = (ImplAttr) $1 | ImplAttr.InternalCall; }
\r
893 | implAttr K_SYNCHRONIZED {$$ = (ImplAttr) $1 | ImplAttr.Synchronized; }
\r
894 | implAttr K_NOINLINING {$$ = (ImplAttr) $1 | ImplAttr.NoInLining; }
\r
897 localsHead : D_LOCALS
\r
900 local_list : /* EMPTY */
\r
903 ArrayList local_list = new ArrayList ();
\r
904 TypeRef type = (TypeRef) $1;
\r
906 local_list.Add (new Local ((string) $2, type.Type));
\r
909 | local_list COMMA type_ref name1
\r
911 ArrayList local_list = (ArrayList) $1;
\r
912 TypeRef type = (TypeRef) $3;
\r
914 local_list.Add (new Local ((string) $4, type.Type));
\r
918 init_flag : /* EMPTY */ { $$ = false; }
\r
919 | K_INIT { $$ = true; }
\r
922 methodDecl : D_EMITBYTE int32
\r
924 | D_MAXSTACK int32
\r
926 codegen.CurrentMethod.SetMaxStack ((int) $2);
\r
928 | localsHead init_flag OPEN_PARENS local_list CLOSE_PARENS
\r
930 ArrayList arg_list = $4 as ArrayList;
\r
931 Local[] local_list;
\r
933 if (arg_list != null) {
\r
934 local_list = new Local[arg_list.Count];
\r
936 foreach (Local local in arg_list) {
\r
937 local_list[index++] = local;
\r
940 local_list = new Local[0];
\r
943 codegen.CurrentMethod.AddLocals (local_list, (bool) $2);
\r
947 codegen.CurrentMethod.DeclareEntryPoint ();
\r
952 /* method.AddInstruction (currentInstr); */
\r
959 | D_EXPORT OPEN_BRACKET int32 CLOSE_BRACKET
\r
960 | D_EXPORT OPEN_BRACKET int32 CLOSE_BRACKET K_AS id
\r
961 | D_VTENTRY int32 COLON int32
\r
962 | D_OVERRIDE typeSpec DOUBLE_COLON methodName
\r
964 | D_PARAM OPEN_BRACKET int32 CLOSE_BRACKET initOpt
\r
967 scopeBlock : scopeOpen methodDecls CLOSE_BRACE
\r
970 scopeOpen : OPEN_BRACE
\r
973 sehBlock : tryBlock sehClauses
\r
976 sehClauses : sehClause sehClauses
\r
980 tryBlock : tryHead scopeBlock
\r
981 | tryHead id K_TO id
\r
982 | tryHead int32 K_TO int32
\r
989 sehClause : catchClause handlerBlock
\r
990 | filterClause handlerBlock
\r
991 | finallyClause handlerBlock
\r
992 | faultClause handlerBlock
\r
996 filterClause : filterHead scopeBlock
\r
998 | filterHead int32
\r
1001 filterHead : K_FILTER
\r
1004 catchClause : K_CATCH className
\r
1007 finallyClause : K_FINALLY
\r
1010 faultClause : K_FAULT
\r
1013 handlerBlock : scopeBlock
\r
1014 | K_HANDLER id K_TO id
\r
1015 | K_HANDLER int32 K_TO int32
\r
1019 methodDecls : /* EMPTY */
\r
1020 | methodDecls methodDecl
\r
1023 dataDecl : ddHead ddBody
\r
1026 ddHead : D_DATA tls id ASSIGN
\r
1030 tls : /* EMPTY */
\r
1034 ddBody : OPEN_BRACE ddItemList CLOSE_BRACE
\r
1038 ddItemList : ddItem COMMA ddItemList
\r
1042 ddItemCount : /* EMPTY */
\r
1043 | OPEN_BRACKET int32 CLOSE_BRACKET
\r
1046 ddItem : K_CHAR STAR OPEN_PARENS compQstring CLOSE_PARENS
\r
1047 | AMPERSAND OPEN_PARENS id CLOSE_PARENS
\r
1048 | bytearrayhead bytes CLOSE_PARENS
\r
1049 | K_FLOAT32 OPEN_PARENS float64 CLOSE_PARENS ddItemCount
\r
1050 | K_FLOAT64 OPEN_PARENS float64 CLOSE_PARENS ddItemCount
\r
1051 | K_INT64 OPEN_PARENS int64 CLOSE_PARENS ddItemCount
\r
1052 | K_INT32 OPEN_PARENS int32 CLOSE_PARENS ddItemCount
\r
1053 | K_INT16 OPEN_PARENS int32 CLOSE_PARENS ddItemCount
\r
1054 | K_INT8 OPEN_PARENS int32 CLOSE_PARENS ddItemCount
\r
1055 | K_FLOAT32 ddItemCount
\r
1056 | K_FLOAT64 ddItemCount
\r
1057 | K_INT64 ddItemCount
\r
1058 | K_INT32 ddItemCount
\r
1059 | K_INT16 ddItemCount
\r
1060 | K_INT8 ddItemCount
\r
1063 fieldInit : K_FLOAT32 OPEN_PARENS float64 CLOSE_PARENS
\r
1064 | K_FLOAT64 OPEN_PARENS float64 CLOSE_PARENS
\r
1065 | K_FLOAT32 OPEN_PARENS int64 CLOSE_PARENS
\r
1066 | K_FLOAT64 OPEN_PARENS int64 CLOSE_PARENS
\r
1067 | K_INT64 OPEN_PARENS int64 CLOSE_PARENS
\r
1068 | K_INT32 OPEN_PARENS int64 CLOSE_PARENS
\r
1069 | K_INT16 OPEN_PARENS int64 CLOSE_PARENS
\r
1070 | K_CHAR OPEN_PARENS int64 CLOSE_PARENS
\r
1071 | K_INT8 OPEN_PARENS int64 CLOSE_PARENS
\r
1072 | K_BOOL OPEN_PARENS truefalse CLOSE_PARENS
\r
1074 | bytearrayhead bytes CLOSE_PARENS
\r
1078 bytearrayhead : K_BYTEARRAY OPEN_PARENS
\r
1086 bytes : /* EMPTY */
\r
1090 hexbytes : hexbyte
\r
1091 | hexbytes hexbyte
\r
1094 instr_r_head : INSTR_R OPEN_PARENS
\r
1097 methodSpec : K_METHOD
\r
1100 instr : INSTR_NONE
\r
1102 codegen.CodeBuffer.Inst ((Op) $1);
\r
1104 | INSTR_VAR int32 {/* currentInstr = new InstrVar ((OpCode) $1, $2);*/}
\r
1105 | INSTR_VAR id {/* currentInstr = new InstrVar ((OpCode) $1, $2); */}
\r
1108 codegen.CodeBuffer.IntInst ((IntOp) $1, (int) $2);
\r
1110 | INSTR_I8 int64 {/* currentInstr = new InstrI8 ((OpCode) $1, (Int64) $2);*/}
\r
1111 | INSTR_R float64 {/* currentInstr = new InstrR ((OpCode) $1, (Double) $2);*/}
\r
1112 | INSTR_R int64 {/* currentInstr = new InstrR ((OpCode) $1, (Int64) $2);*/}
\r
1113 | instr_r_head bytes CLOSE_PARENS
\r
1114 | INSTR_BRTARGET int32
\r
1115 | INSTR_BRTARGET id
\r
1116 | INSTR_METHOD method_ref
\r
1118 codegen.CodeBuffer.MethInst ((MethodOp) $1, (Method) $2);
\r
1120 | INSTR_METHOD callConv method_ref
\r
1122 Method method = (Method) $3;
\r
1123 method.AddCallConv ((CallConv) $2);
\r
1124 codegen.CodeBuffer.MethInst ((MethodOp) $1, method);
\r
1128 | INSTR_METHOD callConv type methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
1132 | INSTR_NEWOBJ callConv type assembly_name name1 DOUBLE_COLON call_name OPEN_PARENS signature_args CLOSE_PARENS
\r
1136 | INSTR_FIELD type typeSpec DOUBLE_COLON id
\r
1137 | INSTR_FIELD field_ref
\r
1139 codegen.CodeBuffer.FieldInst ((FieldOp) $1, (Field) $2);
\r
1141 | INSTR_TYPE type_ref
\r
1143 TypeRef type_ref = (TypeRef) $2;
\r
1144 codegen.CodeBuffer.TypeInst ((TypeOp) $1, type_ref.Type);
\r
1146 | INSTR_STRING compQstring
\r
1148 codegen.CodeBuffer.ldstr ((string) $2);
\r
1150 | INSTR_STRING bytearrayhead bytes CLOSE_PARENS
\r
1151 | INSTR_SIG callConv type OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
1153 | INSTR_RVA int32
\r
1154 | INSTR_TOK methodSpec callConv type typeSpec DOUBLE_COLON methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
1155 | INSTR_TOK methodSpec callConv type methodName OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
1156 | INSTR_TOK K_FIELD type typeSpec DOUBLE_COLON id
\r
1157 | INSTR_TOK K_FIELD type id
\r
1158 | INSTR_TOK typeSpec
\r
1159 | INSTR_SWITCH OPEN_PARENS labels CLOSE_PARENS
\r
1160 | INSTR_PHI int16s
\r
1163 param_list : /* EMPTY */
\r
1166 ArrayList param_list = new ArrayList ();
\r
1168 param_list.Add ($1);
\r
1171 | param_list COMMA type_ref
\r
1173 ArrayList param_list = (ArrayList) $1;
\r
1175 param_list.Add ($3);
\r
1179 param_name : /* EMPTY */
\r
1185 | paramAttr type_ref param_name
\r
1187 ArrayList arg_list = new ArrayList ();
\r
1188 Param param = new Param ((ParamAttr) $1, $3 as string, ((TypeRef) $2).Type);
\r
1189 DictionaryEntry entry = new DictionaryEntry (param, $2);
\r
1191 arg_list.Add (entry);
\r
1194 | arg_list COMMA paramAttr type_ref param_name
\r
1196 ArrayList arg_list = (ArrayList) $1;
\r
1197 Param param = new Param ((ParamAttr) $3, $5 as string, ((TypeRef) $4).Type);
\r
1198 DictionaryEntry entry = new DictionaryEntry (param, $4);
\r
1200 arg_list.Add (entry);
\r
1205 param_name : /* EMPTY */
\r
1212 $$ = new DictionaryEntry ((string) $1, (string) $2);
\r
1220 ArrayList arg_list = new ArrayList ();
\r
1221 arg_list.Add ($1);
\r
1225 | named_arg_list COMMA named_arg
\r
1227 ArrayList arg_list = (ArrayList) $1;
\r
1228 arg_list.Add ($3);
\r
1235 signature_args : /* EMPTY */
\r
1237 | type COMMA signature_args
\r
1240 binding_flags : /* EMPTY */
\r
1244 sigArgs0 : /* EMPTY */
\r
1248 sigArgs1 : sigArg
\r
1249 | sigArgs1 COMMA sigArg { $$ = String.Format ("{0},{1}", $1, $2); }
\r
1252 sigArg : ELLIPSIS
\r
1253 | paramAttr type_ref
\r
1254 | paramAttr type id { $$ = String.Format ("{0} {1}", $2, $3); }
\r
1255 | paramAttr type K_MARSHAL OPEN_PARENS nativeType CLOSE_PARENS
\r
1256 | paramAttr type K_MARSHAL OPEN_PARENS nativeType CLOSE_PARENS id
\r
1260 dottedName : id DOT id {$$ = ($1 as string) + "." + ($3 as string);}
\r
1266 | name1 DOT name1 {$$ = String.Format ("{0}.{1}", $1, $3); }
\r
1276 | assembly_ref DASH id {$$ = String.Format ("{0}-{1}", $1, $3);}
\r
1277 | assembly_ref DOT id {$$ = String.Format ("{0}.{1}", $1, $3); }
\r
1280 assembly_name : OPEN_BRACKET assembly_ref CLOSE_BRACKET {$$ = ($2 as string);}
\r
1283 className : OPEN_BRACKET name1 CLOSE_BRACKET slashedName
\r
1284 | OPEN_BRACKET D_MODULE name1 CLOSE_BRACKET slashedName
\r
1288 slashedName : name1
\r
1289 | slashedName SLASH name1 {$$ = ($1 as string) + "/" + ($3 as string);}
\r
1292 typeSpec : className
\r
1293 | OPEN_BRACKET name1 CLOSE_BRACKET
\r
1294 | OPEN_BRACKET D_MODULE name1 CLOSE_BRACKET
\r
1298 callConv : /* EMPTY */ { $$ = new CallConv (); }
\r
1299 | callConv K_INSTANCE { $$ = (CallConv) $1 | CallConv.Instance; }
\r
1300 | callConv K_EXPLICIT { $$ = (CallConv) $1 | CallConv.InstanceExplicit; }
\r
1301 | callConv callKind { $$ = (CallConv) $1 | (CallConv) $2; }
\r
1304 callKind : K_DEFAULT { $$ = (CallConv) $1 | CallConv.Default; }
\r
1305 | K_VARARG { $$ = (CallConv) $1 | CallConv.Vararg; }
\r
1306 | K_UNMANAGED K_CDECL { $$ = (CallConv) $1 | CallConv.Cdecl; }
\r
1307 | K_UNMANAGED K_STDCALL { $$ = (CallConv) $1 | CallConv.Stdcall; }
\r
1308 | K_UNMANAGED K_THISCALL { $$ = (CallConv) $1 | CallConv.Thiscall; }
\r
1309 | K_UNMANAGED K_FASTCALL { $$ = (CallConv) $1 | CallConv.Fastcall; }
\r
1312 nativeType : /* EMPTY */
\r
1313 | K_CUSTOM OPEN_PARENS compQstring COMMA compQstring COMMA compQstring COMMA compQstring CLOSE_PARENS
\r
1314 | K_CUSTOM OPEN_PARENS compQstring COMMA compQstring CLOSE_PARENS
\r
1315 | K_FIXED K_SYSSTRING OPEN_BRACKET int32 CLOSE_BRACKET
\r
1316 | K_FIXED K_ARRAY OPEN_BRACKET int32 CLOSE_BRACKET
\r
1329 | K_UNSIGNED K_INT8
\r
1330 | K_UNSIGNED K_INT16
\r
1331 | K_UNSIGNED K_INT32
\r
1332 | K_UNSIGNED K_INT64
\r
1333 | nativeType STAR
\r
1334 | nativeType OPEN_BRACKET CLOSE_BRACKET
\r
1335 | nativeType OPEN_BRACKET int32 CLOSE_BRACKET
\r
1336 | nativeType OPEN_BRACKET int32 PLUS int32 CLOSE_BRACKET
\r
1337 | nativeType OPEN_BRACKET PLUS int32 CLOSE_BRACKET
\r
1349 | K_SAFEARRAY variantType
\r
1351 | K_UNSIGNED K_INT
\r
1352 | K_NESTED K_STRUCT
\r
1356 | K_VARIANT K_BOOL
\r
1362 variantType : /* EMPTY */
\r
1374 | K_UNSIGNED K_INT8
\r
1375 | K_UNSIGNED K_INT16
\r
1376 | K_UNSIGNED K_INT32
\r
1377 | K_UNSIGNED K_INT64
\r
1379 | variantType OPEN_BRACKET CLOSE_BRACKET
\r
1380 | variantType K_VECTOR
\r
1381 | variantType AMPERSAND
\r
1391 | K_UNSIGNED K_INT
\r
1401 | K_STREAMED_OBJECT
\r
1402 | K_STORED_OBJECT
\r
1408 type : K_CLASS className
\r
1411 | K_VALUE K_CLASS className
\r
1412 | K_VALUETYPE className
\r
1413 | type OPEN_BRACKET CLOSE_BRACKET
\r
1414 | type OPEN_BRACKET bounds1 CLOSE_BRACKET
\r
1415 /* uncomment when and if this type is supported by the Runtime
\r
1416 | type K_VALUE OPEN_BRACKET int32 CLOSE_BRACKET
\r
1421 | type K_MODREQ OPEN_PARENS className CLOSE_PARENS
\r
1422 | type K_MODOPT OPEN_PARENS className CLOSE_PARENS
\r
1424 | methodSpec callConv type STAR OPEN_PARENS sigArgs0 CLOSE_PARENS
\r
1435 | K_UNSIGNED K_INT8 {$$ = "uint8";}
\r
1436 | K_UNSIGNED K_INT16 {$$ = "uint16";}
\r
1437 | K_UNSIGNED K_INT32 {$$ = "uint32";}
\r
1438 | K_UNSIGNED K_INT64 {$$ = "uint64";}
\r
1440 | K_NATIVE K_UNSIGNED K_INT
\r
1441 | K_NATIVE K_FLOAT
\r
1445 | bounds1 COMMA bound
\r
1448 bound : /* EMPTY */
\r
1451 | int32 ELLIPSIS int32
\r
1455 labels : /* empty */
\r
1456 | id COMMA labels
\r
1457 | int32 COMMA labels
\r
1467 int16s : /* EMPTY */
\r
1471 int32 : INT32 /* NOTE: it's INT64 in docs */
\r
1477 float64 : FLOAT64
\r
1478 | K_FLOAT32 OPEN_PARENS int32 CLOSE_PARENS
\r
1479 | K_FLOAT64 OPEN_PARENS int64 CLOSE_PARENS
\r
1482 secDecl : D_PERMISSION secAction typeSpec OPEN_PARENS nameValPairs CLOSE_PARENS
\r
1483 | D_PERMISSION secAction typeSpec
\r
1484 | psetHead bytes CLOSE_PARENS
\r
1487 psetHead : D_PERMISSIONSET secAction ASSIGN OPEN_PARENS
\r
1490 nameValPairs : nameValPair
\r
1491 | nameValPair COMMA nameValPairs
\r
1494 nameValPair : compQstring ASSIGN caValue
\r
1497 truefalse : K_TRUE
\r
1501 caValue : truefalse
\r
1503 | K_INT32 OPEN_PARENS int32 CLOSE_PARENS
\r
1505 | className OPEN_PARENS K_INT8 COLON int32 CLOSE_PARENS
\r
1506 | className OPEN_PARENS K_INT16 COLON int32 CLOSE_PARENS
\r
1507 | className OPEN_PARENS K_INT32 COLON int32 CLOSE_PARENS
\r
1508 | className OPEN_PARENS int32 CLOSE_PARENS
\r
1511 secAction : K_REQUEST
\r
1524 | K_NONCASLINKDEMAND
\r
1525 | K_NONCASINHERITANCE
\r
1528 extSourceSpec : D_LINE int32 SQSTRING
\r
1530 | D_XLINE int32 QSTRING
\r
1533 fileDecl : D_FILE fileAttr name1 fileEntry hashHead bytes CLOSE_PARENS fileEntry
\r
1534 | D_FILE fileAttr name1 fileEntry
\r
1537 fileAttr : /* EMPTY */
\r
1538 | fileAttr K_NOMETADATA
\r
1541 fileEntry : /* EMPTY */
\r
1545 hashHead : D_HASH ASSIGN OPEN_PARENS
\r
1548 assemblyHead : D_ASSEMBLY asmAttr name1
\r
1551 // TODO: set assembly attrs
\r
1552 codegen.SetName ($3 as string);
\r
1557 asmAttr : /* EMPTY */
\r
1558 | asmAttr K_NOAPPDOMAIN
\r
1559 | asmAttr K_NOPROCESS
\r
1560 | asmAttr K_NOMACHINE
\r
1563 assemblyDecls : /* EMPTY */
\r
1564 | assemblyDecls assemblyDecl
\r
1567 assemblyDecl : D_HASH K_ALGORITHM bytes
\r
1568 | D_HASH K_ALGORITHM int32
\r
1573 asmOrRefDecl : publicKeyHead bytes CLOSE_PARENS
\r
1574 | D_VER int32 COLON int32 COLON int32 COLON int32
\r
1575 | D_LOCALE compQstring
\r
1576 | localeHead bytes CLOSE_PARENS
\r
1577 | D_PROCESSOR int32
\r
1578 | D_OS int32 D_VER int32 COLON int32
\r
1582 publicKeyHead : D_PUBLICKEY ASSIGN OPEN_PARENS
\r
1585 publicKeyTokenHead : D_PUBLICKEYTOKEN ASSIGN OPEN_PARENS
\r
1588 localeHead : D_LOCALE ASSIGN OPEN_PARENS
\r
1591 assemblyRefHead : D_ASSEMBLY K_EXTERN assembly_ref
\r
1593 System.Reflection.AssemblyName asmb_name =
\r
1594 new System.Reflection.AssemblyName ();
\r
1595 asmb_name.Name = (string) $3;
\r
1596 codegen.ExternTable.AddAssembly ((string) $3, asmb_name);
\r
1600 assemblyRefDecls : /* EMPTY */
\r
1601 | assemblyRefDecls assemblyRefDecl
\r
1604 assemblyRefDecl : hashHead bytes CLOSE_PARENS
\r
1606 | publicKeyTokenHead bytes CLOSE_PARENS
\r
1609 comtypeHead : D_CLASS K_EXTERN comtAttr name1
\r
1612 exportHead : D_EXPORT comtAttr name1
\r
1615 comtAttr : /* EMPTY */
\r
1616 | comtAttr K_PRIVATE
\r
1617 | comtAttr K_PUBLIC
\r
1618 | comtAttr K_NESTED K_PUBLIC
\r
1619 | comtAttr K_NESTED K_PRIVATE
\r
1620 | comtAttr K_NESTED K_FAMILY
\r
1621 | comtAttr K_NESTED K_ASSEMBLY
\r
1622 | comtAttr K_NESTED K_FAMANDASSEM
\r
1623 | comtAttr K_NESTED K_FAMORASSEM
\r
1626 comtypeDecls : /* EMPTY */
\r
1627 | comtypeDecls comtypeDecl
\r
1630 comtypeDecl : D_FILE name1
\r
1631 | D_CLASS K_EXTERN name1
\r
1636 manifestResHead : D_MRESOURCE manresAttr name1
\r
1639 manresAttr : /* EMPTY */
\r
1640 | manresAttr K_PUBLIC
\r
1641 | manresAttr K_PRIVATE
\r
1644 manifestResDecls : /* EMPTY */
\r
1645 | manifestResDecls manifestResDecl
\r
1648 manifestResDecl : D_FILE name1 K_AT int32
\r
1649 | D_ASSEMBLY K_EXTERN name1
\r
1657 } // namespace Mono.ILASM
\r