mirror of
https://github.com/Noratrieb/riverdelta.git
synced 2026-01-15 00:45:04 +01:00
start structs
This commit is contained in:
parent
924236532c
commit
b0b92dae0f
8 changed files with 331 additions and 30 deletions
|
|
@ -30,8 +30,9 @@ import {
|
|||
ExternItem,
|
||||
ItemId,
|
||||
GlobalItem,
|
||||
StructLiteralField,
|
||||
} from "./ast";
|
||||
import { CompilerError, DUMMY_SPAN, EOF_SPAN, Span, spanMerge } from "./error";
|
||||
import { CompilerError, EOF_SPAN, Span, spanMerge } from "./error";
|
||||
import { BaseToken, Token, TokenIdent, TokenLitString } from "./lexer";
|
||||
import { ComplexMap, ComplexSet, Ids } from "./utils";
|
||||
|
||||
|
|
@ -540,15 +541,19 @@ function parseStructInit(
|
|||
[t] = expectNext(t, "{");
|
||||
|
||||
let fields;
|
||||
[t, fields] = parseCommaSeparatedList<[Ident, Expr<Parsed>]>(t, "}", (t) => {
|
||||
let name;
|
||||
[t, name] = expectNext<TokenIdent>(t, "identifier");
|
||||
[t] = expectNext(t, ":");
|
||||
let expr;
|
||||
[t, expr] = parseExpr(t);
|
||||
[t, fields] = parseCommaSeparatedList<StructLiteralField<Parsed>>(
|
||||
t,
|
||||
"}",
|
||||
(t) => {
|
||||
let name;
|
||||
[t, name] = expectNext<TokenIdent>(t, "identifier");
|
||||
[t] = expectNext(t, ":");
|
||||
let expr;
|
||||
[t, expr] = parseExpr(t);
|
||||
|
||||
return [t, [{ name: name.ident, span: name.span }, expr]];
|
||||
});
|
||||
return [t, { name: { name: name.ident, span: name.span }, expr }];
|
||||
}
|
||||
);
|
||||
|
||||
return [t, fields];
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue