Ejemplo n.º 1
0
 public IntegerStack Clone()
 {
     IntegerStack stack = new IntegerStack();
     for (int i = 0; i < base.Count; i++)
     {
         stack.Add(base.Items[i]);
     }
     return stack;
 }
Ejemplo n.º 2
0
 public BaseScanner(BaseParser parser)
 {
     this.token = new Token(this);
     this.history = new IntegerStack();
     this.def_stack = new IntegerStack();
     this.parser = parser;
     NumberFormatInfo currentInfo = NumberFormatInfo.CurrentInfo;
     this.DecimalSeparator = currentInfo.NumberDecimalSeparator;
 }
Ejemplo n.º 3
0
 public SymbolTable(BaseScripter scripter)
 {
     this.scripter = scripter;
     this.state_stack = new IntegerStack();
     this.a = new ArrayList();
     for (int i = 0; i < 0x3e8; i++)
     {
         this.a.Add(new SymbolRec(scripter, i));
     }
 }
Ejemplo n.º 4
0
 private void Parse_SwitchStmt()
 {
     int label = base.NewLabel();
     int num2 = base.NewLabel();
     IntegerList list = new IntegerList(true);
     IntegerList list2 = new IntegerList(true);
     IntegerStack stack = new IntegerStack();
     int num3 = base.NewVar();
     this.Gen(base.code.OP_ASSIGN, num3, base.TRUE_id, num3);
     base.BreakStack.Push(label);
     this.Match("switch");
     base.BeginBlock();
     this.Match('(');
     int num4 = this.Parse_Expression();
     this.Match(')');
     this.Match('{');
     Label_008D:
     if (base.IsCurrText("case"))
     {
         this.Match("case");
         stack.Push(base.NewLabel());
         int avalue = this.Parse_Expression();
         list.AddObject(avalue, stack.Peek());
         this.Gen(base.code.OP_EQ, num4, avalue, num3);
         this.Gen(base.code.OP_GO_TRUE, stack.Peek(), num3, 0);
     }
     else
     {
         if (!base.IsCurrText("default"))
         {
             while (stack.Count > 0)
             {
                 base.SetLabelHere(stack.Peek());
                 stack.Pop();
             }
             int num6 = base.NewLabel();
             this.Gen(base.code.OP_GO_FALSE, num6, num3, 0);
             while ((!base.IsCurrText("case") && !base.IsCurrText("default")) && !base.IsCurrText('}'))
             {
                 if (base.IsCurrText("goto"))
                 {
                     this.Match("goto");
                     if (base.IsCurrText("case"))
                     {
                         this.Match("case");
                         int num7 = this.Parse_Expression();
                         this.Gen(base.code.OP_GOTO_START, 0, 0, 0);
                         list2.AddObject(num7, base.CodeCard);
                         this.Match(';');
                     }
                     else if (base.IsCurrText("default"))
                     {
                         this.Match("default");
                         this.Gen(base.code.OP_GOTO_START, num2, 0, 0);
                         this.Match(';');
                     }
                     else
                     {
                         int num8 = this.Parse_Ident();
                         this.Gen(base.code.OP_GOTO_START, num8, 0, 0);
                         this.Match(';');
                     }
                 }
                 else
                 {
                     this.Parse_Stmt();
                 }
             }
             base.SetLabelHere(num6);
             if (base.IsCurrText('}'))
             {
                 base.BreakStack.Pop();
                 base.SetLabelHere(label);
                 base.EndBlock();
                 this.Match('}');
                 for (int i = 0; i < list2.Count; i++)
                 {
                     int id = list2[i];
                     int n = (int) list2.Objects[i];
                     object val = base.GetVal(id);
                     bool flag = false;
                     for (int j = 0; j < list.Count; j++)
                     {
                         int num13 = list[j];
                         int num14 = (int) list.Objects[j];
                         object obj3 = base.GetVal(num13);
                         if ((val.GetType() == obj3.GetType()) && (val == obj3))
                         {
                             flag = true;
                             base.GenAt(n, base.code.OP_GOTO_START, num14, 0, 0);
                             break;
                         }
                     }
                     if (!flag)
                     {
                         base.CodeCard = n;
                         base.RaiseErrorEx(true, "CS0159. No such label '{0}' within the scope of the goto statement.", new object[] { val.ToString() });
                     }
                 }
                 return;
             }
             goto Label_008D;
         }
         this.Match("default");
         base.SetLabelHere(num2);
         this.Gen(base.code.OP_ASSIGN, num3, base.TRUE_id, num3);
     }
     this.Match(':');
     goto Label_008D;
 }
Ejemplo n.º 5
0
 public VB_Parser()
 {
     base.language = "VB";
     base.scanner = new VB_Scanner(this);
     base.upcase = true;
     base.AllowKeywordsInMemberAccessExpressions = true;
     this.variable_initializers = new IntegerList(false);
     this.static_variable_initializers = new IntegerList(false);
     this.param_ids = new IntegerList(true);
     this.param_type_ids = new IntegerList(true);
     this.param_mods = new IntegerList(true);
     this.local_variables = new IntegerList(false);
     this.total_modifier_list = new StringList(false);
     this.total_modifier_list.AddObject("Public", Modifier.Public);
     this.total_modifier_list.AddObject("Protected", Modifier.Protected);
     this.total_modifier_list.AddObject("Internal", Modifier.Internal);
     this.total_modifier_list.AddObject("Private", Modifier.Private);
     this.total_modifier_list.AddObject("Shared", Modifier.Static);
     this.total_modifier_list.AddObject("Overridable", Modifier.Virtual);
     this.total_modifier_list.AddObject("NotOverridable", Modifier.Sealed);
     this.total_modifier_list.AddObject("MustOverride", Modifier.Abstract);
     this.total_modifier_list.AddObject("Overrides", Modifier.Override);
     this.total_modifier_list.AddObject("Overloads", Modifier.Overloads);
     this.total_modifier_list.AddObject("ReadOnly", Modifier.ReadOnly);
     this.total_modifier_list.AddObject("Friend", Modifier.Friend);
     this.total_modifier_list.AddObject("Default", Modifier.Default);
     this.total_modifier_list.AddObject("MustInherit", Modifier.Abstract);
     this.total_modifier_list.AddObject("Shadows", Modifier.Shadows);
     this.total_modifier_list.AddObject("NotInheritable", Modifier.Sealed);
     this.total_modifier_list.AddObject("WithEvents", Modifier.WithEvents);
     base.keywords.Add("AddHandler");
     base.keywords.Add("AddressOf");
     base.keywords.Add("Alias");
     base.keywords.Add("And");
     base.keywords.Add("AndAlso");
     base.keywords.Add("Ansi");
     base.keywords.Add("As");
     base.keywords.Add("Assembly");
     base.keywords.Add("Auto");
     base.keywords.Add("Boolean");
     base.keywords.Add("ByRef");
     base.keywords.Add("Byte");
     base.keywords.Add("ByVal");
     base.keywords.Add("Call");
     base.keywords.Add("Case");
     base.keywords.Add("Catch");
     base.keywords.Add("CBool");
     base.keywords.Add("CByte");
     base.keywords.Add("CChar");
     base.keywords.Add("CDate");
     base.keywords.Add("CDbl");
     base.keywords.Add("CDec");
     base.keywords.Add("Char");
     base.keywords.Add("CInt");
     base.keywords.Add("Class");
     base.keywords.Add("CLng");
     base.keywords.Add("CObj");
     base.keywords.Add("Const");
     base.keywords.Add("CShort");
     base.keywords.Add("CSng");
     base.keywords.Add("CStr");
     base.keywords.Add("CType");
     base.keywords.Add("Date");
     base.keywords.Add("Decimal");
     base.keywords.Add("Declare");
     base.keywords.Add("Default");
     base.keywords.Add("Delegate");
     base.keywords.Add("Dim");
     base.keywords.Add("DirectCast");
     base.keywords.Add("Do");
     base.keywords.Add("Double");
     base.keywords.Add("Each");
     base.keywords.Add("Else");
     base.keywords.Add("ElseIf");
     base.keywords.Add("End");
     base.keywords.Add("EndIf");
     base.keywords.Add("Enum");
     base.keywords.Add("Erase");
     base.keywords.Add("Error");
     base.keywords.Add("Event");
     base.keywords.Add("Exit");
     base.keywords.Add("False");
     base.keywords.Add("Finally");
     base.keywords.Add("For");
     base.keywords.Add("Friend");
     base.keywords.Add("Function");
     base.keywords.Add("Get");
     base.keywords.Add("GoSub");
     base.keywords.Add("GoTo");
     base.keywords.Add("Handles");
     base.keywords.Add("If");
     base.keywords.Add("Implements");
     base.keywords.Add("Imports");
     base.keywords.Add("In");
     base.keywords.Add("Inherits");
     base.keywords.Add("Integer");
     base.keywords.Add("Interface");
     base.keywords.Add("Is");
     base.keywords.Add("Let");
     base.keywords.Add("Lib");
     base.keywords.Add("Like");
     base.keywords.Add("Long");
     base.keywords.Add("Loop");
     base.keywords.Add("Me");
     base.keywords.Add("Mod");
     base.keywords.Add("Module");
     base.keywords.Add("MustInherit");
     base.keywords.Add("MustOverride");
     base.keywords.Add("MyBase");
     base.keywords.Add("MyClass");
     base.keywords.Add("Namespace");
     base.keywords.Add("New");
     base.keywords.Add("Next");
     base.keywords.Add("Not");
     base.keywords.Add("Nothing");
     base.keywords.Add("NotInheritable");
     base.keywords.Add("NotOverridable");
     base.keywords.Add("Object");
     base.keywords.Add("On");
     base.keywords.Add("Option");
     base.keywords.Add("Optional");
     base.keywords.Add("Or");
     base.keywords.Add("Else");
     base.keywords.Add("Overloads");
     base.keywords.Add("Overridable");
     base.keywords.Add("Overrides");
     base.keywords.Add("ParamArray");
     base.keywords.Add("Preserve");
     base.keywords.Add("Private");
     base.keywords.Add("Property");
     base.keywords.Add("Protected");
     base.keywords.Add("Public");
     base.keywords.Add("RaiseEvent");
     base.keywords.Add("ReadOnly");
     base.keywords.Add("ReDim");
     base.keywords.Add("REM");
     base.keywords.Add("RemoveHandler");
     base.keywords.Add("Resume");
     base.keywords.Add("Return");
     base.keywords.Add("Select");
     base.keywords.Add("Set");
     base.keywords.Add("Shadows");
     base.keywords.Add("Shared");
     base.keywords.Add("Short");
     base.keywords.Add("Single");
     base.keywords.Add("Static");
     base.keywords.Add("Step");
     base.keywords.Add("Stop");
     base.keywords.Add("String");
     base.keywords.Add("Structure");
     base.keywords.Add("Sub");
     base.keywords.Add("SyncLock");
     base.keywords.Add("Then");
     base.keywords.Add("Throw");
     base.keywords.Add("To");
     base.keywords.Add("True");
     base.keywords.Add("Try");
     base.keywords.Add("TypeOf");
     base.keywords.Add("Unicode");
     base.keywords.Add("Until");
     base.keywords.Add("Variant");
     base.keywords.Add("Wend");
     base.keywords.Add("When");
     base.keywords.Add("While");
     base.keywords.Add("With");
     base.keywords.Add("WithEvents");
     base.keywords.Add("WriteOnly");
     base.keywords.Add("Xor");
     base.keywords.Add("print");
     base.keywords.Add("println");
     this.enum_modifiers = new ModifierList();
     this.enum_modifiers.Add(Modifier.New);
     this.enum_modifiers.Add(Modifier.Public);
     this.enum_modifiers.Add(Modifier.Protected);
     this.enum_modifiers.Add(Modifier.Internal);
     this.enum_modifiers.Add(Modifier.Private);
     this.class_modifiers = new ModifierList();
     this.class_modifiers.Add(Modifier.New);
     this.class_modifiers.Add(Modifier.Public);
     this.class_modifiers.Add(Modifier.Protected);
     this.class_modifiers.Add(Modifier.Internal);
     this.class_modifiers.Add(Modifier.Private);
     this.class_modifiers.Add(Modifier.Abstract);
     this.class_modifiers.Add(Modifier.Sealed);
     this.class_modifiers.Add(Modifier.Friend);
     this.structure_modifiers = new ModifierList();
     this.structure_modifiers.Add(Modifier.Public);
     this.structure_modifiers.Add(Modifier.Protected);
     this.structure_modifiers.Add(Modifier.Internal);
     this.structure_modifiers.Add(Modifier.Private);
     this.structure_modifiers.Add(Modifier.Friend);
     this.structure_modifiers.Add(Modifier.New);
     this.interface_modifiers = new ModifierList();
     this.interface_modifiers.Add(Modifier.New);
     this.interface_modifiers.Add(Modifier.Public);
     this.interface_modifiers.Add(Modifier.Protected);
     this.interface_modifiers.Add(Modifier.Internal);
     this.interface_modifiers.Add(Modifier.Private);
     this.interface_modifiers.Add(Modifier.Friend);
     this.event_modifiers = new ModifierList();
     this.event_modifiers.Add(Modifier.Public);
     this.event_modifiers.Add(Modifier.Protected);
     this.event_modifiers.Add(Modifier.Internal);
     this.event_modifiers.Add(Modifier.Private);
     this.event_modifiers.Add(Modifier.New);
     this.event_modifiers.Add(Modifier.Static);
     this.method_modifiers = new ModifierList();
     this.method_modifiers.Add(Modifier.Public);
     this.method_modifiers.Add(Modifier.Protected);
     this.method_modifiers.Add(Modifier.Internal);
     this.method_modifiers.Add(Modifier.Private);
     this.method_modifiers.Add(Modifier.New);
     this.method_modifiers.Add(Modifier.Static);
     this.method_modifiers.Add(Modifier.Virtual);
     this.method_modifiers.Add(Modifier.Sealed);
     this.method_modifiers.Add(Modifier.Abstract);
     this.method_modifiers.Add(Modifier.Override);
     this.method_modifiers.Add(Modifier.Overloads);
     this.method_modifiers.Add(Modifier.Friend);
     this.method_modifiers.Add(Modifier.Shadows);
     this.property_modifiers = this.method_modifiers.Clone();
     this.property_modifiers.Add(Modifier.Default);
     this.property_modifiers.Add(Modifier.ReadOnly);
     this.property_modifiers.Add(Modifier.WriteOnly);
     this.constructor_modifiers = new ModifierList();
     this.constructor_modifiers.Add(Modifier.Public);
     this.constructor_modifiers.Add(Modifier.Protected);
     this.constructor_modifiers.Add(Modifier.Internal);
     this.constructor_modifiers.Add(Modifier.Private);
     this.constructor_modifiers.Add(Modifier.Static);
     this.constructor_modifiers.Add(Modifier.Friend);
     this.delegate_modifiers = new ModifierList();
     this.delegate_modifiers.Add(Modifier.Public);
     this.delegate_modifiers.Add(Modifier.Protected);
     this.delegate_modifiers.Add(Modifier.Internal);
     this.delegate_modifiers.Add(Modifier.Private);
     this.delegate_modifiers.Add(Modifier.Static);
     this.delegate_modifiers.Add(Modifier.Friend);
     this.delegate_modifiers.Add(Modifier.Shadows);
     this.integral_types = new CSLite_Types();
     this.integral_types.Add("Byte", StandardType.Byte);
     this.integral_types.Add("Short", StandardType.Short);
     this.integral_types.Add("Integer", StandardType.Int);
     this.integral_types.Add("Long", StandardType.Long);
     this.for_loop_stack = new ForLoopStack();
     this.exit_kind_stack = new IntegerStack();
     this.with_stack = new IntegerStack();
 }
Ejemplo n.º 6
0
 private ClassObject GetCurrentClass(IntegerStack l)
 {
     for (int i = l.Count - 1; i >= 0; i--)
     {
         MemberObject memberObject = this.GetMemberObject(l[i]);
         if (memberObject.Kind == MemberKind.Type)
         {
             return (memberObject as ClassObject);
         }
     }
     return null;
 }
