Example #1
0
        public void Call(IAsm a)
        {
            Var     func = a.getVar();
            LibFunc lfunc;

            String funcsig = genDataTypeSig(a.getVar());

            VarList x        = func.getParams();
            String  paramsig = "";

            if (x.Length() > 0)
            {
                int           max = x.Length();
                StringBuilder t   = new StringBuilder(Io.MAXSTR);
                for (int i = 0; i < max; i++)
                {
                    Var e = x.FindByIndex(i);
                    t.Append(genDataTypeSig(e));
                    if (i < max - 1)
                    {
                        t.Append(",");
                    }
                }
                paramsig = t.ToString();
            }

            StringBuilder sb = new StringBuilder(Io.MAXSTR);

            sb.Append("\tcall ");
            sb.Append(funcsig);
            sb.Append(" ");

            lfunc = lib.lookup_func(a.getVar().getName());
            if (lfunc != null)
            {
                sb.Append(lfunc.nameFull);
            }
            else
            {
                sb.Append(io.GetClassname());
                sb.Append("::");
                sb.Append(func.getName());
                sb.Append("(");
                sb.Append(paramsig);
                sb.Append(")");
            }

            sb.Append("\t\t\t\t\t//");
            sb.Append(a.getICount());
            sb.Append("\r\n");
            io.Out(sb.ToString());
        }
Example #2
0
        public void Call(IAsm a)
        {
            Var    func = a.getVar();
            Object o    = func.getMethodBuilder();

            LibFunc lfunc = lib.lookup_func(a.getVar().getName());

            if (lfunc != null)
            {
                il.Emit(OpCodes.Call, lfunc.methodInfo);
            }
            else
            {
                if (o == null)
                {
                    io.ICE("no previous extern for (" + func.getName() + ")");
                }
                MethodBuilder mb = (MethodBuilder)o;
                il.Emit(OpCodes.Call, mb);
            }
        }