Modify enum variant syntax
This commit is contained in:
parent
b8f2fe7eb4
commit
540f59e6d8
@ -88,13 +88,13 @@ impl AbstractTree for ValueNode {
|
||||
ValueNode::Range(start..=end)
|
||||
}
|
||||
"enum_instance" => {
|
||||
let name_node = child.child(1).unwrap();
|
||||
let name_node = child.child(0).unwrap();
|
||||
let name = Identifier::from_syntax(name_node, source, context)?;
|
||||
|
||||
let variant_node = child.child(3).unwrap();
|
||||
let variant_node = child.child(2).unwrap();
|
||||
let variant = Identifier::from_syntax(variant_node, source, context)?;
|
||||
|
||||
let expression = if let Some(expression_node) = child.child(5) {
|
||||
let expression = if let Some(expression_node) = child.child(4) {
|
||||
Some(Box::new(Expression::from_syntax(expression_node, source, context)?))
|
||||
} else {
|
||||
None
|
||||
|
@ -3,7 +3,7 @@ use dust_lang::*;
|
||||
#[test]
|
||||
fn option() {
|
||||
assert_eq!(
|
||||
interpret("new Option:None"),
|
||||
interpret("Option::None"),
|
||||
Ok(Value::Enum(EnumInstance::new(
|
||||
"Option".to_string(),
|
||||
"None".to_string(),
|
||||
@ -13,7 +13,7 @@ fn option() {
|
||||
assert_eq!(
|
||||
interpret(
|
||||
"
|
||||
opt <Option<int>> = new Option:Some(1);
|
||||
opt <Option<int>> = Option::Some(1);
|
||||
|
||||
opt
|
||||
"
|
||||
@ -29,7 +29,7 @@ fn option() {
|
||||
#[test]
|
||||
fn result() {
|
||||
assert_eq!(
|
||||
interpret("new Result:Ok(1)"),
|
||||
interpret("Result::Ok(1)"),
|
||||
Ok(Value::Enum(EnumInstance::new(
|
||||
"Result".to_string(),
|
||||
"Ok".to_string(),
|
||||
@ -39,7 +39,7 @@ fn result() {
|
||||
assert_eq!(
|
||||
interpret(
|
||||
"
|
||||
result = new Result:Error('uh-oh!')
|
||||
result <Result<int, str>> = Result::Error('uh-oh!')
|
||||
result
|
||||
"
|
||||
),
|
||||
|
@ -49,7 +49,7 @@ enum Foobar {
|
||||
Simple Enum Instance
|
||||
================================================================================
|
||||
|
||||
new Foobar:Foo
|
||||
Foobar::Foo
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -65,7 +65,7 @@ new Foobar:Foo
|
||||
Nested Enum Instance
|
||||
================================================================================
|
||||
|
||||
new Foobar:Bar(new BazBuf:Baz(123))
|
||||
FooBar::Bar(BazBuf::Baz(123))
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
@ -339,7 +339,14 @@ module.exports = grammar({
|
||||
$.identifier,
|
||||
seq(
|
||||
$.identifier,
|
||||
$.type_specification,
|
||||
'<',
|
||||
repeat1(
|
||||
seq(
|
||||
$.type,
|
||||
optional(','),
|
||||
),
|
||||
),
|
||||
'>',
|
||||
),
|
||||
seq('[', $.type, ']'),
|
||||
seq(
|
||||
@ -447,9 +454,8 @@ module.exports = grammar({
|
||||
enum_instance: $ =>
|
||||
prec.right(
|
||||
seq(
|
||||
'new',
|
||||
$.identifier,
|
||||
':',
|
||||
'::',
|
||||
$.identifier,
|
||||
optional(
|
||||
seq('(', $.expression, ')'),
|
||||
|
@ -1038,8 +1038,36 @@
|
||||
"name": "identifier"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "type_specification"
|
||||
"type": "STRING",
|
||||
"value": "<"
|
||||
},
|
||||
{
|
||||
"type": "REPEAT1",
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "type"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ","
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ">"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -1385,17 +1413,13 @@
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "new"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "identifier"
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ":"
|
||||
"value": "::"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
|
@ -696,10 +696,6 @@
|
||||
{
|
||||
"type": "type",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "type_specification",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -864,6 +860,10 @@
|
||||
"type": ":",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "::",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": ";",
|
||||
"named": false
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user