Beispiel #1
0
        //добавление конструктора
		public MethInfo AddConstructor(IFunctionNode func, ConstructorInfo ci)
		{
			//ConstrInfo m = new ConstrInfo(ci);
			MethInfo mi = new MethInfo();
			mi.cnstr = ci;
			defs[func] = mi;
			return mi;
		}
Beispiel #2
0
        //добавление функции, вложенной в функцию
		public MethInfo AddMethod(IFunctionNode func, MethodInfo mi, MethInfo up)
		{
			MethInfo m = new MethInfo(mi);
			m.up_meth = up;
			defs[func] = m;
			return m;
		}
Beispiel #3
0
        //добавление функции (метода)
		public MethInfo AddMethod(IFunctionNode func, MethodInfo mi)
		{
			MethInfo m = new MethInfo(mi);
			defs[func] = m;
			return m;
		}
Beispiel #4
0
 //добавление фиктивного метода (если метод содерж. вложенные, создается заглушка)
 //т. е. метод не добавл. в таблицу
 public MethInfo AddFictiveMethod(IFunctionNode func, MethodBuilder mi)
 {
     MethInfo m = new MethInfo(mi);
     //defs[func] = m;
     return m;
 }
Beispiel #5
0
 //перевод тела функции
 private void ConvertFunctionBody(ICommonFunctionNode func, MethInfo mi, bool conv_first_stmt)
 {
     //if (is_in_unit && helper.IsUsed(func)==false) return;
     num_scope++;
     TypeBuilder tmp_type = cur_type;
     if (mi.disp != null) cur_type = mi.disp.tb;
     MethodBuilder tmp = cur_meth;
     cur_meth = (MethodBuilder)mi.mi;
     ILGenerator tmp_il = il;
     il = cur_meth.GetILGenerator();
     smi.Push(mi);
     funcs.Add(func);
     if (conv_first_stmt)
         ConvertBody(func.function_code);//переводим тело
     else
     {
         ConvertStatementsListWithoutFirstStatement(func.function_code as IStatementsListNode);
         OptMakeExitLabel();
     }
     //ivan for debug
     if (save_debug_info)
     {
         AddSpecialDebugVariables();
     }
     //\ivan for debug
     if (cur_meth.ReturnType == TypeFactory.VoidType)
         il.Emit(OpCodes.Ret);
     //восстановление значений
     cur_meth = tmp;
     cur_type = tmp_type;
     il = tmp_il;
     smi.Pop();
     funcs.RemoveAt(funcs.Count - 1);
     num_scope--;
 }
Beispiel #6
0
        //получение конструктора
        public MethInfo GetConstructor(IFunctionNode func)
        {
            MethInfo mi = (MethInfo)defs[func];

            return(mi);
        }