AddMacro() public method

public AddMacro ( string name, string subst, string parms ) : void
name string
subst string
parms string
return void
示例#1
0
    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 != Match.Empty)
        {
            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));
            }
        }
    }
示例#2
0
    void ExecuteLine(string codeStr)
    {
        if (codeStr == lastCodeStr)
        {
            CodeChunk.Instantiate(lastAssembly, varTable);
            return;
        }
        // at this point we either have a line to be immediately compiled and evaluated,
        // or a function definition.
        // long st = Environment.TickCount;  // interpretation time is around 250 millesec
        string className = null, assemblyName = null, funName = null;
        Match  funMatch = funDef.Match(codeStr);
        bool   hasName  = funMatch != Match.Empty;

        if (hasName)
        {
            funName = funMatch.Groups[1].ToString();
            macro.RemoveMacro(funName);
            System.Console.WriteLine(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;
        }
        CompilerResults cr = CompileLine(codeStr, hasName, assemblyName, className);

        if (cr != null)
        {
            Assembly ass = cr.CompiledAssembly;
            if (!hasName)
            {
                CodeChunk.Instantiate(ass, varTable);
                lastCodeStr  = codeStr;
                lastAssembly = ass;
            }
            else
            {
                CsiFunctionContext.Instantiate(ass, varTable, className, funName);
                macro.AddMacro(funName, "$" + className + "._" + funName, null);
                AddReference(assemblyName);
            }
        }
        // long dt = Environment.TickCount - st;
        // Console.Write("alltime = " + dt + "\n");
    }