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