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));
}
}
}