private bool TryCompileCodePointToken(MessageScriptParser.TokenContext context, out CodePointToken codePointToken) { LogContextInfo(context); codePointToken = new CodePointToken(); if (!TryGetFatal(context, context.IntLiteral, "Expected code point surrogate pair", out var argumentNodes)) { return(false); } if (!TryParseByteIntLiteral(context, "Expected code point high surrogate", () => argumentNodes[0], out var highSurrogate)) { return(false); } if (!TryParseByteIntLiteral(context, "Expected code point low surrogate", () => argumentNodes[1], out var lowSurrogate)) { return(false); } codePointToken = new CodePointToken(highSurrogate, lowSurrogate); return(true); }
private bool TryCompileAliasedFunction(MessageScriptParser.TokenContext context, string tagId, out FunctionToken functionToken) { LogContextInfo(context); functionToken = new FunctionToken(); var functionWasFound = false; foreach (var library in Library.MessageScriptLibraries) { var function = library.Functions.SingleOrDefault(x => x.Name == tagId); if (function == null) { continue; } var arguments = new List <short>(); for (var i = 0; i < function.Parameters.Count; i++) { if (!TryParseShortIntLiteral(context, "Expected function argument", () => context.IntLiteral(i), out var argument)) { return(false); } arguments.Add(argument); } functionToken = new FunctionToken(library.Index, function.Index, arguments); functionWasFound = true; break; } return(functionWasFound); }
private bool TryCompileFunctionToken(MessageScriptParser.TokenContext context, out FunctionToken functionToken) { LogContextInfo(context); functionToken = new FunctionToken(); if (!TryGetFatal(context, context.IntLiteral, "Expected arguments", out var argumentNodes)) { return(false); } if (!TryParseShortIntLiteral(context, "Expected function table index", () => argumentNodes[0], out var functionTableIndex)) { return(false); } if (!TryParseShortIntLiteral(context, "Expected function index", () => argumentNodes[1], out var functionIndex)) { return(false); } if (argumentNodes.Length > 2) { var arguments = new List <short>(argumentNodes.Length - 2); for (int i = 2; i < argumentNodes.Length; i++) { if (!TryParseShortIntLiteral(context, "Expected function argument", () => argumentNodes[i], out var argument)) { return(false); } arguments.Add(argument); } functionToken = new FunctionToken(functionTableIndex, functionIndex, arguments); } else { functionToken = new FunctionToken(functionTableIndex, functionIndex); } return(true); }