Adds parsing for class, and for funcdef
This commit is contained in:
93
src/integration_tests/empty_class_declaration.rs
Normal file
93
src/integration_tests/empty_class_declaration.rs
Normal file
@@ -0,0 +1,93 @@
|
||||
////////////////////////////
|
||||
// Automatically Generated//
|
||||
////////////////////////////
|
||||
use crate::logger::messages::Message;
|
||||
use crate::parsing::lexer::lex;
|
||||
use crate::parsing::lexer::lex_tokens::LexToken;
|
||||
use crate::parsing::parser::parse;
|
||||
use crate::parsing::parser::parsed_statement::ParsedStatement;
|
||||
use crate::span::Span;
|
||||
|
||||
fn panic_on_error(msg: Message, _: Span) {
|
||||
std::panic::panic_any(msg.stringify());
|
||||
}
|
||||
#[test]
|
||||
fn integration_empty_class_declaration() {
|
||||
let script = "class Foo {}";
|
||||
let lexed_tokens = lex(script, &mut panic_on_error);
|
||||
println!("{}", serde_json::to_string(&lexed_tokens).unwrap());
|
||||
let expected_tokens: Vec<LexToken> =
|
||||
serde_json::from_str(r#"[
|
||||
{
|
||||
"token_type": "ClassKeyword",
|
||||
"span": {
|
||||
"start": 0,
|
||||
"end": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 5,
|
||||
"end": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": {
|
||||
"Identifier": "Foo"
|
||||
},
|
||||
"span": {
|
||||
"start": 6,
|
||||
"end": 9
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 9,
|
||||
"end": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "OpenCurlyBracket",
|
||||
"span": {
|
||||
"start": 10,
|
||||
"end": 11
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "CloseCurlyBracket",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 12
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "EndOfFile",
|
||||
"span": {
|
||||
"start": 12,
|
||||
"end": 12
|
||||
}
|
||||
}
|
||||
]"#).unwrap();
|
||||
assert_eq!(lexed_tokens, expected_tokens);
|
||||
|
||||
let parsed_tree = parse(lexed_tokens, &mut panic_on_error);
|
||||
println!("{}", serde_json::to_string(&parsed_tree).unwrap());
|
||||
let expected_tree: Box<ParsedStatement> =
|
||||
serde_json::from_str(r#"{
|
||||
"Script": {
|
||||
"statements": [
|
||||
{
|
||||
"ClassDeclaration": {
|
||||
"modifiers": 0,
|
||||
"name": "Foo",
|
||||
"inherits": [],
|
||||
"statements": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}"#).unwrap();
|
||||
assert_eq!(parsed_tree, expected_tree);
|
||||
}
|
||||
@@ -1,2 +1,4 @@
|
||||
mod enum_definition;
|
||||
mod multiple_inheritance_class;
|
||||
mod empty_class_declaration;
|
||||
mod add_function;
|
||||
|
||||
173
src/integration_tests/multiple_inheritance_class.rs
Normal file
173
src/integration_tests/multiple_inheritance_class.rs
Normal file
@@ -0,0 +1,173 @@
|
||||
////////////////////////////
|
||||
// Automatically Generated//
|
||||
////////////////////////////
|
||||
use crate::logger::messages::Message;
|
||||
use crate::parsing::lexer::lex;
|
||||
use crate::parsing::lexer::lex_tokens::LexToken;
|
||||
use crate::parsing::parser::parse;
|
||||
use crate::parsing::parser::parsed_statement::ParsedStatement;
|
||||
use crate::span::Span;
|
||||
|
||||
fn panic_on_error(msg: Message, _: Span) {
|
||||
std::panic::panic_any(msg.stringify());
|
||||
}
|
||||
#[test]
|
||||
fn integration_multiple_inheritance_class() {
|
||||
let script = "class Foo : Zom, Aar, Bar {}";
|
||||
let lexed_tokens = lex(script, &mut panic_on_error);
|
||||
println!("{}", serde_json::to_string(&lexed_tokens).unwrap());
|
||||
let expected_tokens: Vec<LexToken> =
|
||||
serde_json::from_str(r#"[
|
||||
{
|
||||
"token_type": "ClassKeyword",
|
||||
"span": {
|
||||
"start": 0,
|
||||
"end": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 5,
|
||||
"end": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": {
|
||||
"Identifier": "Foo"
|
||||
},
|
||||
"span": {
|
||||
"start": 6,
|
||||
"end": 9
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 9,
|
||||
"end": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "Colon",
|
||||
"span": {
|
||||
"start": 10,
|
||||
"end": 11
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 12
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": {
|
||||
"Identifier": "Zom"
|
||||
},
|
||||
"span": {
|
||||
"start": 12,
|
||||
"end": 15
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "Comma",
|
||||
"span": {
|
||||
"start": 15,
|
||||
"end": 16
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 16,
|
||||
"end": 17
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": {
|
||||
"Identifier": "Aar"
|
||||
},
|
||||
"span": {
|
||||
"start": 17,
|
||||
"end": 20
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "Comma",
|
||||
"span": {
|
||||
"start": 20,
|
||||
"end": 21
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 21,
|
||||
"end": 22
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": {
|
||||
"Identifier": "Bar"
|
||||
},
|
||||
"span": {
|
||||
"start": 22,
|
||||
"end": 25
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 25,
|
||||
"end": 26
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "OpenCurlyBracket",
|
||||
"span": {
|
||||
"start": 26,
|
||||
"end": 27
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "CloseCurlyBracket",
|
||||
"span": {
|
||||
"start": 27,
|
||||
"end": 28
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "EndOfFile",
|
||||
"span": {
|
||||
"start": 28,
|
||||
"end": 28
|
||||
}
|
||||
}
|
||||
]"#).unwrap();
|
||||
assert_eq!(lexed_tokens, expected_tokens);
|
||||
|
||||
let parsed_tree = parse(lexed_tokens, &mut panic_on_error);
|
||||
println!("{}", serde_json::to_string(&parsed_tree).unwrap());
|
||||
let expected_tree: Box<ParsedStatement> =
|
||||
serde_json::from_str(r#"{
|
||||
"Script": {
|
||||
"statements": [
|
||||
{
|
||||
"ClassDeclaration": {
|
||||
"modifiers": 0,
|
||||
"name": "Foo",
|
||||
"inherits": [
|
||||
"Zom",
|
||||
"Aar",
|
||||
"Bar"
|
||||
],
|
||||
"statements": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}"#).unwrap();
|
||||
assert_eq!(parsed_tree, expected_tree);
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
[
|
||||
{
|
||||
"token_type": "ClassKeyword",
|
||||
"span": {
|
||||
"start": 0,
|
||||
"end": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 5,
|
||||
"end": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": {
|
||||
"Identifier": "Foo"
|
||||
},
|
||||
"span": {
|
||||
"start": 6,
|
||||
"end": 9
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 9,
|
||||
"end": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "OpenCurlyBracket",
|
||||
"span": {
|
||||
"start": 10,
|
||||
"end": 11
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "CloseCurlyBracket",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 12
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "EndOfFile",
|
||||
"span": {
|
||||
"start": 12,
|
||||
"end": 12
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"Script": {
|
||||
"statements": [
|
||||
{
|
||||
"ClassDeclaration": {
|
||||
"modifiers": 0,
|
||||
"name": "Foo",
|
||||
"inherits": [],
|
||||
"statements": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
class Foo {}
|
||||
@@ -0,0 +1,129 @@
|
||||
[
|
||||
{
|
||||
"token_type": "ClassKeyword",
|
||||
"span": {
|
||||
"start": 0,
|
||||
"end": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 5,
|
||||
"end": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": {
|
||||
"Identifier": "Foo"
|
||||
},
|
||||
"span": {
|
||||
"start": 6,
|
||||
"end": 9
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 9,
|
||||
"end": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "Colon",
|
||||
"span": {
|
||||
"start": 10,
|
||||
"end": 11
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 12
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": {
|
||||
"Identifier": "Zom"
|
||||
},
|
||||
"span": {
|
||||
"start": 12,
|
||||
"end": 15
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "Comma",
|
||||
"span": {
|
||||
"start": 15,
|
||||
"end": 16
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 16,
|
||||
"end": 17
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": {
|
||||
"Identifier": "Aar"
|
||||
},
|
||||
"span": {
|
||||
"start": 17,
|
||||
"end": 20
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "Comma",
|
||||
"span": {
|
||||
"start": 20,
|
||||
"end": 21
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 21,
|
||||
"end": 22
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": {
|
||||
"Identifier": "Bar"
|
||||
},
|
||||
"span": {
|
||||
"start": 22,
|
||||
"end": 25
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "WhiteSpace",
|
||||
"span": {
|
||||
"start": 25,
|
||||
"end": 26
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "OpenCurlyBracket",
|
||||
"span": {
|
||||
"start": 26,
|
||||
"end": 27
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "CloseCurlyBracket",
|
||||
"span": {
|
||||
"start": 27,
|
||||
"end": 28
|
||||
}
|
||||
},
|
||||
{
|
||||
"token_type": "EndOfFile",
|
||||
"span": {
|
||||
"start": 28,
|
||||
"end": 28
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"Script": {
|
||||
"statements": [
|
||||
{
|
||||
"ClassDeclaration": {
|
||||
"modifiers": 0,
|
||||
"name": "Foo",
|
||||
"inherits": [
|
||||
"Zom",
|
||||
"Aar",
|
||||
"Bar"
|
||||
],
|
||||
"statements": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
class Foo : Zom, Aar, Bar {}
|
||||
Reference in New Issue
Block a user