Skip to content

bug: compiler does not correctly set scope for conditional statements #42

@daviddexter

Description

@daviddexter

Consider a program:

let add @int = fn(x @int, y @int){
            return x + y;
        };

        let sub @int = fn(x @int, y @int){
            return x - y;
        };

        let mul @int = fn(x @int, y @int){
            return x * y;
        };

        let div @int = fn(x @int, y @int){
            return x * y;
        };

        let mod @int = fn(x @int, y @int){
            return x % y;
        };

        let greater @bool = fn(x @int, y @int){
            return x > y;
        };

        let greater_or_eq @bool = fn(x @int, y @int){
            return x >= y;
        };

        let less @bool = fn(x @int, y @int){
            return x > y;
        };

        let less_or_eq @bool = fn(x @int, y @int){
            return x <= y;
        };

        let or @bool = fn(x @int, y @int){
            return x || y;
        };

        let and @bool = fn(x @int, y @int){
            return x && y;
        };

      let max @int = fn(x @int, y @int){
            if x > y {
                return x;
            };        
            return y;
      };

        @main fn(){
            let x @int = 5;
            let y @int = 7;
            let name @string = \"Karis\";

            let list1 [ @string ] = [ \"ka\", \"ris\" , \"karis\" ];
            let list2 [ @int ] = [ 1, 2 , 3, 100, 1001 ];
            let list3 [ @bool ] = [ true, false , false, true ];

            let result0 @int = add(x,y);
            let result1 @int = sub(x,y);
            let result2 @int = mul(x,y);
            let result3 @int = div(x,y);
            let result4 @int = mod(x,y);
            let result5 @int = greater(x,y);
            let result6 @int = greater_or_eq(x,y);
            let result7 @int = less(x,y);
            let result8 @int = less_or_eq(x,y);
            let result9 @int = or(x,y);
            let result10 @int = and(x,y);

            print(result0);
            print(result1);
            print(result2);
            print(result3);
            print(result4);
            print(result5);
            print(result6);
            print(result7);
            print(result8);
            print(result9);
            print(result10);
           let result11 @int = max(x,y);
   
        }@end;

The program crashes:
thread 'vm::vm_tests::should_execute_full_program' panicked at 'calledOption::unwrap()on aNone` value', compiler/src/vm_executor.rs:111:86


Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions