Beispiel #1
0
        ICode Convert(MethodCallExpression method)
        {
            var chain = GetMethodChains(method);

            if (chain.Count == 0)
            {
                return(ResolveExpressionObject(method));
            }

            //convert symbol.
            var code = new ICode[chain.Count];

            for (int i = 0; i < code.Length; i++)
            {
                code[i] = chain[i].GetMethodConverter().Convert(chain[i], this);
            }

            var core = new VCode(code);

            var topQuery = code[0] as ITopQueryCode;

            return(topQuery != null ?
                   (ICode)topQuery.Create(core) :
                   new QueryCode(core));
        }
Beispiel #2
0
        internal static ICode AddCode(ICode lhs, ICode rhs)
        {
            if (lhs.IsEmpty)
            {
                return(rhs);
            }
            if (rhs.IsEmpty)
            {
                return(lhs);
            }

            var topQueryLeft  = lhs as ITopQueryCode;
            var topQueryRight = rhs as ITopQueryCode;

            if (topQueryLeft == null && topQueryRight == null)
            {
                return(new VCode(lhs, rhs));
            }
            if (topQueryLeft == null && topQueryRight != null)
            {
                return(new VCode(lhs, topQueryRight.Core));
            }
            if (topQueryLeft != null && topQueryRight == null)
            {
                return(topQueryLeft.Create(new VCode(topQueryLeft.Core, rhs)));
            }
            return(topQueryLeft.Create(new VCode(topQueryLeft.Core, topQueryRight.Core)));
        }
Beispiel #3
0
            public static Dictionary <ICode, BlockInfo> GetInfo(ICode ast)
            {
                var v = new FindSuitableBlocks();

                v.Visit(ast);
                return(v.blockCounts);
            }
        public static string V(ICode c) {
            var method = c.Ctx.MRef;
            StringBuilder sb = new StringBuilder();
            sb.Append(method.FullName);
            var seen = new HashSet<ICode>() { c };
            var todo = new Queue<Stmt>();
            todo.Enqueue((Stmt)c);
            while (todo.Any()) {
                var cBlock = todo.Dequeue();
                var v = new ShowVisitor();
                v.Visit(cBlock);
                sb.AppendLine();
                sb.Append(GetStmtName(cBlock) + ":");
                sb.Append(v.Code);
                foreach (var continuation in v.Continuations) {
                    if (seen.Add(continuation.To)) {
                        todo.Enqueue(continuation.To);
                    }
                }
            }

            sb.AppendLine();
            sb.Append("}");
            return sb.ToString();
        }
Beispiel #5
0
 protected override void BlockStart(ICode block)
 {
     base.BlockStart(block);
     this.knownTrue.Clear();
     this.knownTrue.Push(new List <Expr>());
     this.assignmentsTo.Clear();
 }
Beispiel #6
0
        public static bool Only(ICode ast, params Stmt.NodeType[] stmtTypes)
        {
            var v = new VisitorOnlyStatements(stmtTypes);

            v.Visit(ast);
            return(v.IsOnlyRequestedTypes);
        }
Beispiel #7
0
        public static IEnumerable <FieldReference> V(ICode ast)
        {
            var v = new VisitorFindFieldAccesses();

            v.Visit(ast);
            return(v.fieldAccesses);
        }
Beispiel #8
0
        public static IEnumerable <TypeReference> V(ICode ast)
        {
            var v = new VisitorFindRequiredTypes();

            v.Visit(ast);
            return(v.types);
        }
