Skip to content

Commit

Permalink
Re-enable constructor parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
ahmtcn123 committed Jan 16, 2024
1 parent 2f07e98 commit 9999530
Show file tree
Hide file tree
Showing 9 changed files with 209 additions and 43 deletions.
1 change: 1 addition & 0 deletions Ellie-Core-Library
Submodule Ellie-Core-Library added at 4deba7
27 changes: 27 additions & 0 deletions ellie_engine/bytecode/src/transpiler/type_resolver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1498,6 +1498,33 @@ pub fn resolve_type(
}
}

assembler.instructions.extend(instructions)
}
CoreTypes::ConstructorParameter(e) => {
let pos = match assembler.find_local(&e.name, dependencies, false) {
Some(e) => e,
None => panic!("Constructor Parameter not found: {}", e.name),
};
let mut instructions = Vec::new();

match target_register {
instructions::Registers::A => {
instructions.push(instruction_table::Instructions::LDA(pos.reference.clone()))
}
instructions::Registers::B => {
instructions.push(instruction_table::Instructions::LDB(pos.reference.clone()))
}
instructions::Registers::C => {
instructions.push(instruction_table::Instructions::LDC(pos.reference.clone()))
}
instructions::Registers::X => {
instructions.push(instruction_table::Instructions::LDX(pos.reference.clone()))
}
instructions::Registers::Y => {
instructions.push(instruction_table::Instructions::LDY(pos.reference.clone()))
}
}

assembler.instructions.extend(instructions)
}
}
Expand Down
3 changes: 3 additions & 0 deletions ellie_engine/core/src/definite/items/constructor_parameter.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use crate::definite::definers::DefinerCollecting;
use crate::defs;
use alloc::string::String;
use serde::Deserialize;
Expand All @@ -6,5 +7,7 @@ use serde::Serialize;
#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)]
pub struct ConstructorParameter {
pub name: String,
pub rtype: DefinerCollecting,
pub pos: defs::Cursor,
pub hash: usize,
}
3 changes: 2 additions & 1 deletion ellie_engine/core/src/definite/types/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ pub mod reference;
pub mod string;
pub mod variable;

use super::definers;
use super::{definers, items::constructor_parameter};
use serde::{Deserialize, Serialize};

#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)]
Expand All @@ -40,6 +40,7 @@ pub enum Types {
Array(array::ArrayType),
Function(function::Function),
FunctionParameter(function::FunctionParameter),
ConstructorParameter(constructor_parameter::ConstructorParameter),
ClassCall(class_call::ClassCall),
FunctionCall(function_call::FunctionCall),
SetterCall(definers::DefinerCollecting),
Expand Down
54 changes: 53 additions & 1 deletion ellie_engine/parser/src/deep_search_extensions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,7 @@ pub enum DeepTypeResult {
Function(ellie_core::definite::types::function::Function),
FunctionCall(ellie_core::definite::types::function_call::FunctionCall),
FunctionParameter(ellie_core::definite::types::function::FunctionParameter),
ConstructorParameter(ellie_core::definite::items::constructor_parameter::ConstructorParameter),
BraceReference(ellie_core::definite::types::brace_reference::BraceReferenceType),
ClassInstance(ellie_core::definite::types::class_instance::ClassInstance),
SelfItem(ellie_core::definite::items::self_item::SelfItem),
Expand Down Expand Up @@ -843,6 +844,9 @@ fn iterate_deep_type(
DeepTypeResult::ClassInstance(_) => todo!(),
DeepTypeResult::SelfItem(_) => todo!(),
DeepTypeResult::FunctionParameter(e) => Types::FunctionParameter(e),
DeepTypeResult::ConstructorParameter(e) => {
Types::ConstructorParameter(e)
}
}),
reference_pos: e.reference_pos,
brace_pos: e.brace_pos,
Expand Down Expand Up @@ -870,6 +874,9 @@ fn iterate_deep_type(
DeepTypeResult::ClassInstance(_) => todo!(),
DeepTypeResult::SelfItem(_) => todo!(),
DeepTypeResult::FunctionParameter(e) => Types::FunctionParameter(e),
DeepTypeResult::ConstructorParameter(e) => {
Types::ConstructorParameter(e)
}
}),
pos: e.pos,
},
Expand Down Expand Up @@ -901,6 +908,7 @@ fn iterate_deep_type(
DeepTypeResult::ClassInstance(_) => todo!(),
DeepTypeResult::SelfItem(_) => todo!(),
DeepTypeResult::FunctionParameter(e) => Types::FunctionParameter(e),
DeepTypeResult::ConstructorParameter(e) => Types::ConstructorParameter(e),
};