Ejemplo n.º 7
0
 public Code(BaseScripter scripter)
 {
     int num;
     this.goto_line = 0;
     this.Terminated = false;
     this.Paused = false;
     this.curr_stack_count = 0;
     this.debugging = true;
     this.scripter = scripter;
     this.symbol_table = scripter.symbol_table;
     this.Operators = new StringList(true);
     this.OP_DUMMY = -this.Operators.Add("DUMMY");
     this.OP_UPCASE_ON = -this.Operators.Add("UPCASE ON");
     this.OP_UPCASE_OFF = -this.Operators.Add("UPCASE OFF");
     this.OP_EXPLICIT_ON = -this.Operators.Add("EXPLICIT ON");
     this.OP_EXPLICIT_OFF = -this.Operators.Add("EXPLICIT OFF");
     this.OP_STRICT_ON = -this.Operators.Add("STRICT ON");
     this.OP_STRICT_OFF = -this.Operators.Add("STRICT OFF");
     this.OP_HALT = -this.Operators.Add("HALT");
     this.OP_PRINT = -this.Operators.Add("PRINT");
     this.OP_SEPARATOR = -this.Operators.Add("SEP");
     this.OP_DEFINE = -this.Operators.Add("DEFINE");
     this.OP_UNDEF = -this.Operators.Add("UNDEF");
     this.OP_START_REGION = -this.Operators.Add("START REGION");
     this.OP_END_REGION = -this.Operators.Add("END REGION");
     this.OP_BEGIN_MODULE = -this.Operators.Add("BEGIN MODULE");
     this.OP_END_MODULE = -this.Operators.Add("END MODULE");
     this.OP_ASSIGN_TYPE = -this.Operators.Add("ASSIGN TYPE");
     this.OP_ASSIGN_COND_TYPE = -this.Operators.Add("ASSIGN COND TYPE");
     this.OP_CREATE_REF_TYPE = -this.Operators.Add("CREATE REF TYPE");
     this.OP_SET_REF_TYPE = -this.Operators.Add("SET REF TYPE");
     this.OP_CREATE_NAMESPACE = -this.Operators.Add("CREATE NAMESPACE");
     this.OP_CREATE_CLASS = -this.Operators.Add("CREATE CLASS");
     this.OP_END_CLASS = -this.Operators.Add("END CLASS");
     this.OP_CREATE_FIELD = -this.Operators.Add("CREATE FIELD");
     this.OP_CREATE_PROPERTY = -this.Operators.Add("CREATE PROPERTY");
     this.OP_CREATE_EVENT = -this.Operators.Add("CREATE EVENT");
     this.OP_BEGIN_USING = -this.Operators.Add("BEGIN USING");
     this.OP_END_USING = -this.Operators.Add("END USING");
     this.OP_CREATE_USING_ALIAS = -this.Operators.Add("CREATE USING ALIAS");
     this.OP_CREATE_TYPE_REFERENCE = -this.Operators.Add("CREATE TYPE REFERENCE");
     this.OP_ADD_MODIFIER = -this.Operators.Add("ADD MODIFIER");
     this.OP_ADD_ANCESTOR = -this.Operators.Add("ADD ANCESTOR");
     this.OP_ADD_UNDERLYING_TYPE = -this.Operators.Add("ADD UNDERLYING TYPE");
     this.OP_ADD_READ_ACCESSOR = -this.Operators.Add("ADD READ ACCESSOR");
     this.OP_ADD_WRITE_ACCESSOR = -this.Operators.Add("ADD WRITE ACCESSOR");
     this.OP_SET_DEFAULT = -this.Operators.Add("SET DEFAULT");
     this.OP_ADD_ADD_ACCESSOR = -this.Operators.Add("ADD ADD ACCESSOR");
     this.OP_ADD_REMOVE_ACCESSOR = -this.Operators.Add("ADD REMOVE ACCESSOR");
     this.OP_ADD_PATTERN = -this.Operators.Add("ADD PATTERN");
     this.OP_ADD_IMPLEMENTS = -this.Operators.Add("ADD IMPLEMENTS");
     this.OP_ADD_HANDLES = -this.Operators.Add("ADD HANDLES");
     this.OP_BEGIN_CALL = -this.Operators.Add("BEGIN CALL");
     this.OP_EVAL = -this.Operators.Add("EVAL");
     this.OP_EVAL_TYPE = -this.Operators.Add("EVAL TYPE");
     this.OP_EVAL_BASE_TYPE = -this.Operators.Add("EVAL BASE TYPE");
     this.OP_ASSIGN_NAME = -this.Operators.Add("ASSIGN NAME");
     this.OP_ADD_MIN_VALUE = -this.Operators.Add("ADD MIN VALUE");
     this.OP_ADD_MAX_VALUE = -this.Operators.Add("ADD MAX VALUE");
     this.OP_ADD_ARRAY_RANGE = -this.Operators.Add("ADD ARRAY RANGE");
     this.OP_ADD_ARRAY_INDEX = -this.Operators.Add("ADD ARRAY INDEX");
     this.OP_CREATE_METHOD = -this.Operators.Add("CREATE METHOD");
     this.OP_INIT_METHOD = -this.Operators.Add("INIT METHOD");
     this.OP_END_METHOD = -this.Operators.Add("END METHOD");
     this.OP_ADD_PARAM = -this.Operators.Add("ADD PARAM");
     this.OP_ADD_PARAMS = -this.Operators.Add("ADD PARAMS");
     this.OP_ADD_DEFAULT_VALUE = -this.Operators.Add("ADD DEFAULT VALUE");
     this.OP_DECLARE_LOCAL_VARIABLE = -this.Operators.Add("DECLARE LOCAL VARIABLE");
     this.OP_DECLARE_LOCAL_VARIABLE_RUNTIME = -this.Operators.Add("DECLARE LOCAL VARIABLE RUNTIME");
     this.OP_DECLARE_LOCAL_SIMPLE = -this.Operators.Add("DECLARE LOCAL SIMPLE");
     this.OP_ADD_EXPLICIT_INTERFACE = -this.Operators.Add("ADD EXPLICIT INTERFACE");
     this.OP_ADD_EVENT_FIELD = -this.Operators.Add("ADD EVENT FIELD");
     this.OP_CALL_BASE = -this.Operators.Add("CALL BASE");
     this.OP_CALL_SIMPLE = -this.Operators.Add("CALL SIMPLE");
     this.OP_CHECK_STRUCT_CONSTRUCTOR = -this.Operators.Add("CHECK STRUCT CONSTRUCTOR");
     this.OP_INSERT_STRUCT_CONSTRUCTORS = -this.Operators.Add("INSERT STRUCT CONSTRUCTORS");
     this.OP_NOP = -this.Operators.Add("NOP");
     this.OP_INIT_STATIC_VAR = -this.Operators.Add("INIT STATIC VAR");
     this.OP_LABEL = -this.Operators.Add("LABEL");
     this.OP_ASSIGN = -this.Operators.Add("=");
     this.OP_ASSIGN_STRUCT = -this.Operators.Add("= (struct)");
     this.OP_BITWISE_AND = -this.Operators.Add("&");
     this.OP_BITWISE_XOR = -this.Operators.Add("^");
     this.OP_BITWISE_OR = -this.Operators.Add("|");
     this.OP_LOGICAL_OR = -this.Operators.Add("||");
     this.OP_LOGICAL_AND = -this.Operators.Add("&&");
     this.OP_PLUS = -this.Operators.Add("+");
     this.OP_INC = -this.Operators.Add("++");
     this.OP_MINUS = -this.Operators.Add("-");
     this.OP_DEC = -this.Operators.Add("--");
     this.OP_MULT = -this.Operators.Add("*");
     this.OP_EXPONENT = -this.Operators.Add("EXP");
     this.OP_MOD = -this.Operators.Add("%");
     this.OP_DIV = -this.Operators.Add("-");
     this.OP_EQ = -this.Operators.Add("==");
     this.OP_NE = -this.Operators.Add("<>");
     this.OP_GT = -this.Operators.Add(">");
     this.OP_LT = -this.Operators.Add("<");
     this.OP_GE = -this.Operators.Add(">=");
     this.OP_LE = -this.Operators.Add("<=");
     this.OP_IS = -this.Operators.Add("is");
     this.OP_AS = -this.Operators.Add("as");
     this.OP_LEFT_SHIFT = -this.Operators.Add("<<");
     this.OP_RIGHT_SHIFT = -this.Operators.Add(">>");
     this.OP_UNARY_PLUS = -this.Operators.Add("+ (unary)");
     this.OP_UNARY_MINUS = -this.Operators.Add("- (unary)");
     this.OP_NOT = -this.Operators.Add("not");
     this.OP_COMPLEMENT = -this.Operators.Add("~");
     this.OP_TRUE = -this.Operators.Add("true");
     this.OP_FALSE = -this.Operators.Add("false");
     this.OP_GO = -this.Operators.Add("GO");
     this.OP_GO_FALSE = -this.Operators.Add("GO FALSE");
     this.OP_GO_TRUE = -this.Operators.Add("GO TRUE");
     this.OP_GO_NULL = -this.Operators.Add("GO NULL");
     this.OP_GOTO_START = -this.Operators.Add("GOTO START");
     this.OP_GOTO_CONTINUE = -this.Operators.Add("GOTO CONTINUE");
     this.OP_TRY_ON = -this.Operators.Add("TRY ON");
     this.OP_TRY_OFF = -this.Operators.Add("TRY OFF");
     this.OP_THROW = -this.Operators.Add("THROW");
     this.OP_CATCH = -this.Operators.Add("CATCH");
     this.OP_FINALLY = -this.Operators.Add("FINALLY");
     this.OP_DISCARD_ERROR = -this.Operators.Add("DISCARD ERROR");
     this.OP_EXIT_ON_ERROR = -this.Operators.Add("EXIT ON ERROR");
     this.OP_ONERROR = -this.Operators.Add("ON ERROR");
     this.OP_RESUME = -this.Operators.Add("RESUME");
     this.OP_RESUME_NEXT = -this.Operators.Add("RESUME NEXT");
     this.OP_CREATE_ARRAY_INSTANCE = -this.Operators.Add("CREATE ARRAY INSTANCE");
     this.OP_CREATE_OBJECT = -this.Operators.Add("CREATE OBJECT");
     this.OP_CREATE_REFERENCE = -this.Operators.Add("CREATE REFERENCE");
     this.OP_SETUP_DELEGATE = -this.Operators.Add("SETUP DELEGATE");
     this.OP_ADD_DELEGATES = -this.Operators.Add("ADD DELEGATES");
     this.OP_SUB_DELEGATES = -this.Operators.Add("SUB DELEGATES");
     this.OP_EQ_DELEGATES = -this.Operators.Add("EQ DELEGATES");
     this.OP_NE_DELEGATES = -this.Operators.Add("NE DELEGATES");
     this.OP_ADDRESS_OF = -this.Operators.Add("ADDRESS OF");
     this.OP_CREATE_INDEX_OBJECT = -this.Operators.Add("CREATE INDEX OBJECT");
     this.OP_ADD_INDEX = -this.Operators.Add("ADD INDEX");
     this.OP_SETUP_INDEX_OBJECT = -this.Operators.Add("SETUP INDEX OBJECT");
     this.OP_PUSH = -this.Operators.Add("PUSH");
     this.OP_CALL = -this.Operators.Add("CALL");
     this.OP_CALL_VIRT = -this.Operators.Add("CALL VIRT");
     this.OP_DYNAMIC_INVOKE = -this.Operators.Add("DYNAMIC INVOKE");
     this.OP_CALL_ADD_EVENT = -this.Operators.Add("CALL ADD EVENT");
     this.OP_RAISE_EVENT = -this.Operators.Add("RAISE EVENT");
     this.OP_FIND_FIRST_DELEGATE = -this.Operators.Add("FIND FIRST DELEGATE");
     this.OP_FIND_NEXT_DELEGATE = -this.Operators.Add("FIND NEXT DELEGATE");
     this.OP_RET = -this.Operators.Add("RET");
     this.OP_EXIT_SUB = -this.Operators.Add("EXIT SUB");
     this.OP_GET_PARAM_VALUE = -this.Operators.Add("GET PARAM VALUE");
     this.OP_CHECKED = -this.Operators.Add("CHECKED");
     this.OP_RESTORE_CHECKED_STATE = -this.Operators.Add("RESTORE CHECKED STATE");
     this.OP_DISPOSE = -this.Operators.Add("DISPOSE");
     this.OP_TYPEOF = -this.Operators.Add("TYPEOF");
     this.OP_LOCK = -this.Operators.Add("LOCK");
     this.OP_UNLOCK = -this.Operators.Add("UNLOCK");
     this.OP_CAST = -this.Operators.Add("CAST");
     this.OP_TO_SBYTE = -this.Operators.Add("TO SBYTE");
     this.OP_TO_BYTE = -this.Operators.Add("TO BYTE");
     this.OP_TO_USHORT = -this.Operators.Add("TO USHORT");
     this.OP_TO_SHORT = -this.Operators.Add("TO SHORT");
     this.OP_TO_UINT = -this.Operators.Add("TO UINT");
     this.OP_TO_INT = -this.Operators.Add("TO INT");
     this.OP_TO_ULONG = -this.Operators.Add("TO ULONG");
     this.OP_TO_LONG = -this.Operators.Add("TO LONG");
     this.OP_TO_CHAR = -this.Operators.Add("TO CHAR");
     this.OP_TO_FLOAT = -this.Operators.Add("TO FLOAT");
     this.OP_TO_DOUBLE = -this.Operators.Add("TO DOUBLE");
     this.OP_TO_DECIMAL = -this.Operators.Add("TO DECIMAL");
     this.OP_TO_STRING = -this.Operators.Add("TO STRING");
     this.OP_TO_BOOLEAN = -this.Operators.Add("TO BOOLEAN");
     this.OP_TO_ENUM = -this.Operators.Add("TO ENUM");
     this.OP_TO_CHAR_ARRAY = -this.Operators.Add("TO CHAR[]");
     this.OP_NEGATION_INT = -this.Operators.Add("-(unary int)");
     this.OP_NEGATION_LONG = -this.Operators.Add("-(unary long)");
     this.OP_NEGATION_FLOAT = -this.Operators.Add("-(unary float)");
     this.OP_NEGATION_DOUBLE = -this.Operators.Add("-(unary double)");
     this.OP_NEGATION_DECIMAL = -this.Operators.Add("-(unary decimal)");
     this.OP_LOGICAL_NEGATION_BOOL = -this.Operators.Add("!(bool)");
     this.OP_BITWISE_COMPLEMENT_INT = -this.Operators.Add("~(int)");
     this.OP_BITWISE_COMPLEMENT_UINT = -this.Operators.Add("~(uint)");
     this.OP_BITWISE_COMPLEMENT_LONG = -this.Operators.Add("~(long)");
     this.OP_BITWISE_COMPLEMENT_ULONG = -this.Operators.Add("~(ulong)");
     this.OP_INC_SBYTE = -this.Operators.Add("++(sbyte)");
     this.OP_INC_BYTE = -this.Operators.Add("++(byte)");
     this.OP_INC_SHORT = -this.Operators.Add("++(short)");
     this.OP_INC_USHORT = -this.Operators.Add("++(ushort)");
     this.OP_INC_INT = -this.Operators.Add("++(int)");
     this.OP_INC_UINT = -this.Operators.Add("++(uint)");
     this.OP_INC_LONG = -this.Operators.Add("++(long)");
     this.OP_INC_ULONG = -this.Operators.Add("++(ulong)");
     this.OP_INC_CHAR = -this.Operators.Add("++(char)");
     this.OP_INC_FLOAT = -this.Operators.Add("++(float)");
     this.OP_INC_DOUBLE = -this.Operators.Add("++(double)");
     this.OP_INC_DECIMAL = -this.Operators.Add("++(decimal)");
     this.OP_DEC_SBYTE = -this.Operators.Add("--(sbyte)");
     this.OP_DEC_BYTE = -this.Operators.Add("--(byte)");
     this.OP_DEC_SHORT = -this.Operators.Add("--(short)");
     this.OP_DEC_USHORT = -this.Operators.Add("--(ushort)");
     this.OP_DEC_INT = -this.Operators.Add("--(int)");
     this.OP_DEC_UINT = -this.Operators.Add("--(uint)");
     this.OP_DEC_LONG = -this.Operators.Add("--(long)");
     this.OP_DEC_ULONG = -this.Operators.Add("--(ulong)");
     this.OP_DEC_CHAR = -this.Operators.Add("--(char)");
     this.OP_DEC_FLOAT = -this.Operators.Add("--(float)");
     this.OP_DEC_DOUBLE = -this.Operators.Add("--(double)");
     this.OP_DEC_DECIMAL = -this.Operators.Add("--(decimal)");
     this.OP_ADDITION_INT = -this.Operators.Add("+(int)");
     this.OP_ADDITION_UINT = -this.Operators.Add("+(uint)");
     this.OP_ADDITION_LONG = -this.Operators.Add("+(long)");
     this.OP_ADDITION_ULONG = -this.Operators.Add("+(ulong)");
     this.OP_ADDITION_FLOAT = -this.Operators.Add("+(float)");
     this.OP_ADDITION_DOUBLE = -this.Operators.Add("+(double)");
     this.OP_ADDITION_DECIMAL = -this.Operators.Add("+(decimal)");
     this.OP_ADDITION_STRING = -this.Operators.Add("+(string)");
     this.OP_SUBTRACTION_INT = -this.Operators.Add("-(int)");
     this.OP_SUBTRACTION_UINT = -this.Operators.Add("-(uint)");
     this.OP_SUBTRACTION_LONG = -this.Operators.Add("-(long)");
     this.OP_SUBTRACTION_ULONG = -this.Operators.Add("-(ulong)");
     this.OP_SUBTRACTION_FLOAT = -this.Operators.Add("-(float)");
     this.OP_SUBTRACTION_DOUBLE = -this.Operators.Add("-(double)");
     this.OP_SUBTRACTION_DECIMAL = -this.Operators.Add("-(decimal)");
     this.OP_MULTIPLICATION_INT = -this.Operators.Add("*(int)");
     this.OP_MULTIPLICATION_UINT = -this.Operators.Add("*(uint)");
     this.OP_MULTIPLICATION_LONG = -this.Operators.Add("*(long)");
     this.OP_MULTIPLICATION_ULONG = -this.Operators.Add("*(ulong)");
     this.OP_MULTIPLICATION_FLOAT = -this.Operators.Add("*(float)");
     this.OP_MULTIPLICATION_DOUBLE = -this.Operators.Add("*(double)");
     this.OP_MULTIPLICATION_DECIMAL = -this.Operators.Add("*(decimal)");
     this.OP_EXPONENT_INT = -this.Operators.Add("EXPONENT(int)");
     this.OP_EXPONENT_UINT = -this.Operators.Add("EXPONENT(uint)");
     this.OP_EXPONENT_LONG = -this.Operators.Add("EXPONENT(long)");
     this.OP_EXPONENT_ULONG = -this.Operators.Add("EXPONENT(ulong)");
     this.OP_EXPONENT_FLOAT = -this.Operators.Add("EXPONENT(float)");
     this.OP_EXPONENT_DOUBLE = -this.Operators.Add("EXPONENT(double)");
     this.OP_EXPONENT_DECIMAL = -this.Operators.Add("EXPONENT(decimal)");
     this.OP_DIVISION_INT = -this.Operators.Add("/(int)");
     this.OP_DIVISION_UINT = -this.Operators.Add("/(uint)");
     this.OP_DIVISION_LONG = -this.Operators.Add("/(long)");
     this.OP_DIVISION_ULONG = -this.Operators.Add("/(ulong)");
     this.OP_DIVISION_FLOAT = -this.Operators.Add("/(float)");
     this.OP_DIVISION_DOUBLE = -this.Operators.Add("/(double)");
     this.OP_DIVISION_DECIMAL = -this.Operators.Add("/(decimal)");
     this.OP_REMAINDER_INT = -this.Operators.Add("%(int)");
     this.OP_REMAINDER_UINT = -this.Operators.Add("%(uint)");
     this.OP_REMAINDER_LONG = -this.Operators.Add("%(long)");
     this.OP_REMAINDER_ULONG = -this.Operators.Add("%(ulong)");
     this.OP_REMAINDER_FLOAT = -this.Operators.Add("%(float)");
     this.OP_REMAINDER_DOUBLE = -this.Operators.Add("%(double)");
     this.OP_REMAINDER_DECIMAL = -this.Operators.Add("%(decimal)");
     this.OP_LEFT_SHIFT_INT = -this.Operators.Add("<<(int)");
     this.OP_LEFT_SHIFT_UINT = -this.Operators.Add("<<(uint)");
     this.OP_LEFT_SHIFT_LONG = -this.Operators.Add("<<(long)");
     this.OP_LEFT_SHIFT_ULONG = -this.Operators.Add("<<(ulong)");
     this.OP_RIGHT_SHIFT_INT = -this.Operators.Add(">>(int)");
     this.OP_RIGHT_SHIFT_UINT = -this.Operators.Add(">>(uint)");
     this.OP_RIGHT_SHIFT_LONG = -this.Operators.Add(">>(long)");
     this.OP_RIGHT_SHIFT_ULONG = -this.Operators.Add(">>(ulong)");
     this.OP_BITWISE_AND_INT = -this.Operators.Add("&(int)");
     this.OP_BITWISE_AND_UINT = -this.Operators.Add("&(uint)");
     this.OP_BITWISE_AND_LONG = -this.Operators.Add("&(long)");
     this.OP_BITWISE_AND_ULONG = -this.Operators.Add("&(ulong)");
     this.OP_BITWISE_AND_BOOL = -this.Operators.Add("&(bool)");
     this.OP_BITWISE_OR_INT = -this.Operators.Add("|(int)");
     this.OP_BITWISE_OR_UINT = -this.Operators.Add("|(uint)");
     this.OP_BITWISE_OR_LONG = -this.Operators.Add("|(long)");
     this.OP_BITWISE_OR_ULONG = -this.Operators.Add("|(ulong)");
     this.OP_BITWISE_OR_BOOL = -this.Operators.Add("|(bool)");
     this.OP_BITWISE_XOR_INT = -this.Operators.Add("^(int)");
     this.OP_BITWISE_XOR_UINT = -this.Operators.Add("^(uint)");
     this.OP_BITWISE_XOR_LONG = -this.Operators.Add("^(long)");
     this.OP_BITWISE_XOR_ULONG = -this.Operators.Add("^(ulong)");
     this.OP_BITWISE_XOR_BOOL = -this.Operators.Add("^(bool)");
     this.OP_LT_INT = -this.Operators.Add("<(int)");
     this.OP_LT_UINT = -this.Operators.Add("<(uint)");
     this.OP_LT_LONG = -this.Operators.Add("<(long)");
     this.OP_LT_ULONG = -this.Operators.Add("<(ulong)");
     this.OP_LT_FLOAT = -this.Operators.Add("<(float)");
     this.OP_LT_DOUBLE = -this.Operators.Add("<(double)");
     this.OP_LT_DECIMAL = -this.Operators.Add("<(decimal)");
     this.OP_LT_STRING = -this.Operators.Add("<(string)");
     this.OP_LE_INT = -this.Operators.Add("<=(int)");
     this.OP_LE_UINT = -this.Operators.Add("<=(uint)");
     this.OP_LE_LONG = -this.Operators.Add("<=(long)");
     this.OP_LE_ULONG = -this.Operators.Add("<=(ulong)");
     this.OP_LE_FLOAT = -this.Operators.Add("<=(float)");
     this.OP_LE_DOUBLE = -this.Operators.Add("<=(double)");
     this.OP_LE_DECIMAL = -this.Operators.Add("<=(decimal)");
     this.OP_LE_STRING = -this.Operators.Add("<=(string)");
     this.OP_GT_INT = -this.Operators.Add(">(int)");
     this.OP_GT_UINT = -this.Operators.Add(">(uint)");
     this.OP_GT_LONG = -this.Operators.Add(">(long)");
     this.OP_GT_ULONG = -this.Operators.Add(">(ulong)");
     this.OP_GT_FLOAT = -this.Operators.Add(">(float)");
     this.OP_GT_DOUBLE = -this.Operators.Add(">(double)");
     this.OP_GT_DECIMAL = -this.Operators.Add(">(decimal)");
     this.OP_GT_STRING = -this.Operators.Add(">(string)");
     this.OP_GE_INT = -this.Operators.Add(">=(int)");
     this.OP_GE_UINT = -this.Operators.Add(">=(uint)");
     this.OP_GE_LONG = -this.Operators.Add(">=(long)");
     this.OP_GE_ULONG = -this.Operators.Add(">=(ulong)");
     this.OP_GE_FLOAT = -this.Operators.Add(">=(float)");
     this.OP_GE_DOUBLE = -this.Operators.Add(">=(double)");
     this.OP_GE_DECIMAL = -this.Operators.Add(">=(decimal)");
     this.OP_GE_STRING = -this.Operators.Add(">=(string)");
     this.OP_EQ_INT = -this.Operators.Add("==(int)");
     this.OP_EQ_UINT = -this.Operators.Add("==(uint)");
     this.OP_EQ_LONG = -this.Operators.Add("==(long)");
     this.OP_EQ_ULONG = -this.Operators.Add("==(ulong)");
     this.OP_EQ_FLOAT = -this.Operators.Add("==(float)");
     this.OP_EQ_DOUBLE = -this.Operators.Add("==(double)");
     this.OP_EQ_DECIMAL = -this.Operators.Add("==(decimal)");
     this.OP_EQ_STRING = -this.Operators.Add("==(string)");
     this.OP_EQ_BOOL = -this.Operators.Add("==(bool)");
     this.OP_EQ_OBJECT = -this.Operators.Add("==(object)");
     this.OP_NE_INT = -this.Operators.Add("!=(int)");
     this.OP_NE_UINT = -this.Operators.Add("!=(uint)");
     this.OP_NE_LONG = -this.Operators.Add("!=(long)");
     this.OP_NE_ULONG = -this.Operators.Add("!=(ulong)");
     this.OP_NE_FLOAT = -this.Operators.Add("!=(float)");
     this.OP_NE_DOUBLE = -this.Operators.Add("!=(double)");
     this.OP_NE_DECIMAL = -this.Operators.Add("!=(decimal)");
     this.OP_NE_STRING = -this.Operators.Add("!=(string)");
     this.OP_NE_BOOL = -this.Operators.Add("!=(bool)");
     this.OP_NE_OBJECT = -this.Operators.Add("!=(object)");
     this.OP_SWAPPED_ARGUMENTS = -this.Operators.Add("SWAPPED ARG");
     this.overloadable_unary_operators_str = new Hashtable();
     this.overloadable_unary_operators_str.Add(this.OP_UNARY_PLUS, "op_UnaryPlus");
     this.overloadable_unary_operators_str.Add(this.OP_UNARY_MINUS, "op_UnaryNegation");
     this.overloadable_unary_operators_str.Add(this.OP_NOT, "op_LogicalNot");
     this.overloadable_unary_operators_str.Add(this.OP_COMPLEMENT, "op_OnesComplement");
     this.overloadable_unary_operators_str.Add(this.OP_INC, "op_Increment");
     this.overloadable_unary_operators_str.Add(this.OP_DEC, "op_Decrement");
     this.overloadable_unary_operators_str.Add(this.OP_TRUE, "op_True");
     this.overloadable_unary_operators_str.Add(this.OP_FALSE, "op_False");
     this.overloadable_binary_operators_str = new Hashtable();
     this.overloadable_binary_operators_str.Add(this.OP_PLUS, "op_Addition");
     this.overloadable_binary_operators_str.Add(this.OP_MINUS, "op_Subtraction");
     this.overloadable_binary_operators_str.Add(this.OP_MULT, "op_Multiply");
     this.overloadable_binary_operators_str.Add(this.OP_DIV, "op_Division");
     this.overloadable_binary_operators_str.Add(this.OP_MOD, "op_Modulus");
     this.overloadable_binary_operators_str.Add(this.OP_BITWISE_AND, "op_BitwiseAnd");
     this.overloadable_binary_operators_str.Add(this.OP_BITWISE_OR, "op_BitwiseOr");
     this.overloadable_binary_operators_str.Add(this.OP_BITWISE_XOR, "op_ExclusiveOr");
     this.overloadable_binary_operators_str.Add(this.OP_LEFT_SHIFT, "op_LeftShift");
     this.overloadable_binary_operators_str.Add(this.OP_RIGHT_SHIFT, "op_RightShift");
     this.overloadable_binary_operators_str.Add(this.OP_EQ, "op_Equality");
     this.overloadable_binary_operators_str.Add(this.OP_NE, "op_Inequality");
     this.overloadable_binary_operators_str.Add(this.OP_GT, "op_GreaterThan");
     this.overloadable_binary_operators_str.Add(this.OP_LT, "op_LessThan");
     this.overloadable_binary_operators_str.Add(this.OP_GE, "op_GreaterThanOrEqual");
     this.overloadable_binary_operators_str.Add(this.OP_LE, "op_LessThanOrEqual");
     this.detailed_operators = new Contact_Integers(200);
     this.detailed_negation_operators = new Contact_Integers(5);
     this.detailed_negation_operators.Add(8, this.OP_NEGATION_INT);
     this.detailed_negation_operators.Add(9, this.OP_NEGATION_LONG);
     this.detailed_negation_operators.Add(7, this.OP_NEGATION_FLOAT);
     this.detailed_negation_operators.Add(6, this.OP_NEGATION_DOUBLE);
     this.detailed_negation_operators.Add(5, this.OP_NEGATION_DECIMAL);
     this.detailed_operators.AddFrom(this.detailed_negation_operators);
     this.detailed_logical_negation_operators = new Contact_Integers(1);
     this.detailed_logical_negation_operators.Add(2, this.OP_LOGICAL_NEGATION_BOOL);
     this.detailed_operators.AddFrom(this.detailed_logical_negation_operators);
     this.detailed_bitwise_complement_operators = new Contact_Integers(4);
     this.detailed_bitwise_complement_operators.Add(8, this.OP_BITWISE_COMPLEMENT_INT);
     this.detailed_bitwise_complement_operators.Add(13, this.OP_BITWISE_COMPLEMENT_UINT);
     this.detailed_bitwise_complement_operators.Add(9, this.OP_BITWISE_COMPLEMENT_LONG);
     this.detailed_bitwise_complement_operators.Add(14, this.OP_BITWISE_COMPLEMENT_ULONG);
     this.detailed_operators.AddFrom(this.detailed_bitwise_complement_operators);
     this.detailed_inc_operators = new Contact_Integers(12);
     this.detailed_inc_operators.Add(10, this.OP_INC_SBYTE);
     this.detailed_inc_operators.Add(3, this.OP_INC_BYTE);
     this.detailed_inc_operators.Add(11, this.OP_INC_SHORT);
     this.detailed_inc_operators.Add(15, this.OP_INC_USHORT);
     this.detailed_inc_operators.Add(8, this.OP_INC_INT);
     this.detailed_inc_operators.Add(13, this.OP_INC_UINT);
     this.detailed_inc_operators.Add(9, this.OP_INC_LONG);
     this.detailed_inc_operators.Add(14, this.OP_INC_ULONG);
     this.detailed_inc_operators.Add(4, this.OP_INC_CHAR);
     this.detailed_inc_operators.Add(7, this.OP_INC_FLOAT);
     this.detailed_inc_operators.Add(6, this.OP_INC_DOUBLE);
     this.detailed_inc_operators.Add(5, this.OP_INC_DECIMAL);
     this.detailed_operators.AddFrom(this.detailed_inc_operators);
     this.detailed_dec_operators = new Contact_Integers(12);
     this.detailed_dec_operators.Add(10, this.OP_DEC_SBYTE);
     this.detailed_dec_operators.Add(3, this.OP_DEC_BYTE);
     this.detailed_dec_operators.Add(11, this.OP_DEC_SHORT);
     this.detailed_dec_operators.Add(15, this.OP_DEC_USHORT);
     this.detailed_dec_operators.Add(8, this.OP_DEC_INT);
     this.detailed_dec_operators.Add(13, this.OP_DEC_UINT);
     this.detailed_dec_operators.Add(9, this.OP_DEC_LONG);
     this.detailed_dec_operators.Add(14, this.OP_DEC_ULONG);
     this.detailed_dec_operators.Add(4, this.OP_DEC_CHAR);
     this.detailed_dec_operators.Add(7, this.OP_DEC_FLOAT);
     this.detailed_dec_operators.Add(6, this.OP_DEC_DOUBLE);
     this.detailed_dec_operators.Add(5, this.OP_DEC_DECIMAL);
     this.detailed_operators.AddFrom(this.detailed_dec_operators);
     this.detailed_addition_operators = new Contact_Integers(8);
     this.detailed_addition_operators.Add(8, this.OP_ADDITION_INT);
     this.detailed_addition_operators.Add(13, this.OP_ADDITION_UINT);
     this.detailed_addition_operators.Add(9, this.OP_ADDITION_LONG);
     this.detailed_addition_operators.Add(14, this.OP_ADDITION_ULONG);
     this.detailed_addition_operators.Add(7, this.OP_ADDITION_FLOAT);
     this.detailed_addition_operators.Add(6, this.OP_ADDITION_DOUBLE);
     this.detailed_addition_operators.Add(5, this.OP_ADDITION_DECIMAL);
     this.detailed_addition_operators.Add(12, this.OP_ADDITION_STRING);
     this.detailed_operators.AddFrom(this.detailed_addition_operators);
     this.detailed_subtraction_operators = new Contact_Integers(7);
     this.detailed_subtraction_operators.Add(8, this.OP_SUBTRACTION_INT);
     this.detailed_subtraction_operators.Add(13, this.OP_SUBTRACTION_UINT);
     this.detailed_subtraction_operators.Add(9, this.OP_SUBTRACTION_LONG);
     this.detailed_subtraction_operators.Add(14, this.OP_SUBTRACTION_ULONG);
     this.detailed_subtraction_operators.Add(7, this.OP_SUBTRACTION_FLOAT);
     this.detailed_subtraction_operators.Add(6, this.OP_SUBTRACTION_DOUBLE);
     this.detailed_subtraction_operators.Add(5, this.OP_SUBTRACTION_DECIMAL);
     this.detailed_operators.AddFrom(this.detailed_subtraction_operators);
     this.detailed_multiplication_operators = new Contact_Integers(7);
     this.detailed_multiplication_operators.Add(8, this.OP_MULTIPLICATION_INT);
     this.detailed_multiplication_operators.Add(13, this.OP_MULTIPLICATION_UINT);
     this.detailed_multiplication_operators.Add(9, this.OP_MULTIPLICATION_LONG);
     this.detailed_multiplication_operators.Add(14, this.OP_MULTIPLICATION_ULONG);
     this.detailed_multiplication_operators.Add(7, this.OP_MULTIPLICATION_FLOAT);
     this.detailed_multiplication_operators.Add(6, this.OP_MULTIPLICATION_DOUBLE);
     this.detailed_multiplication_operators.Add(5, this.OP_MULTIPLICATION_DECIMAL);
     this.detailed_operators.AddFrom(this.detailed_multiplication_operators);
     this.detailed_exponent_operators = new Contact_Integers(7);
     this.detailed_exponent_operators.Add(8, this.OP_EXPONENT_INT);
     this.detailed_exponent_operators.Add(13, this.OP_EXPONENT_UINT);
     this.detailed_exponent_operators.Add(9, this.OP_EXPONENT_LONG);
     this.detailed_exponent_operators.Add(14, this.OP_EXPONENT_ULONG);
     this.detailed_exponent_operators.Add(7, this.OP_EXPONENT_FLOAT);
     this.detailed_exponent_operators.Add(6, this.OP_EXPONENT_DOUBLE);
     this.detailed_exponent_operators.Add(5, this.OP_EXPONENT_DECIMAL);
     this.detailed_operators.AddFrom(this.detailed_exponent_operators);
     this.detailed_division_operators = new Contact_Integers(7);
     this.detailed_division_operators.Add(8, this.OP_DIVISION_INT);
     this.detailed_division_operators.Add(13, this.OP_DIVISION_UINT);
     this.detailed_division_operators.Add(9, this.OP_DIVISION_LONG);
     this.detailed_division_operators.Add(14, this.OP_DIVISION_ULONG);
     this.detailed_division_operators.Add(7, this.OP_DIVISION_FLOAT);
     this.detailed_division_operators.Add(6, this.OP_DIVISION_DOUBLE);
     this.detailed_division_operators.Add(5, this.OP_DIVISION_DECIMAL);
     this.detailed_operators.AddFrom(this.detailed_division_operators);
     this.detailed_remainder_operators = new Contact_Integers(7);
     this.detailed_remainder_operators.Add(8, this.OP_REMAINDER_INT);
     this.detailed_remainder_operators.Add(13, this.OP_REMAINDER_UINT);
     this.detailed_remainder_operators.Add(9, this.OP_REMAINDER_LONG);
     this.detailed_remainder_operators.Add(14, this.OP_REMAINDER_ULONG);
     this.detailed_remainder_operators.Add(7, this.OP_REMAINDER_FLOAT);
     this.detailed_remainder_operators.Add(6, this.OP_REMAINDER_DOUBLE);
     this.detailed_remainder_operators.Add(5, this.OP_REMAINDER_DECIMAL);
     this.detailed_operators.AddFrom(this.detailed_remainder_operators);
     this.detailed_left_shift_operators = new Contact_Integers(4);
     this.detailed_left_shift_operators.Add(8, this.OP_LEFT_SHIFT_INT);
     this.detailed_left_shift_operators.Add(13, this.OP_LEFT_SHIFT_UINT);
     this.detailed_left_shift_operators.Add(9, this.OP_LEFT_SHIFT_LONG);
     this.detailed_left_shift_operators.Add(14, this.OP_LEFT_SHIFT_ULONG);
     this.detailed_operators.AddFrom(this.detailed_left_shift_operators);
     this.detailed_right_shift_operators = new Contact_Integers(4);
     this.detailed_right_shift_operators.Add(8, this.OP_RIGHT_SHIFT_INT);
     this.detailed_right_shift_operators.Add(13, this.OP_RIGHT_SHIFT_UINT);
     this.detailed_right_shift_operators.Add(9, this.OP_RIGHT_SHIFT_LONG);
     this.detailed_right_shift_operators.Add(14, this.OP_RIGHT_SHIFT_ULONG);
     this.detailed_operators.AddFrom(this.detailed_right_shift_operators);
     this.detailed_bitwise_and_operators = new Contact_Integers(5);
     this.detailed_bitwise_and_operators.Add(8, this.OP_BITWISE_AND_INT);
     this.detailed_bitwise_and_operators.Add(13, this.OP_BITWISE_AND_UINT);
     this.detailed_bitwise_and_operators.Add(9, this.OP_BITWISE_AND_LONG);
     this.detailed_bitwise_and_operators.Add(14, this.OP_BITWISE_AND_ULONG);
     this.detailed_bitwise_and_operators.Add(2, this.OP_BITWISE_AND_BOOL);
     this.detailed_operators.AddFrom(this.detailed_bitwise_and_operators);
     this.detailed_bitwise_or_operators = new Contact_Integers(5);
     this.detailed_bitwise_or_operators.Add(8, this.OP_BITWISE_OR_INT);
     this.detailed_bitwise_or_operators.Add(13, this.OP_BITWISE_OR_UINT);
     this.detailed_bitwise_or_operators.Add(9, this.OP_BITWISE_OR_LONG);
     this.detailed_bitwise_or_operators.Add(14, this.OP_BITWISE_OR_ULONG);
     this.detailed_bitwise_or_operators.Add(2, this.OP_BITWISE_OR_BOOL);
     this.detailed_operators.AddFrom(this.detailed_bitwise_or_operators);
     this.detailed_bitwise_xor_operators = new Contact_Integers(5);
     this.detailed_bitwise_xor_operators.Add(8, this.OP_BITWISE_XOR_INT);
     this.detailed_bitwise_xor_operators.Add(13, this.OP_BITWISE_XOR_UINT);
     this.detailed_bitwise_xor_operators.Add(9, this.OP_BITWISE_XOR_LONG);
     this.detailed_bitwise_xor_operators.Add(14, this.OP_BITWISE_XOR_ULONG);
     this.detailed_bitwise_xor_operators.Add(2, this.OP_BITWISE_XOR_BOOL);
     this.detailed_operators.AddFrom(this.detailed_bitwise_xor_operators);
     this.detailed_lt_operators = new Contact_Integers(8);
     this.detailed_lt_operators.Add(8, this.OP_LT_INT);
     this.detailed_lt_operators.Add(13, this.OP_LT_UINT);
     this.detailed_lt_operators.Add(9, this.OP_LT_LONG);
     this.detailed_lt_operators.Add(14, this.OP_LT_ULONG);
     this.detailed_lt_operators.Add(7, this.OP_LT_FLOAT);
     this.detailed_lt_operators.Add(6, this.OP_LT_DOUBLE);
     this.detailed_lt_operators.Add(5, this.OP_LT_DECIMAL);
     this.detailed_lt_operators.Add(12, this.OP_LT_STRING);
     this.detailed_operators.AddFrom(this.detailed_lt_operators);
     this.detailed_le_operators = new Contact_Integers(8);
     this.detailed_le_operators.Add(8, this.OP_LE_INT);
     this.detailed_le_operators.Add(13, this.OP_LE_UINT);
     this.detailed_le_operators.Add(9, this.OP_LE_LONG);
     this.detailed_le_operators.Add(14, this.OP_LE_ULONG);
     this.detailed_le_operators.Add(7, this.OP_LE_FLOAT);
     this.detailed_le_operators.Add(6, this.OP_LE_DOUBLE);
     this.detailed_le_operators.Add(5, this.OP_LE_DECIMAL);
     this.detailed_le_operators.Add(12, this.OP_LE_STRING);
     this.detailed_operators.AddFrom(this.detailed_le_operators);
     this.detailed_gt_operators = new Contact_Integers(8);
     this.detailed_gt_operators.Add(8, this.OP_GT_INT);
     this.detailed_gt_operators.Add(13, this.OP_GT_UINT);
     this.detailed_gt_operators.Add(9, this.OP_GT_LONG);
     this.detailed_gt_operators.Add(14, this.OP_GT_ULONG);
     this.detailed_gt_operators.Add(7, this.OP_GT_FLOAT);
     this.detailed_gt_operators.Add(6, this.OP_GT_DOUBLE);
     this.detailed_gt_operators.Add(5, this.OP_GT_DECIMAL);
     this.detailed_gt_operators.Add(12, this.OP_GT_STRING);
     this.detailed_operators.AddFrom(this.detailed_gt_operators);
     this.detailed_ge_operators = new Contact_Integers(8);
     this.detailed_ge_operators.Add(8, this.OP_GE_INT);
     this.detailed_ge_operators.Add(13, this.OP_GE_UINT);
     this.detailed_ge_operators.Add(9, this.OP_GE_LONG);
     this.detailed_ge_operators.Add(14, this.OP_GE_ULONG);
     this.detailed_ge_operators.Add(7, this.OP_GE_FLOAT);
     this.detailed_ge_operators.Add(6, this.OP_GE_DOUBLE);
     this.detailed_ge_operators.Add(5, this.OP_GE_DECIMAL);
     this.detailed_ge_operators.Add(12, this.OP_GE_STRING);
     this.detailed_operators.AddFrom(this.detailed_ge_operators);
     this.detailed_eq_operators = new Contact_Integers(10);
     this.detailed_eq_operators.Add(8, this.OP_EQ_INT);
     this.detailed_eq_operators.Add(13, this.OP_EQ_UINT);
     this.detailed_eq_operators.Add(9, this.OP_EQ_LONG);
     this.detailed_eq_operators.Add(14, this.OP_EQ_ULONG);
     this.detailed_eq_operators.Add(7, this.OP_EQ_FLOAT);
     this.detailed_eq_operators.Add(6, this.OP_EQ_DOUBLE);
     this.detailed_eq_operators.Add(5, this.OP_EQ_DECIMAL);
     this.detailed_eq_operators.Add(12, this.OP_EQ_STRING);
     this.detailed_eq_operators.Add(2, this.OP_EQ_BOOL);
     this.detailed_eq_operators.Add(0x10, this.OP_EQ_OBJECT);
     this.detailed_operators.AddFrom(this.detailed_eq_operators);
     this.detailed_ne_operators = new Contact_Integers(10);
     this.detailed_ne_operators.Add(8, this.OP_NE_INT);
     this.detailed_ne_operators.Add(13, this.OP_NE_UINT);
     this.detailed_ne_operators.Add(9, this.OP_NE_LONG);
     this.detailed_ne_operators.Add(14, this.OP_NE_ULONG);
     this.detailed_ne_operators.Add(7, this.OP_NE_FLOAT);
     this.detailed_ne_operators.Add(6, this.OP_NE_DOUBLE);
     this.detailed_ne_operators.Add(5, this.OP_NE_DECIMAL);
     this.detailed_ne_operators.Add(12, this.OP_NE_STRING);
     this.detailed_ne_operators.Add(2, this.OP_NE_BOOL);
     this.detailed_ne_operators.Add(0x10, this.OP_NE_OBJECT);
     this.detailed_operators.AddFrom(this.detailed_ne_operators);
     this.stack = new ObjectStack();
     this.state_stack = new IntegerStack();
     this.try_stack = new TryStack();
     this.checked_stack = new ObjectStack();
     this.custom_ex_list = new CSLite_TypedList(false);
     this.breakpoint_list = new BreakpointList(scripter);
     this.callstack = new CallStack(scripter);
     this.resume_stack = new IntegerStack();
     this.get_item_list = new ArrayList();
     this.arrProc = new ArrayList();
     for (num = 0; num < 0x3e8; num++)
     {
         this.arrProc.Add(null);
     }
     this.arrProc[-this.OP_BEGIN_MODULE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_END_MODULE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_CHECKED] = new Oper(this.OperChecked);
     this.arrProc[-this.OP_RESTORE_CHECKED_STATE] = new Oper(this.OperRestoreCheckedState);
     this.arrProc[-this.OP_LOCK] = new Oper(this.OperLock);
     this.arrProc[-this.OP_UNLOCK] = new Oper(this.OperUnlock);
     this.arrProc[-this.OP_DISPOSE] = new Oper(this.OperDispose);
     this.arrProc[-this.OP_TYPEOF] = new Oper(this.OperTypeOf);
     this.arrProc[-this.OP_CREATE_CLASS] = new Oper(this.OperCreateClass);
     this.arrProc[-this.OP_END_CLASS] = new Oper(this.OperNop);
     this.arrProc[-this.OP_CREATE_OBJECT] = new Oper(this.OperCreateObject);
     this.arrProc[-this.OP_CREATE_REFERENCE] = new Oper(this.OperCreateReference);
     this.arrProc[-this.OP_CREATE_ARRAY_INSTANCE] = new Oper(this.OperCreateArrayInstance);
     this.arrProc[-this.OP_SETUP_DELEGATE] = new Oper(this.OperSetupDelegate);
     this.arrProc[-this.OP_ADD_DELEGATES] = new Oper(this.OperAddDelegates);
     this.arrProc[-this.OP_SUB_DELEGATES] = new Oper(this.OperSubDelegates);
     this.arrProc[-this.OP_EQ_DELEGATES] = new Oper(this.OperEqDelegates);
     this.arrProc[-this.OP_NE_DELEGATES] = new Oper(this.OperNeDelegates);
     this.arrProc[-this.OP_ADDRESS_OF] = new Oper(this.OperNop);
     this.arrProc[-this.OP_CREATE_INDEX_OBJECT] = new Oper(this.OperCreateIndexObject);
     this.arrProc[-this.OP_ADD_INDEX] = new Oper(this.OperAddIndex);
     this.arrProc[-this.OP_SETUP_INDEX_OBJECT] = new Oper(this.OperSetupIndexObject);
     this.arrProc[-this.OP_CREATE_TYPE_REFERENCE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_CREATE_FIELD] = new Oper(this.OperCreateField);
     this.arrProc[-this.OP_CREATE_PROPERTY] = new Oper(this.OperCreateProperty);
     this.arrProc[-this.OP_CREATE_EVENT] = new Oper(this.OperCreateEvent);
     this.arrProc[-this.OP_CREATE_NAMESPACE] = new Oper(this.OperCreateNamespace);
     this.arrProc[-this.OP_BEGIN_USING] = new Oper(this.OperNop);
     this.arrProc[-this.OP_END_USING] = new Oper(this.OperNop);
     this.arrProc[-this.OP_ADD_MODIFIER] = new Oper(this.OperAddModifier);
     this.arrProc[-this.OP_ADD_ANCESTOR] = new Oper(this.OperNop);
     this.arrProc[-this.OP_ADD_UNDERLYING_TYPE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_ADD_READ_ACCESSOR] = new Oper(this.OperAddReadAccessor);
     this.arrProc[-this.OP_ADD_WRITE_ACCESSOR] = new Oper(this.OperAddWriteAccessor);
     this.arrProc[-this.OP_SET_DEFAULT] = new Oper(this.OperSetDefault);
     this.arrProc[-this.OP_ADD_ADD_ACCESSOR] = new Oper(this.OperAddAddAccessor);
     this.arrProc[-this.OP_ADD_REMOVE_ACCESSOR] = new Oper(this.OperAddRemoveAccessor);
     this.arrProc[-this.OP_ADD_PATTERN] = new Oper(this.OperAddPattern);
     this.arrProc[-this.OP_ADD_IMPLEMENTS] = new Oper(this.OperNop);
     this.arrProc[-this.OP_ADD_HANDLES] = new Oper(this.OperNop);
     this.arrProc[-this.OP_ADD_MIN_VALUE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_ADD_MAX_VALUE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_ADD_ARRAY_RANGE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_ADD_ARRAY_INDEX] = new Oper(this.OperNop);
     this.arrProc[-this.OP_BEGIN_CALL] = new Oper(this.OperNop);
     this.arrProc[-this.OP_ASSIGN_TYPE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_ASSIGN_COND_TYPE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_CREATE_USING_ALIAS] = new Oper(this.OperCreateUsingAlias);
     this.arrProc[-this.OP_CREATE_REF_TYPE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_SET_REF_TYPE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_EVAL] = new Oper(this.OperNop);
     this.arrProc[-this.OP_EVAL_TYPE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_EVAL_BASE_TYPE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_ASSIGN_NAME] = new Oper(this.OperNop);
     this.arrProc[-this.OP_NOP] = new Oper(this.OperNop);
     this.arrProc[-this.OP_INIT_STATIC_VAR] = new Oper(this.OperNop);
     this.arrProc[-this.OP_LABEL] = new Oper(this.OperNop);
     this.arrProc[-this.OP_ASSIGN] = new Oper(this.OperAssign);
     this.arrProc[-this.OP_ASSIGN_STRUCT] = new Oper(this.OperAssignStruct);
     this.arrProc[-this.OP_PLUS] = new Oper(this.OperPlus);
     this.arrProc[-this.OP_INC] = new Oper(this.OperPlus);
     this.arrProc[-this.OP_MINUS] = new Oper(this.OperMinus);
     this.arrProc[-this.OP_DEC] = new Oper(this.OperMinus);
     this.arrProc[-this.OP_MULT] = new Oper(this.OperMult);
     this.arrProc[-this.OP_EXPONENT] = new Oper(this.OperExp);
     this.arrProc[-this.OP_DIV] = new Oper(this.OperDiv);
     this.arrProc[-this.OP_EQ] = new Oper(this.OperEq);
     this.arrProc[-this.OP_NE] = new Oper(this.OperNe);
     this.arrProc[-this.OP_GT] = new Oper(this.OperGt);
     this.arrProc[-this.OP_GE] = new Oper(this.OperGe);
     this.arrProc[-this.OP_LT] = new Oper(this.OperLt);
     this.arrProc[-this.OP_LE] = new Oper(this.OperLe);
     this.arrProc[-this.OP_IS] = new Oper(this.OperIs);
     this.arrProc[-this.OP_AS] = new Oper(this.OperAs);
     this.arrProc[-this.OP_UPCASE_ON] = new Oper(this.OperNop);
     this.arrProc[-this.OP_UPCASE_OFF] = new Oper(this.OperNop);
     this.arrProc[-this.OP_EXPLICIT_ON] = new Oper(this.OperNop);
     this.arrProc[-this.OP_EXPLICIT_OFF] = new Oper(this.OperNop);
     this.arrProc[-this.OP_STRICT_ON] = new Oper(this.OperNop);
     this.arrProc[-this.OP_STRICT_OFF] = new Oper(this.OperNop);
     this.arrProc[-this.OP_HALT] = new Oper(this.OperHalt);
     this.arrProc[-this.OP_PRINT] = new Oper(this.OperPrint);
     this.arrProc[-this.OP_GO] = new Oper(this.OperGo);
     this.arrProc[-this.OP_GO_FALSE] = new Oper(this.OperGoFalse);
     this.arrProc[-this.OP_GO_TRUE] = new Oper(this.OperGoTrue);
     this.arrProc[-this.OP_GO_NULL] = new Oper(this.OperGoNull);
     this.arrProc[-this.OP_GOTO_START] = new Oper(this.OperGotoStart);
     this.arrProc[-this.OP_GOTO_CONTINUE] = new Oper(this.OperGotoContinue);
     this.arrProc[-this.OP_CREATE_METHOD] = new Oper(this.OperCreateMethod);
     this.arrProc[-this.OP_ADD_EXPLICIT_INTERFACE] = new Oper(this.OperAddExplicitInterface);
     this.arrProc[-this.OP_ADD_PARAM] = new Oper(this.OperAddParam);
     this.arrProc[-this.OP_ADD_PARAMS] = new Oper(this.OperAddParams);
     this.arrProc[-this.OP_ADD_DEFAULT_VALUE] = new Oper(this.OperAddDefaultValue);
     this.arrProc[-this.OP_INIT_METHOD] = new Oper(this.OperInitMethod);
     this.arrProc[-this.OP_DECLARE_LOCAL_VARIABLE] = new Oper(this.OperDeclareLocalVariable);
     this.arrProc[-this.OP_DECLARE_LOCAL_VARIABLE_RUNTIME] = new Oper(this.OperNop);
     this.arrProc[-this.OP_DECLARE_LOCAL_SIMPLE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_END_METHOD] = new Oper(this.OperEndMethod);
     this.arrProc[-this.OP_ADD_EVENT_FIELD] = new Oper(this.OperAddEventField);
     this.arrProc[-this.OP_CALL] = new Oper(this.OperCall);
     this.arrProc[-this.OP_CALL_BASE] = new Oper(this.OperCallBase);
     this.arrProc[-this.OP_CALL_SIMPLE] = new Oper(this.OperCall);
     this.arrProc[-this.OP_CALL_VIRT] = new Oper(this.OperCallVirt);
     this.arrProc[-this.OP_DYNAMIC_INVOKE] = new Oper(this.OperDynamicInvoke);
     this.arrProc[-this.OP_CHECK_STRUCT_CONSTRUCTOR] = new Oper(this.OperNop);
     this.arrProc[-this.OP_INSERT_STRUCT_CONSTRUCTORS] = new Oper(this.OperNop);
     this.arrProc[-this.OP_CALL_ADD_EVENT] = new Oper(this.OperCallAddEvent);
     this.arrProc[-this.OP_RAISE_EVENT] = new Oper(this.OperNop);
     this.arrProc[-this.OP_FIND_FIRST_DELEGATE] = new Oper(this.OperFindFirstDelegate);
     this.arrProc[-this.OP_FIND_NEXT_DELEGATE] = new Oper(this.OperFindNextDelegate);
     this.arrProc[-this.OP_PUSH] = new Oper(this.OperPush);
     this.arrProc[-this.OP_RET] = new Oper(this.OperRet);
     this.arrProc[-this.OP_EXIT_SUB] = new Oper(this.OperExitSub);
     this.arrProc[-this.OP_GET_PARAM_VALUE] = new Oper(this.OperGetParamValue);
     this.arrProc[-this.OP_CAST] = new Oper(this.OperCast);
     this.arrProc[-this.OP_TO_SBYTE] = new Oper(this.OperToSbyte);
     this.arrProc[-this.OP_TO_BYTE] = new Oper(this.OperToByte);
     this.arrProc[-this.OP_TO_USHORT] = new Oper(this.OperToUshort);
     this.arrProc[-this.OP_TO_SHORT] = new Oper(this.OperToShort);
     this.arrProc[-this.OP_TO_UINT] = new Oper(this.OperToUint);
     this.arrProc[-this.OP_TO_INT] = new Oper(this.OperToInt);
     this.arrProc[-this.OP_TO_ULONG] = new Oper(this.OperToUlong);
     this.arrProc[-this.OP_TO_LONG] = new Oper(this.OperToLong);
     this.arrProc[-this.OP_TO_CHAR] = new Oper(this.OperToChar);
     this.arrProc[-this.OP_TO_FLOAT] = new Oper(this.OperToFloat);
     this.arrProc[-this.OP_TO_DOUBLE] = new Oper(this.OperToDouble);
     this.arrProc[-this.OP_TO_DECIMAL] = new Oper(this.OperToDecimal);
     this.arrProc[-this.OP_TO_STRING] = new Oper(this.OperToString);
     this.arrProc[-this.OP_TO_BOOLEAN] = new Oper(this.OperToBoolean);
     this.arrProc[-this.OP_TO_ENUM] = new Oper(this.OperToEnum);
     this.arrProc[-this.OP_TO_CHAR_ARRAY] = new Oper(this.OperToCharArray);
     this.arrProc[-this.OP_TRY_ON] = new Oper(this.OperTryOn);
     this.arrProc[-this.OP_TRY_OFF] = new Oper(this.OperTryOff);
     this.arrProc[-this.OP_THROW] = new Oper(this.OperThrow);
     this.arrProc[-this.OP_CATCH] = new Oper(this.OperCatch);
     this.arrProc[-this.OP_FINALLY] = new Oper(this.OperFinally);
     this.arrProc[-this.OP_DISCARD_ERROR] = new Oper(this.OperDiscardError);
     this.arrProc[-this.OP_EXIT_ON_ERROR] = new Oper(this.OperExitOnError);
     this.arrProc[-this.OP_ONERROR] = new Oper(this.OperOnError);
     this.arrProc[-this.OP_RESUME] = new Oper(this.OperResume);
     this.arrProc[-this.OP_RESUME_NEXT] = new Oper(this.OperResumeNext);
     this.arrProc[-this.OP_SEPARATOR] = new Oper(this.OperNop);
     this.arrProc[-this.OP_DEFINE] = new Oper(this.OperNop);
     this.arrProc[-this.OP_UNDEF] = new Oper(this.OperNop);
     this.arrProc[-this.OP_START_REGION] = new Oper(this.OperNop);
     this.arrProc[-this.OP_END_REGION] = new Oper(this.OperNop);
     this.arrProc[-this.OP_NEGATION_INT] = new Oper(this.OperNegationInt);
     this.arrProc[-this.OP_NEGATION_LONG] = new Oper(this.OperNegationLong);
     this.arrProc[-this.OP_NEGATION_FLOAT] = new Oper(this.OperNegationFloat);
     this.arrProc[-this.OP_NEGATION_DOUBLE] = new Oper(this.OperNegationDouble);
     this.arrProc[-this.OP_NEGATION_DECIMAL] = new Oper(this.OperNegationDecimal);
     this.arrProc[-this.OP_LOGICAL_NEGATION_BOOL] = new Oper(this.OperLogicalNegationBool);
     this.arrProc[-this.OP_BITWISE_COMPLEMENT_INT] = new Oper(this.OperBitwiseComplementInt);
     this.arrProc[-this.OP_BITWISE_COMPLEMENT_UINT] = new Oper(this.OperBitwiseComplementUint);
     this.arrProc[-this.OP_BITWISE_COMPLEMENT_LONG] = new Oper(this.OperBitwiseComplementLong);
     this.arrProc[-this.OP_BITWISE_COMPLEMENT_ULONG] = new Oper(this.OperBitwiseComplementUlong);
     this.arrProc[-this.OP_INC_SBYTE] = new Oper(this.OperIncSbyte);
     this.arrProc[-this.OP_INC_BYTE] = new Oper(this.OperIncByte);
     this.arrProc[-this.OP_INC_SHORT] = new Oper(this.OperIncShort);
     this.arrProc[-this.OP_INC_USHORT] = new Oper(this.OperIncUshort);
     this.arrProc[-this.OP_INC_INT] = new Oper(this.OperIncInt);
     this.arrProc[-this.OP_INC_UINT] = new Oper(this.OperIncUint);
     this.arrProc[-this.OP_INC_LONG] = new Oper(this.OperIncLong);
     this.arrProc[-this.OP_INC_ULONG] = new Oper(this.OperIncUlong);
     this.arrProc[-this.OP_INC_CHAR] = new Oper(this.OperIncChar);
     this.arrProc[-this.OP_INC_FLOAT] = new Oper(this.OperIncFloat);
     this.arrProc[-this.OP_INC_DOUBLE] = new Oper(this.OperIncDouble);
     this.arrProc[-this.OP_INC_DECIMAL] = new Oper(this.OperIncDecimal);
     this.arrProc[-this.OP_DEC_SBYTE] = new Oper(this.OperDecSbyte);
     this.arrProc[-this.OP_DEC_BYTE] = new Oper(this.OperDecByte);
     this.arrProc[-this.OP_DEC_SHORT] = new Oper(this.OperDecShort);
     this.arrProc[-this.OP_DEC_USHORT] = new Oper(this.OperDecUshort);
     this.arrProc[-this.OP_DEC_INT] = new Oper(this.OperDecInt);
     this.arrProc[-this.OP_DEC_UINT] = new Oper(this.OperDecUint);
     this.arrProc[-this.OP_DEC_LONG] = new Oper(this.OperDecLong);
     this.arrProc[-this.OP_DEC_ULONG] = new Oper(this.OperDecUlong);
     this.arrProc[-this.OP_DEC_CHAR] = new Oper(this.OperDecChar);
     this.arrProc[-this.OP_DEC_FLOAT] = new Oper(this.OperDecFloat);
     this.arrProc[-this.OP_DEC_DOUBLE] = new Oper(this.OperDecDouble);
     this.arrProc[-this.OP_DEC_DECIMAL] = new Oper(this.OperDecDecimal);
     this.arrProc[-this.OP_ADDITION_INT] = new Oper(this.OperAdditionInt);
     this.arrProc[-this.OP_ADDITION_UINT] = new Oper(this.OperAdditionUint);
     this.arrProc[-this.OP_ADDITION_LONG] = new Oper(this.OperAdditionLong);
     this.arrProc[-this.OP_ADDITION_ULONG] = new Oper(this.OperAdditionUlong);
     this.arrProc[-this.OP_ADDITION_FLOAT] = new Oper(this.OperAdditionFloat);
     this.arrProc[-this.OP_ADDITION_DOUBLE] = new Oper(this.OperAdditionDouble);
     this.arrProc[-this.OP_ADDITION_DECIMAL] = new Oper(this.OperAdditionDecimal);
     this.arrProc[-this.OP_ADDITION_STRING] = new Oper(this.OperAdditionString);
     this.arrProc[-this.OP_SUBTRACTION_INT] = new Oper(this.OperSubtractionInt);
     this.arrProc[-this.OP_SUBTRACTION_UINT] = new Oper(this.OperSubtractionUint);
     this.arrProc[-this.OP_SUBTRACTION_LONG] = new Oper(this.OperSubtractionLong);
     this.arrProc[-this.OP_SUBTRACTION_ULONG] = new Oper(this.OperSubtractionUlong);
     this.arrProc[-this.OP_SUBTRACTION_FLOAT] = new Oper(this.OperSubtractionFloat);
     this.arrProc[-this.OP_SUBTRACTION_DOUBLE] = new Oper(this.OperSubtractionDouble);
     this.arrProc[-this.OP_SUBTRACTION_DECIMAL] = new Oper(this.OperSubtractionDecimal);
     this.arrProc[-this.OP_MULTIPLICATION_INT] = new Oper(this.OperMultiplicationInt);
     this.arrProc[-this.OP_MULTIPLICATION_UINT] = new Oper(this.OperMultiplicationUint);
     this.arrProc[-this.OP_MULTIPLICATION_LONG] = new Oper(this.OperMultiplicationLong);
     this.arrProc[-this.OP_MULTIPLICATION_ULONG] = new Oper(this.OperMultiplicationUlong);
     this.arrProc[-this.OP_MULTIPLICATION_FLOAT] = new Oper(this.OperMultiplicationFloat);
     this.arrProc[-this.OP_MULTIPLICATION_DOUBLE] = new Oper(this.OperMultiplicationDouble);
     this.arrProc[-this.OP_MULTIPLICATION_DECIMAL] = new Oper(this.OperMultiplicationDecimal);
     this.arrProc[-this.OP_EXPONENT_INT] = new Oper(this.OperExponentInt);
     this.arrProc[-this.OP_EXPONENT_UINT] = new Oper(this.OperExponentUint);
     this.arrProc[-this.OP_EXPONENT_LONG] = new Oper(this.OperExponentLong);
     this.arrProc[-this.OP_EXPONENT_ULONG] = new Oper(this.OperExponentUlong);
     this.arrProc[-this.OP_EXPONENT_FLOAT] = new Oper(this.OperExponentFloat);
     this.arrProc[-this.OP_EXPONENT_DOUBLE] = new Oper(this.OperExponentDouble);
     this.arrProc[-this.OP_EXPONENT_DECIMAL] = new Oper(this.OperExponentDecimal);
     this.arrProc[-this.OP_DIVISION_INT] = new Oper(this.OperDivisionInt);
     this.arrProc[-this.OP_DIVISION_UINT] = new Oper(this.OperDivisionUint);
     this.arrProc[-this.OP_DIVISION_LONG] = new Oper(this.OperDivisionLong);
     this.arrProc[-this.OP_DIVISION_ULONG] = new Oper(this.OperDivisionUlong);
     this.arrProc[-this.OP_DIVISION_FLOAT] = new Oper(this.OperDivisionFloat);
     this.arrProc[-this.OP_DIVISION_DOUBLE] = new Oper(this.OperDivisionDouble);
     this.arrProc[-this.OP_DIVISION_DECIMAL] = new Oper(this.OperDivisionDecimal);
     this.arrProc[-this.OP_REMAINDER_INT] = new Oper(this.OperRemainderInt);
     this.arrProc[-this.OP_REMAINDER_UINT] = new Oper(this.OperRemainderUint);
     this.arrProc[-this.OP_REMAINDER_LONG] = new Oper(this.OperRemainderLong);
     this.arrProc[-this.OP_REMAINDER_ULONG] = new Oper(this.OperRemainderUlong);
     this.arrProc[-this.OP_REMAINDER_FLOAT] = new Oper(this.OperRemainderFloat);
     this.arrProc[-this.OP_REMAINDER_DOUBLE] = new Oper(this.OperRemainderDouble);
     this.arrProc[-this.OP_REMAINDER_DECIMAL] = new Oper(this.OperRemainderDecimal);
     this.arrProc[-this.OP_LEFT_SHIFT_INT] = new Oper(this.OperLeftShiftInt);
     this.arrProc[-this.OP_LEFT_SHIFT_UINT] = new Oper(this.OperLeftShiftUint);
     this.arrProc[-this.OP_LEFT_SHIFT_LONG] = new Oper(this.OperLeftShiftLong);
     this.arrProc[-this.OP_LEFT_SHIFT_ULONG] = new Oper(this.OperLeftShiftUlong);
     this.arrProc[-this.OP_RIGHT_SHIFT_INT] = new Oper(this.OperRightShiftInt);
     this.arrProc[-this.OP_RIGHT_SHIFT_UINT] = new Oper(this.OperRightShiftUint);
     this.arrProc[-this.OP_RIGHT_SHIFT_LONG] = new Oper(this.OperRightShiftLong);
     this.arrProc[-this.OP_RIGHT_SHIFT_ULONG] = new Oper(this.OperRightShiftUlong);
     this.arrProc[-this.OP_BITWISE_AND_INT] = new Oper(this.OperBitwiseAndInt);
     this.arrProc[-this.OP_BITWISE_AND_UINT] = new Oper(this.OperBitwiseAndUint);
     this.arrProc[-this.OP_BITWISE_AND_LONG] = new Oper(this.OperBitwiseAndLong);
     this.arrProc[-this.OP_BITWISE_AND_ULONG] = new Oper(this.OperBitwiseAndUlong);
     this.arrProc[-this.OP_BITWISE_AND_BOOL] = new Oper(this.OperBitwiseAndBool);
     this.arrProc[-this.OP_BITWISE_OR_INT] = new Oper(this.OperBitwiseOrInt);
     this.arrProc[-this.OP_BITWISE_OR_UINT] = new Oper(this.OperBitwiseOrUint);
     this.arrProc[-this.OP_BITWISE_OR_LONG] = new Oper(this.OperBitwiseOrLong);
     this.arrProc[-this.OP_BITWISE_OR_ULONG] = new Oper(this.OperBitwiseOrUlong);
     this.arrProc[-this.OP_BITWISE_OR_BOOL] = new Oper(this.OperBitwiseOrBool);
     this.arrProc[-this.OP_BITWISE_XOR_INT] = new Oper(this.OperBitwiseXorInt);
     this.arrProc[-this.OP_BITWISE_XOR_UINT] = new Oper(this.OperBitwiseXorUint);
     this.arrProc[-this.OP_BITWISE_XOR_LONG] = new Oper(this.OperBitwiseXorLong);
     this.arrProc[-this.OP_BITWISE_XOR_ULONG] = new Oper(this.OperBitwiseXorUlong);
     this.arrProc[-this.OP_BITWISE_XOR_BOOL] = new Oper(this.OperBitwiseXorBool);
     this.arrProc[-this.OP_LT_INT] = new Oper(this.OperLessThanInt);
     this.arrProc[-this.OP_LT_UINT] = new Oper(this.OperLessThanUint);
     this.arrProc[-this.OP_LT_LONG] = new Oper(this.OperLessThanLong);
     this.arrProc[-this.OP_LT_ULONG] = new Oper(this.OperLessThanUlong);
     this.arrProc[-this.OP_LT_FLOAT] = new Oper(this.OperLessThanFloat);
     this.arrProc[-this.OP_LT_DOUBLE] = new Oper(this.OperLessThanDouble);
     this.arrProc[-this.OP_LT_DECIMAL] = new Oper(this.OperLessThanDecimal);
     this.arrProc[-this.OP_LT_STRING] = new Oper(this.OperLessThanString);
     this.arrProc[-this.OP_LE_INT] = new Oper(this.OperLessThanOrEqualInt);
     this.arrProc[-this.OP_LE_UINT] = new Oper(this.OperLessThanOrEqualUint);
     this.arrProc[-this.OP_LE_LONG] = new Oper(this.OperLessThanOrEqualLong);
     this.arrProc[-this.OP_LE_ULONG] = new Oper(this.OperLessThanOrEqualUlong);
     this.arrProc[-this.OP_LE_FLOAT] = new Oper(this.OperLessThanOrEqualFloat);
     this.arrProc[-this.OP_LE_DOUBLE] = new Oper(this.OperLessThanOrEqualDouble);
     this.arrProc[-this.OP_LE_DECIMAL] = new Oper(this.OperLessThanOrEqualDecimal);
     this.arrProc[-this.OP_LE_STRING] = new Oper(this.OperLessThanOrEqualString);
     this.arrProc[-this.OP_GT_INT] = new Oper(this.OperGreaterThanInt);
     this.arrProc[-this.OP_GT_UINT] = new Oper(this.OperGreaterThanUint);
     this.arrProc[-this.OP_GT_LONG] = new Oper(this.OperGreaterThanLong);
     this.arrProc[-this.OP_GT_ULONG] = new Oper(this.OperGreaterThanUlong);
     this.arrProc[-this.OP_GT_FLOAT] = new Oper(this.OperGreaterThanFloat);
     this.arrProc[-this.OP_GT_DOUBLE] = new Oper(this.OperGreaterThanDouble);
     this.arrProc[-this.OP_GT_DECIMAL] = new Oper(this.OperGreaterThanDecimal);
     this.arrProc[-this.OP_GT_STRING] = new Oper(this.OperGreaterThanString);
     this.arrProc[-this.OP_GE_INT] = new Oper(this.OperGreaterThanOrEqualInt);
     this.arrProc[-this.OP_GE_UINT] = new Oper(this.OperGreaterThanOrEqualUint);
     this.arrProc[-this.OP_GE_LONG] = new Oper(this.OperGreaterThanOrEqualLong);
     this.arrProc[-this.OP_GE_ULONG] = new Oper(this.OperGreaterThanOrEqualUlong);
     this.arrProc[-this.OP_GE_FLOAT] = new Oper(this.OperGreaterThanOrEqualFloat);
     this.arrProc[-this.OP_GE_DOUBLE] = new Oper(this.OperGreaterThanOrEqualDouble);
     this.arrProc[-this.OP_GE_DECIMAL] = new Oper(this.OperGreaterThanOrEqualDecimal);
     this.arrProc[-this.OP_GE_STRING] = new Oper(this.OperGreaterThanOrEqualString);
     this.arrProc[-this.OP_EQ_INT] = new Oper(this.OperEqualityInt);
     this.arrProc[-this.OP_EQ_UINT] = new Oper(this.OperEqualityUint);
     this.arrProc[-this.OP_EQ_LONG] = new Oper(this.OperEqualityLong);
     this.arrProc[-this.OP_EQ_ULONG] = new Oper(this.OperEqualityUlong);
     this.arrProc[-this.OP_EQ_FLOAT] = new Oper(this.OperEqualityFloat);
     this.arrProc[-this.OP_EQ_DOUBLE] = new Oper(this.OperEqualityDouble);
     this.arrProc[-this.OP_EQ_DECIMAL] = new Oper(this.OperEqualityDecimal);
     this.arrProc[-this.OP_EQ_STRING] = new Oper(this.OperEqualityString);
     this.arrProc[-this.OP_EQ_BOOL] = new Oper(this.OperEqualityBool);
     this.arrProc[-this.OP_EQ_OBJECT] = new Oper(this.OperEqualityObject);
     this.arrProc[-this.OP_NE_INT] = new Oper(this.OperInequalityInt);
     this.arrProc[-this.OP_NE_UINT] = new Oper(this.OperInequalityUint);
     this.arrProc[-this.OP_NE_LONG] = new Oper(this.OperInequalityLong);
     this.arrProc[-this.OP_NE_ULONG] = new Oper(this.OperInequalityUlong);
     this.arrProc[-this.OP_NE_FLOAT] = new Oper(this.OperInequalityFloat);
     this.arrProc[-this.OP_NE_DOUBLE] = new Oper(this.OperInequalityDouble);
     this.arrProc[-this.OP_NE_DECIMAL] = new Oper(this.OperInequalityDecimal);
     this.arrProc[-this.OP_NE_STRING] = new Oper(this.OperInequalityString);
     this.arrProc[-this.OP_NE_BOOL] = new Oper(this.OperInequalityBool);
     this.arrProc[-this.OP_NE_OBJECT] = new Oper(this.OperInequalityObject);
     this.arrProc[-this.OP_SWAPPED_ARGUMENTS] = new Oper(this.OperSwappedArguments);
     this.prog = new ArrayList();
     for (num = 0; num < 0x3e8; num++)
     {
         this.prog.Add(new ProgRec());
     }
     this.n = 0;
     this.card = 0;
 }
