CSI.CodeChunk.Instantiate C# (CSharp) Метод

Instantiate() публичный статический Метод

public static Instantiate ( Assembly a, Interpreter interp ) : void
a System.Reflection.Assembly
interp Interpreter
Результат void
        public static void Instantiate(Assembly a, Interpreter interp)
        {
            Hashtable table = interp.VarTable;
            try
            {
                CodeChunk chunk = (CodeChunk)a.CreateInstance("CsiChunk");
                chunk.Go(table);
                // we display the type and value of expressions.  The variable $_ is
                // always set, which is useful if you want to save the result of the last
                // calculation.
                if (interp.returnsValue && DumpingValue)
                {
                    string stype;
                    object val = table["_"];
                    if (val == null)
                    {
                        stype = null;
                    }
                    else
                    {
                        Type type = val.GetType();
                        stype = interp.GetPublicRuntimeTypeName(type, true);
                        stype = "(" + (stype ?? interp.GetTypeName(type, true)) + ")";
                    }
                    if (val == null)
                    {
                        Print("null");
                    }
                    else
                        if (val is string)
                        {
                            Print(stype, "'" + val + "'");
                        }
                        else
                            if (val is IEnumerable)
                            {
                                Print(stype);
                                Dumpl((IEnumerable)val);
                            }
                            else
                                Print(stype, val);
                }
            }
            catch (Exception ex)
            {
                Print(ex.GetType() + " was thrown: " + ex.Message);
            }
        }

Usage Example

        void ExecuteLine(string codeStr)
        {
            // at this point we either have a line to be immediately compiled and evaluated,
            // or a function definition.
            CHash  type = CHash.Expression;
            string className = null, assemblyName = null, funName = null;
            Match  funMatch = funDef.Match(codeStr);

            if (funMatch.Success)
            {
                type = CHash.Function;
            }
            if (type == CHash.Function)
            {
                funName = funMatch.Groups[1].ToString();
                macro.RemoveMacro(funName);
                className    = "Csi" + nextAssembly++;
                assemblyName = className + ".dll";
                codeStr      = codeStr.Insert(funMatch.Groups[1].Index, "_");
            }
            codeStr = macro.ProcessLine(codeStr);
            if (codeStr == "")  // may have been a prepro statement!
            {
                return;
            }
            bool wasAssignment;

            codeStr = MassageInput(codeStr, out wasAssignment);
            if (wasAssignment)
            {
                type = CHash.Assignment;
            }
            CompilerResults cr = CompileLine(codeStr.TrimStart(), type, assemblyName, className);

            if (cr != null)
            {
                Assembly ass = cr.CompiledAssembly;
                if (type != CHash.Function)
                {
                    CodeChunk.Instantiate(ass, this);
                }
                else
                {
                    CsiFunctionContext.Instantiate(ass, varTable, className, funName);
                    string prefix = mustDeclare ? "" : "$";
                    macro.AddMacro(funName, prefix + className + "._" + funName, null);
                    AddReference(Path.GetFullPath(assemblyName));
                }
            }
        }