Beispiel #9
0
        public void Fill(Database database, string connectionString)
        {
            ICode code = null;

            try
            {
                if ((database.Options.Ignore.FilterStoreProcedure) || (database.Options.Ignore.FilterView) || (database.Options.Ignore.FilterFunction) || (database.Options.Ignore.FilterTrigger))
                {
                    root.RaiseOnReading(new ProgressEventArgs("Reading Text Objects...", Constants.READING_TEXTOBJECTS));
                    using (SqlConnection conn = new SqlConnection(connectionString))
                    {
                        using (SqlCommand command = new SqlCommand(GetSQL(database.Options), conn))
                        {
                            conn.Open();
                            command.CommandTimeout = 0;
                            using (SqlDataReader reader = command.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    code = null;
                                    root.RaiseOnReadingOne(reader["name"]);
                                    string type       = reader["Type"].ToString().Trim();
                                    string name       = reader["name"].ToString();
                                    string definition = reader["Text"].ToString();
                                    int    id         = (int)reader["object_id"];
                                    if (type.Equals("V"))
                                    {
                                        code = (ICode)database.Views.Find(id);
                                    }

                                    if (type.Equals("TR"))
                                    {
                                        code = (ICode)database.Find(id);
                                    }

                                    if (type.Equals("P"))
                                    {
                                        ((ICode)database.Procedures.Find(id)).Text = GetObjectDefinition(type, name, definition);
                                    }

                                    if (type.Equals("IF") || type.Equals("FN") || type.Equals("TF"))
                                    {
                                        code = (ICode)database.Functions.Find(id);
                                    }

                                    if (code != null)
                                    {
                                        code.Text = reader["Text"].ToString();
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Beispiel #10
0
        /// <summary>
        /// Converts an FXCM OrderStatus to a QuantConnect <see cref="OrderStatus"/>
        /// </summary>
        /// <param name="status"></param>
        /// <returns></returns>
        private static OrderStatus ConvertOrderStatus(ICode status)
        {
            var result = OrderStatus.None;

            switch (status.getCode())
            {
            case IFixValueDefs.__Fields.FXCMORDSTATUS_INPROCESS:
            case IFixValueDefs.__Fields.FXCMORDSTATUS_WAITING:
            case IFixValueDefs.__Fields.FXCMORDSTATUS_EXECUTING:
                result = OrderStatus.Submitted;
                break;

            case IFixValueDefs.__Fields.FXCMORDSTATUS_EXECUTED:
                result = OrderStatus.Filled;
                break;

            case IFixValueDefs.__Fields.FXCMORDSTATUS_CANCELLED:
            case IFixValueDefs.__Fields.FXCMORDSTATUS_EXPIRED:
                result = OrderStatus.Canceled;
                break;

            case IFixValueDefs.__Fields.FXCMORDSTATUS_REJECTED:
                result = OrderStatus.Invalid;
                break;
            }

            return(result);
        }
        // TODO: Restrict movement across try/catch/finally borders

        public static ICode V(ICode ast) {
            var v = new VisitorSsaCopyPropagation();
            var ast2 = v.Visit(ast);
            var alreadyReplaced = new Dictionary<Expr, Expr>();
            foreach (var a in v.assignments.Values) {
                if (a.mustKeep) {
                    continue;
                }
                if (a.assignment == null) {
                    continue;
                }
                if (a.count == 1) {
                    if (!VisitorFindSpecials.Any(a.assignment, Expr.Special.PossibleSideEffects)) {
                        ast2 = VisitorReplace.V(ast2, a.assignment, null);
                    }
                } else if (a.count == 2 /*|| 
                    (IsSimple(alreadyReplaced.ValueOrDefault(a.assignment.Expr, a.assignment.Expr)) && !a.assignment.Expr.Type.IsNonPrimitiveValueType())*/) {
                    var updater = new Updater(a.assignment.Target);
                    ast2 = updater.Visit(ast2);
                    foreach (var replaced in updater.Replaced) {
                        alreadyReplaced[replaced.Item1] = replaced.Item2;
                    }
                }
            }
            return ast2;
        }
Beispiel #12
0
        public static IEnumerable <ICall> V(ICode ast)
        {
            var v = new VisitorFindCalls();

            v.Visit(ast);
            return(v.calls);
        }
 public static int GetCount(ICode ast, ICode toCount) {
     var v = new VisitorCounter {
         toCount = toCount
     };
     v.Visit(ast);
     return v.count;
 }
Beispiel #14
0
        public override void Deserialize(Stream input)
        {
            var dataType = input.ReadValueU32();
            var length   = input.ReadValueS32();

            this.GlobalVariableCount = input.ReadValueU32();

            var   codeStream = input.ReadToMemoryStream(length);
            ICode code;

            if (dataType == 1)
            {
                code = new SourceCode();
            }
            else if (dataType == 5)
            {
                code = new CompiledCode();
            }
            else
            {
                throw new InvalidOperationException();
            }

            code.Deserialize(codeStream);
            this.Code = code;
        }
Beispiel #15
0
        private static void AnalyzeCode(ICode code, int errorsCount, int?decodingThreadsCount = null)
        {
            var informationWord = Enumerable.Repeat(code.Field.Zero(), code.InformationWordLength).ToArray();
            var codeword        = code.Encode(informationWord);

            var processedNoises = 0;

            Parallel.ForEach(
                NoiseGenerator.VariatePositionsAndValues(code.Field, code.CodewordLength, errorsCount),
                new ParallelOptions {
                MaxDegreeOfParallelism = decodingThreadsCount ?? (int)(Environment.ProcessorCount * 1.5d)
            },
                x =>
            {
                var decodingResults = code.DecodeViaList(codeword.AddNoise(x), errorsCount);
                if (decodingResults.Contains(informationWord, WordsComparer) == false)
                {
                    throw new InvalidOperationException($"Failed to process noise {string.Join<FieldElement>(",", x)}");
                }

                if (Interlocked.Increment(ref processedNoises) % 50 == 0)
                {
                    Logger.LogInformation($"[{Thread.CurrentThread.ManagedThreadId}]: Current noise value ({string.Join<FieldElement>(",", x)})");
                }
                if (TelemetryCollector.ProcessedSamplesCount % 100 == 0)
                {
                    Logger.LogInformation(TelemetryCollector.ToString());
                }
            }
                );
        }
Beispiel #16
0
        /// <summary>
        /// Setup a <see cref="JsTreeNode"/> from a <c>CodeBean</c>
        /// </summary>
        /// <param name="node">
        /// The <see cref="JsTreeNode"/>
        /// </param>
        /// <param name="artefact">
        /// The <c>CodeBean</c>
        /// </param>
        protected static void SetupNode(JsTreeNode node, ICode artefact)
        {
            string entitle = "[" + artefact.Id + "]";
            string format  = string.Format(CultureInfo.InvariantCulture, ArtefactFormat, entitle);

            SetupNode(node, artefact, entitle, format);
        }
 public MethodCallExpression(string name, Expression expression)
 {
     this.name = name;
     this.caller = expression;
     parameters = new List<Expression>();
     genericArgumentTypes = new List<CsType>();
 }
        public static string V(ICode c)
        {
            var           method = c.Ctx.MRef;
            StringBuilder sb     = new StringBuilder();

            sb.Append(method.FullName);
            var seen = new HashSet <ICode>()
            {
                c
            };
            var todo = new Queue <Stmt>();

            todo.Enqueue((Stmt)c);
            while (todo.Any())
            {
                var cBlock = todo.Dequeue();
                var v      = new ShowVisitor();
                v.Visit(cBlock);
                sb.AppendLine();
                sb.Append(GetStmtName(cBlock) + ":");
                sb.Append(v.Code);
                foreach (var continuation in v.Continuations)
                {
                    if (seen.Add(continuation.To))
                    {
                        todo.Enqueue(continuation.To);
                    }
                }
            }

            sb.AppendLine();
            sb.Append("}");
            return(sb.ToString());
        }
Beispiel #19
0
        internal static ICode ConvertTable(ExpressionConverter decoder, Expression exp)
        {
            //where query, write tables side by side.
            var arry = exp as NewArrayExpression;

            if (arry != null)
            {
                var multiTables = new ICode[arry.Expressions.Count];
                for (int i = 0; i < multiTables.Length; i++)
                {
                    multiTables[i] = ConvertTable(decoder, arry.Expressions[i]);
                }
                return(Arguments(multiTables));
            }

            var table = decoder.ConvertToCode(exp);

            if (table.IsEmpty)
            {
                return(string.Empty.ToCode());
            }

            //sub query.
            var body = GetSubQuery(exp);

            if (body != null)
            {
                return(new SubQueryAndNameCode(body, table));
            }

            return(table);
        }
Beispiel #20
0
        public CodeLambda(string lhsSymbol, IEnumerable <FuncParameter> parameters, string resultTypeName, ICode body)
        {
            this.Body       = body;
            this.LhsSymbol  = lhsSymbol;
            this.Parameters = parameters.ToArray();
            // this is safe but conservative, in case when user named some parameter this param will be counted as use
            // which does not have to be true, to be 100% sure we should analyse the given code -- but it takes some work
            // and is error prone, so for now -- let's stick with params only
            this.RhsUnusedParamsCount = this.Parameters.TakeWhile(it => it.IsDummy).Count();
            this.ResultTypeName       = resultTypeName;

            if (this.Parameters.Any(it => it == null))
            {
                throw new ArgumentNullException();
            }


            var dups = this.Parameters
                       .GroupBy(it => it.Name)
                       .Where(it => it.Count() > 1)
                       .Select(it => it.Key)
                       .ToArray();

            if (dups.Any())
            {
                throw new ArgumentException("Duplicate parameter names: " + dups.Join(", "));
            }
        }
 protected virtual ICode TopLevel(ICode c) {
     this.seen.Add(c);
     this.todo.Enqueue(c);
     ICode ret = null;
     while (todo.Any()) {
         var node = todo.Dequeue();
         this.BlockStart(node);
         var transformed = this.Visit(node);
         this.BlockEnd(node, transformed);
         if (ret == null) {
             ret = transformed;
         }
     }
     bool anyChanges = false;
     foreach (var continuation in this.continuations) {
         var mapped = this.map.ValueOrDefault(continuation.To);
         if (mapped != null) {
             continuation.To = (Stmt)mapped;
             anyChanges = true;
         }
     }
     if (anyChanges) {
         // Cloned to make sure the returned object will be different from ICode argument
         // Other code relies on it being different if this visitor has made changes to the AST
         ret = (ICode)ret.Clone();
     }
     return ret;
 }
 internal static HCode Clause(ICode clause, params ICode[] args)
 {
     var code = new HCode() { AddIndentNewLine = true, Separator = " " };
     code.Add(clause);
     code.AddRange(args);
     return code;
 }
        public static ICode V(ICode ast) {
            var ctx = ast.Ctx;
            var blockInfo = VisitorSubstituteIrreducable.FindSuitableBlocks.GetInfo(ast);
            var bInfo = blockInfo.Select(x => new {
                toCount = VisitorContToCounter.GetCount(x.Key, ast),
                ast = x.Key,
                codeCount = x.Value.numICodes,
            }).ToArray();
            var block = bInfo.Where(x => x.toCount >= 2).OrderBy(x => x.toCount * x.codeCount).FirstOrDefault();
            if (block == null) {
                return ast;
            }

            var phis = new Dictionary<Expr,Expr>();
            var blockCopies = Enumerable.Range(0, block.toCount - 1)
                .Select(x => {
                    var v = new VisitorDuplicateCode();
                    var ret = v.Visit(block.ast);
                    phis = phis.Merge(v.phiMap, (a, b) => new ExprVarPhi(ctx) { Exprs = new[] { a, b } });
                    return ret;
                })
                .Concat(block.ast)
                .ToArray();

            var contTos = VisitorFindContinuationsRecursive.Get(ast).Where(x => x.To == block.ast).ToArray();
            for (int i = 0; i < contTos.Length; i++) {
                var contTo = contTos[i];
                var blockCopy = blockCopies[i];
                ast = VisitorReplace.V(ast, contTo, blockCopy);
            }

            ast = VisitorReplaceExprUse.V(ast, phis);

            return ast;
        }
Beispiel #24
0
        public static IEnumerable <ExprVar> V(ICode ast)
        {
            var v = new VisitorFindVars();

            v.Visit(ast);
            return(v.vars);
        }
Beispiel #25
0
        private void CreateCodeInstance()
        {
            // Auto generated code
            Code = new global::CodeInstance.CodeInstance();

            CodeParameters = new List <CodeParameterBase>(Code.GetParameters().Select(ToCodeParameters));
        }
Beispiel #26
0
        public static IEnumerable <Stmt> Find(ICode ast)
        {
            var v = new VisitorFindDuplicateStmts();

            v.Visit(ast);
            return(v.duplicates);
        }
Beispiel #27
0
            public static int Count(ICode ast, ICode toCount)
            {
                var v = new VisitorCounter(toCount);

                v.Visit(ast);
                return(v.count);
            }
Beispiel #28
0
        bool TryGetDbDesignParamCode(MemberExpression exp, out ICode code)
        {
            var member = exp;

            code = null;
            var names = new List <string>();

            while (member != null)
            {
                names.Insert(0, member.Member.Name);
                var table = member.GetMemberTableConverter();
                if (table != null)
                {
                    if (!string.IsNullOrEmpty(table.Name))
                    {
                        names[0] = table.Name;
                    }
                    var lambdaName = string.Join(".", names.ToArray());
                    code = (names.Count == 1) ?
                           (ICode) new DbTableCode(new TableInfo(lambdaName, lambdaName)) :
                           new DbColumnCode(new ColumnInfo(exp.Type, lambdaName, lambdaName, names[names.Count - 1]));
                    return(true);
                }
                if (member.Expression is ParameterExpression)
                {
                    //using ParameterExpression with LambdicSql only when it represents a component of db.
                    //for example, Sql<DB>.Create(db =>
                    var lambdaName = string.Join(".", names.ToArray());
                    code = ResolveLambdicElement(lambdaName);
                    return(true);
                }
                member = member.Expression as MemberExpression;
            }
            return(false);
        }
        public static bool Any(ICode ast)
        {
            var v = new VisitorFindContinuationsRecursive();

            v.Visit(ast);
            return(v.Continuations.Any());
        }
Beispiel #30
0
        /// <summary>
        /// Convert expression to code.
        /// </summary>
        /// <param name="expression">Expression.</param>
        /// <param name="converter">Expression converter.</param>
        /// <returns>Parts.</returns>
        public override ICode Convert(MethodCallExpression expression, ExpressionConverter converter)
        {
            //ALL, DISTINCT, TOP
            int expressionIndex = expression.SkipMethodChain(0);
            var selectParts     = new ICode[expression.Arguments.Count - expressionIndex];

            selectParts[0] = string.IsNullOrEmpty(Name) ? SelectClause : Name.ToCode();
            for (int i = 0; i < selectParts.Length - 1; i++, expressionIndex++)
            {
                selectParts[i + 1] = converter.ConvertToCode(expression.Arguments[expressionIndex]);
            }

            var select = LineSpace(selectParts);

            //select elemnts.
            var selectTargets = expression.Arguments[expression.Arguments.Count - 1];

            //*
            if (typeof(AsteriskBase).IsAssignableFromEx(selectTargets.Type))
            {
                select.Add(converter.ConvertToCode(selectTargets));
                return(new SelectClauseCode(select));
            }

            //new []{ a, b, c} recursive.
            else if (selectTargets.Type.IsArray)
            {
                var newArrayExp = selectTargets as NewArrayExpression;
                if (newArrayExp != null)
                {
                    var array = new ICode[newArrayExp.Expressions.Count];
                    for (int i = 0; i < array.Length; i++)
                    {
                        array[i] = converter.ConvertToCode(newArrayExp.Expressions[i]);
                    }

                    var coreCode = new VCode(select, new VCode(array)
                    {
                        Indent = 1, Separator = ","
                    });
                    return(new SelectClauseCode(coreCode));
                }
            }

            //new { item = db.tbl.column }
            {
                var createInfo = ObjectCreateAnalyzer.MakeObjectCreateInfo(selectTargets);
                var elements   = new ICode[createInfo.Members.Length];
                for (int i = 0; i < elements.Length; i++)
                {
                    elements[i] = ConvertSelectedElement(converter, createInfo.Members[i]);
                }

                var coreCode = new VCode(select, new VCode(elements)
                {
                    Indent = 1, Separator = ","
                });
                return(new SelectClauseCode(coreCode));
            }
        }
        public static IEnumerable <StmtContinuation> Get(ICode ast)
        {
            var v = new VisitorFindContinuationsRecursive();

            v.Visit(ast);
            return(v.Continuations);
        }
Beispiel #32
0
        private void ObfuscateAssembly(string filePath, PeFile peFile, ICode code)
        {
            var fileObfuscated = Path.GetFileNameWithoutExtension(filePath) +
                                 "Obf" + Path.GetExtension(filePath);

            m_codeObfuscator.Obfuscate(fileObfuscated, peFile, code);
        }
Beispiel #33
0
        public static IEnumerable <MethodReference> V(ICode ast)
        {
            var v = new VisitorFindStaticConstructors();

            v.Visit(ast);
            return(v.staticConstructors);
        }
Beispiel #34
0
        private IfBuilder GenerateDataInterfaceIfClause(
            ObjectTypeDescriptor objectTypeDescriptor,
            bool isNonNullable,
            string variableName)
        {
            ICode ifCondition = MethodCallBuilder
                                .Inline()
                                .SetMethodName(
                _dataParameterName.MakeNullable(!isNonNullable),
                WellKnownNames.TypeName,
                nameof(string.Equals))
                                .AddArgument(objectTypeDescriptor.Name.AsStringToken())
                                .AddArgument(TypeNames.OrdinalStringComparison);

            if (!isNonNullable)
            {
                ifCondition = NullCheckBuilder
                              .New()
                              .SetCondition(ifCondition)
                              .SetSingleLine()
                              .SetDetermineStatement(false)
                              .SetCode("false");
            }

            MethodCallBuilder constructorCall = MethodCallBuilder
                                                .Inline()
                                                .SetNew()
                                                .SetMethodName(objectTypeDescriptor.RuntimeType.Name);

            foreach (PropertyDescriptor prop in objectTypeDescriptor.Properties)
            {
                var propAccess = $"{_dataParameterName}.{prop.Name}";
                if (prop.Type.IsEntityType() || prop.Type.IsDataType())
                {
                    constructorCall.AddArgument(BuildMapMethodCall(_dataParameterName, prop, true));
                }
                else if (prop.Type.IsNullableType())
                {
                    constructorCall.AddArgument(propAccess);
                }
                else
                {
                    constructorCall
                    .AddArgument(
                        NullCheckBuilder
                        .Inline()
                        .SetCondition(propAccess)
                        .SetCode(ExceptionBuilder.Inline(TypeNames.ArgumentNullException)));
                }
            }

            return(IfBuilder
                   .New()
                   .SetCondition(ifCondition)
                   .AddCode(AssignmentBuilder
                            .New()
                            .SetLefthandSide(variableName)
                            .SetRighthandSide(constructorCall)));
        }
        public void Save(ICode code)
        {
            if (code == null)
                throw new ArgumentNullException("code");

            if (code.Configuration != null)
                Storage.Store(SavePath(code), code.Configuration.Settings);
        }
 public static ICode V(ICode ast) {
     var phiClusters = VisitorPhiClusters.V(ast);
     var v = new VisitorDefiniteAssignment {
         phiComparer = new VisitorPhiClusters.EqualityComparer(phiClusters),
     };
     v.stack.Push(new List<ExprVar>());
     return v.Visit(ast);
 }
Beispiel #37
0
 public DetailItem(ICode location)
     : base(new string[3])
 {
     _location             = location;
     base.SubItems[0].Text = location.CODE;
     base.SubItems[1].Text = location.Name;
     base.SubItems[2].Text = location.Description;
 }
        public override void process(ICode iCode, SymbolTableStack symbolTableStack)
        {
            long startTime = DateTime.Now.Ticks;
            float elapsedTime = (DateTime.Now.Ticks - startTime) / 1000f;
            int instructionCount = 0;

            sendMessage(new Message(MessageType.COMPILER_SUMMARY, new Object[] {instructionCount, elapsedTime}));
        }
 public static ICode V(ICode ast) {
     var v = new VisitorIfSimplification(ast);
     var ret = v.Visit(ast);
     foreach (var replace in v.replaceVars) {
         ret = VisitorReplace.V(ret, replace.Item1, replace.Item2);
     }
     return ret;
 }
Beispiel #40
0
 internal SubQueryAndNameCode(string body, ICode table)
 {
     _body   = body;
     _define = new HCode(table, _body.ToCode())
     {
         Separator = " ", EnableChangeLine = false
     };
 }
 public MethodCallExpression(string name, CsType csType)
 {
     this.name = name;
     this.caller = csType;
     IsStaticMethodCall = true;
     parameters = new List<Expression>();
     genericArgumentTypes = new List<CsType>();
 }
Beispiel #42
0
	public static void Main ()
	{
		IEnumerable<object> array = new ICode[10];
		IEnumerator<object> x = array.GetEnumerator ();

		x.MoveNext ();
		object o = x.Current;
	}
Beispiel #43
0
 /// <summary>
 /// Add text.
 /// </summary>
 /// <param name="text">Text.</param>
 public void Add(ICode text)
 {
     if (text.IsEmpty)
     {
         return;
     }
     _core.Add(text);
 }
        public static string Create(MethodReference mRef, Resolver resolver, ICode ast) {
            if (mRef.ContainsGenericParameters()) {
                throw new ArgumentException("Cannot create JS for method with open generic parameters");
            }
            var mDef = mRef.Resolve();
            if (mDef.IsAbstract) {
                throw new ArgumentException("Should never need to transcode an abstract method");
            }
            var tRef = mRef.DeclaringType;
            var tDef = tRef.Resolve();

            var v = new JsMethod(resolver);
            v.Visit(ast);
            var js = v.js.ToString();

            var sb = new StringBuilder();
            // Method declaration
            var methodName = resolver.MethodNames[mRef];
            //var parameterNames = mRef.Parameters.Select(x => v.parameters.ValueOrDefault(x).NullThru(y => resolver.LocalVarNames[y])).ToArray();
            // Match parameters, but have to do by position, as method built may be a custom method replacing a BCL method,
            // so parameters are not the same.
            var parameterNames = mRef.Parameters.Select(x => v.parameters.FirstOrDefault(y => y.Key.Sequence == x.Sequence).Value.NullThru(y => resolver.LocalVarNames[y])).ToArray();
            if (!mDef.IsStatic) {
                var thisName = v.vars.FirstOrDefault(x => x.ExprType == Expr.NodeType.VarThis).NullThru(x => resolver.LocalVarNames[x]);
                parameterNames = parameterNames.Prepend(thisName).ToArray();
            }
            var unusedParameterNameGen = new NameGenerator();
            parameterNames = parameterNames.Select(x => x ?? ("_" + unusedParameterNameGen.GetNewName())).ToArray();
            sb.AppendFormat("// {0}", mRef.FullName);
            sb.AppendLine();
            sb.AppendFormat("var {0} = function({1}) {{", methodName, string.Join(", ", parameterNames));
            // Variable declarations
            var declVars = v.vars
                .Select(x => new { name = resolver.LocalVarNames[x], type = x.Type })
                .Where(x => !parameterNames.Contains(x.name))
                .Select(x => {
                    var name = x.name;
                    if (x.type.IsValueType) {
                        name += " = " + DefaultValuer.Get(x.type, resolver.FieldNames);
                    }
                    return name;
                })
                .Distinct() // Bit of a hack, but works for now
                .ToArray();
            if (declVars.Any()) {
                sb.AppendLine();
                sb.Append(' ', tabSize);
                sb.AppendFormat("var {0};", string.Join(", ", declVars));
            }
            // Method body
            sb.AppendLine(js);
            // Method ending
            sb.AppendLine("};");

            var sbStr = sb.ToString();
            return sbStr;
        }
Beispiel #45
0
 public override bool Compare(ICode obj)
 {
     if (obj == null) throw new ArgumentNullException("obj");
     if (!this.ToSql().Equals(obj.ToSql())) return false;
     if (this.InsteadOf != ((Trigger)obj).InsteadOf) return false;
     if (this.IsDisabled != ((Trigger)obj).IsDisabled) return false;
     if (this.NotForReplication != ((Trigger)obj).NotForReplication) return false;
     return true;
 }
        // Only have if, switch, cil, continuation, try - no other type of statement
        // Blocks will only start with cil or try
        // Will end with null, if, switch or continuation
        // If ending in 'if', 'then' and 'else' will both have continuations only
        // 'try' statements will have only 0 or 1 catch clauses

        public static ICode V(ICode ast) {
            var v = new VisitorConvertCilToSsa(ast);
            ast = v.Visit(ast);
            foreach (var instResult in v.instResults.Values) {
                var var = new ExprVarLocal(ast.Ctx, instResult.Type);
                ast = VisitorReplace.V(ast, instResult, var);
            }
            return ast;
        }
        public override string SavePath(ICode code)
        {
            if (code == null)
                throw new ArgumentNullException("code");

            if (code.Configuration != null)
                return String.Format("\\{0}\\{1}", code.Configuration.SettingsIdentifier, code.Configuration.Settings.Version);
            else
                return null;
        }
        public override IEnumerable<string> LoadPaths(ICode code)
        {
            if (code == null)
                throw new ArgumentNullException("code");

            if (code.Configuration != null)
            {
                for (int i = code.Configuration.SupportedSettingsVersions.To; i >= code.Configuration.SupportedSettingsVersions.From; i--)
                    yield return String.Format("\\{0}\\{1}", code.Configuration.SettingsIdentifier, i);
            }
        }
		public CodeRefObjectBaseCore(IHierarchy Ihierarchy,
				IHierarchicalCode codeRef, IList<ICodelistObject> codelists) : base(codeRef) {
			Icode = IGetCode(Ihierarchy, codeRef, codelists);
			if (codeRef.CodeRefs != null) {
				_codeRefs = new List<IHierarchicalCodeObjectBase>();
				/* foreach */
				foreach (IHierarchicalCode currentCodeRef  in  codeRef.CodeRefs)
					_codeRefs.Add(new CodeRefObjectBaseCore(Ihierarchy,
											currentCodeRef, codelists));
			}
		}
 private VisitorConvertCilToSsa(ICode root) {
     this.ctx = root.Ctx;
     var v = new VisitorFindInstResults();
     v.Visit(root);
     this.instResults = v.instResults.ToDictionary(x => x.Inst);
     this.CreateOrMergeBsi((Stmt)root, new ExprVarPhi[0],
         this.ctx.MDef.Body.Variables.Select(x => (Expr)new ExprVarLocal(this.ctx, x.VariableType.FullResolve(this.ctx))).ToArray(),
         this.ctx.MRef.Parameters.Select(x => (Expr)new ExprVarParameter(this.ctx, x)).ToArray());
     if (this.ctx.HasFakeThis) {
         this.blockStartInfos[root].Args[0] = new ExprVarPhi(this.ctx) { Exprs = new Expr[] { ctx.This } };
     }
 }
        /// <summary>
        /// Convert expression to code.
        /// </summary>
        /// <param name="expression">Expression.</param>
        /// <param name="converter">Expression converter.</param>
        /// <returns>Parts.</returns>
        public override ICode Convert(MethodCallExpression expression, ExpressionConverter converter)
        {
            //ALL, DISTINCT, TOP
            int expressionIndex = expression.SkipMethodChain(0);
            var selectParts = new ICode[expression.Arguments.Count - expressionIndex];
            selectParts[0] = SelectClause;
            for (int i = 0; i < selectParts.Length - 1; i++, expressionIndex++)
            {
                selectParts[i + 1] = converter.ConvertToCode(expression.Arguments[expressionIndex]);
            }

            var select = LineSpace(selectParts);

            //select elemnts.
            var selectTargets = expression.Arguments[expression.Arguments.Count - 1];

            //*
            if (typeof(IAsterisk).IsAssignableFromEx(selectTargets.Type))
            {
                select.Add("*".ToCode());
                return new SelectClauseCode(select);
            }

            //new []{ a, b, c} recursive.
            else if (selectTargets.Type.IsArray)
            {
                var newArrayExp = selectTargets as NewArrayExpression;

                var array = new ICode[newArrayExp.Expressions.Count];
                for (int i = 0; i < array.Length; i++)
                {
                    array[i] = converter.ConvertToCode(newArrayExp.Expressions[i]);
                }

                var coreCode = new VCode(select, new VCode(array) { Indent = 1, Separator = "," });
                return new SelectClauseCode(coreCode);
            }

            //new { item = db.tbl.column }
            else
            {
                var createInfo = ObjectCreateAnalyzer.MakeSelectInfo(selectTargets);
                var elements = new ICode[createInfo.Members.Length];
                for (int i = 0; i < elements.Length; i++)
                {
                    elements[i] = ConvertSelectedElement(converter, createInfo.Members[i]);
                }

                var coreCode = new VCode(select, new VCode(elements) { Indent = 1, Separator = "," });
                return new SelectClauseCode(coreCode);
            }
        }
 public static ICode V(ICode ast) {
     var nowReplace = new Dictionary<ExprVar, ExprVarLocal>();
     for (; ; ) {
         var v = new VisitorTypeCorrector {
             nowReplace = nowReplace
         };
         ast = v.Visit(ast);
         if (!v.toReplace.Any()) {
             return ast;
         }
         nowReplace = v.toReplace;
     }
 }
Beispiel #53
0
        public virtual void Process(ICode code, ISymbolTable symTab)
        {
            Stopwatch.Start();
            Stopwatch.Stop();
            int executionCount = 0;
            int runtimeError = 0;

            OnMessageEmitted(this, MessageType.InterpreterSummary, new Dictionary<string, object>()
            {
                {"ExecutionCount", executionCount},
                {"RuntimeError", runtimeError},
                {"Elapsed", Stopwatch.Elapsed}
            });
        }
 public override ICode Visit(ICode c) {
     if (this.first) {
         this.first = false;
         return this.TopLevel(c);
     } else {
         var ret = base.Visit(c);
         if (c != ret) {
             if (c.CodeType == CodeType.Statement) {
                 this.map.Add(c, ret);
             }
         }
         return ret;
     }
 }
 public OrderFormController(IOrderForms repoOrderForm
     , IOrderData repoOrderData
     , ICode repoCode
     , IItem repoItem
     , IContainer repoContainer
     , IBusinessTasks repoBusinessTasks)
 {
     this.dalorderform = repoOrderForm;
     this.dalorderdata = repoOrderData;
     this.dalCode = repoCode;
     this.dalItem = repoItem;
     this.dalContainer = repoContainer;
     this.dalBusinessTasks = repoBusinessTasks;
 }
Beispiel #56
0
        public override void process(ICode iCode, SymbolTableStack symbolTableStack)
        {
            this.symbolTableStack = symbolTableStack;
            this.iCode = iCode;

            long startTime = DateTime.Now.Ticks;

            ICodeNode rootNode = iCode.GetRoot();
            StatementExecutor statementExecutor = new StatementExecutor(this);
            statementExecutor.Execute(rootNode);

            float elapsedTime = (DateTime.Now.Ticks - startTime) / 1000f;
            int runtimeErrors = RuntimeErrorHandler.errorCount;

            sendMessage(new Message(MessageType.INTERPRETER_SUMMARY, new Object[] { executionCount, runtimeErrors, elapsedTime }));
        }
        internal IEnumerable<ICode> InitAndConvertArguments(MethodCallExpression expression, ExpressionConverter converter)
        {
            lock (this)
            {
                if (string.IsNullOrEmpty(Name)) Name = expression.Method.Name.ToUpper();

                if (NameCode == null) NameCode = Name.ToCode();

                if (_startIndex == -1) _startIndex = expression.SkipMethodChain(0);

                if (_isParamArray == null)
                {
                    var paramsInfo = expression.Method.GetParameters();
                    _isParamArray = new bool[paramsInfo.Length];
                    for (int i = 0; i < paramsInfo.Length; i++)
                    {
                        _isParamArray[i] = paramsInfo[i].GetAttribute<ParamArrayAttribute>() != null;
                    }
                }
            }

            var args = new List<ICode>();
            for (int i = _startIndex; i < expression.Arguments.Count; i++)
            {
                var argExp = expression.Arguments[i];
                if (_isParamArray[i])
                {
                    var newArrayExp = argExp as NewArrayExpression;
                    if (newArrayExp != null)
                    {
                        foreach (var e in newArrayExp.Expressions) args.Add(converter.ConvertToCode(e));
                    }
                    else
                    {
                        var obj = converter.ConvertToObject(argExp);
                        foreach (var e in (IEnumerable)obj) args.Add(converter.ConvertToCode(e));
                    }
                }
                else
                {
                    args.Add(converter.ConvertToCode(argExp));
                }
            }
            return args;
        }
Beispiel #58
0
        public Pascal(string operation, string filePath, string flags)
        {
            try
            {
                bool intermediate = flags.IndexOf('i') > -1;
                bool xref = flags.IndexOf('x') > -1;

                source = new Source(new StreamReader(filePath));
                source.addMessageListener(new SourceMessageListener());

                parser = FrontendFactory.createParser("Pascal", "top-down", source);
                parser.addMessageListener(new ParserMessageListener());

                backend = BackendFactory.createBackend(operation);
                backend.addMessageListener(new BackendMessageListener());

                parser.parse();
                source.close();

                iCode = parser.iCode;
                symbolTableStack = Parser.symbolTableStack;

                if (xref)
                {
                    CrossReferencer crossReferencer = new CrossReferencer();
                    crossReferencer.Print(symbolTableStack);
                }

                if (intermediate)
                {
                    ParseTreePrinter treePrinter =  new ParseTreePrinter(Console.Out);
                    treePrinter.Print(iCode);
                }
                backend.process(iCode, symbolTableStack);
            }

            catch (Exception e)
            {
                Console.WriteLine("***** Internal translator error. *****");
                Console.WriteLine(e.StackTrace);
            }
        }
 public static ICode V(ICode ast) {
     var s = (Stmt)ast;
     if (s.StmtType == Stmt.NodeType.Return) {
         var sRet = (StmtReturn)s;
         if (sRet.Expr == null) {
             return new StmtEmpty(ast.Ctx);
         }
     }
     if (s.StmtType == Stmt.NodeType.Block) {
         var sBlock = (StmtBlock)s;
         var last = sBlock.Statements.LastOrDefault();
         if (last != null && last.StmtType == Stmt.NodeType.Return) {
             var lastRet = (StmtReturn)last;
             if (lastRet.Expr == null) {
                 return new StmtBlock(ast.Ctx, sBlock.Statements.TakeWhile(x => x != last));
             }
         }
     }
     return ast;
 }
        public void Load(ICode code)
        {
            if (code == null)
                throw new ArgumentNullException("code");

            if (code.Configuration != null)
            {
                foreach (string path in LoadPaths(code))
                {
                    try
                    {
                        code.Configuration.Load(Storage.Restore(path) as ISettings);
                        break;
                    }
                    catch (ArgumentNullException)
                    {
                        continue;
                    }
                }
            }
        }