Ejemplo n.º 8
0
 private MemberObject FindType(IntegerStack l, string type_name, bool upcase)
 {
     int num;
     string str = CSLite_System.ExtractPrefixName(type_name, out num);
     if (num >= 0)
     {
         if (str == "bool")
         {
             str = "Boolean" + type_name.Substring(num);
         }
         else if (str == "byte")
         {
             str = "Byte" + type_name.Substring(num);
         }
         else if (str == "char")
         {
             str = "Char" + type_name.Substring(num);
         }
         else if (str == "decimal")
         {
             str = "Decimal" + type_name.Substring(num);
         }
         else if (str == "double")
         {
             str = "double" + type_name.Substring(num);
         }
         else if (str == "single")
         {
             str = "Single" + type_name.Substring(num);
         }
         else if (str == "int")
         {
             str = "Int32" + type_name.Substring(num);
         }
         else if (str == "long")
         {
             str = "Int64" + type_name.Substring(num);
         }
         else if (str == "sbyte")
         {
             str = "SByte" + type_name.Substring(num);
         }
         else if (str == "short")
         {
             str = "Int16" + type_name.Substring(num);
         }
         else if (str == "string")
         {
             str = "String" + type_name.Substring(num);
         }
         else if (str == "uint")
         {
             str = "UInt32" + type_name.Substring(num);
         }
         else if (str == "ulong")
         {
             str = "UInt64" + type_name.Substring(num);
         }
         else if (str == "ushort")
         {
             str = "UInt16" + type_name.Substring(num);
         }
         else
         {
             str = type_name;
         }
     }
     string typeName = str;
     Type t = Type.GetType(typeName);
     if (t == null)
     {
         t = this.scripter.FindAvailableType(typeName, upcase);
     }
     if (t != null)
     {
         int id = this.symbol_table.RegisterType(t, true);
         return this.GetMemberObject(id);
     }
     for (int i = l.Count - 1; i >= 0; i--)
     {
         int num4 = l[i];
         typeName = this.symbol_table[num4].FullName + "." + str;
         t = Type.GetType(typeName);
         if (t == null)
         {
             t = this.scripter.FindAvailableType(typeName, upcase);
         }
         if (t != null)
         {
             int num5 = this.symbol_table.RegisterType(t, true);
             return this.GetMemberObject(num5);
         }
     }
     return null;
 }