let second = match resolve_deep_type(parser, page_id, *e.second, errors) {
Expand All @@ -927,6 +935,7 @@ fn iterate_deep_type(
DeepTypeResult::ClassInstance(_) => todo!(),
DeepTypeResult::SelfItem(_) => todo!(),
DeepTypeResult::FunctionParameter(e) => Types::FunctionParameter(e),
DeepTypeResult::ConstructorParameter(e) => Types::ConstructorParameter(e),
};

DeepTypeResult::Operator(ellie_core::definite::types::operator::OperatorType {
Expand Down Expand Up @@ -1072,6 +1081,12 @@ fn iterate_deep_type(
DeepTypeResult::Enum(_) => todo!(),
DeepTypeResult::ClassInstance(_) => todo!(),
DeepTypeResult::SelfItem(_) => todo!(),
DeepTypeResult::ConstructorParameter(e) => {
collective.push(ellie_core::definite::types::array::ArrayEntry {
value: Types::ConstructorParameter(e),
location: i.location,
});
}
}
}
DeepTypeResult::Array(ellie_core::definite::types::array::ArrayType {
Expand Down Expand Up @@ -1229,6 +1244,31 @@ fn iterate_deep_type(
None => panic!("This should never happen"),
}
}
ProcessedDeepSearchItems::ConstructorParameter(e) => {
match generate_type_from_defining(e.rtype, page_id, parser) {
Some(e) => match e {
Types::Byte(e) => DeepTypeResult::Byte(e),
Types::Integer(e) => DeepTypeResult::Integer(e),
Types::Decimal(e) => DeepTypeResult::Decimal(e),
Types::Bool(e) => DeepTypeResult::Bool(e),
Types::String(e) => DeepTypeResult::String(e),
Types::Char(e) => DeepTypeResult::Char(e),
Types::Collective(e) => DeepTypeResult::Collective(e),
Types::BraceReference(e) => DeepTypeResult::BraceReference(e),
Types::Operator(e) => DeepTypeResult::Operator(e),
Types::Cloak(e) => DeepTypeResult::Cloak(e),
Types::Array(e) => DeepTypeResult::Array(e),
Types::Function(e) => DeepTypeResult::Function(e),
Types::ClassCall(e) => DeepTypeResult::ClassCall(e),
Types::FunctionCall(e) => DeepTypeResult::FunctionCall(e),
Types::Void => DeepTypeResult::Void,
Types::Null => DeepTypeResult::Null,
Types::Dynamic => DeepTypeResult::Dynamic,
_ => unreachable!(),
},
None => panic!("This should never happen"),
}
}
ProcessedDeepSearchItems::Getter(e) => {
match generate_type_from_defining(e.return_type, page_id, parser) {
Some(e) => match e {
Expand Down Expand Up @@ -1610,6 +1650,7 @@ fn iterate_deep_type(
Types::EnumData(e) => DeepTypeResult::EnumData(e),
Types::ClassInstance(_) => todo!(),
Types::FunctionParameter(e) => DeepTypeResult::FunctionParameter(e),
Types::ConstructorParameter(e) => DeepTypeResult::ConstructorParameter(e),
}
}

Expand Down Expand Up @@ -1845,7 +1886,7 @@ pub enum ProcessedDeepSearchItems {
ClassInstance(ellie_core::definite::types::class_instance::ClassInstance),
GenericItem(ellie_core::definite::items::generic::Generic),
FunctionParameter(ellie_core::definite::items::function_parameter::FunctionParameter),
//ConstructorParameter(ellie_tokenizer::syntax::items::constructor_parameter::ConstructorParameter),
ConstructorParameter(ellie_core::definite::items::constructor_parameter::ConstructorParameter),
//MixUp(Vec<(String, String)>),
//BrokenPageGraph,
None,
Expand All @@ -1865,6 +1906,7 @@ impl ProcessedDeepSearchItems {
ProcessedDeepSearchItems::SelfItem(e) => e.pos,
ProcessedDeepSearchItems::GenericItem(e) => e.pos,
ProcessedDeepSearchItems::FunctionParameter(e) => e.name_pos,
ProcessedDeepSearchItems::ConstructorParameter(e) => e.pos,
_ => defs::Cursor::default(),
}
}
Expand Down Expand Up @@ -2159,6 +2201,15 @@ pub fn deep_search(
ProcessedDeepSearchItems::FunctionParameter(e.clone());
}
}
Collecting::ConstructorParameter(e) => {
if e.name == name {
found_pos = Some(e.pos);
found = true;
found_page = FoundPage::fill_from_processed(page);
found_type =
ProcessedDeepSearchItems::ConstructorParameter(e.clone());
}
}
Collecting::Function(e) => {
if e.name == name
&& (e.public || level == 0 || dep.deep_link.is_some())
Expand Down Expand Up @@ -3020,5 +3071,6 @@ pub fn resolve_type(
}),
),
DeepTypeResult::FunctionParameter(e) => e.rtype,
DeepTypeResult::ConstructorParameter(e) => Some(e.rtype),
}
}
63 changes: 39 additions & 24 deletions ellie_engine/parser/src/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1117,6 +1117,7 @@ impl Parser {
deep_search_extensions::DeepTypeResult::Enum(_) => todo!(),
deep_search_extensions::DeepTypeResult::ClassInstance(_) => todo!(),
deep_search_extensions::DeepTypeResult::SelfItem(_) => todo!(),
deep_search_extensions::DeepTypeResult::ConstructorParameter(_) => todo!(),
}
}

