Ejemplo n.º 1
0
 public Parameter(string name, TypeReplacement type)
 {
     Type = type;
     Name = name;
     if (name.StartsWith("*"))
         throw new Exception("Names not allowed to start with *");
 }
Ejemplo n.º 2
0
 public Parameter(string name, TypeReplacement type)
 {
     Type = type;
     Name = name;
     if (name.StartsWith("*"))
     {
         throw new Exception("Names not allowed to start with *");
     }
 }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 4
0
        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();
        }