예제 #1
0
        private string GetValidNativeLibraryFunctionNameFromPastelToken(Pastel.Token token)
        {
            string name = token.Value;
            char   c;
            bool   okay = true;

            for (int i = name.Length - 1; i >= 0; --i)
            {
                c = name[i];
                if ((c >= 'a' && c <= 'z') ||
                    (c >= 'A' && c <= 'Z') ||
                    c == '_')
                {
                    // this is fine
                }
                else if (c >= '0' && c <= '9')
                {
                    if (i == 0)
                    {
                        okay = false;
                        break;
                    }
                }
                else
                {
                    okay = false;
                    break;
                }
            }
            if (!okay)
            {
                throw new Pastel.ParserException(token, "Invalid name for a native function or argument.");
            }
            return(name);
        }
예제 #2
0
        private IfStatement BuildIfStatement(int id, string op, Executable[] trueCode, Executable[] falseCode)
        {
            Pastel.Token equalsToken = Pastel.Token.CreateDummyToken(op);
            Variable     variable    = new Variable(Pastel.Token.CreateDummyToken(this.ConditionVariableName));

            variable.ApplyPrefix = false;
            Expression condition = new OpChain(new Expression[] { variable, InlineConstant.Of(id) }, new Pastel.Token[] { equalsToken });

            return(new IfStatement(
                       Pastel.Token.CreateDummyToken("if"),
                       condition,
                       TrimBreak(trueCode),
                       Pastel.Token.CreateDummyToken("else"),
                       TrimBreak(falseCode)));
        }
 public void TranslateInvocation(
     StringBuilder sb,
     AbstractTranslator translator,
     string functionName,
     Expression[] args,
     Pastel.Token throwToken)
 {
     try
     {
         sb.Append(LibraryExporter.Get(this.library, translator.Platform).TranslateNativeInvocation(throwToken, translator, functionName, args));
     }
     catch (System.Reflection.TargetInvocationException tie)
     {
         System.Console.WriteLine("Library translation generated an error:");
         System.Console.WriteLine(tie.InnerException.Message);
         System.Console.WriteLine(tie.InnerException.StackTrace);
         System.Environment.Exit(1);
     }
 }