MCPcopy Index your code
hub / github.com/aiscript-dev/aiscript / parseParams

Function parseParams

src/parser/syntaxes/common.ts:33–92  ·  view source on GitHub ↗
(s: ITokenStream)

Source from the content-addressed store, hash-verified

31 * ```
32*/
33export function parseParams(s: ITokenStream): Ast.Fn['params'] {
34 const items: Ast.Fn['params'] = [];
35
36 s.expect(TokenKind.OpenParen);
37 s.next();
38
39 if (s.is(TokenKind.NewLine)) {
40 s.next();
41 }
42
43 while (!s.is(TokenKind.CloseParen)) {
44 const dest = parseDest(s);
45
46 let optional = false;
47 let defaultExpr: Ast.Expression | undefined;
48 if (s.is(TokenKind.Question)) {
49 s.next();
50 optional = true;
51 } else if (s.is(TokenKind.Eq)) {
52 s.next();
53 defaultExpr = parseExpr(s, false);
54 }
55 let type: Ast.TypeSource | undefined;
56 if (s.is(TokenKind.Colon)) {
57 s.next();
58 type = parseType(s);
59 }
60
61 items.push({ dest, optional, default: defaultExpr, argType: type });
62
63 // separator
64 switch (s.getTokenKind()) {
65 case TokenKind.NewLine: {
66 s.next();
67 break;
68 }
69 case TokenKind.Comma: {
70 s.next();
71 if (s.is(TokenKind.NewLine)) {
72 s.next();
73 }
74 break;
75 }
76 case TokenKind.CloseParen: {
77 break;
78 }
79 case TokenKind.EOF: {
80 throw new AiScriptUnexpectedEOFError(s.getPos());
81 }
82 default: {
83 throw new AiScriptSyntaxError('separator expected', s.getPos());
84 }
85 }
86 }
87
88 s.expect(TokenKind.CloseParen);
89 s.next();
90

Callers 2

parseFnDefFunction · 0.85
parseFnExprFunction · 0.85

Calls 8

parseDestFunction · 0.85
parseExprFunction · 0.85
parseTypeFunction · 0.85
expectMethod · 0.65
nextMethod · 0.65
isMethod · 0.65
getTokenKindMethod · 0.65
getPosMethod · 0.65

Tested by

no test coverage detected