Exemple #1
0
        /// <summary>
        /// Abstracts and returns the spawned thread.
        /// </summary>
        /// <param name="parent">Parent</param>
        /// <param name="impl">Implementation</param>
        /// <param name="tidExpr">Expr</param>
        /// <param name="spawner">CallCmd</param>
        private Thread GetAbstractSpawnedThread(Thread parent, Implementation impl, Expr tidExpr, CallCmd spawner)
        {
            ThreadId tid = this.GetAbstractThreadId(tidExpr, impl, spawner);

            string threadName = "";

            if (spawner.Ins[2] is IdentifierExpr)
            {
                threadName = (spawner.Ins[2] as IdentifierExpr).Name;
            }
            else if (spawner.Ins[2] is NAryExpr)
            {
                var threadExpr = spawner.Ins[2] as NAryExpr;
                if (threadExpr.Fun.FunctionName.StartsWith("$bitcast."))
                {
                    threadName = (threadExpr.Args[0] as IdentifierExpr).Name;
                }
            }

            var thread = Thread.Create(this.AC, tid, threadName, spawner.Ins[3], parent);

            parent.AddChild(thread);

            if (ToolCommandLineOptions.Get().SuperVerboseMode)
            {
                Output.PrintLine("..... {0} spawns {1}",
                                 parent, thread);
            }

            return(thread);
        }