diff --git a/benchmark/fib.hk b/benchmark/fib.hk
index 59a2c14..a4a8f50 100644
--- a/benchmark/fib.hk
+++ b/benchmark/fib.hk
@@ -4,5 +4,5 @@ fn fib(n) =>
let n = to_int(args[0]);
let m = to_int(args[1]);
-for (mut i = 0; i < n; i++)
+for (var i = 0; i < n; i++)
println(fib(m));
diff --git a/docs/built-in.md b/docs/built-in.md
index ace5ea9..a285238 100644
--- a/docs/built-in.md
+++ b/docs/built-in.md
@@ -649,7 +649,7 @@ fn valid(it: iterator) -> bool;
Example:
```rust
-mut it = iter(1..3);
+var it = iter(1..3);
println(valid(it)); // true
it = next(it);
println(valid(it)); // true
@@ -670,7 +670,7 @@ fn current(it: iterator) -> any;
Example:
```rust
-mut it = iter(1..3);
+var it = iter(1..3);
println(current(it)); // 1
it = next(it);
println(current(it)); // 2
@@ -691,7 +691,7 @@ fn next(it: iterator) -> iterator;
Example:
```rust
-mut it = iter(1..3);
+var it = iter(1..3);
println(current(it)); // 1
it = next(it);
println(current(it)); // 2
diff --git a/docs/core-modules.md b/docs/core-modules.md
index 7658cf8..813c8c1 100644
--- a/docs/core-modules.md
+++ b/docs/core-modules.md
@@ -1957,7 +1957,7 @@ fn len(list: userdata) -> number;
Example:
```rust
-mut list = lists.new_linked_list();
+var list = lists.new_linked_list();
list = lists.push_back(list, 1);
list = lists.push_back(list, 2);
list = lists.push_back(list, 3);
@@ -1990,7 +1990,7 @@ fn push_front(list: userdata, value: any) -> userdata;
Example:
```rust
-mut list = lists.new_linked_list();
+var list = lists.new_linked_list();
list = lists.push_front(list, 1);
list = lists.push_front(list, 2);
println(lists.front(list)); // 2
@@ -2009,7 +2009,7 @@ fn push_back(list: userdata, value: any) -> userdata;
Example:
```rust
-mut list = lists.new_linked_list();
+var list = lists.new_linked_list();
list = lists.push_back(list, 1);
list = lists.push_back(list, 2);
println(lists.front(list)); // 1
@@ -2027,7 +2027,7 @@ fn pop_front(list: userdata) -> userdata;
Example:
```rust
-mut list1 = lists.new_linked_list();
+var list1 = lists.new_linked_list();
list1 = lists.push_back(list1, 1);
list1 = lists.push_back(list1, 2);
let list2 = lists.pop_front(list1);
@@ -2045,7 +2045,7 @@ fn pop_back(list: userdata) -> userdata;
Example:
```rust
-mut list1 = lists.new_linked_list();
+var list1 = lists.new_linked_list();
list1 = lists.push_back(list1, 1);
list1 = lists.push_back(list1, 2);
let list2 = lists.pop_back(list1);
@@ -2063,7 +2063,7 @@ fn front(list: userdata) -> any;
Example:
```rust
-mut list = lists.new_linked_list();
+var list = lists.new_linked_list();
list = lists.push_back(list, 1);
list = lists.push_back(list, 2);
println(lists.front(list)); // 1
@@ -2080,7 +2080,7 @@ fn back(list: userdata) -> any;
Example:
```rust
-mut list = lists.new_linked_list();
+var list = lists.new_linked_list();
list = lists.push_back(list, 1);
list = lists.push_back(list, 2);
println(lists.back(list)); // 2
diff --git a/docs/grammar.ebnf b/docs/grammar.ebnf
index 4bce616..a2e1987 100644
--- a/docs/grammar.ebnf
+++ b/docs/grammar.ebnf
@@ -1,119 +1,120 @@
-chunk ::= statement* EOF
+chunk ::= stmt* EOF
-statement ::= import_statement
- | variable_declaration ';'
+stmt ::= import_stmt
+ | var_decl ';'
| assign_call ';'
- | struct_declaration
- | function_declaration
- | delete_statement
- | if_statement
- | match_statement
- | loop_statement
- | while_statement
- | for_statement
- | break_statement
- | return_statement
+ | struct_decl
+ | fn_decl
+ | del_stmt
+ | if_stmt
+ | match_stmt
+ | loop_stmt
+ | while_stmt
+ | for_stmt
+ | break_stmt
+ | return_stmt
| block
-import_statement ::= 'import' NAME ( 'as' NAME )? ';'
+import_stmt ::= 'import' NAME ( 'as' NAME )? ';'
| 'import' STRING 'as' NAME ';'
| 'import' '{' NAME ( ',' NAME )* '}' 'from' ( NAME | STRING ) ';'
-variable_declaration ::= 'let' NAME '=' expression
- | 'mut' NAME ( '=' expression )?
- | ( 'let' | 'mut' ) '[' '_' | NAME ( ',' '_' | NAME )* ']' '=' expression
- | ( 'let' | 'mut' ) '{' NAME ( ',' NAME )* '}' '=' expression
+var_decl ::= 'let' NAME '=' expr
+ | 'var' NAME ( '=' expr )?
+ | ( 'let' | 'var' ) '[' '_' | NAME ( ',' '_' | NAME )* ']' '=' expr
+ | ( 'let' | 'var' ) '{' NAME ( ',' NAME )* '}' '=' expr
-assign_call ::= NAME subscript* assign_op expression
- | NAME subscript* ( '++' | '--' )
- | NAME subscript* '[' ']' '=' expression
- | NAME subscript* subscript '=' expression
- | NAME ( subscript | call )* call
+assign_call ::= NAME subsc* assign_op expr
+ | NAME subsc* ( '++' | '--' )
+ | NAME subsc* '[' ']' '=' expr
+ | NAME subsc* subsc '=' expr
+ | NAME ( subsc | call )* call
-struct_declaration ::= 'struct' NAME '{' ( string | NAME ( ',' string | NAME )* )? '}'
+struct_decl ::= 'struct' NAME '{' ( string | NAME ( ',' string | NAME )* )? '}'
-function_declaration ::= 'fn' NAME '(' ( 'mut'? NAME ( ',' 'mut'? NAME )* )? ')' ( '=>' expression ";" | block )
+fn_decl ::= 'fn' NAME '(' ( NAME ( ',' NAME )* )? ')' ( '=>' expr ";" | block )
-delete_statement ::= 'del' NAME subscript* '[' expression ']' ';'
+del_stmt ::= 'del' NAME subsc* '[' expr ']' ';'
-if_statement ::= ( 'if' | 'if!' ) '(' ( variable_declaration ';' )? expression ')'
- statement ( 'else' statement )?
+if_stmt ::= ( 'if' | 'if!' ) '(' ( var_decl ';' )? expr ')'
+ stmt ( 'else' stmt )?
-match_statement ::= 'match' '(' ( variable_declaration ';' )? expression ')'
- '{' ( expression '=>' statement )+ ( '_' '=>' statement )? '}'
+match_stmt ::= 'match' '(' ( var_decl ';' )? expr ')'
+ '{' ( expr '=>' stmt )+ ( '_' '=>' stmt )? '}'
-loop_statement ::= 'loop' statement
+loop_stmt ::= 'loop' stmt
-while_statement ::= ( 'while' | 'while!' ) '(' expression ')' statement
- | 'do' statement ( 'while' | 'while!' ) '(' expression ')' ';'
+while_stmt ::= ( 'while' | 'while!' ) '(' expr ')' stmt
+ | 'do' stmt ( 'while' | 'while!' ) '(' expr ')' ';'
-for_statement ::= 'for' '(' ( variable_declaration | assign_call )? ';' expression? ';' assign_call? ')' statement
- | 'foreach' '(' NAME 'in' expression ')' statement
+for_stmt ::= 'for' '(' ( var_decl | assign_call )? ';' expr?
+ ';' assign_call? ')' stmt
+ | 'foreach' '(' NAME 'in' expr ')' stmt
-break_statement ::= ( 'break' | 'continue' ) ';'
+break_stmt ::= ( 'break' | 'continue' ) ';'
-return_statement ::= 'return' expression? ';'
+return_stmt ::= 'return' expr? ';'
block ::= '{' stmt* '}'
assign_op ::= '=' | '|=' | '^=' | '&=' | '<<=' | '>>='
| '+=' | '-=' | '*=' | '/=' | '~/=' | '%='
-subscript ::= '[' expression ']' | '.' NAME
+subsc ::= '[' expr ']' | '.' NAME
-call ::= '(' ( expression ( ',' expression )* )? ')'
+call ::= '(' ( expr ( ',' expr )* )? ')'
-expression ::= and_expression ( '||' and_expression )*
+expr ::= and_expr ( '||' and_expr )*
-and_expression ::= equal_expression ( '&&' equal_expression )*
+and_expr ::= equal_expr ( '&&' equal_expr )*
-equal_expression ::= comp_expression ( ( '==' | '!=' ) comp_expression )*
+equal_expr ::= comp_expr ( ( '==' | '!=' ) comp_expr )*
-comp_expression ::= bor_expression ( ( '>' | '>=' | '<' | '<=' ) bor_expression )*
+comp_expr ::= bor_expr ( ( '>' | '>=' | '<' | '<=' ) bor_expr )*
-bor_expression ::= bxor_expression ( '|' bxor_expression )*
+bor_expr ::= bxor_expr ( '|' bxor_expr )*
-bxor_expression ::= band_expression ( '^' band_expression )*
+bxor_expr ::= band_expr ( '^' band_expr )*
-band_expression ::= shift_expression ( '&' shift_expression )*
+band_expr ::= shift_expr ( '&' shift_expr )*
-shift_expression ::= range_expression ( ( '<<' | '>>' ) range_expression )*
+shift_expr ::= range_expr ( ( '<<' | '>>' ) range_expr )*
-range_expression ::= add_expression ( '..' add_expression )?
+range_expr ::= add_expr ( '..' add_expr )?
-add_expression ::= mul_expression ( ( '+' | '-' ) mul_expression )*
+add_expr ::= mul_expr ( ( '+' | '-' ) mul_expr )*
-mul_expression ::= unary_expression ( ( '*' | '/' | '~/' | '%' ) unary_expression )*
+mul_expr ::= unary_expr ( ( '*' | '/' | '~/' | '%' ) unary_expr )*
-unary_expression ::= ( '-' | '!' | '~' ) unary_expression | primary_expression
+unary_expr ::= ( '-' | '!' | '~' ) unary_expr | primary_expr
-primary_expression ::= literal
+primary_expr ::= literal
| array_constructor
| struct_constructor
| anonymous_struct
- | anonymous_function
- | if_expression
- | match_expression
- | subscript_call
- | group_expression
+ | anonymous_fn
+ | if_expr
+ | match_expr
+ | subsc_call
+ | group_expr
literal ::= 'nil' | 'false' | 'true' | number | string
-array_constructor ::= '[' ( expression ( ',' expression )* )? ']'
+array_constructor ::= '[' ( expr ( ',' expr )* )? ']'
-struct_constructor ::= '{' ( string | NAME ':' expression ( ',' string | NAME ':' expression )* )? '}'
+struct_constructor ::= '{' ( string | NAME ':' expr ( ',' string | NAME ':' expr )* )? '}'
anonymous_struct ::= 'struct' '{' ( string | NAME ( ',' string | NAME )* )? '}'
-anonymous_function ::= '|' ( 'mut'? NAME ( ',' 'mut'? NAME )* )? '|' ( '=>' expression | block )
- | '||' ( '=>' expression | block )
+anonymous_fn ::= '|' ( NAME ( ',' NAME )* )? '|' ( '=>' expr | block )
+ | '||' ( '=>' expr | block )
-if_expression ::= ( 'if' | 'if!' ) '(' expression ')' expression 'else' expression
+if_expr ::= ( 'if' | 'if!' ) '(' expr ')' expr 'else' expr
-match_expression ::= 'match' '(' expression ')' '{' expression '=>' expression ( ',' expression '=>' expression )*
- ',' '_' '=>' expression '}'
+match_expr ::= 'match' '(' expr ')' '{' expr '=>' expr ( ',' expr '=>' expr )*
+ ',' '_' '=>' expr '}'
-subscript_call ::= NAME ( subscript | call )* ( '{' ( expression ( ',' expression )* )? '}' )?
+subsc_call ::= NAME ( subsc | call )* ( '{' ( expr ( ',' expr )* )? '}' )?
-group_expression ::= '(' expression ')'
+group_expr ::= '(' expr ')'
diff --git a/docs/grammar.md b/docs/grammar.md
index 682d9f2..7bb223e 100644
--- a/docs/grammar.md
+++ b/docs/grammar.md
@@ -88,13 +88,13 @@ Keywords are reserved words that have a special meaning and cannot be used as na
let |
loop |
match |
- mut |
nil |
+ return |
- return |
struct |
true |
+ var |
while |
while! |
@@ -180,122 +180,123 @@ In addition, Hook uses a special token to indicate the end of a file. This token
The complete syntactic grammar of Hook is defined by the following EBNF grammar:
```ebnf
-chunk ::= statement* EOF
+chunk ::= stmt* EOF
-statement ::= import_statement
- | variable_declaration ';'
+stmt ::= import_stmt
+ | var_decl ';'
| assign_call ';'
- | struct_declaration
- | function_declaration
- | delete_statement
- | if_statement
- | match_statement
- | loop_statement
- | while_statement
- | for_statement
- | break_statement
- | return_statement
+ | struct_decl
+ | fn_decl
+ | del_stmt
+ | if_stmt
+ | match_stmt
+ | loop_stmt
+ | while_stmt
+ | for_stmt
+ | break_stmt
+ | return_stmt
| block
-import_statement ::= 'import' NAME ( 'as' NAME )? ';'
+import_stmt ::= 'import' NAME ( 'as' NAME )? ';'
| 'import' STRING 'as' NAME ';'
| 'import' '{' NAME ( ',' NAME )* '}' 'from' ( NAME | STRING ) ';'
-variable_declaration ::= 'let' NAME '=' expression
- | 'mut' NAME ( '=' expression )?
- | ( 'let' | 'mut' ) '[' '_' | NAME ( ',' '_' | NAME )* ']' '=' expression
- | ( 'let' | 'mut' ) '{' NAME ( ',' NAME )* '}' '=' expression
+var_decl ::= 'let' NAME '=' expr
+ | 'var' NAME ( '=' expr )?
+ | ( 'let' | 'var' ) '[' '_' | NAME ( ',' '_' | NAME )* ']' '=' expr
+ | ( 'let' | 'var' ) '{' NAME ( ',' NAME )* '}' '=' expr
-assign_call ::= NAME subscript* assign_op expression
- | NAME subscript* ( '++' | '--' )
- | NAME subscript* '[' ']' '=' expression
- | NAME subscript* subscript '=' expression
- | NAME ( subscript | call )* call
+assign_call ::= NAME subsc* assign_op expr
+ | NAME subsc* ( '++' | '--' )
+ | NAME subsc* '[' ']' '=' expr
+ | NAME subsc* subsc '=' expr
+ | NAME ( subsc | call )* call
-struct_declaration ::= 'struct' NAME '{' ( string | NAME ( ',' string | NAME )* )? '}'
+struct_decl ::= 'struct' NAME '{' ( string | NAME ( ',' string | NAME )* )? '}'
-function_declaration ::= 'fn' NAME '(' ( 'mut'? NAME ( ',' 'mut'? NAME )* )? ')' ( '=>' expression ";" | block )
+fn_decl ::= 'fn' NAME '(' ( NAME ( ',' NAME )* )? ')' ( '=>' expr ";" | block )
-delete_statement ::= 'del' NAME subscript* '[' expression ']' ';'
+del_stmt ::= 'del' NAME subsc* '[' expr ']' ';'
-if_statement ::= ( 'if' | 'if!' ) '(' ( variable_declaration ';' )? expression ')'
- statement ( 'else' statement )?
+if_stmt ::= ( 'if' | 'if!' ) '(' ( var_decl ';' )? expr ')'
+ stmt ( 'else' stmt )?
-match_statement ::= 'match' '(' ( variable_declaration ';' )? expression ')'
- '{' ( expression '=>' statement )+ ( '_' '=>' statement )? '}'
+match_stmt ::= 'match' '(' ( var_decl ';' )? expr ')'
+ '{' ( expr '=>' stmt )+ ( '_' '=>' stmt )? '}'
-loop_statement ::= 'loop' statement
+loop_stmt ::= 'loop' stmt
-while_statement ::= ( 'while' | 'while!' ) '(' expression ')' statement
- | 'do' statement ( 'while' | 'while!' ) '(' expression ')' ';'
+while_stmt ::= ( 'while' | 'while!' ) '(' expr ')' stmt
+ | 'do' stmt ( 'while' | 'while!' ) '(' expr ')' ';'
-for_statement ::= 'for' '(' ( variable_declaration | assign_call )? ';' expression? ';' assign_call? ')' statement
- | 'foreach' '(' NAME 'in' expression ')' statement
+for_stmt ::= 'for' '(' ( var_decl | assign_call )? ';' expr?
+ ';' assign_call? ')' stmt
+ | 'foreach' '(' NAME 'in' expr ')' stmt
-break_statement ::= ( 'break' | 'continue' ) ';'
+break_stmt ::= ( 'break' | 'continue' ) ';'
-return_statement ::= 'return' expression? ';'
+return_stmt ::= 'return' expr? ';'
block ::= '{' stmt* '}'
assign_op ::= '=' | '|=' | '^=' | '&=' | '<<=' | '>>='
| '+=' | '-=' | '*=' | '/=' | '~/=' | '%='
-subscript ::= '[' expression ']' | '.' NAME
+subsc ::= '[' expr ']' | '.' NAME
-call ::= '(' ( expression ( ',' expression )* )? ')'
+call ::= '(' ( expr ( ',' expr )* )? ')'
-expression ::= and_expression ( '||' and_expression )*
+expr ::= and_expr ( '||' and_expr )*
-and_expression ::= equal_expression ( '&&' equal_expression )*
+and_expr ::= equal_expr ( '&&' equal_expr )*
-equal_expression ::= comp_expression ( ( '==' | '!=' ) comp_expression )*
+equal_expr ::= comp_expr ( ( '==' | '!=' ) comp_expr )*
-comp_expression ::= bor_expression ( ( '>' | '>=' | '<' | '<=' ) bor_expression )*
+comp_expr ::= bor_expr ( ( '>' | '>=' | '<' | '<=' ) bor_expr )*
-bor_expression ::= bxor_expression ( '|' bxor_expression )*
+bor_expr ::= bxor_expr ( '|' bxor_expr )*
-bxor_expression ::= band_expression ( '^' band_expression )*
+bxor_expr ::= band_expr ( '^' band_expr )*
-band_expression ::= shift_expression ( '&' shift_expression )*
+band_expr ::= shift_expr ( '&' shift_expr )*
-shift_expression ::= range_expression ( ( '<<' | '>>' ) range_expression )*
+shift_expr ::= range_expr ( ( '<<' | '>>' ) range_expr )*
-range_expression ::= add_expression ( '..' add_expression )?
+range_expr ::= add_expr ( '..' add_expr )?
-add_expression ::= mul_expression ( ( '+' | '-' ) mul_expression )*
+add_expr ::= mul_expr ( ( '+' | '-' ) mul_expr )*
-mul_expression ::= unary_expression ( ( '*' | '/' | '~/' | '%' ) unary_expression )*
+mul_expr ::= unary_expr ( ( '*' | '/' | '~/' | '%' ) unary_expr )*
-unary_expression ::= ( '-' | '!' | '~' ) unary_expression | primary_expression
+unary_expr ::= ( '-' | '!' | '~' ) unary_expr | primary_expr
-primary_expression ::= literal
+primary_expr ::= literal
| array_constructor
| struct_constructor
| anonymous_struct
- | anonymous_function
- | if_expression
- | match_expression
- | subscript_call
- | group_expression
+ | anonymous_fn
+ | if_expr
+ | match_expr
+ | subsc_call
+ | group_expr
literal ::= 'nil' | 'false' | 'true' | number | string
-array_constructor ::= '[' ( expression ( ',' expression )* )? ']'
+array_constructor ::= '[' ( expr ( ',' expr )* )? ']'
-struct_constructor ::= '{' ( string | NAME ':' expression ( ',' string | NAME ':' expression )* )? '}'
+struct_constructor ::= '{' ( string | NAME ':' expr ( ',' string | NAME ':' expr )* )? '}'
anonymous_struct ::= 'struct' '{' ( string | NAME ( ',' string | NAME )* )? '}'
-anonymous_function ::= '|' ( 'mut'? NAME ( ',' 'mut'? NAME )* )? '|' ( '=>' expression | block )
- | '||' ( '=>' expression | block )
+anonymous_fn ::= '|' ( NAME ( ',' NAME )* )? '|' ( '=>' expr | block )
+ | '||' ( '=>' expr | block )
-if_expression ::= ( 'if' | 'if!' ) '(' expression ')' expression 'else' expression
+if_expr ::= ( 'if' | 'if!' ) '(' expr ')' expr 'else' expr
-match_expression ::= 'match' '(' expression ')' '{' expression '=>' expression ( ',' expression '=>' expression )*
- ',' '_' '=>' expression '}'
+match_expr ::= 'match' '(' expr ')' '{' expr '=>' expr ( ',' expr '=>' expr )*
+ ',' '_' '=>' expr '}'
-subscript_call ::= NAME ( subscript | call )* ( '{' ( expression ( ',' expression )* )? '}' )?
+subsc_call ::= NAME ( subsc | call )* ( '{' ( expr ( ',' expr )* )? '}' )?
-group_expression ::= '(' expression ')'
+group_expr ::= '(' expr ')'
```
diff --git a/docs/keywords.txt b/docs/keywords.txt
index 30fc638..103b0a7 100644
--- a/docs/keywords.txt
+++ b/docs/keywords.txt
@@ -17,10 +17,10 @@ in
let
loop
match
-mut
nil
return
struct
true
+var
while
while!
diff --git a/docs/tokens.txt b/docs/tokens.txt
index aba30d4..491fc06 100644
--- a/docs/tokens.txt
+++ b/docs/tokens.txt
@@ -69,11 +69,11 @@ TOKEN_KIND_IN_KW 'in'
TOKEN_KIND_LET_KW 'let'
TOKEN_KIND_LOOP_KW 'loop'
TOKEN_KIND_MATCH_KW 'match'
-TOKEN_KIND_MUT_KW 'mut'
TOKEN_KIND_NIL_KW 'nil'
TOKEN_KIND_RETURN_KW 'return'
TOKEN_KIND_STRUCT_KW 'struct'
TOKEN_KIND_TRUE_KW 'true'
+TOKEN_KIND_VAR_KW 'var'
TOKEN_KIND_WHILE_KW 'while'
TOKEN_KIND_WHILEBANG_KW 'while!'
TOKEN_KIND_NAME_KW NAME
diff --git a/examples/100doors.hk b/examples/100doors.hk
index 140bd1b..d32a8b3 100644
--- a/examples/100doors.hk
+++ b/examples/100doors.hk
@@ -2,12 +2,12 @@
// 100doors.hk
//
-mut square = 1;
-mut increment = 3;
+var square = 1;
+var increment = 3;
println("The open doors are: ");
-for (mut door = 1; door <= 100; door++)
+for (var door = 1; door <= 100; door++)
{
if (door != square)
continue;
diff --git a/examples/99bottles.hk b/examples/99bottles.hk
index 7fe8082..2bc7546 100644
--- a/examples/99bottles.hk
+++ b/examples/99bottles.hk
@@ -2,7 +2,7 @@
// 99bottles.hk
//
-mut n = 99;
+var n = 99;
while (n > 1) {
println(to_string(n) + " bottles of beer on the wall,");
diff --git a/examples/binary_search.hk b/examples/binary_search.hk
index e0b77ec..7c402cf 100644
--- a/examples/binary_search.hk
+++ b/examples/binary_search.hk
@@ -3,8 +3,8 @@
//
fn binary_search(arr, key) {
- mut low = 0;
- mut high = len(arr) - 1;
+ var low = 0;
+ var high = len(arr) - 1;
while (low <= high) {
let middle = to_int((low + high) / 2);
let cmp = compare(key, arr[middle]);
diff --git a/examples/bubble_sort.hk b/examples/bubble_sort.hk
index 9f3b4f8..c42171f 100644
--- a/examples/bubble_sort.hk
+++ b/examples/bubble_sort.hk
@@ -2,13 +2,13 @@
// bubble_sort.hk
//
-fn sort(mut arr) {
- mut n = len(arr);
- mut has_changed;
+fn sort(arr) {
+ var n = len(arr);
+ var has_changed;
do {
has_changed = false;
n--;
- for (mut i = 0; i < n; i++) {
+ for (var i = 0; i < n; i++) {
if (arr[i] > arr[i + 1]) {
let t = arr[i];
arr[i] = arr[i + 1];
diff --git a/examples/coin_flip.hk b/examples/coin_flip.hk
index cff3530..c206e9e 100644
--- a/examples/coin_flip.hk
+++ b/examples/coin_flip.hk
@@ -9,9 +9,9 @@ import { round } from math;
srand(time());
fn coin_flip(times) {
- mut heads = 0;
- mut tails = 0;
- for (mut i = 0; i < times; i++) {
+ var heads = 0;
+ var tails = 0;
+ for (var i = 0; i < times; i++) {
let n = round(rand() * 1);
if (n == 0)
heads++;
diff --git a/examples/collatz.hk b/examples/collatz.hk
index 25d5a4f..9dd567d 100644
--- a/examples/collatz.hk
+++ b/examples/collatz.hk
@@ -2,8 +2,8 @@
// collatz.hk
//
-fn collatz(mut n) {
- mut count = 0;
+fn collatz(n) {
+ var count = 0;
while (n != 1) {
count++;
if (n % 2 == 0)
diff --git a/examples/fractal.hk b/examples/fractal.hk
index af65dd6..7adfdc7 100644
--- a/examples/fractal.hk
+++ b/examples/fractal.hk
@@ -8,14 +8,14 @@ let x_min = -1.5;
let x_max = -1.1;
let pixels = " .:;+=xX$&";
-for (mut y = 0; y < 40; y++) {
+for (var y = 0; y < 40; y++) {
let y0 = (y / 40.0) * (y_max - y_min) + y_min;
- for (mut x = 0; x < 79; x++) {
+ for (var x = 0; x < 79; x++) {
let x0 = (x / 78.0) * (x_max - x_min) + x_min;
- mut x = x0;
- mut y = y0;
- mut pixel = ' ';
- for (mut i = 0; i < 80; i++) {
+ var x = x0;
+ var y = y0;
+ var pixel = ' ';
+ for (var i = 0; i < 80; i++) {
x = x * x - y * y + x0;
y = 2 * x * y + y0;
if (x * x + y * y > 4) {
diff --git a/examples/guessing_game.hk b/examples/guessing_game.hk
index 29d3b14..c934a2a 100644
--- a/examples/guessing_game.hk
+++ b/examples/guessing_game.hk
@@ -15,7 +15,7 @@ let secret_number = to_int(1 + rand() * 99);
loop {
println("Please input your guess.");
- mut guess = readln(stdin);
+ var guess = readln(stdin);
guess = trim(guess);
diff --git a/examples/hailstone.hk b/examples/hailstone.hk
index 8eb3060..30a6c2b 100644
--- a/examples/hailstone.hk
+++ b/examples/hailstone.hk
@@ -2,8 +2,8 @@
// hailstone.hk
//
-fn hailstone(mut n) {
- mut seq = [n];
+fn hailstone(n) {
+ var seq = [n];
while (n != 1) {
if (n % 2 == 0)
n /= 2;
diff --git a/examples/knapsack.hk b/examples/knapsack.hk
index 62e78be..536bc1d 100644
--- a/examples/knapsack.hk
+++ b/examples/knapsack.hk
@@ -3,14 +3,14 @@
//
fn knapsack(weight_cap, weights, values) {
- mut high = 0;
+ var high = 0;
let n = len(weights);
- for (mut i = 0; i < n; i++) {
- mut cap = weights[i];
- mut value = values[i];
+ for (var i = 0; i < n; i++) {
+ var cap = weights[i];
+ var value = values[i];
let new_cap = weights[i];
let new_value = values[i];
- for (mut j = i + 1; j < n; j++) {
+ for (var j = i + 1; j < n; j++) {
if (cap < weight_cap && cap + weights[j] <= weight_cap) {
cap += weights[j];
value += values[j];
diff --git a/examples/knuth_shuffle.hk b/examples/knuth_shuffle.hk
index 5f58859..f35441f 100644
--- a/examples/knuth_shuffle.hk
+++ b/examples/knuth_shuffle.hk
@@ -7,9 +7,9 @@ import { time } from os;
srand(time());
-fn shuffle(mut arr) {
+fn shuffle(arr) {
let n = len(arr);
- for (mut i = n - 1; i >= 0; i--) {
+ for (var i = n - 1; i >= 0; i--) {
let j = to_int(rand() * (i - 1));
let tmp = arr[i];
arr[i] = arr[j];
diff --git a/examples/mandelbrot.hk b/examples/mandelbrot.hk
index c1c89ec..3532988 100644
--- a/examples/mandelbrot.hk
+++ b/examples/mandelbrot.hk
@@ -10,16 +10,16 @@ let y_max = 0.1;
let x_min = -1.5;
let x_max = -1.1;
-for (mut y_pixel = 0; y_pixel < 24; y_pixel++) {
+for (var y_pixel = 0; y_pixel < 24; y_pixel++) {
let y = (y_pixel / 24) * (y_max - y_min) + y_min;
- for (mut x_pixel = 0; x_pixel < 80; x_pixel++) {
+ for (var x_pixel = 0; x_pixel < 80; x_pixel++) {
let x = (x_pixel / 79) * (x_max - x_min) + x_min;
- mut pixel = " ";
- mut x0 = x;
- mut y0 = y;
- for (mut iter = 0; iter < 80; iter++) {
- mut x1 = (x0 * x0) - (y0 * y0);
- mut y1 = 2 * x0 * y0;
+ var pixel = " ";
+ var x0 = x;
+ var y0 = y;
+ for (var iter = 0; iter < 80; iter++) {
+ var x1 = (x0 * x0) - (y0 * y0);
+ var y1 = 2 * x0 * y0;
x1 = x1 + x;
y1 = y1 + y;
x0 = x1;
diff --git a/examples/nbody.hk b/examples/nbody.hk
index 07b98d3..76a2ef2 100644
--- a/examples/nbody.hk
+++ b/examples/nbody.hk
@@ -60,12 +60,12 @@ fn neptune() => Body {
5.15138902046611451e-05 * SOLAR_MASS
};
-fn offset_momentum(mut bodies) {
- mut px = 0;
- mut py = 0;
- mut pz = 0;
+fn offset_momentum(bodies) {
+ var px = 0;
+ var py = 0;
+ var pz = 0;
let size = len(bodies);
- mut i = 0;
+ var i = 0;
while (i < size) {
let body = bodies[i];
let mass = body.mass;
@@ -80,17 +80,17 @@ fn offset_momentum(mut bodies) {
return bodies;
}
-fn advance(mut bodies, dt) {
+fn advance(bodies, dt) {
let size = len(bodies);
- mut i = 0;
+ var i = 0;
while (i < size) {
- mut bodyi = bodies[i];
- mut vxi = bodyi.vx;
- mut vyi = bodyi.vy;
- mut vzi = bodyi.vz;
- mut j = i + 1;
+ var bodyi = bodies[i];
+ var vxi = bodyi.vx;
+ var vyi = bodyi.vy;
+ var vzi = bodyi.vz;
+ var j = i + 1;
while (j < size) {
- mut bodyj = bodies[j];
+ var bodyj = bodies[j];
let dx = bodyi.x - bodyj.x;
let dy = bodyi.y - bodyj.y;
let dz = bodyi.z - bodyj.z;
@@ -124,14 +124,14 @@ fn advance(mut bodies, dt) {
}
fn energy(bodies) {
- mut e = 0;
+ var e = 0;
let size = len(bodies);
- mut i = 0;
+ var i = 0;
while (i < size) {
let bodyi = bodies[i];
e += 0.5 * bodyi.mass * ( bodyi.vx * bodyi.vx +
bodyi.vy * bodyi.vy + bodyi.vz * bodyi.vz );
- mut j = i + 1;
+ var j = i + 1;
while (j < size) {
let bodyj = bodies[j];
let dx = bodyi.x - bodyj.x;
@@ -147,10 +147,10 @@ fn energy(bodies) {
}
let n = to_int(args[0]);
-mut bodies = [ sun(), jupiter(), saturn(), uranus(), neptune() ];
+var bodies = [ sun(), jupiter(), saturn(), uranus(), neptune() ];
bodies = offset_momentum(bodies);
println(energy(bodies));
-mut i = 0;
+var i = 0;
while (i < n) {
bodies = advance(bodies, 0.01);
i++;
diff --git a/examples/num_to_words.hk b/examples/num_to_words.hk
index b4a4e0e..6d9f904 100644
--- a/examples/num_to_words.hk
+++ b/examples/num_to_words.hk
@@ -11,7 +11,7 @@ let teen_places = ["tenth", "eleventh", "twelfth", "thirteenth", "fourteenth", "
let tens_places = ["", "tenth", "twentieth", "thirtieth", "fortieth", "fifthieth", "sixthieth", "seventieth", "eightieth", "ninetieth"];
fn num_to_array(num) {
- mut arr = [];
+ var arr = [];
arr[] = to_int(num / 100000000 % 10);
arr[] = to_int(num / 10000000 % 10);
arr[] = to_int(num / 1000000 % 10);
@@ -35,7 +35,7 @@ fn has_trailing_zeros(arr) {
fn num_to_words(num) {
let arr = num_to_array(num);
- mut word = "";
+ var word = "";
if (num == 0)
word = "zero";
if (num >= 1 && num <= 9)
@@ -67,7 +67,7 @@ fn num_to_words(num) {
fn num_to_place(num) {
let arr = num_to_array(num);
- mut place = "";
+ var place = "";
if (num == 0)
place = "zeroth";
if (num >= 1 && num <= 9)
diff --git a/examples/pi.hk b/examples/pi.hk
index 21057ef..14c05bd 100644
--- a/examples/pi.hk
+++ b/examples/pi.hk
@@ -4,9 +4,9 @@
fn pi() {
let n = 1000000;
- mut d = 1;
- mut sum = 0;
- for (mut i = 0; i < n; i++) {
+ var d = 1;
+ var sum = 0;
+ for (var i = 0; i < n; i++) {
if (i % 2 == 0)
sum += 4 / d;
else
diff --git a/examples/pig_latin.hk b/examples/pig_latin.hk
index 175b6be..4106848 100644
--- a/examples/pig_latin.hk
+++ b/examples/pig_latin.hk
@@ -7,11 +7,11 @@ import { lower } from strings;
let vowels = ['a', 'e', 'i', 'o', 'u'];
let num_vowels = len(vowels);
-fn pig_latin(mut word) {
+fn pig_latin(word) {
word = lower(word);
let first = word[0];
- for (mut i = 0; i < num_vowels; i++) {
+ for (var i = 0; i < num_vowels; i++) {
if (first != vowels[i])
continue;
return word + "way";
diff --git a/examples/quick_sort.hk b/examples/quick_sort.hk
index c079990..12632c6 100644
--- a/examples/quick_sort.hk
+++ b/examples/quick_sort.hk
@@ -2,14 +2,14 @@
// quick_sort.hk
//
-fn sort(mut arr) {
+fn sort(arr) {
let n = len(arr);
if (n <= 1)
return arr;
let pivot = arr[0];
- mut left = [];
- mut right = [];
- for (mut i = 1; i < n; i++) {
+ var left = [];
+ var right = [];
+ for (var i = 1; i < n; i++) {
if (arr[i] < pivot)
left[] = arr[i];
else
diff --git a/examples/rule110.hk b/examples/rule110.hk
index 7fcd1cf..a1506b3 100644
--- a/examples/rule110.hk
+++ b/examples/rule110.hk
@@ -3,8 +3,8 @@
//
let size = 100;
-mut prev = [];
-mut i;
+var prev = [];
+var i;
i = 0;
while (i < size - 1) {
@@ -43,15 +43,15 @@ fn calc(p, i) {
i = 0;
while (i < size) {
- mut line = [false];
- mut j;
+ var line = [false];
+ var j;
j = 1;
while (j < size - 1) {
line[] = calc(prev, j);
j++;
}
line[] = false;
- mut output = "";
+ var output = "";
j = 0;
while (j < size) {
output += if (line[j]) "*" else " ";
diff --git a/examples/sieve_of_eratosthenes.hk b/examples/sieve_of_eratosthenes.hk
index 5648d50..fcba0eb 100644
--- a/examples/sieve_of_eratosthenes.hk
+++ b/examples/sieve_of_eratosthenes.hk
@@ -5,8 +5,8 @@
import { new_array } from arrays;
fn sieve_of_eratosthenes(n) {
- mut prime = new_array(n + 1);
- mut i;
+ var prime = new_array(n + 1);
+ var i;
i = 0;
while (i < n + 1) {
prime[] = true;
@@ -15,7 +15,7 @@ fn sieve_of_eratosthenes(n) {
i = 2;
while (i * i <= n) {
if (prime[i]) {
- mut j = i * 2;
+ var j = i * 2;
while (j <= n) {
prime[j] = false;
j += i;
diff --git a/examples/tic_tac_toe.hk b/examples/tic_tac_toe.hk
index a1e1352..1b241f1 100644
--- a/examples/tic_tac_toe.hk
+++ b/examples/tic_tac_toe.hk
@@ -31,7 +31,7 @@ fn win(board) {
[0, 4, 8],
[2, 4, 6]
];
- for (mut i = 0; i < 8; i++) {
+ for (var i = 0; i < 8; i++) {
if (board[wins[i][0]] != 0 && board[wins[i][0]] == board[wins[i][1]] &&
board[wins[i][0]] == board[wins[i][2]])
return board[wins[i][2]];
@@ -39,13 +39,13 @@ fn win(board) {
return 0;
}
-fn minimax(mut board, player) {
- mut winner = win(board);
+fn minimax(board, player) {
+ var winner = win(board);
if (winner != 0)
return winner * player;
- mut move = -1;
- mut score = -2;
- for (mut i = 0; i < 9; i++) {
+ var move = -1;
+ var score = -2;
+ for (var i = 0; i < 9; i++) {
if (board[i] == 0) {
board[i] = player;
let this_score = - minimax(board, player * -1);
@@ -61,11 +61,11 @@ fn minimax(mut board, player) {
return score;
}
-fn cpu_move(mut board) {
+fn cpu_move(board) {
println("Thinking...");
- mut move = -1;
- mut score = -2;
- for (mut i = 0; i < 9; i++) {
+ var move = -1;
+ var score = -2;
+ for (var i = 0; i < 9; i++) {
if (board[i] == 0) {
board[i] = 1;
let temp_score = - minimax(board, -1);
@@ -80,8 +80,8 @@ fn cpu_move(mut board) {
return board;
}
-fn player_move(mut board) {
- mut move;
+fn player_move(board) {
+ var move;
do {
print("Input move ([0..8]): ");
move = to_int(readln(stdin));
@@ -90,14 +90,14 @@ fn player_move(mut board) {
return board;
}
-mut board = [0, 0, 0, 0, 0, 0, 0, 0, 0];
+var board = [0, 0, 0, 0, 0, 0, 0, 0, 0];
println("CPU: O, You: X");
println("Play (1)st or (2)nd? ");
let player = to_int(readln(stdin));
-for (mut turn = 0; turn < 9 && win(board) == 0; turn++) {
+for (var turn = 0; turn < 9 && win(board) == 0; turn++) {
if ((turn + player) % 2 == 0) {
board = cpu_move(board);
continue;
diff --git a/include/hook/value.h b/include/hook/value.h
index 1934593..f8d619c 100644
--- a/include/hook/value.h
+++ b/include/hook/value.h
@@ -84,8 +84,8 @@ typedef enum
#define hk_decr_ref(o) --(o)->refCount
#define hk_is_unreachable(o) (!(o)->refCount)
-#define hk_value_incr_ref(v) if (hk_is_object(v)) hk_incr_ref(hk_as_object(v))
-#define hk_value_decr_ref(v) if (hk_is_object(v)) hk_decr_ref(hk_as_object(v))
+#define hk_value_incr_ref(v) if (hk_is_object(v)) hk_incr_ref(hk_as_object(v))
+#define hk_value_decr_ref(v) if (hk_is_object(v)) hk_decr_ref(hk_as_object(v))
typedef struct
{
diff --git a/src/compiler.c b/src/compiler.c
index 5acb654..9bf99db 100644
--- a/src/compiler.c
+++ b/src/compiler.c
@@ -404,7 +404,7 @@ static void compile_statement(Compiler *comp)
consume(comp, TOKEN_KIND_SEMICOLON);
return;
}
- if (match(scan, TOKEN_KIND_MUT_KW))
+ if (match(scan, TOKEN_KIND_VAR_KW))
{
compile_variable_declaration(comp);
consume(comp, TOKEN_KIND_SEMICOLON);
@@ -1057,29 +1057,17 @@ static void compile_function_declaration(Compiler *comp)
hk_chunk_emit_opcode(childChunk, HK_OP_RETURN_NIL);
goto end;
}
- bool isMutable = false;
- if (match(scan, TOKEN_KIND_MUT_KW))
- {
- scanner_next_token(scan);
- isMutable = true;
- }
if (!match(scan, TOKEN_KIND_NAME))
syntax_error_unexpected(comp);
- define_local(&childComp, &scan->token, isMutable);
+ define_local(&childComp, &scan->token, true);
scanner_next_token(scan);
int arity = 1;
while (match(scan, TOKEN_KIND_COMMA))
{
scanner_next_token(scan);
- bool isMutable = false;
- if (match(scan, TOKEN_KIND_MUT_KW))
- {
- scanner_next_token(scan);
- isMutable = true;
- }
if (!match(scan, TOKEN_KIND_NAME))
syntax_error_unexpected(comp);
- define_local(&childComp, &scan->token, isMutable);
+ define_local(&childComp, &scan->token, true);
scanner_next_token(scan);
++arity;
}
@@ -1130,29 +1118,17 @@ static void compile_anonymous_function(Compiler *comp)
hk_chunk_emit_opcode(childChunk, HK_OP_RETURN_NIL);
goto end;
}
- bool isMutable = false;
- if (match(scan, TOKEN_KIND_MUT_KW))
- {
- scanner_next_token(scan);
- isMutable = true;
- }
if (!match(scan, TOKEN_KIND_NAME))
syntax_error_unexpected(comp);
- define_local(&childComp, &scan->token, isMutable);
+ define_local(&childComp, &scan->token, true);
scanner_next_token(scan);
int arity = 1;
while (match(scan, TOKEN_KIND_COMMA))
{
scanner_next_token(scan);
- bool isMutable = false;
- if (match(scan, TOKEN_KIND_MUT_KW))
- {
- scanner_next_token(scan);
- isMutable = true;
- }
if (!match(scan, TOKEN_KIND_NAME))
syntax_error_unexpected(comp);
- define_local(&childComp, &scan->token, isMutable);
+ define_local(&childComp, &scan->token, true);
scanner_next_token(scan);
++arity;
}
@@ -1275,7 +1251,7 @@ static void compile_if_statement(Compiler *comp, bool not)
compile_constant_declaration(comp);
consume(comp, TOKEN_KIND_SEMICOLON);
}
- else if (match(scan, TOKEN_KIND_MUT_KW))
+ else if (match(scan, TOKEN_KIND_VAR_KW))
{
compile_variable_declaration(comp);
consume(comp, TOKEN_KIND_SEMICOLON);
@@ -1308,7 +1284,7 @@ static void compile_match_statement(Compiler *comp)
compile_constant_declaration(comp);
consume(comp, TOKEN_KIND_SEMICOLON);
}
- else if (match(scan, TOKEN_KIND_MUT_KW))
+ else if (match(scan, TOKEN_KIND_VAR_KW))
{
compile_variable_declaration(comp);
consume(comp, TOKEN_KIND_SEMICOLON);
@@ -1433,7 +1409,7 @@ static void compile_for_statement(Compiler *comp)
compile_constant_declaration(comp);
consume(comp, TOKEN_KIND_SEMICOLON);
}
- else if (match(scan, TOKEN_KIND_MUT_KW))
+ else if (match(scan, TOKEN_KIND_VAR_KW))
{
compile_variable_declaration(comp);
consume(comp, TOKEN_KIND_SEMICOLON);
diff --git a/src/scanner.c b/src/scanner.c
index 177646f..9baa9b6 100644
--- a/src/scanner.c
+++ b/src/scanner.c
@@ -586,11 +586,6 @@ void scanner_next_token(Scanner *scan)
scan->token.kind = TOKEN_KIND_MATCH_KW;
return;
}
- if (match_keyword(scan, "mut"))
- {
- scan->token.kind = TOKEN_KIND_MUT_KW;
- return;
- }
if (match_keyword(scan, "nil"))
{
scan->token.kind = TOKEN_KIND_NIL_KW;
@@ -611,6 +606,12 @@ void scanner_next_token(Scanner *scan)
scan->token.kind = TOKEN_KIND_TRUE_KW;
return;
}
+ if (match_keyword(scan, "var"))
+ {
+ scan->token.kind = TOKEN_KIND_VAR_KW;
+ return;
+ }
+
if (match_keyword(scan, "while!"))
{
scan->token.kind = TOKEN_KIND_WHILEBANG_KW;
diff --git a/src/scanner.h b/src/scanner.h
index 7623b90..d86665b 100644
--- a/src/scanner.h
+++ b/src/scanner.h
@@ -20,7 +20,7 @@ typedef enum
TOKEN_KIND_FLOAT, TOKEN_KIND_STRING, TOKEN_KIND_UNDERSCORE_KW, TOKEN_KIND_AS_KW, TOKEN_KIND_BREAK_KW, TOKEN_KIND_CONTINUE_KW, TOKEN_KIND_DEL_KW,
TOKEN_KIND_DO_KW, TOKEN_KIND_ELSE_KW, TOKEN_KIND_FALSE_KW, TOKEN_KIND_FN_KW, TOKEN_KIND_FOR_KW, TOKEN_KIND_FOREACH_KW, TOKEN_KIND_FROM_KW,
TOKEN_KIND_IF_KW, TOKEN_KIND_IFBANG_KW, TOKEN_KIND_IMPORT_KW, TOKEN_KIND_IN_KW, TOKEN_KIND_LET_KW, TOKEN_KIND_LOOP_KW, TOKEN_KIND_MATCH_KW,
- TOKEN_KIND_MUT_KW, TOKEN_KIND_NIL_KW, TOKEN_KIND_RETURN_KW, TOKEN_KIND_STRUCT_KW, TOKEN_KIND_TRUE_KW, TOKEN_KIND_WHILE_KW, TOKEN_KIND_WHILEBANG_KW,
+ TOKEN_KIND_NIL_KW, TOKEN_KIND_RETURN_KW, TOKEN_KIND_STRUCT_KW, TOKEN_KIND_TRUE_KW, TOKEN_KIND_VAR_KW, TOKEN_KIND_WHILE_KW, TOKEN_KIND_WHILEBANG_KW,
TOKEN_KIND_NAME
} TokenKind;
diff --git a/tests/arithmetic_assignment_test.hk b/tests/arithmetic_assignment_test.hk
index de45db7..ddc0cd6 100644
--- a/tests/arithmetic_assignment_test.hk
+++ b/tests/arithmetic_assignment_test.hk
@@ -1,5 +1,5 @@
-mut a;
+var a;
a = 1;
a += 1;
a -= 1;
@@ -10,7 +10,7 @@ a %= 1;
a++;
a--;
-mut b = [];
+var b = [];
b[] = 1;
b[0] += 1;
b[0] -= 1;
@@ -21,7 +21,7 @@ b[0] %= 1;
b[0]++;
b[0]--;
-mut c = [[]];
+var c = [[]];
c[0][] = 1;
c[0][0] += 1;
c[0][0] -= 1;
diff --git a/tests/array_add_element_test.hk b/tests/array_add_element_test.hk
index 2808192..d8af207 100644
--- a/tests/array_add_element_test.hk
+++ b/tests/array_add_element_test.hk
@@ -1,16 +1,16 @@
-mut arr1 = [];
+var arr1 = [];
arr1[] = "foo";
println(arr1);
-mut arr2 = [[]];
+var arr2 = [[]];
arr2[0][] = "foo";
println(arr2);
-mut arr3 = [[[]]];
+var arr3 = [[[]]];
arr3[0][0][] = "foo";
println(arr3);
-mut arr4 = [[1, 2, 3]];
+var arr4 = [[1, 2, 3]];
arr4[0][] = 4;
println(arr4);
diff --git a/tests/array_delete_element_test.hk b/tests/array_delete_element_test.hk
index 0c7eff1..69b228e 100644
--- a/tests/array_delete_element_test.hk
+++ b/tests/array_delete_element_test.hk
@@ -1,5 +1,5 @@
-mut arr = [1, 2, 3, ["foo", "bar", "baz"]];
+var arr = [1, 2, 3, ["foo", "bar", "baz"]];
del arr[1];
println(arr);
diff --git a/tests/array_resize_test.hk b/tests/array_resize_test.hk
index da9c27f..2333ecb 100644
--- a/tests/array_resize_test.hk
+++ b/tests/array_resize_test.hk
@@ -1,6 +1,6 @@
-mut arr = [];
-for (mut i = 1; i <= 100; i++) {
+var arr = [];
+for (var i = 1; i <= 100; i++) {
arr[] = i;
}
println(arr[99]);
diff --git a/tests/array_set_element_test.hk b/tests/array_set_element_test.hk
index 256d48c..c0d94e8 100644
--- a/tests/array_set_element_test.hk
+++ b/tests/array_set_element_test.hk
@@ -1,16 +1,16 @@
-mut arr1 = ["foo"];
+var arr1 = ["foo"];
arr1[0] = "bar";
println(arr1);
-mut arr2 = [["foo"]];
+var arr2 = [["foo"]];
arr2[0][0] = "bar";
println(arr2);
-mut arr3 = [[["foo"]]];
+var arr3 = [[["foo"]]];
arr3[0][0][0] = "bar";
println(arr3);
-mut arr4 = [["foo", "bar", "baz"]];
+var arr4 = [["foo", "bar", "baz"]];
arr4[0][1] = "qux";
println(arr4);
diff --git a/tests/bitwise_shift_assignment_test.hk b/tests/bitwise_shift_assignment_test.hk
index 1d8f8a7..69a18ec 100644
--- a/tests/bitwise_shift_assignment_test.hk
+++ b/tests/bitwise_shift_assignment_test.hk
@@ -1,19 +1,19 @@
-mut a = 0;
+var a = 0;
a |= 1;
a ^= 1;
a &= 1;
a <<= 1;
a >>= 1;
-mut b = [0];
+var b = [0];
b[0] |= 1;
b[0] ^= 1;
b[0] &= 1;
b[0] <<= 1;
b[0] >>= 1;
-mut c = [[0]];
+var c = [[0]];
c[0][0] |= 1;
c[0][0] ^= 1;
c[0][0] &= 1;
diff --git a/tests/if_statement_var_declaration_test.hk b/tests/if_statement_var_declaration_test.hk
index 210344c..26ed70a 100644
--- a/tests/if_statement_var_declaration_test.hk
+++ b/tests/if_statement_var_declaration_test.hk
@@ -23,13 +23,13 @@ if (let [ok, err] = bar(); err) {
println(ok);
}
-if (mut { ok, err } = baz(); err) {
+if (var { ok, err } = baz(); err) {
println(err);
} else {
println(ok);
}
-mut result;
+var result;
if (result = baz(); result.err) {
println(result.err);
}
diff --git a/tests/if_with_var_declaration_test.hk b/tests/if_with_var_declaration_test.hk
index fc01905..0a25e5d 100644
--- a/tests/if_with_var_declaration_test.hk
+++ b/tests/if_with_var_declaration_test.hk
@@ -23,7 +23,7 @@ if (let [ok, err] = bar(); err) {
println(ok);
}
-if (mut { ok, err } = baz(); err) {
+if (var { ok, err } = baz(); err) {
println(err);
} else {
println(ok);
diff --git a/tests/iterator_test.hk b/tests/iterator_test.hk
index 52507f9..3b19737 100644
--- a/tests/iterator_test.hk
+++ b/tests/iterator_test.hk
@@ -1,6 +1,6 @@
-mut it1;
-mut it2;
+var it1;
+var it2;
let range = 1 .. 3;
it1 = iter(range);
diff --git a/tests/looping_statements_test.hk b/tests/looping_statements_test.hk
index efba46f..e50eedf 100644
--- a/tests/looping_statements_test.hk
+++ b/tests/looping_statements_test.hk
@@ -1,5 +1,5 @@
-mut i;
+var i;
i = 0;
loop {
diff --git a/tests/main_function_args_test.hk b/tests/main_function_args_test.hk
index 402c947..4c10d33 100644
--- a/tests/main_function_args_test.hk
+++ b/tests/main_function_args_test.hk
@@ -1,3 +1,3 @@
-for (mut i = 0; i < len(args); i++)
+for (var i = 0; i < len(args); i++)
println(args[i]);
diff --git a/tests/match_statement_var_declaration_test.hk b/tests/match_statement_var_declaration_test.hk
index 362de82..79c22b2 100644
--- a/tests/match_statement_var_declaration_test.hk
+++ b/tests/match_statement_var_declaration_test.hk
@@ -37,7 +37,7 @@ match (let { lvl, msg } = error("error message"); lvl) {
_ => println("unknown log level");
}
-mut result;
+var result;
match (result = info("info message"); result.lvl) {
"info" => println(result.msg);
"warn" => println(result.msg);
diff --git a/tests/module_lists_pop_back_test.hk b/tests/module_lists_pop_back_test.hk
index 1c59814..2555917 100644
--- a/tests/module_lists_pop_back_test.hk
+++ b/tests/module_lists_pop_back_test.hk
@@ -1,6 +1,6 @@
import lists;
-mut list = lists.new_linked_list();
+var list = lists.new_linked_list();
list = lists.push_back(list, 1);
list = lists.push_back(list, 2);
list = lists.push_back(list, 3);
diff --git a/tests/module_lists_pop_front_test.hk b/tests/module_lists_pop_front_test.hk
index d05b8bf..40e23fa 100644
--- a/tests/module_lists_pop_front_test.hk
+++ b/tests/module_lists_pop_front_test.hk
@@ -1,6 +1,6 @@
import lists;
-mut list = lists.new_linked_list();
+var list = lists.new_linked_list();
list = lists.push_back(list, 1);
list = lists.push_back(list, 2);
list = lists.push_back(list, 3);
diff --git a/tests/module_lists_push_back_test.hk b/tests/module_lists_push_back_test.hk
index e3bdcbb..54f04c5 100644
--- a/tests/module_lists_push_back_test.hk
+++ b/tests/module_lists_push_back_test.hk
@@ -1,6 +1,6 @@
import lists;
-mut list = lists.new_linked_list();
+var list = lists.new_linked_list();
list = lists.push_back(list, 1);
list = lists.push_back(list, 2);
println(lists.back(list));
diff --git a/tests/module_lists_push_front_test.hk b/tests/module_lists_push_front_test.hk
index 7e4a253..58abb7a 100644
--- a/tests/module_lists_push_front_test.hk
+++ b/tests/module_lists_push_front_test.hk
@@ -1,6 +1,6 @@
import lists;
-mut list = lists.new_linked_list();
+var list = lists.new_linked_list();
list = lists.push_front(list, 1);
list = lists.push_front(list, 2);
println(lists.front(list));
diff --git a/tests/module_socket_new_close_test.hk b/tests/module_socket_new_close_test.hk
index fb7ddc2..8b07528 100644
--- a/tests/module_socket_new_close_test.hk
+++ b/tests/module_socket_new_close_test.hk
@@ -1,6 +1,6 @@
import socket;
-mut sock;
+var sock;
sock = socket.new(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP);
socket.close(sock);
sock = socket.new(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP);
diff --git a/tests/variable_declaration_test.hk b/tests/variable_declaration_test.hk
index d67557b..4732094 100644
--- a/tests/variable_declaration_test.hk
+++ b/tests/variable_declaration_test.hk
@@ -1,18 +1,18 @@
let a = 1;
let [b, c] = [2, 3];
-mut d;
-mut e = 4;
+var d;
+var e = 4;
let [f, g] = ["foo", "bar"];
-mut [h] = ["baz"];
-mut [i, j] = ["qux", "quux"];
+var [h] = ["baz"];
+var [i, j] = ["qux", "quux"];
let {k, l} = {k: "foo", l: "bar"};
-mut {m} = {m: "baz"};
-mut {n, o, p} = {n: "qux", p: "quux"};
+var {m} = {m: "baz"};
+var {n, o, p} = {n: "qux", p: "quux"};
let [_, q, _] = [1, 2, 3];
-mut [r, _, s] = [4, 5, 6];
+var [r, _, s] = [4, 5, 6];
println(a);
println(b);