@@ -39,9 +39,9 @@ pub fn eval(exp: Expression, env: &Environment<EnvValue>) -> Result<EnvValue, Er
3939 Expression :: IsError ( e) => eval_iserror_expression ( * e, env) ,
4040 Expression :: IsNothing ( e) => eval_isnothing_expression ( * e, env) ,
4141 Expression :: FuncCall ( name, args) => call ( name, args, env) ,
42- Expression :: ADTConstructor ( adt_name , constructor_name, args) => {
43- adtconstructor_eval ( adt_name, constructor_name, args, env)
44- }
42+ // Expression::ADTConstructor(constructor_name, args) => {
43+ // adtconstructor_eval(adt_name, constructor_name, args, env)
44+ // }
4545 _ if is_constant ( exp. clone ( ) ) => Ok ( EnvValue :: Exp ( exp) ) ,
4646 _ => Err ( ( String :: from ( "Not implemented yet." ) , None ) ) ,
4747 }
@@ -218,7 +218,7 @@ fn execute(stmt: Statement, env: &Environment<EnvValue>) -> Result<ControlFlow,
218218 Ok ( ControlFlow :: Return ( exp_value) )
219219 }
220220
221- Statement :: ADTDeclaration ( name, constructors) => {
221+ Statement :: TypeDeclaration ( name, constructors) => {
222222 // Insert the ADT into the new environment
223223 new_env. insert_type ( name, constructors) ;
224224 // Return the new environment along with ControlFlow
@@ -240,95 +240,95 @@ fn execute(stmt: Statement, env: &Environment<EnvValue>) -> Result<ControlFlow,
240240 }
241241}
242242
243- fn adtconstructor_eval (
244- adt_name : Name ,
245- constructor_name : Name ,
246- args : Vec < Box < Expression > > ,
247- env : & Environment < EnvValue > ,
248- ) -> Result < EnvValue , ( String , Option < Expression > ) > {
249- if let Some ( constructors) = env. get_type ( & adt_name) {
250- let value_constructor = constructors. iter ( ) . find ( |vc| vc. name == constructor_name) ;
251-
252- if let Some ( vc) = value_constructor {
253- if vc. types . len ( ) != args. len ( ) {
254- return Err ( (
255- format ! (
256- "Error: Constructor {} expects {} arguments, but received {}" ,
257- constructor_name,
258- vc. types. len( ) ,
259- args. len( )
260- ) ,
261- None ,
262- ) ) ;
263- }
243+ // fn adtconstructor_eval(
244+ // adt_name: Name,
245+ // constructor_name: Name,
246+ // args: Vec<Box<Expression>>,
247+ // env: &Environment<EnvValue>,
248+ // ) -> Result<EnvValue, (String, Option<Expression>)> {
249+ // if let Some(constructors) = env.get_type(&adt_name) {
250+ // let value_constructor = constructors.iter().find(|vc| vc.name == constructor_name);
251+
252+ // if let Some(vc) = value_constructor {
253+ // if vc.types.len() != args.len() {
254+ // return Err((
255+ // format!(
256+ // "Error: Constructor {} expects {} arguments, but received {}",
257+ // constructor_name,
258+ // vc.types.len(),
259+ // args.len()
260+ // ),
261+ // None,
262+ // ));
263+ // }
264264
265- let evaluated_args: Result < Vec < Box < Expression > > , ( String , Option < Expression > ) > = args
266- . into_iter ( )
267- . map ( |arg| {
268- eval ( * arg, env) . and_then ( |res| match res {
269- EnvValue :: Exp ( e) => Ok ( Box :: new ( e) ) ,
270- _ => Err ( (
271- String :: from ( "Error: Expected expression in ADT constructor arguments" ) ,
272- None ,
273- ) ) ,
274- } )
275- } )
276- . collect ( ) ;
277-
278- evaluated_args. map ( |evaluated| {
279- EnvValue :: Exp ( Expression :: ADTConstructor (
280- adt_name,
281- constructor_name,
282- evaluated,
283- ) )
284- } )
285- } else {
286- Err ( (
287- format ! (
288- "Error: Constructor {} not found in ADT {}" ,
289- constructor_name, adt_name
290- ) ,
291- None ,
292- ) )
293- }
294- } else {
295- Err ( ( format ! ( "Error: ADT {} not found" , adt_name) , None ) )
296- }
297- }
265+ // let evaluated_args: Result<Vec<Box<Expression>>, (String, Option<Expression>)> = args
266+ // .into_iter()
267+ // .map(|arg| {
268+ // eval(*arg, env).and_then(|res| match res {
269+ // EnvValue::Exp(e) => Ok(Box::new(e)),
270+ // _ => Err((
271+ // String::from("Error: Expected expression in ADT constructor arguments"),
272+ // None,
273+ // )),
274+ // })
275+ // })
276+ // .collect();
277+
278+ // evaluated_args.map(|evaluated| {
279+ // EnvValue::Exp(Expression::ADTConstructor(
280+ // adt_name,
281+ // constructor_name,
282+ // evaluated,
283+ // ))
284+ // })
285+ // } else {
286+ // Err((
287+ // format!(
288+ // "Error: Constructor {} not found in ADT {}",
289+ // constructor_name, adt_name
290+ // ),
291+ // None,
292+ // ))
293+ // }
294+ // } else {
295+ // Err((format!("Error: ADT {} not found", adt_name), None))
296+ // }
297+ // }
298298
299- fn matches_pattern (
300- value : & EnvValue ,
301- pattern : & Expression ,
302- env : & Environment < EnvValue > ,
303- ) -> Result < bool , ErrorMessage > {
304- match ( value, pattern) {
305- // Caso o padrão seja um construtor de ADT
306- (
307- EnvValue :: Exp ( Expression :: ADTConstructor ( adt_name1, constructor_name1, args1) ) ,
308- Expression :: ADTConstructor ( adt_name2, constructor_name2, args2) ,
309- ) => {
310- // Verifica se o nome do ADT e o construtor correspondem
311- if adt_name1 == adt_name2 && constructor_name1 == constructor_name2 {
312- // Verifica se os argumentos correspondem
313- for ( arg1, arg2) in args1. iter ( ) . zip ( args2. iter ( ) ) {
314- let arg_value = eval ( * arg1. clone ( ) , env) ?;
315- if !matches_pattern ( & arg_value, arg2, env) ? {
316- return Ok ( false ) ;
317- }
318- }
319- Ok ( true )
320- } else {
321- Ok ( false )
322- }
323- }
299+ // fn matches_pattern(
300+ // value: &EnvValue,
301+ // pattern: &Expression,
302+ // env: &Environment<EnvValue>,
303+ // ) -> Result<bool, ErrorMessage> {
304+ // match (value, pattern) {
305+ // // Caso o padrão seja um construtor de ADT
306+ // (
307+ // EnvValue::Exp(Expression::ADTConstructor(adt_name1, constructor_name1, args1)),
308+ // Expression::ADTConstructor(adt_name2, constructor_name2, args2),
309+ // ) => {
310+ // // Verifica se o nome do ADT e o construtor correspondem
311+ // if adt_name1 == adt_name2 && constructor_name1 == constructor_name2 {
312+ // // Verifica se os argumentos correspondem
313+ // for (arg1, arg2) in args1.iter().zip(args2.iter()) {
314+ // let arg_value = eval(*arg1.clone(), env)?;
315+ // if !matches_pattern(&arg_value, arg2, env)? {
316+ // return Ok(false);
317+ // }
318+ // }
319+ // Ok(true)
320+ // } else {
321+ // Ok(false)
322+ // }
323+ // }
324324
325- // Caso o padrão seja uma constante (como um número ou booleano)
326- ( EnvValue :: Exp ( exp1) , exp2) if is_constant ( exp2. clone ( ) ) => Ok ( exp1 == exp2) ,
325+ // // Caso o padrão seja uma constante (como um número ou booleano)
326+ // (EnvValue::Exp(exp1), exp2) if is_constant(exp2.clone()) => Ok(exp1 == exp2),
327327
328- // Outros casos podem ser adicionados aqui (como variáveis, etc.)
329- _ => Err ( ( "Pattern not supported" . to_string ( ) , None ) ) ,
330- }
331- }
328+ // // Outros casos podem ser adicionados aqui (como variáveis, etc.)
329+ // _ => Err(("Pattern not supported".to_string(), None)),
330+ // }
331+ // }
332332
333333//helper function for executing blocks
334334fn execute_block (
@@ -378,13 +378,13 @@ fn call(
378378 format ! (
379379 "[Runtime Error on '{}()'] missing argument '{}'." ,
380380 env. scope_name( ) ,
381- formal_arg. argumentName
381+ formal_arg. argument_name
382382 ) ,
383383 None ,
384384 ) ) ;
385385 }
386386 let arg_value = eval ( args[ i] . clone ( ) , env) ?;
387- new_env. insert_variable ( formal_arg. argumentName . clone ( ) , arg_value) ;
387+ new_env. insert_variable ( formal_arg. argument_name . clone ( ) , arg_value) ;
388388 }
389389
390390 if args. len ( ) > func. params . len ( ) {
0 commit comments