Skip to content

Commit

Permalink
fix: binding identifier is now reset at end of statement
Browse files Browse the repository at this point in the history
  • Loading branch information
eWert-Online committed Aug 17, 2024
1 parent 8db0802 commit 0c712d6
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 19 deletions.
35 changes: 19 additions & 16 deletions lib/pinc_backend/Interpreter.ml
Original file line number Diff line number Diff line change
Expand Up @@ -72,21 +72,24 @@ let rec get_uppercase_identifier_typ ~state ident =
(state, Some (Definition_Library library)))

and eval_statement ~state statement =
match statement.Ast.statement_desc with
| Ast.LetStatement (Lowercase_Id ident, expression) ->
eval_let ~state ~ident ~is_mutable:false ~is_optional:false expression
| Ast.OptionalLetStatement (Lowercase_Id ident, expression) ->
eval_let ~state ~ident ~is_mutable:false ~is_optional:true expression
| Ast.OptionalMutableLetStatement (Lowercase_Id ident, expression) ->
eval_let ~state ~ident ~is_mutable:true ~is_optional:true expression
| Ast.MutableLetStatement (Lowercase_Id ident, expression) ->
eval_let ~state ~ident ~is_mutable:true ~is_optional:false expression
| Ast.MutationStatement (Lowercase_Id ident, expression) ->
eval_mutation ~state ~ident expression
| Ast.UseStatement (ident, expression) -> eval_use ~state ~ident expression
| Ast.BreakStatement _ -> raise_notrace (Loop_Break state)
| Ast.ContinueStatement _ -> raise_notrace (Loop_Continue state)
| Ast.ExpressionStatement expression -> expression |> eval_expression ~state
let result =
match statement.Ast.statement_desc with
| Ast.LetStatement (Lowercase_Id ident, expression) ->
eval_let ~state ~ident ~is_mutable:false ~is_optional:false expression
| Ast.OptionalLetStatement (Lowercase_Id ident, expression) ->
eval_let ~state ~ident ~is_mutable:false ~is_optional:true expression
| Ast.OptionalMutableLetStatement (Lowercase_Id ident, expression) ->
eval_let ~state ~ident ~is_mutable:true ~is_optional:true expression
| Ast.MutableLetStatement (Lowercase_Id ident, expression) ->
eval_let ~state ~ident ~is_mutable:true ~is_optional:false expression
| Ast.MutationStatement (Lowercase_Id ident, expression) ->
eval_mutation ~state ~ident expression
| Ast.UseStatement (ident, expression) -> eval_use ~state ~ident expression
| Ast.BreakStatement _ -> raise_notrace (Loop_Break state)
| Ast.ContinueStatement _ -> raise_notrace (Loop_Continue state)
| Ast.ExpressionStatement expression -> expression |> eval_expression ~state
in
{ result with binding_identifier = None }

and eval_expression ~state expression =
match expression.expression_desc with
Expand Down Expand Up @@ -1416,7 +1419,7 @@ let eval_declarations
in

(match declarations |> StringMap.find_opt root with
| Some { declaration_type = Declaration_Library _ | Declaration_Store _; _ } ->
| Some { Ast.declaration_type = Declaration_Library _ | Declaration_Store _; _ } ->
raise_notrace (Invalid_argument (root ^ " can not be evaluated"))
| _ -> ());

Expand Down
7 changes: 4 additions & 3 deletions lib/pinc_backend/stdlib/Base__Array.pi
Original file line number Diff line number Diff line change
Expand Up @@ -197,14 +197,15 @@ library Base__Array {
let reduce = fold_left;

let group = fn (array, size) -> {
let array_length = Base.Array.length(array);
let group_size = Base.Math.floor(array_length / size);

0..size |> fold_lefti([], fn (acc, curr, index) -> {
let array_length = Base.Array.length(array);
let group_size = Base.Math.floor(array_length / size);
acc <- Base.Array.slice(
array,
index * group_size,
if(index == size - 1) array_length else group_size
)
);
});
};

Expand Down

0 comments on commit 0c712d6

Please sign in to comment.