public Parameter(string name, TypeReplacement type) { Type = type; Name = name; if (name.StartsWith("*")) throw new Exception("Names not allowed to start with *"); }
public Parameter(string name, TypeReplacement type) { Type = type; Name = name; if (name.StartsWith("*")) { throw new Exception("Names not allowed to start with *"); } }
static IEnumerable <FunctionDecl> ParseInput(TextReader tr) { Dictionary <string, TypeReplacement> ThunkReturnTypes = new Dictionary <string, TypeReplacement>(); Dictionary <string, TypeReplacement> ThunkTypes = new Dictionary <string, TypeReplacement>(); ParseMode currentParseMode = ParseMode.FUNCTIONS; ParseMode oldParseMode = ParseMode.FUNCTIONS; List <FunctionDecl> functions = new List <FunctionDecl>(); int currentLineIndex = 1; for (string currentLine = tr.ReadLine(); currentLine != null; currentLine = tr.ReadLine(), currentLineIndex++) { try { if (currentLine.Length == 0) { continue; // Its an empty line, ignore } if (currentLine[0] == ';') { continue; // Its a comment } if (currentLine == "RETURNTYPES") { currentParseMode = ParseMode.RETURNTYPES; continue; } if (currentLine == "NORMALTYPES") { currentParseMode = ParseMode.NORMALTYPES; continue; } if (currentLine == "FUNCTIONS") { currentParseMode = ParseMode.FUNCTIONS; continue; } if (currentLine == "#endif") { currentParseMode = oldParseMode; continue; } if (currentLine.StartsWith("#if")) { oldParseMode = currentParseMode; currentParseMode = ParseMode.IFDEFING; } if (currentParseMode == ParseMode.IFDEFING) { continue; } switch (currentParseMode) { case ParseMode.NORMALTYPES: case ParseMode.RETURNTYPES: TypeReplacement t = new TypeReplacement(currentLine); if (currentParseMode == ParseMode.NORMALTYPES) { ThunkTypes.Add(t.ThunkTypeName, t); ThunkReturnTypes.Add(t.ThunkTypeName, t); } if (currentParseMode == ParseMode.RETURNTYPES) { ThunkReturnTypes[t.ThunkTypeName] = t; } break; case ParseMode.FUNCTIONS: functions.Add(new FunctionDecl(currentLine, ThunkReturnTypes, ThunkTypes)); break; } } catch (Exception e) { Console.Error.WriteLine("Error parsing line {0} : {1}", currentLineIndex, e.Message); } } return(functions.AsReadOnly()); }
static IEnumerable<FunctionDecl> ParseInput(TextReader tr) { Dictionary<string, TypeReplacement> ThunkReturnTypes = new Dictionary<string, TypeReplacement>(); Dictionary<string, TypeReplacement> ThunkTypes = new Dictionary<string, TypeReplacement>(); ParseMode currentParseMode = ParseMode.FUNCTIONS; ParseMode oldParseMode = ParseMode.FUNCTIONS; List<FunctionDecl> functions = new List<FunctionDecl>(); int currentLineIndex = 1; for (string currentLine = tr.ReadLine(); currentLine != null; currentLine = tr.ReadLine(), currentLineIndex++) { try { if (currentLine.Length == 0) { continue; // Its an empty line, ignore } if (currentLine[0] == ';') { continue; // Its a comment } if (currentLine == "RETURNTYPES") { currentParseMode = ParseMode.RETURNTYPES; continue; } if (currentLine == "NORMALTYPES") { currentParseMode = ParseMode.NORMALTYPES; continue; } if (currentLine == "FUNCTIONS") { currentParseMode = ParseMode.FUNCTIONS; continue; } if (currentLine == "#endif") { currentParseMode = oldParseMode; continue; } if (currentLine.StartsWith("#if")) { oldParseMode = currentParseMode; currentParseMode = ParseMode.IFDEFING; } if (currentParseMode == ParseMode.IFDEFING) { continue; } switch (currentParseMode) { case ParseMode.NORMALTYPES: case ParseMode.RETURNTYPES: TypeReplacement t = new TypeReplacement(currentLine); if (currentParseMode == ParseMode.NORMALTYPES) { ThunkTypes.Add(t.ThunkTypeName, t); ThunkReturnTypes.Add(t.ThunkTypeName, t); } if (currentParseMode == ParseMode.RETURNTYPES) { ThunkReturnTypes[t.ThunkTypeName] = t; } break; case ParseMode.FUNCTIONS: functions.Add(new FunctionDecl(currentLine, ThunkReturnTypes, ThunkTypes)); break; } } catch (Exception e) { Console.Error.WriteLine("Error parsing line {0} : {1}", currentLineIndex, e.Message); } } return functions.AsReadOnly(); }