Ejemplo n.º 9
0
 public void RemoveEvalOpEx(int init_n, IntegerStack init_l)
 {
     if (!this.scripter.IsError())
     {
         IntegerStack stack;
         if (init_l == null)
         {
             stack = new IntegerStack();
         }
         else
         {
             stack = init_l.Clone();
         }
         for (int i = init_n + 1; i <= this.Card; i++)
         {
             bool flag;
             this.r = (ProgRec) this.prog[i];
             int op = this.r.op;
             this.n = i;
             if (op == this.OP_CREATE_METHOD)
             {
                 stack.Push(this.r.arg1);
                 int id = this.r.arg1;
                 int num4 = this.r.arg2;
                 MemberObject memberObject = this.GetMemberObject(id);
                 flag = memberObject.HasModifier(Modifier.New);
                 bool upcase = this.GetUpcase(this.n);
                 ClassObject classObject = this.GetClassObject(num4);
                 for (int j = 0; j < classObject.AncestorIds.Count; j++)
                 {
                     ClassObject obj4 = this.GetClassObject(classObject.AncestorIds[j]);
                     MemberObject memberByNameIndex = obj4.GetMemberByNameIndex(memberObject.NameIndex, upcase);
                     if (memberByNameIndex != null)
                     {
                         if ((!flag && !obj4.IsInterface) && (((!memberObject.HasModifier(Modifier.Override) || !memberByNameIndex.HasModifier(Modifier.Virtual)) && !memberObject.HasModifier(Modifier.Override)) && !memberObject.HasModifier(Modifier.Shadows)))
                         {
                             this.scripter.CreateWarningObjectEx("CS0108. The keyword new is required on '{0}' because it hides inherited member '{1}'", new object[] { memberObject.FullName, obj4.FullName + "." + memberObject.Name });
                         }
                     }
                     else if (flag)
                     {
                         this.scripter.CreateWarningObjectEx("CS0109. The member '{0}' does not hide an inherited member. The new keyword is not required.", new object[] { memberObject.FullName });
                     }
                 }
             }
             else if (op == this.OP_RET)
             {
                 stack.Pop();
             }
             else if (op == this.OP_BEGIN_USING)
             {
                 int res = this.r.arg1;
                 while (this.symbol_table[res].Kind == MemberKind.Alias)
                 {
                     MemberObject obj6 = this.GetMemberObject(res);
                     res = this[obj6.PCodeLine].res;
                 }
                 string fullName = this.symbol_table[res].FullName;
                 if (this.scripter.CheckForbiddenNamespace(fullName))
                 {
                     this.scripter.CreateErrorObjectEx("CSLite0006. Use of forbidden namespace '{0}'.", new object[] { fullName });
                 }
                 stack.Push(res);
             }
             else if (op == this.OP_END_USING)
             {
                 stack.Pop();
             }
             else if (op == this.OP_ADD_ANCESTOR)
             {
                 this.ProcessAddAncestor();
                 if (this.scripter.IsError())
                 {
                     break;
                 }
             }
             else if (((op == this.OP_CREATE_FIELD) || (op == this.OP_CREATE_EVENT)) || (op == this.OP_CREATE_PROPERTY))
             {
                 int num7 = this.r.arg1;
                 int num8 = this.r.arg2;
                 MemberObject obj7 = this.GetMemberObject(num7);
                 flag = obj7.HasModifier(Modifier.New);
                 ClassObject obj8 = this.GetClassObject(num8);
                 bool flag4 = this.GetUpcase(this.n);
                 for (int k = 0; k < obj8.AncestorIds.Count; k++)
                 {
                     ClassObject obj9 = this.GetClassObject(obj8.AncestorIds[k]);
                     if (obj9.GetMemberByNameIndex(obj7.NameIndex, flag4) != null)
                     {
                         if (!(((flag || obj9.IsInterface) || obj7.HasModifier(Modifier.Override)) || obj7.HasModifier(Modifier.Shadows)))
                         {
                             this.scripter.CreateWarningObjectEx("CS0108. The keyword new is required on '{0}' because it hides inherited member '{1}'", new object[] { obj7.FullName, obj9.FullName + "." + obj7.Name });
                         }
                     }
                     else if (flag)
                     {
                         this.scripter.CreateWarningObjectEx("CS0109. The member '{0}' does not hide an inherited member. The new keyword is not required.", new object[] { obj7.FullName });
                     }
                 }
             }
             else if (op == this.OP_EVAL_TYPE)
             {
                 this.ProcessEvalType(stack);
                 if (this.scripter.IsError())
                 {
                     break;
                 }
             }
             else if (op == this.OP_ADD_UNDERLYING_TYPE)
             {
                 int num10 = this.r.arg1;
                 int num11 = this.r.arg2;
                 ClassObject obj10 = this.GetClassObject(num10);
                 ClassObject obj11 = this.GetClassObject(num11);
                 obj10.UnderlyingType = obj11;
             }
             else if (op == this.OP_EVAL)
             {
                 if ((this[this.n + 1].op == this.OP_EVAL_TYPE) && (this[this.n + 1].res == this.r.res))
                 {
                     this.r.op = this.OP_NOP;
                 }
                 else
                 {
                     this.ProcessEvalOp(stack);
                     if (this.scripter.IsError())
                     {
                         break;
                     }
                 }
             }
         }
         if (!this.scripter.IsError())
         {
             for (int m = init_n + 1; m <= this.Card; m++)
             {
                 this.r = (ProgRec) this.prog[m];
                 int num13 = this.r.op;
                 this.n = m;
                 if (num13 == this.OP_EVAL_BASE_TYPE)
                 {
                     ClassObject obj12 = this.GetClassObject(this.r.arg1);
                     ClassObject ancestorClass = obj12.AncestorClass;
                     if (ancestorClass == null)
                     {
                         int num14 = 0x10;
                         ancestorClass = this.GetClassObject(num14);
                         obj12.AncestorIds.Add(num14);
                     }
                     this.ReplaceId(this.r.res, ancestorClass.Id);
                     if (this.r.arg2 != 0)
                     {
                         FunctionObject obj14;
                         int num15 = ancestorClass.FindConstructorId(null, null, out obj14);
                         if (num15 != 0)
                         {
                             this.ReplaceId(this.r.arg2, num15);
                         }
                     }
                     this.r.op = this.OP_NOP;
                 }
                 else if (num13 == this.OP_CAST)
                 {
                     this.symbol_table[this.r.res].TypeId = this.r.arg1;
                 }
                 else if (num13 == this.OP_ASSIGN_NAME)
                 {
                     this.symbol_table[this.r.res].NameIndex = this.symbol_table[this.r.arg2].NameIndex;
                 }
             }
         }
     }
 }
