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