diff options
| author | Baitinq <[email protected]> | 2025-07-13 22:59:58 +0200 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-07-13 22:59:58 +0200 |
| commit | a6def52cb5c696ae9e1ca6b825dac0f0971a412f (patch) | |
| tree | f7fa36081149d24197e8ce056d7a895527e67198 /src | |
| parent | Boostrap: Increase arena capacity (diff) | |
| download | pry-lang-a6def52cb5c696ae9e1ca6b825dac0f0971a412f.tar.gz pry-lang-a6def52cb5c696ae9e1ca6b825dac0f0971a412f.tar.bz2 pry-lang-a6def52cb5c696ae9e1ca6b825dac0f0971a412f.zip | |
Boostrap: Support newtype
Diffstat (limited to 'src')
| -rw-r--r-- | src/bootstrap/parser.pry | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/bootstrap/parser.pry b/src/bootstrap/parser.pry index cf3c233..cf5cabd 100644 --- a/src/bootstrap/parser.pry +++ b/src/bootstrap/parser.pry @@ -622,6 +622,28 @@ let parser_parse_function_parameters = (p: *parser) => *slice { return s; }; +/* TypeDefinition ::= "newtype" Type */ +let parser_parse_type_definition = (p: *parser) => *Node { + if parser_accept_token(p, TOKEN_TYPE) == cast(*token, null) { + return cast(*Node, null); + }; + + let typ = parser_parse_type(p); + if typ == cast(*Node, null) { + return cast(*Node, null); + }; + + let d = cast(*NODE_TYPE_SIMPLE_TYPE_DATA, arena_alloc((*p).arena, sizeof(NODE_TYPE_SIMPLE_TYPE_DATA))); + (*d).name = ""; + (*d).underlying_type = typ; + + let r = Node{}; + r.type = NODE_TYPE_SIMPLE_TYPE; + r.data = cast(*void, d); + + return create_node(p, r); +}; + /* StructDefinition ::= "struct" LBRACE StructFields? RBRACE */ let parser_parse_struct_definition = (p: *parser) => *Node { if parser_accept_token(p, TOKEN_STRUCT) == cast(*token, null) { @@ -789,6 +811,10 @@ let parser_parse_primary_expression = (p: *parser) => *Node { if stmt != cast(*Node, null) { return stmt; }; + let stmt = parser_accept_parse(p, parser_parse_type_definition); + if stmt != cast(*Node, null) { + return stmt; + }; let stmt = parser_accept_parse(p, parser_parse_struct_definition); if stmt != cast(*Node, null) { return stmt; |