Ejemplo n.º 10
0
 public IntegerStack RecreateLevelStack(int init_n)
 {
     Module module = this.GetModule(init_n);
     if (module == null)
     {
         return null;
     }
     IntegerStack stack = new IntegerStack();
     for (int i = module.P1; i <= module.P2; i++)
     {
         if (this[i].op == this.OP_CREATE_METHOD)
         {
             stack.Push(this[i].arg1);
         }
         else if (this[i].op == this.OP_END_METHOD)
         {
             stack.Pop();
         }
         else if (this[i].op == this.OP_BEGIN_USING)
         {
             stack.Push(this[i].arg1);
         }
         else if (this[i].op == this.OP_END_USING)
         {
             stack.Pop();
         }
         if (i == init_n)
         {
             return stack;
         }
     }
     return stack;
 }
Ejemplo n.º 11
0
 public void ProcessEvalType(IntegerStack l)
 {
     bool upcase = this.GetUpcase();
     int nameIndex = this.symbol_table[this.r.res].NameIndex;
     string name = this.symbol_table[this.r.res].Name;
     if (this.scripter.IsStandardType(this.r.res))
     {
         if (this.NextInstruction(this.n).op == this.OP_CREATE_TYPE_REFERENCE)
         {
             name = name + "." + this.symbol_table[this.NextInstruction(this.n).res].Name;
             this.scripter.CreateErrorObjectEx("CS0246. The type or namespace name '{0}' could not be found (are you missing a using directive or an assembly reference?).", new object[] { name });
         }
         else
         {
             this.r.op = this.OP_NOP;
         }
         return;
     }
     MemberObject memberByNameIndex = null;
     for (int i = l.Count - 1; i >= 0; i--)
     {
         MemberObject memberObject = this.GetMemberObject(l[i]);
         if (memberObject.Kind == MemberKind.Type)
         {
             if (memberObject.NameIndex == nameIndex)
             {
                 memberByNameIndex = memberObject;
                 break;
             }
             memberByNameIndex = memberObject.GetMemberByNameIndex(nameIndex, upcase);
             if (memberByNameIndex != null)
             {
                 if (memberByNameIndex.Kind == MemberKind.Alias)
                 {
                     int id = memberByNameIndex.Id;
                     while (this.symbol_table[id].Kind == MemberKind.Alias)
                     {
                         memberByNameIndex = this.GetMemberObject(id);
                         id = this[memberByNameIndex.PCodeLine].res;
                     }
                     memberByNameIndex = this.GetMemberObject(id);
                     nameIndex = memberByNameIndex.NameIndex;
                 }
                 if ((memberByNameIndex.Kind == MemberKind.Type) && ((memberByNameIndex.NameIndex == nameIndex) || (upcase && (memberByNameIndex != null))))
                 {
                     break;
                 }
             }
         }
     }
     if (memberByNameIndex == null)
     {
         int startIndex = CSLite_System.PosCh('[', name);
         if (startIndex > 0)
         {
             if (this.GetClassObject(this.r.arg1).Imported)
             {
                 memberByNameIndex = this.FindType(l, name, upcase);
             }
             if (memberByNameIndex == null)
             {
                 string str2 = "Object" + name.Substring(startIndex);
                 memberByNameIndex = this.FindType(l, str2, upcase);
                 if (memberByNameIndex != null)
                 {
                     int num5 = this.symbol_table.AppVar();
                     this.symbol_table[num5].Name = name;
                     this.symbol_table[num5].Kind = MemberKind.Type;
                     int num6 = 0;
                     ClassObject obj5 = new ClassObject(this.scripter, num5, num6, ClassKind.Array);
                     obj5.Imported = true;
                     obj5.ImportedType = (memberByNameIndex as ClassObject).ImportedType;
                     obj5.RType = (memberByNameIndex as ClassObject).ImportedType;
                     this.PutVal(num5, obj5);
                     this.GetClassObject(num6).AddMember(obj5);
                     memberByNameIndex = obj5;
                 }
             }
         }
     }
     if (memberByNameIndex == null)
     {
         memberByNameIndex = this.FindType(l, name, upcase);
     }
     if (memberByNameIndex == null)
     {
         this.scripter.CreateErrorObjectEx("CS0246. The type or namespace name '{0}' could not be found (are you missing a using directive or an assembly reference?).", new object[] { name });
         return;
     }
     this.r.op = this.OP_NOP;
     Label_02F4:
     this.n++;
     ProgRec rec = (ProgRec) this.prog[this.n];
     if (rec.op == this.OP_SEPARATOR)
     {
         goto Label_02F4;
     }
     if (rec.op == this.OP_CREATE_TYPE_REFERENCE)
     {
         this.r.op = this.OP_NOP;
         this.r = (ProgRec) this.prog[this.n];
         MemberObject obj7 = this.GetMemberObject(memberByNameIndex.Id);
         if (obj7.Kind != MemberKind.Type)
         {
             this.scripter.CreateErrorObjectEx("CS0246. The type or namespace name '{0}' could not be found (are you missing a using directive or an assembly reference?).", new object[] { name });
         }
         else
         {
             nameIndex = this.symbol_table[this.r.res].NameIndex;
             memberByNameIndex = obj7.GetMemberByNameIndex(nameIndex, upcase);
             if (memberByNameIndex != null)
             {
                 goto Label_02F4;
             }
             name = this.symbol_table[this.r.res].FullName;
             if (memberByNameIndex == null)
             {
                 memberByNameIndex = this.FindType(l, name, upcase);
             }
             if (memberByNameIndex != null)
             {
                 goto Label_02F4;
             }
             this.scripter.CreateErrorObjectEx("CS0246. The type or namespace name '{0}' could not be found (are you missing a using directive or an assembly reference?).", new object[] { name });
         }
     }
     if (memberByNameIndex != null)
     {
         this.scripter.CheckForbiddenType(memberByNameIndex.Id);
     }
     this.r.op = this.OP_NOP;
     if (!this.scripter.IsError())
     {
         this.ReplaceIdEx(this.r.res, memberByNameIndex.Id, this.n, true);
     }
 }
Ejemplo n.º 12
0
 public void ProcessEvalOp(IntegerStack l)
 {
     bool upcase = this.GetUpcase();
     int nameIndex = this.symbol_table[this.r.res].NameIndex;
     int res = this.r.res;
     string name = this.symbol_table[res].Name;
     MemberObject memberByNameIndex = null;
     for (int i = l.Count - 1; i >= 0; i--)
     {
         MemberObject memberObject = this.GetMemberObject(l[i]);
         memberByNameIndex = memberObject.GetMemberByNameIndex(nameIndex, upcase);
         if ((memberByNameIndex != null) && ((memberByNameIndex.Kind != MemberKind.Constructor) || (i == (l.Count - 1))))
         {
             int id = l.Peek();
             MemberObject obj4 = this.GetMemberObject(id);
             if (obj4.Static)
             {
                 if (memberByNameIndex.Static)
                 {
                     this.r.op = this.OP_NOP;
                     this.ReplaceIdEx(this.r.res, memberByNameIndex.Id, this.n, true);
                     break;
                 }
                 if (this.GetCurrentClass(l).IsOuterMemberId(memberByNameIndex.Id))
                 {
                     this.scripter.CreateErrorObjectEx("CS0038. Cannot access a nonstatic member of outer type '{0}' via nested type '{1}'.", new object[] { memberObject.Name, this.GetCurrentClass(l).Name });
                     break;
                 }
                 memberByNameIndex = null;
             }
             else
             {
                 if (memberByNameIndex.Static)
                 {
                     this.r.op = this.OP_NOP;
                     this.ReplaceIdEx(this.r.res, memberByNameIndex.Id, this.n, true);
                 }
                 else if (this.GetCurrentClass(l).IsOuterMemberId(memberByNameIndex.Id))
                 {
                     this.scripter.CreateErrorObjectEx("CS0038. Cannot access a nonstatic member of outer type '{0}' via nested type '{1}'.", new object[] { memberObject.Name, this.GetCurrentClass(l).Name });
                 }
                 else if (obj4.Kind == MemberKind.Type)
                 {
                     this.r.op = this.OP_NOP;
                 }
                 else
                 {
                     FunctionObject obj5 = (FunctionObject) obj4;
                     this.r.op = this.OP_CREATE_REFERENCE;
                     this.r.arg1 = obj5.ThisId;
                     this.symbol_table[this.r.res].Level = this.r.arg1;
                     this.symbol_table[this.r.res].Kind = MemberKind.Ref;
                     this.symbol_table[this.r.res].TypeId = this.symbol_table[memberByNameIndex.Id].TypeId;
                 }
                 break;
             }
         }
     }
     if (memberByNameIndex == null)
     {
         memberByNameIndex = this.FindType(l, name, upcase);
         if (memberByNameIndex != null)
         {
             this.r.op = this.OP_NOP;
             this.ReplaceIdEx(this.r.res, memberByNameIndex.Id, this.n, true);
         }
         else if (this.symbol_table[res].Kind == MemberKind.Label)
         {
             int num5 = this.EvalLabel(res);
             if (num5 == 0)
             {
                 this.scripter.CreateErrorObjectEx("Undeclared identifier '{0}'", new object[] { name });
             }
             else
             {
                 this.r.op = this.OP_NOP;
                 this.ReplaceIdEx(this.r.res, num5, this.n, true);
             }
         }
         else
         {
             bool flag2 = false;
             if (!this.GetExplicit(this.n))
             {
                 int level = this.symbol_table[this.r.res].Level;
                 if ((this[this.n + 1].op == this.OP_ASSIGN) && (this[this.n + 1].arg1 == this.r.res))
                 {
                     this.r.op = this.OP_DECLARE_LOCAL_VARIABLE;
                     this.r.arg1 = this.r.res;
                     this.r.arg2 = level;
                     flag2 = true;
                 }
                 else
                 {
                     string str2 = this.symbol_table[this.r.res].Name;
                     for (int j = this.n; j >= 1; j--)
                     {
                         if (this[j].op == this.OP_DECLARE_LOCAL_VARIABLE)
                         {
                             if (this[j].arg2 != level)
                             {
                                 break;
                             }
                             int num8 = this[j].arg1;
                             string str3 = this.symbol_table[num8].Name;
                             if (CSLite_System.CompareStrings(str2, str3, upcase))
                             {
                                 this.r.op = this.OP_NOP;
                                 this.ReplaceId(this.r.res, num8);
                                 flag2 = true;
                                 break;
                             }
                         }
                     }
                 }
             }
             if (!flag2)
             {
                 if (this.PascalOrBasic(this.n))
                 {
                     for (int k = 1; k <= this.card; k++)
                     {
                         if (this[k].op == this.OP_CREATE_CLASS)
                         {
                             ClassObject classObject = this.GetClassObject(this[k].arg1);
                             if (classObject.Static)
                             {
                                 memberByNameIndex = classObject.GetMemberByNameIndex(nameIndex, upcase);
                                 if (memberByNameIndex != null)
                                 {
                                     this.r.op = this.OP_NOP;
                                     this.ReplaceId(this.r.res, memberByNameIndex.Id);
                                     return;
                                 }
                             }
                         }
                     }
                 }
                 if (this.scripter.DefaultInstanceMethods)
                 {
                     foreach (string str4 in this.scripter.UserInstances.Keys)
                     {
                         Type t = this.scripter.UserInstances[str4].GetType();
                         foreach (MethodInfo info in t.GetMethods())
                         {
                             if (!CSLite_System.CompareStrings(name, info.Name, upcase))
                             {
                                 continue;
                             }
                             int num10 = 0;
                             for (int m = 1; m <= this.symbol_table.Card; m++)
                             {
                                 if (((this.symbol_table[m].Level == 0) && (this.symbol_table[m].Kind == MemberKind.Var)) && (CSLite_System.CompareStrings(this.symbol_table[m].Name, str4, upcase) && (this.symbol_table[m].Val != null)))
                                 {
                                     num10 = m;
                                     break;
                                 }
                             }
                             if (num10 != 0)
                             {
                                 int num12 = this.symbol_table.RegisterType(t, false);
                                 this.r.op = this.OP_CREATE_REFERENCE;
                                 this.r.arg1 = num10;
                                 this.symbol_table[this.r.res].Level = this.r.arg1;
                                 this.symbol_table[this.r.res].Kind = MemberKind.Ref;
                                 this.symbol_table[this.r.res].TypeId = num12;
                                 return;
                             }
                         }
                         foreach (PropertyInfo info2 in t.GetProperties())
                         {
                             if (!CSLite_System.CompareStrings(name, info2.Name, upcase))
                             {
                                 continue;
                             }
                             int num13 = 0;
                             for (int n = 1; n <= this.symbol_table.Card; n++)
                             {
                                 if (((this.symbol_table[n].Level == 0) && (this.symbol_table[n].Kind == MemberKind.Var)) && (CSLite_System.CompareStrings(this.symbol_table[n].Name, str4, upcase) && (this.symbol_table[n].Val != null)))
                                 {
                                     num13 = n;
                                     break;
                                 }
                             }
                             if (num13 != 0)
                             {
                                 int num15 = this.symbol_table.RegisterType(t, false);
                                 this.r.op = this.OP_CREATE_REFERENCE;
                                 this.r.arg1 = num13;
                                 this.symbol_table[this.r.res].Level = this.r.arg1;
                                 this.symbol_table[this.r.res].Kind = MemberKind.Ref;
                                 this.symbol_table[this.r.res].TypeId = num15;
                                 return;
                             }
                         }
                     }
                 }
                 this.scripter.CreateErrorObjectEx("Undeclared identifier '{0}'", new object[] { name });
             }
         }
     }
 }
