示例#1
0
        public static EocExpression Translate(CodeConverter C, Expression expr)
        {
            switch (expr)
            {
            case null:
                return(null);

            case MethodPtrExpression v:
                return(EocMethodPtrExpression.Translate(C, v));

            case CallExpression v:
                return(EocCallExpression.Translate(C, v));

            case StringLiteral v:
                return(EocStringLiteral.Translate(C, v));

            case NumberLiteral v:
                return(EocNumberLiteral.Translate(C, v));

            case DateTimeLiteral v:
                return(EocDateTimeLiteral.Translate(C, v));

            case BoolLiteral v:
                return(EocBoolLiteral.Translate(C, v));

            case VariableExpression v:
                return(EocVariableExpression.Translate(C, v));

            case AccessArrayExpression v:
                return(EocAccessArrayExpression.Translate(C, v));

            case AccessMemberExpression v:
                return(EocAccessMemberExpression.Translate(C, v));

            case ConstantExpression v:
                return(EocConstantExpression.Translate(C, v));

            case EmnuConstantExpression v:
                return(EocConstantExpression.Translate(C, v));

            case ArrayLiteralExpression v:
                return(EocArrayLiteralExpression.Translate(C, v));

            case DefaultValueExpression v:
                return(null);

            default:
                throw new Exception("<error-expression>");
            }
        }
        public static EocCallExpression Translate(CodeConverter C, CallExpression expr)
        {
            var P = C.P;

            if (expr == null)
            {
                return(null);
            }
            var result = new EocCallExpression(
                C,
                P.GetEocCmdInfo(expr),
                EocExpression.Translate(C, expr.Target),
                expr.ParamList?.Select(x => EocExpression.Translate(C, x)).ToList(),
                expr.LibraryId >= 0 ? P.EocLibs[expr.LibraryId]?.SuperTemplateAssembly : null);

            if (expr.InvokeSpecial)
            {
                result.SpecialScope = "raw_" + P.GetUserDefinedName_SimpleCppName(P.MethodIdToClassMap[expr.MethodId].Id);
            }
            return(result);
        }
示例#3
0
        public static EocCallExpression Translate(CodeConverter C, CallExpression expr)
        {
            var P = C.P;

            if (expr == null)
            {
                return(null);
            }
            var paramList           = expr.ParamList?.Select(x => EocExpression.Translate(C, x)).ToList();
            var countOfDefaultAtEnd = 0;

            for (int i = paramList.Count - 1; i >= 0; i--)
            {
                if (paramList[i] != null)
                {
                    break;
                }
                countOfDefaultAtEnd++;
            }
            if (countOfDefaultAtEnd != 0)
            {
                paramList.RemoveRange(paramList.Count - countOfDefaultAtEnd, countOfDefaultAtEnd);
            }
            var result = new EocCallExpression(
                C,
                P.GetEocCmdInfo(expr),
                EocExpression.Translate(C, expr.Target),
                paramList,
                expr.LibraryId >= 0 ? P.EocLibs[expr.LibraryId]?.SuperTemplateAssembly : null);

            if (expr.InvokeSpecial)
            {
                result.SpecialScope = "raw_" + P.GetUserDefinedName_SimpleCppName(P.MethodIdToClassMap[expr.MethodId].Id);
            }
            return(result);
        }