MCPcopy Create free account
hub / github.com/aiscript-dev/aiscript / parseCall

Function parseCall

src/parser/syntaxes/expressions.ts:301–347  ·  view source on GitHub ↗

* Call = "(" [Expr *(SEP Expr) [SEP]] ")"

(s: ITokenStream, target: Ast.Expression)

Source from the content-addressed store, hash-verified

299 * Call = "(" [Expr *(SEP Expr) [SEP]] ")"
300*/
301function parseCall(s: ITokenStream, target: Ast.Expression): Ast.Call {
302 const startPos = s.getPos();
303 const items: Ast.Expression[] = [];
304
305 s.expect(TokenKind.OpenParen);
306 s.next();
307
308 if (s.is(TokenKind.NewLine)) {
309 s.next();
310 }
311
312 while (!s.is(TokenKind.CloseParen)) {
313 items.push(parseExpr(s, false));
314
315 // separator
316 switch (s.getTokenKind()) {
317 case TokenKind.NewLine: {
318 s.next();
319 break;
320 }
321 case TokenKind.Comma: {
322 s.next();
323 if (s.is(TokenKind.NewLine)) {
324 s.next();
325 }
326 break;
327 }
328 case TokenKind.CloseParen: {
329 break;
330 }
331 case TokenKind.EOF: {
332 throw new AiScriptUnexpectedEOFError(s.getPos());
333 }
334 default: {
335 throw new AiScriptSyntaxError('separator expected', s.getPos());
336 }
337 }
338 }
339
340 s.expect(TokenKind.CloseParen);
341 s.next();
342
343 return NODE('call', {
344 target,
345 args: items,
346 }, startPos, s.getPos());
347}
348
349/**
350 * ```abnf

Callers 1

parsePostfixFunction · 0.85

Calls 7

parseExprFunction · 0.85
NODEFunction · 0.85
getPosMethod · 0.65
expectMethod · 0.65
nextMethod · 0.65
isMethod · 0.65
getTokenKindMethod · 0.65

Tested by

no test coverage detected