Ejemplo n.º 13
0
        public void CheckTypesEx(int init_n, int init_level, IntegerStack init_class_stack)
        {
            ClassObject classObject;
            IntegerStack stack;
            FunctionObject obj9;
            int num52;
            if (this.scripter.IsError())
            {
                return;
            }
            IntegerList a = new IntegerList(true);
            IntegerList list2 = new IntegerList(true);
            IntegerList pos = new IntegerList(true);
            IntegerList list4 = new IntegerList(false);
            IntegerList l = new IntegerList(false);
            ClassObject obj2 = null;
            if (init_class_stack == null)
            {
                stack = new IntegerStack();
            }
            else
            {
                stack = init_class_stack.Clone();
            }
            if (stack.Count == 0)
            {
                classObject = null;
            }
            else
            {
                classObject = this.GetClassObject(stack.Peek());
            }
            this.n = init_n;
            int num = init_level;
            Label_0079:
            this.n++;
            if (this.n >= this.Card)
            {
                goto Label_22C6;
            }
            this.r = (ProgRec) this.prog[this.n];
            int op = this.r.op;
            if ((op == this.OP_SEPARATOR) || (op == this.OP_LABEL))
            {
                goto Label_0079;
            }
            if (op != this.OP_CREATE_INDEX_OBJECT)
            {
                if (op == this.OP_ADD_INDEX)
                {
                    if (((this.symbol_table[this.r.res].TypeId != 12) || (this[this.n + 1].op != this.OP_ADD_INDEX)) || (this[this.n + 1].res != this.r.res))
                    {
                        goto Label_04A6;
                    }
                    int num7 = 1;
                    while ((this[this.n + num7].op == this.OP_ADD_INDEX) && (this[this.n + num7].res == this.r.res))
                    {
                        num7++;
                    }
                    this.scripter.CreateErrorObjectEx("CS1501. No overload for method '{0}' takes '{1}' arguments.", new object[] { "this", num7 });
                    goto Label_22C6;
                }
                if (op == this.OP_SETUP_INDEX_OBJECT)
                {
                    int n = this.n;
                    int num9 = 0;
                    do
                    {
                        n--;
                        if ((this[n].op == this.OP_ADD_INDEX) && (this[n].arg1 == this.r.arg1))
                        {
                            num9++;
                        }
                    }
                    while ((this[n].op != this.OP_CREATE_INDEX_OBJECT) || (this[n].res != this.r.arg1));
                    int typeId = this.symbol_table[this[n].arg1].TypeId;
                    int rank = CSLite_System.GetRank(this.symbol_table[typeId].Name);
                    if ((rank > 0) && (rank != num9))
                    {
                        this.scripter.CreateErrorObjectEx("CS0022. Wrong number of indices inside [], expected '{0}'.", new object[] { rank.ToString() });
                        goto Label_22C6;
                    }
                }
            }
            else
            {
                int num3 = this.symbol_table[this.r.arg1].TypeId;
                string name = this.symbol_table[num3].Name;
                string elementTypeName = CSLite_System.GetElementTypeName(name);
                int num4 = 0;
                PropertyObject obj4 = null;
                if (elementTypeName == "")
                {
                    ClassObject obj5 = this.GetClassObject(num3);
                    if (obj5.IsPascalArray)
                    {
                        name = obj5.ImportedType.Name + "[]";
                        elementTypeName = this.symbol_table[obj5.IndexTypeId].Name;
                    }
                }
                if (elementTypeName == "")
                {
                    obj4 = this.GetClassObject(num3).FindIndexer();
                    if (obj4 == null)
                    {
                        this.scripter.CreateErrorObjectEx("CS0021. Cannot apply indexing with [] to an expression of type '{0}'.", new object[] { name });
                        goto Label_22C6;
                    }
                    num4 = this.symbol_table[obj4.Id].TypeId;
                }
                else
                {
                    for (int k = num3; k >= 0; k--)
                    {
                        if ((this.symbol_table[k].Kind == MemberKind.Type) && (this.symbol_table[k].Name == elementTypeName))
                        {
                            num4 = k;
                            break;
                        }
                    }
                }
                if (num4 == 0)
                {
                    elementTypeName = CSLite_System.GetElementTypeName(this.symbol_table[num3].FullName);
                    bool upcase = this.GetUpcase();
                    MemberObject obj6 = this.FindType(this.RecreateLevelStack(this.n), elementTypeName, upcase);
                    if (obj6 == null)
                    {
                        this.scripter.CreateErrorObjectEx("CS0246. The type or namespace name '{0}' could not be found (are you missing a using directive or an assembly reference?).", new object[] { elementTypeName });
                        goto Label_22C6;
                    }
                    num4 = obj6.Id;
                }
                this.symbol_table[this.r.res].TypeId = num4;
            }
            Label_04A6:
            if (((op == this.OP_CREATE_INDEX_OBJECT) || (op == this.OP_ADD_INDEX)) || (op == this.OP_SETUP_INDEX_OBJECT))
            {
                goto Label_0079;
            }
            for (int i = 1; i <= 2; i++)
            {
                int num13;
                if (i == 1)
                {
                    num13 = this.r.arg1;
                }
                else
                {
                    num13 = this.r.arg2;
                }
                if (this.symbol_table[num13].Kind == MemberKind.Index)
                {
                    l.Clear();
                    int avalue = this.n;
                    while (true)
                    {
                        if ((this[avalue].op == this.OP_CREATE_INDEX_OBJECT) && (this[avalue].res == num13))
                        {
                            break;
                        }
                        avalue--;
                    }
                    int num15 = this[avalue].arg1;
                    l.Add(avalue);
                    int num16 = this.symbol_table[num15].TypeId;
                    PropertyObject obj8 = this.GetClassObject(num16).FindIndexer();
                    if (obj8 != null)
                    {
                        while (true)
                        {
                            if ((this[avalue].op == this.OP_SETUP_INDEX_OBJECT) && (this[avalue].arg1 == num13))
                            {
                                break;
                            }
                            if ((this[avalue].op == this.OP_ADD_INDEX) && (this[avalue].arg1 == num13))
                            {
                                l.Add(avalue);
                            }
                            avalue++;
                        }
                        l.Add(avalue);
                        if ((this.r.op == this.OP_ASSIGN) && (i == 1))
                        {
                            if (obj8.WriteId == 0)
                            {
                                this.scripter.CreateErrorObject("CS0154. The property or indexer '{0}' cannot be used in this context because it lacks the get accessor.");
                                break;
                            }
                            int num17 = this.r.arg2;
                            this.InsertOperators(this.n, obj8.ParamCount + 3);
                            this.n--;
                            this.n++;
                            this[this.n].op = this.OP_BEGIN_CALL;
                            this[this.n].arg1 = obj8.WriteId;
                            this[this.n].arg2 = 0;
                            this[this.n].res = 0;
                            for (int m = 1; m < (l.Count - 1); m++)
                            {
                                this.n++;
                                this[this.n].op = this.OP_PUSH;
                                this[this.n].arg1 = this[l[m]].arg2;
                                this[this.n].arg2 = 0;
                                this[this.n].res = obj8.WriteId;
                            }
                            this.n++;
                            this[this.n].op = this.OP_PUSH;
                            this[this.n].arg1 = num17;
                            this[this.n].arg2 = 0;
                            this[this.n].res = obj8.WriteId;
                            this.n++;
                            this[this.n].op = this.OP_PUSH;
                            this[this.n].arg1 = num15;
                            this[this.n].arg2 = 0;
                            this[this.n].res = 0;
                            this.n++;
                            this[this.n].op = this.OP_CALL_BASE;
                            this[this.n].arg1 = obj8.WriteId;
                            this[this.n].arg2 = l.Count - 1;
                            this[this.n].res = 0;
                            this.r = (ProgRec) this.prog[this.n];
                            op = this.r.op;
                        }
                        else
                        {
                            if (obj8.ReadId == 0)
                            {
                                this.scripter.CreateErrorObject("CS0154. The property or indexer '{0}' cannot be used in this context because it lacks the get accessor.");
                                break;
                            }
                            int num19 = this.AppVar(this.symbol_table[num13].Level, this.symbol_table[num13].TypeId);
                            if (i == 1)
                            {
                                this.r.arg1 = num19;
                            }
                            else
                            {
                                this.r.arg2 = num19;
                            }
                            this.InsertOperators(this.n, obj8.ParamCount + 3);
                            this.n--;
                            this.n++;
                            this[this.n].op = this.OP_BEGIN_CALL;
                            this[this.n].arg1 = obj8.ReadId;
                            this[this.n].arg2 = 0;
                            this[this.n].res = 0;
                            for (int num20 = 1; num20 < (l.Count - 1); num20++)
                            {
                                this.n++;
                                this[this.n].op = this.OP_PUSH;
                                this[this.n].arg1 = this[l[num20]].arg2;
                                this[this.n].arg2 = 0;
                                this[this.n].res = obj8.ReadId;
                            }
                            this.n++;
                            this[this.n].op = this.OP_PUSH;
                            this[this.n].arg1 = num15;
                            this[this.n].arg2 = 0;
                            this[this.n].res = 0;
                            this.n++;
                            this[this.n].op = this.OP_CALL_BASE;
                            this[this.n].arg1 = obj8.ReadId;
                            this[this.n].arg2 = l.Count - 2;
                            this[this.n].res = num19;
                            this.symbol_table[this[this.n].res].TypeId = this.symbol_table[obj8.ReadId].TypeId;
                            this.r = (ProgRec) this.prog[this.n];
                            op = this.r.op;
                        }
                        list4.AddFrom(l);
                    }
                }
            }
            if (op == this.OP_CREATE_METHOD)
            {
                num = this.r.arg1;
                goto Label_0079;
            }
            if (op != this.OP_CALL_SIMPLE)
            {
                if ((op == this.OP_CALL) || (op == this.OP_CALL_BASE))
                {
                    this.CheckOP_CALL(classObject, num, a, list2, pos);
                    if (!this.scripter.IsError())
                    {
                        goto Label_0079;
                    }
                    goto Label_22C6;
                }
                if (op == this.OP_CHECK_STRUCT_CONSTRUCTOR)
                {
                    ClassObject obj12 = this.GetClassObject(this.r.arg1);
                    if (obj12.IsStruct && !obj12.Imported)
                    {
                        FunctionObject obj13;
                        this.r.op = this.OP_CREATE_OBJECT;
                        int num35 = obj12.FindConstructorId(null, null, out obj13);
                        if (num35 == 0)
                        {
                            this.scripter.CreateErrorObjectEx("CS0143. The type '{0}' has no constructors defined.", new object[] { obj12.Name });
                        }
                        this.n++;
                        this.InsertOperators(this.n, 2);
                        this[this.n].op = this.OP_PUSH;
                        this[this.n].arg1 = this.r.res;
                        this[this.n].arg2 = 0;
                        this[this.n].res = 0;
                        this.n++;
                        this[this.n].op = this.OP_CALL;
                        this[this.n].arg1 = num35;
                        this[this.n].arg2 = 0;
                        this[this.n].res = 0;
                    }
                    else
                    {
                        this.r.op = this.OP_NOP;
                    }
                }
                else if (op == this.OP_INSERT_STRUCT_CONSTRUCTORS)
                {
                    ClassObject obj14 = this.GetClassObject(this.r.arg1);
                    for (int num36 = 0; num36 < obj14.Members.Count; num36++)
                    {
                        MemberObject obj15 = obj14.Members[num36];
                        if (obj15.Kind == MemberKind.Field)
                        {
                            int num37 = this.symbol_table[obj15.Id].TypeId;
                            ClassObject obj16 = this.GetClassObject(num37);
                            if (obj16.IsStruct && !obj16.Imported)
                            {
                                if (obj16.IsPascalArray)
                                {
                                    this.n++;
                                    this.InsertOperators(this.n, 1);
                                    this[this.n].op = this.OP_CREATE_OBJECT;
                                    this[this.n].arg1 = num37;
                                    this[this.n].arg2 = 0;
                                    this[this.n].res = obj15.Id;
                                }
                                else
                                {
                                    FunctionObject obj17;
                                    int num38 = obj16.FindConstructorId(null, null, out obj17);
                                    if (num38 == 0)
                                    {
                                        this.scripter.CreateErrorObjectEx("CS0143. The type '{0}' has no constructors defined.", new object[] { obj16.Name });
                                    }
                                    this.n++;
                                    this.InsertOperators(this.n, 3);
                                    this[this.n].op = this.OP_CREATE_OBJECT;
                                    this[this.n].arg1 = num37;
                                    this[this.n].arg2 = 0;
                                    this[this.n].res = obj15.Id;
                                    this.n++;
                                    this[this.n].op = this.OP_PUSH;
                                    this[this.n].arg1 = obj15.Id;
                                    this[this.n].arg2 = 0;
                                    this[this.n].res = 0;
                                    this.n++;
                                    this[this.n].op = this.OP_CALL;
                                    this[this.n].arg1 = num38;
                                    this[this.n].arg2 = 0;
                                    this[this.n].res = 0;
                                }
                            }
                        }
                    }
                }
                else
                {
                    if (op == this.OP_CAST)
                    {
                        this.CheckOP_CAST();
                        if (!this.scripter.IsError())
                        {
                            goto Label_0079;
                        }
                        goto Label_22C6;
                    }
                    if (op == this.OP_TO_SBYTE)
                    {
                        this.symbol_table[this.r.res].TypeId = 10;
                    }
                    else if (op == this.OP_TO_BYTE)
                    {
                        this.symbol_table[this.r.res].TypeId = 3;
                    }
                    else if (op == this.OP_TO_USHORT)
                    {
                        this.symbol_table[this.r.res].TypeId = 15;
                    }
                    else if (op == this.OP_TO_SHORT)
                    {
                        this.symbol_table[this.r.res].TypeId = 11;
                    }
                    else if (op == this.OP_TO_UINT)
                    {
                        this.symbol_table[this.r.res].TypeId = 13;
                    }
                    else if (op == this.OP_TO_INT)
                    {
                        this.symbol_table[this.r.res].TypeId = 8;
                    }
                    else if (op == this.OP_TO_ULONG)
                    {
                        this.symbol_table[this.r.res].TypeId = 14;
                    }
                    else if (op == this.OP_TO_LONG)
                    {
                        this.symbol_table[this.r.res].TypeId = 9;
                    }
                    else if (op == this.OP_TO_CHAR)
                    {
                        this.symbol_table[this.r.res].TypeId = 4;
                    }
                    else if (op == this.OP_TO_FLOAT)
                    {
                        this.symbol_table[this.r.res].TypeId = 7;
                    }
                    else if (op == this.OP_TO_DOUBLE)
                    {
                        this.symbol_table[this.r.res].TypeId = 6;
                    }
                    else if (op == this.OP_TO_DECIMAL)
                    {
                        this.symbol_table[this.r.res].TypeId = 5;
                    }
                    else if (op == this.OP_TO_STRING)
                    {
                        this.symbol_table[this.r.res].TypeId = 12;
                    }
                    else if (op == this.OP_TO_BOOLEAN)
                    {
                        this.symbol_table[this.r.res].TypeId = 2;
                    }
                    else
                    {
                        if (op == this.OP_INC)
                        {
                            this.CheckOP_INC();
                            if (!this.scripter.IsError())
                            {
                                goto Label_0079;
                            }
                            goto Label_22C6;
                        }
                        if (op == this.OP_DEC)
                        {
                            this.CheckOP_DEC();
                            if (!this.scripter.IsError())
                            {
                                goto Label_0079;
                            }
                            goto Label_22C6;
                        }
                        if (op == this.OP_ASSIGN_COND_TYPE)
                        {
                            this.CheckOP_ASSIGN_COND_TYPE();
                        }
                        else if (op == this.OP_ADD_EXPLICIT_INTERFACE)
                        {
                            this.OperAddExplicitInterface();
                        }
                        else if (op == this.OP_END_CLASS)
                        {
                            stack.Pop();
                            if (stack.Count > 0)
                            {
                                int num39 = stack.Peek();
                                classObject = this.GetClassObject(num39);
                            }
                            else
                            {
                                classObject = null;
                            }
                        }
                        else
                        {
                            if (op != this.OP_CREATE_CLASS)
                            {
                                if (op == this.OP_CREATE_OBJECT)
                                {
                                    ClassObject obj27 = this.GetClassObject(this.r.arg1);
                                    if (!obj27.Abstract && !obj27.IsInterface)
                                    {
                                        goto Label_0079;
                                    }
                                    this.scripter.CreateErrorObjectEx("CS0144. Cannot create an instance of the abstract class or interface '{0}'.", new object[] { obj27.Name });
                                }
                                else
                                {
                                    if (op == this.OP_END_USING)
                                    {
                                        if ((obj2 != null) && (obj2.Id == this.r.arg1))
                                        {
                                            obj2 = null;
                                        }
                                        goto Label_0079;
                                    }
                                    if (op == this.OP_ASSIGN)
                                    {
                                        this.CheckOP_ASSIGN(obj2);
                                        if (!this.scripter.IsError())
                                        {
                                            goto Label_0079;
                                        }
                                    }
                                    else
                                    {
                                        if (op == this.OP_UNARY_MINUS)
                                        {
                                            if (!this.SetupDetailedUnaryOperator(op, "-", this.detailed_negation_operators))
                                            {
                                                goto Label_22C6;
                                            }
                                            if (this[this.n].op != this.OP_CALL_SIMPLE)
                                            {
                                                this.r = this[this.n];
                                                int num48 = this.GetTypeId(this.r.arg1);
                                                int num49 = this.GetTypeId(this.r.res);
                                                if ((num48 != num49) && IsNumericTypeId(num49))
                                                {
                                                    this.InsertNumericConversion(num49, 1);
                                                }
                                            }
                                            goto Label_0079;
                                        }
                                        if (op == this.OP_NOT)
                                        {
                                            if (this.SetupDetailedUnaryOperator(op, "!", this.detailed_logical_negation_operators))
                                            {
                                                goto Label_0079;
                                            }
                                        }
                                        else
                                        {
                                            if (op == this.OP_COMPLEMENT)
                                            {
                                                if (!this.SetupDetailedUnaryOperator(op, "~", this.detailed_bitwise_complement_operators))
                                                {
                                                    goto Label_22C6;
                                                }
                                                if (this[this.n].op != this.OP_CALL_SIMPLE)
                                                {
                                                    this.r = this[this.n];
                                                    int num50 = this.GetTypeId(this.r.arg1);
                                                    int num51 = this.GetTypeId(this.r.res);
                                                    if ((num50 != num51) && IsNumericTypeId(num51))
                                                    {
                                                        this.InsertNumericConversion(num51, 1);
                                                    }
                                                }
                                                goto Label_0079;
                                            }
                                            if (op == this.OP_PLUS)
                                            {
                                                this.CheckOP_PLUS();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else if (op == this.OP_MINUS)
                                            {
                                                this.CheckOP_MINUS();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else if (op == this.OP_MULT)
                                            {
                                                this.CheckOP_MULT();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else if (op == this.OP_EXPONENT)
                                            {
                                                this.CheckOP_EXP();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else if (op == this.OP_DIV)
                                            {
                                                this.CheckOP_DIV();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else if (op == this.OP_MOD)
                                            {
                                                this.CheckOP_MOD();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else if (op == this.OP_LEFT_SHIFT)
                                            {
                                                this.CheckOP_LEFT_SHIFT();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else if (op == this.OP_RIGHT_SHIFT)
                                            {
                                                this.CheckOP_RIGHT_SHIFT();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else if (op == this.OP_BITWISE_AND)
                                            {
                                                this.CheckOP_BITWISE_AND();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else if (op == this.OP_BITWISE_OR)
                                            {
                                                this.CheckOP_BITWISE_OR();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else if (op == this.OP_BITWISE_XOR)
                                            {
                                                this.CheckOP_BITWISE_XOR();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else if (op == this.OP_LOGICAL_AND)
                                            {
                                                this.CheckOP_LOGICAL_AND();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else if (op == this.OP_LOGICAL_OR)
                                            {
                                                this.CheckOP_LOGICAL_OR();
                                                if (!this.scripter.IsError())
                                                {
                                                    goto Label_0079;
                                                }
                                            }
                                            else
                                            {
                                                if (op == this.OP_LT)
                                                {
                                                    if (!this.SetupDetailedBinaryOperator(op, "<", this.detailed_lt_operators))
                                                    {
                                                        goto Label_22C6;
                                                    }
                                                    this.symbol_table[this.r.res].TypeId = 2;
                                                    goto Label_0079;
                                                }
                                                if (op == this.OP_LE)
                                                {
                                                    if (!this.SetupDetailedBinaryOperator(op, "<=", this.detailed_le_operators))
                                                    {
                                                        goto Label_22C6;
                                                    }
                                                    this.symbol_table[this.r.res].TypeId = 2;
                                                    goto Label_0079;
                                                }
                                                if (op == this.OP_GT)
                                                {
                                                    if (!this.SetupDetailedBinaryOperator(op, ">", this.detailed_gt_operators))
                                                    {
                                                        goto Label_22C6;
                                                    }
                                                    this.symbol_table[this.r.res].TypeId = 2;
                                                    goto Label_0079;
                                                }
                                                if (op == this.OP_GE)
                                                {
                                                    if (!this.SetupDetailedBinaryOperator(op, ">=", this.detailed_ge_operators))
                                                    {
                                                        goto Label_22C6;
                                                    }
                                                    this.symbol_table[this.r.res].TypeId = 2;
                                                    goto Label_0079;
                                                }
                                                if (op == this.OP_EQ)
                                                {
                                                    this.CheckOP_EQ();
                                                    if (!this.scripter.IsError())
                                                    {
                                                        goto Label_0079;
                                                    }
                                                }
                                                else if (op == this.OP_NE)
                                                {
                                                    this.CheckOP_NE();
                                                    if (!this.scripter.IsError())
                                                    {
                                                        goto Label_0079;
                                                    }
                                                }
                                                else
                                                {
                                                    if (op == this.OP_IS)
                                                    {
                                                        this.symbol_table[this.r.res].TypeId = 2;
                                                        goto Label_0079;
                                                    }
                                                    if (op == this.OP_AS)
                                                    {
                                                        if (this.symbol_table[this.r.arg2].Kind != MemberKind.Type)
                                                        {
                                                            this.scripter.CreateErrorObject("CS1031. Type expected.");
                                                            goto Label_22C6;
                                                        }
                                                        ClassObject obj28 = this.GetClassObject(this.symbol_table[this.r.arg1].TypeId);
                                                        ClassObject obj29 = this.GetClassObject(this.r.arg2);
                                                        if (obj29.IsValueType)
                                                        {
                                                            this.scripter.CreateErrorObjectEx("CS0077. The as operator must be used with a reference type ('{0}' is a value type).", new object[] { obj29.Name });
                                                            goto Label_22C6;
                                                        }
                                                        if (!this.scripter.conversion.ExistsImplicitReferenceConversion(obj29, obj28))
                                                        {
                                                            this.scripter.CreateErrorObjectEx("CS0039. Cannot convert type '{0}' to '{1}'.", new object[] { obj29.Name, obj28.Name });
                                                            goto Label_22C6;
                                                        }
                                                        this.symbol_table[this.r.res].TypeId = this.r.arg2;
                                                        goto Label_0079;
                                                    }
                                                    if (op == this.OP_CREATE_REFERENCE)
                                                    {
                                                        this.CheckOP_CREATE_REFERENCE(classObject);
                                                        if (this.scripter.IsError())
                                                        {
                                                            goto Label_22C6;
                                                        }
                                                        goto Label_0079;
                                                    }
                                                    if (op == this.OP_DECLARE_LOCAL_VARIABLE)
                                                    {
                                                        this.OperDeclareLocalVariable();
                                                        goto Label_0079;
                                                    }
                                                    if (op != this.OP_ADDRESS_OF)
                                                    {
                                                        goto Label_0079;
                                                    }
                                                    this.ProcessAddressOf();
                                                    if (!this.scripter.IsError())
                                                    {
                                                        goto Label_0079;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                goto Label_22C6;
                            }
                            bool flag3 = this.GetUpcase(this.n);
                            ClassObject obj18 = this.GetClassObject(this.r.arg1);
                            if (obj18.Class_Kind == ClassKind.Enum)
                            {
                                obj2 = obj18;
                            }
                            classObject = obj18;
                            stack.Push(classObject.Id);
                            if (obj18.IsClass || obj18.IsStruct)
                            {
                                int num40 = 0;
                                for (int num41 = 0; num41 < obj18.AncestorIds.Count; num41++)
                                {
                                    int num42 = obj18.AncestorIds[num41];
                                    ClassObject obj19 = this.GetClassObject(num42);
                                    if (!obj19.IsInterface)
                                    {
                                        num40++;
                                        if (num40 > 1)
                                        {
                                            this.scripter.CreateErrorObjectEx("CS0527. '{0}' : type in interface list is not an interface.", new object[] { obj19.Name });
                                            break;
                                        }
                                    }
                                }
                                IntegerList supportedInterfaceListIds = obj18.GetSupportedInterfaceListIds();
                                if (obj18.AncestorClass.HasModifier(Modifier.Abstract))
                                {
                                    supportedInterfaceListIds.Add(obj18.AncestorClass.Id);
                                }
                                for (int num43 = 0; num43 < supportedInterfaceListIds.Count; num43++)
                                {
                                    int num44 = supportedInterfaceListIds[num43];
                                    ClassObject obj20 = this.GetClassObject(num44);
                                    for (int num45 = 0; num45 < obj20.Members.Count; num45++)
                                    {
                                        MemberObject obj21 = obj20.Members[num45];
                                        if (obj21.HasModifier(Modifier.Abstract))
                                        {
                                            if (((obj21.Kind == MemberKind.Method) || (obj21.Kind == MemberKind.Constructor)) || (obj21.Kind == MemberKind.Destructor))
                                            {
                                                bool flag4 = false;
                                                FunctionObject fy = (FunctionObject) obj21;
                                                for (int num46 = 0; num46 < obj18.Members.Count; num46++)
                                                {
                                                    MemberObject obj23 = obj18.Members[num46];
                                                    if (obj23.Public && (obj21.Kind == obj23.Kind))
                                                    {
                                                        if (CSLite_System.CompareStrings(obj21.Name, obj23.Name, flag3))
                                                        {
                                                            FunctionObject fx = (FunctionObject) obj23;
                                                            if (FunctionObject.CompareHeaders(fx, fy))
                                                            {
                                                                flag4 = true;
                                                                break;
                                                            }
                                                        }
                                                        if (obj23.ImplementsId != 0)
                                                        {
                                                            string str6 = this.symbol_table[obj23.ImplementsId].Name;
                                                            if (CSLite_System.CompareStrings(obj21.Name, str6, flag3))
                                                            {
                                                                flag4 = true;
                                                                break;
                                                            }
                                                        }
                                                    }
                                                }
                                                if (flag4)
                                                {
                                                    continue;
                                                }
                                                if (obj20.IsInterface)
                                                {
                                                    this.scripter.CreateErrorObjectEx("CS0535. '{0}' does not implement interface member '{1}'.", new object[] { obj18.FullName, obj20.FullName + "." + fy.Name });
                                                }
                                                else if (obj20.IsClass)
                                                {
                                                    this.scripter.CreateErrorObjectEx("CS0534. '{0}' does not implement inherited abstract member '{1}'.", new object[] { obj18.FullName, obj20.FullName + "." + fy.Name });
                                                }
                                                break;
                                            }
                                            if (obj21.Kind == MemberKind.Property)
                                            {
                                                bool flag5 = false;
                                                PropertyObject obj25 = (PropertyObject) obj21;
                                                for (int num47 = 0; num47 < obj18.Members.Count; num47++)
                                                {
                                                    MemberObject obj26 = obj18.Members[num47];
                                                    if (obj26.Public && (obj21.Kind == obj26.Kind))
                                                    {
                                                        if (CSLite_System.CompareStrings(obj21.Name, obj26.Name, flag3))
                                                        {
                                                            flag5 = true;
                                                            break;
                                                        }
                                                        if (obj26.ImplementsId != 0)
                                                        {
                                                            string str7 = this.symbol_table[obj26.ImplementsId].Name;
                                                            if (CSLite_System.CompareStrings(obj21.Name, str7, flag3))
                                                            {
                                                                flag5 = true;
                                                                break;
                                                            }
                                                        }
                                                    }
                                                }
                                                if (!flag5)
                                                {
                                                    if (obj20.IsInterface)
                                                    {
                                                        this.scripter.CreateErrorObjectEx("CS0535. '{0}' does not implement interface member '{1}'.", new object[] { obj18.FullName, obj20.FullName + "." + obj25.Name });
                                                    }
                                                    else if (obj20.IsClass)
                                                    {
                                                        this.scripter.CreateErrorObjectEx("CS0534. '{0}' does not implement inherited abstract member '{1}'.", new object[] { obj18.FullName, obj20.FullName + "." + obj25.Name });
                                                    }
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                goto Label_0079;
            }
            this.r.op = this.OP_CALL;
            int id = this.r.arg1;
            if (this.symbol_table[id].Kind != MemberKind.Method)
            {
                goto Label_0079;
            }
            int num22 = this.r.arg2;
            a.Clear();
            list2.Clear();
            pos.Clear();
            if (num22 > 0)
            {
                int num23 = this.n - 1;
                do
                {
                    if ((this[num23].op == this.OP_PUSH) && (this[num23].res == id))
                    {
                        pos.Add(num23);
                        a.Add(this[num23].arg1);
                        list2.Add(this[num23].arg2);
                        if (a.Count == num22)
                        {
                            goto Label_0C8B;
                        }
                    }
                    num23--;
                }
                while (num23 != 0);
                this.scripter.CreateErrorObject("CS0001. Internal compiler error.");
                return;
            }
            Label_0C8B:
            obj9 = this.GetFunctionObject(id);
            bool flag2 = true;
            for (int j = 0; j < num22; j++)
            {
                int paramId = obj9.GetParamId(j);
                int num26 = a[j];
                if (!obj9.Imported)
                {
                    flag2 = ((int)obj9.GetParamMod(j) == list2[j]);
                }
                else
                {
                    flag2 = true;
                }
                if (!flag2)
                {
                    this.n = pos[j];
                    ParamMod paramMod = obj9.GetParamMod(j);
                    ParamMod mod2 = (ParamMod) list2[j];
                    int num27 = this.symbol_table[paramId].TypeId;
                    int num28 = this.symbol_table[num26].TypeId;
                    string str4 = this.symbol_table[num27].Name;
                    string str5 = this.symbol_table[num28].Name;
                    switch (paramMod)
                    {
                        case ParamMod.RetVal:
                            str4 = "ref " + str4;
                            break;

                        case ParamMod.Out:
                            str4 = "out " + str4;
                            break;
                    }
                    if (mod2 == ParamMod.RetVal)
                    {
                        str5 = "ref " + str5;
                    }
                    else if (mod2 == ParamMod.Out)
                    {
                        str5 = "out " + str5;
                    }
                    this.scripter.CreateErrorObjectEx("CS0029. Cannot impllicitly convert type '{0}' to '{1}'.", new object[] { str4, str5 });
                    break;
                }
                flag2 = this.scripter.MatchAssignment(paramId, num26);
                if (!flag2)
                {
                    this.n = pos[j];
                    int num29 = this.symbol_table[paramId].TypeId;
                    int num30 = this.symbol_table[num26].TypeId;
                    ClassObject obj10 = this.GetClassObject(num29);
                    ClassObject obj11 = this.GetClassObject(num30);
                    int num31 = obj10.FindOverloadableImplicitOperatorId(num26, paramId);
                    if (num31 > 0)
                    {
                        int currMethodId = this.GetCurrMethodId();
                        int num33 = this.AppVar(currMethodId, num29);
                        int res = this[this.n].res;
                        this[this.n].arg1 = num33;
                        this.InsertOperators(this.n, 3);
                        this[this.n].op = this.OP_PUSH;
                        this[this.n].arg1 = num26;
                        this[this.n].arg2 = 0;
                        this[this.n].res = num31;
                        this.n++;
                        this[this.n].op = this.OP_PUSH;
                        this[this.n].arg1 = obj10.Id;
                        this[this.n].arg2 = 0;
                        this[this.n].res = 0;
                        this.n++;
                        this[this.n].op = this.OP_CALL_SIMPLE;
                        this[this.n].arg1 = num31;
                        this[this.n].arg2 = 1;
                        this[this.n].res = num33;
                        while (this[this.n].arg1 != res)
                        {
                            this.n++;
                        }
                        goto Label_0079;
                    }
                    this.scripter.CreateErrorObjectEx("CS0029. Cannot impllicitly convert type '{0}' to '{1}'.", new object[] { obj11.Name, obj10.Name });
                    break;
                }
            }
            if (flag2)
            {
                goto Label_0079;
            }
            Label_22C6:
            num52 = 0;
            while (num52 < list4.Count)
            {
                this.n = list4[num52];
                this[this.n].op = this.OP_NOP;
                num52++;
            }
        }