Expand Down Expand Up @@ -1324,6 +1325,14 @@ impl Parser {
found_type = DeepSearchItems::FunctionParameter(ellie_tokenizer::syntax::items::function_parameter::FunctionParameter::default().from_definite(e));
}
}
Collecting::ConstructorParameter(e) => {
if e.name == name {
found_pos = Some(e.pos);
found = true;
found_page = FoundPage::fill(&unprocessed_page);
found_type = DeepSearchItems::ConstructorParameter(ellie_tokenizer::syntax::items::constructor_parameter::ConstructorParameter::default().from_definite(e));
}
}
Collecting::Variable(e) => {
if e.name == name
&& (e.public || level == 0 || dep.deep_link.is_some())
Expand Down Expand Up @@ -2050,10 +2059,11 @@ impl Parser {
true
}
Processors::ConstructorParameter(e) => {
self.processed_pages.nth_mut(processed_page_idx).unwrap().items.push(
Collecting::ConstructorParameter(
ellie_core::definite::items::constructor_parameter::ConstructorParameter { name: e.name.clone(), pos: e.pos }
));
self.processed_pages
.nth_mut(processed_page_idx)
.unwrap()
.items
.push(Collecting::ConstructorParameter(e.clone().to_definite()));
true
}
Processors::Comment(_) => true,
Expand Down Expand Up @@ -2163,10 +2173,11 @@ impl Parser {
unreachable!("Unexpected element in body")
}
Processors::ConstructorParameter(e) => {
self.processed_pages.nth_mut(processed_page_idx).unwrap().items.push(
Collecting::ConstructorParameter(
ellie_core::definite::items::constructor_parameter::ConstructorParameter { name: e.name.clone(), pos: e.pos }
));
self.processed_pages
.nth_mut(processed_page_idx)
.unwrap()
.items
.push(Collecting::ConstructorParameter(e.clone().to_definite()));
true
}
Processors::Comment(_) => true,
Expand Down Expand Up @@ -2294,10 +2305,11 @@ impl Parser {
true
}
Processors::ConstructorParameter(e) => {
self.processed_pages.nth_mut(processed_page_idx).unwrap().items.push(
Collecting::ConstructorParameter(
ellie_core::definite::items::constructor_parameter::ConstructorParameter { name: e.name.clone(), pos: e.pos }
));
self.processed_pages
.nth_mut(processed_page_idx)
.unwrap()
.items
.push(Collecting::ConstructorParameter(e.clone().to_definite()));
true
}
Processors::Comment(_) => true,
Expand Down Expand Up @@ -2492,10 +2504,11 @@ impl Parser {
),
Processors::FunctionParameter(_) => true,
Processors::ConstructorParameter(e) => {
self.processed_pages.nth_mut(processed_page_idx).unwrap().items.push(
Collecting::ConstructorParameter(
ellie_core::definite::items::constructor_parameter::ConstructorParameter { name: e.name.clone(), pos: e.pos }
));
self.processed_pages
.nth_mut(processed_page_idx)
.unwrap()
.items
.push(Collecting::ConstructorParameter(e.clone().to_definite()));
true
}
Processors::Comment(_) => true,
Expand Down Expand Up @@ -2647,17 +2660,19 @@ impl Parser {
unprocessed_page.hash,
),
Processors::FunctionParameter(e) => {
self.processed_pages.nth_mut(processed_page_idx).unwrap().items.push(
Collecting::FunctionParameter(
ellie_core::definite::items::function_parameter::FunctionParameter { name: e.name.clone(), rtype: e.rtype.clone(), name_pos: e.name_pos, rtype_pos: e.rtype_pos, hash: e.hash }
));
self.processed_pages
.nth_mut(processed_page_idx)
.unwrap()
.items
.push(Collecting::FunctionParameter(e.clone().to_definite()));
true
}
Processors::ConstructorParameter(e) => {
self.processed_pages.nth_mut(processed_page_idx).unwrap().items.push(
Collecting::ConstructorParameter(
ellie_core::definite::items::constructor_parameter::ConstructorParameter { name: e.name.clone(), pos: e.pos }
));
self.processed_pages
.nth_mut(processed_page_idx)
.unwrap()
.items
.push(Collecting::ConstructorParameter(e.clone().to_definite()));
true
}
Processors::Comment(_) => true,
Expand Down
Loading

0 comments on commit 9999530

Please sign in to comment.