aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-08-30 21:07:48 +0200
committerEugen Wissner <belka@caraus.de>2026-08-30 21:07:48 +0200
commitdbca249757a98d6d56e23db43baa93ad30a91709 (patch)
treeeaf664d63c7752aabad7994f62e92ae6492e655d
parent491e62664394a8689a3f8904fbe8dbc3dea05524 (diff)
downloadelna-dbca249757a98d6d56e23db43baa93ad30a91709.tar.gz
Use arrow -> for return types
-rw-r--r--boot/lexer.ll3
-rw-r--r--boot/parser.yy6
-rw-r--r--cl.elna184
-rw-r--r--source/cctype.elna12
-rw-r--r--source/command_line_interface.elna2
-rw-r--r--source/common.elna6
-rw-r--r--source/cstdio.elna26
-rw-r--r--source/cstdlib.elna10
-rw-r--r--source/cstring.elna14
-rw-r--r--source/lexer.elna29
-rw-r--r--source/main.elna56
-rw-r--r--testsuite/compilable/opaque_type.elna2
-rw-r--r--testsuite/compilable/pointer_subtraction.elna2
-rw-r--r--testsuite/compilable/procedure_forward_reference.elna4
-rw-r--r--testsuite/fail_compilation/access_record_type_field.elna2
-rw-r--r--testsuite/fail_compilation/enumeration_member_missing.elna2
-rw-r--r--testsuite/fail_compilation/non_constant_array_dimension.elna.s1
-rw-r--r--testsuite/fail_compilation/procedure-cycle.elna2
-rw-r--r--testsuite/fail_compilation/record-base-cycle.elna.s1
-rw-r--r--testsuite/fail_compilation/unary_minus_on_record.elna2
-rw-r--r--testsuite/fail_compilation/unary_negation_on_record.elna2
-rw-r--r--testsuite/fail_compilation/unary_plus_on_record.elna2
-rw-r--r--testsuite/runnable/aggregate_argument.elna2
-rw-r--r--testsuite/runnable/aggregate_equality.elna2
-rw-r--r--testsuite/runnable/define_multiple_local_variables.elna2
-rw-r--r--testsuite/runnable/multi_module/helper.elna2
-rw-r--r--testsuite/runnable/procedure_cast.elna6
-rw-r--r--testsuite/runnable/recursive_record.elna6
-rw-r--r--testsuite/runnable/return_aggregate.elna2
-rw-r--r--testsuite/runnable/two_fields_same_type.elna2
-rw-r--r--testsuite/runnable/two_parameters_same_type.elna2
-rw-r--r--testsuite/runnable/unary_plus.elna2
32 files changed, 207 insertions, 191 deletions
diff --git a/boot/lexer.ll b/boot/lexer.ll
index eb1bbd3..d0493c1 100644
--- a/boot/lexer.ll
+++ b/boot/lexer.ll
@@ -444,6 +444,9 @@ to {
! {
return yy::parser::make_EXCLAMATION(this->location);
}
+-> {
+ return yy::parser::make_ARROW(this->location);
+}
. {
std::stringstream ss;
diff --git a/boot/parser.yy b/boot/parser.yy
index 669115b..b53a94c 100644
--- a/boot/parser.yy
+++ b/boot/parser.yy
@@ -90,7 +90,7 @@ along with GCC; see the file COPYING3. If not see
%token LEFT_PAREN "(" RIGHT_PAREN ")" LEFT_SQUARE "[" RIGHT_SQUARE "]"
%token LEFT_BRACE "{" RIGHT_BRACE "}"
%token ASSIGNMENT ":="
- EXCLAMATION "!"
+ EXCLAMATION "!" ARROW "->"
AT "@" HAT "^"
COLON ":" SEMICOLON ";" DOT "." COMMA ","
%token NOT "~"
@@ -188,8 +188,8 @@ identifier_definitions:
| identifier_definition { $$.emplace_back(std::move(*$1)); }
return_declaration:
%empty {}
- | ":" "!" { $$ = boot::procedure_type_expression::return_t(std::monostate{}); }
- | ":" type_expression { $$ = boot::procedure_type_expression::return_t($2); }
+ | "->" "!" { $$ = boot::procedure_type_expression::return_t(std::monostate{}); }
+ | "->" type_expression { $$ = boot::procedure_type_expression::return_t($2); }
procedure_heading: "(" optional_fields ")" return_declaration
{ $$ = std::make_unique<boot::procedure_type_expression>(boot::make_position(@$), $2, $4); }
procedure_declaration:
diff --git a/cl.elna b/cl.elna
index fb076ab..2219a37 100644
--- a/cl.elna
+++ b/cl.elna
@@ -623,7 +623,7 @@ var
*
* Returns the offset from the beginning of the storage to the new string.
*)
-proc elna_tac_add_string(string: ^Char; string_length: Word): Word
+proc elna_tac_add_string(string: ^Char; string_length: Word) -> Word
var
result: Word
current_byte: Char
@@ -734,7 +734,7 @@ end
(**
* Appends a new element to the end of the list.
*)
-proc elna_list_append(list: ^ElnaList; element: ^ElnaListNode): ^ElnaListNode
+proc elna_list_append(list: ^ElnaList; element: ^ElnaListNode) -> ^ElnaListNode
begin
if element <> nil then
if list^.first = nil then
@@ -773,7 +773,7 @@ begin
end
(* Returns whether the given list is empty. *)
-proc elna_list_empty(list: ^ElnaList): Bool
+proc elna_list_empty(list: ^ElnaList) -> Bool
begin
return list^.first = nil
end
@@ -803,7 +803,7 @@ begin
this^.operands[n].length := operand_length
end
-proc elna_tac_instruction_create(kind: Word): ^ElnaTacInstruction
+proc elna_tac_instruction_create(kind: Word) -> ^ElnaTacInstruction
var
result: ^ElnaTacInstruction
begin
@@ -815,7 +815,7 @@ begin
return result
end
-proc elna_rtl_instruction_create(operator: ElnaRtlOperator): ^ElnaRtlInstruction
+proc elna_rtl_instruction_create(operator: ElnaRtlOperator) -> ^ElnaRtlInstruction
var
result: ^ElnaRtlInstruction
begin
@@ -842,7 +842,7 @@ end
* Loads or moves the value from a TAC operand into the given register.
*)
proc elna_rtl_hardware_value(instructions: ^ElnaList, operand: ^ElnaTacOperand,
- into: ElnaRtlRegister, variable_map: ^ElnaSymbolTable): Word
+ into: ElnaRtlRegister, variable_map: ^ElnaSymbolTable) -> Word
var
instruction: ^ElnaRtlInstruction
pseudo_symbol: ^ElnaRtlObjectInfo
@@ -896,7 +896,7 @@ begin
end
proc elna_rtl_operand_value(instructions: ^ElnaList; tac_operand: ^ElnaTacOperand; variable_map: ^ElnaSymbolTable;
- rtl_operand: ^ElnaRtlOperand): ^ElnaRtlInfo
+ rtl_operand: ^ElnaRtlOperand) -> ^ElnaRtlInfo
var
instruction: ^ElnaRtlInstruction
pseudo_symbol: ^ElnaRtlObjectInfo
@@ -931,7 +931,7 @@ begin
end
proc elna_rtl_binary_arithmetic(instructions: ^ElnaList; tac_instruction: ^ElnaTacInstruction;
- operation: ElnaRtlOperator; variable_map: ^ElnaSymbolTable): ^ElnaRtlInstruction
+ operation: ElnaRtlOperator; variable_map: ^ElnaSymbolTable) -> ^ElnaRtlInstruction
var
result: ^ElnaRtlInstruction
rtl_operand: ElnaRtlOperand
@@ -999,7 +999,7 @@ begin
end
proc elna_rtl_set_less_than(instructions: ^ElnaList; tac_instruction: ^ElnaTacInstruction;
- lhs, rhs: Word; variable_map: ^ElnaSymbolTable): ^ElnaRtlInstruction
+ lhs, rhs: Word; variable_map: ^ElnaSymbolTable) -> ^ElnaRtlInstruction
var
slt_instruction: ^ElnaRtlInstruction
rtl_operand: ElnaRtlOperand
@@ -1038,7 +1038,7 @@ begin
end
proc elna_rtl_variable_address(variable_map: ^ElnaSymbolTable; pseudo_symbol: ^ElnaRtlObjectInfo;
- addressable: ^ElnaTacOperand; target_operand: ^ElnaRtlOperand): ^ElnaRtlInstruction
+ addressable: ^ElnaTacOperand; target_operand: ^ElnaRtlOperand) -> ^ElnaRtlInstruction
var
instruction: ^ElnaRtlInstruction
begin
@@ -1065,7 +1065,7 @@ begin
end
proc elna_rtl_operand_address(variable_map: ^ElnaSymbolTable;
- addressable: ^ElnaTacOperand; target_operand: ^ElnaRtlOperand): ^ElnaRtlInstruction
+ addressable: ^ElnaTacOperand; target_operand: ^ElnaRtlOperand) -> ^ElnaRtlInstruction
var
pseudo_symbol: ^ElnaRtlObjectInfo
instruction: ^ElnaRtlInstruction
@@ -1498,7 +1498,7 @@ end
(**
* Generates an auto incremented label and returns its name.
*)
-proc elna_tac_label(): String
+proc elna_tac_label() -> String
var
buffer: String
begin
@@ -1512,7 +1512,7 @@ begin
end
proc elna_riscv_instruction_name(instruction_kind: ElnaRtlOperator;
- source_type, destination_type: ^ElnaRtlType): Word
+ source_type, destination_type: ^ElnaRtlType) -> Word
var
argument_count: Word
begin
@@ -1629,7 +1629,7 @@ begin
end
proc elna_alloc_variable(operand_value, operand_length: Word;
- variable_map: ^ElnaSymbolTable): ^ElnaRtlObjectInfo
+ variable_map: ^ElnaSymbolTable) -> ^ElnaRtlObjectInfo
var
pseudo_symbol: ^ElnaRtlObjectInfo
pseudo_type: ^ElnaRtlTypeByteArray
@@ -1665,7 +1665,7 @@ end
* to a temporary register and preserves its value in the following instruction.
*)
proc elna_alloc_operation_target(instructions: ^ElnaList; instruction: ^ElnaRtlInstruction;
- variable_map: ^ElnaSymbolTable): ^ElnaRtlInstruction
+ variable_map: ^ElnaSymbolTable) -> ^ElnaRtlInstruction
var
pseudo_symbol: ^ElnaRtlObjectInfo
store_instruction: ^ElnaRtlInstruction
@@ -1710,7 +1710,7 @@ begin
end
proc elna_alloc_store(instructions: ^ElnaList; instruction: ^ElnaRtlInstruction;
- variable_map: ^ElnaSymbolTable): ^ElnaRtlInstruction
+ variable_map: ^ElnaSymbolTable) -> ^ElnaRtlInstruction
var
store_instruction: ^ElnaRtlInstruction
pseudo_symbol: ^ElnaRtlObjectInfo
@@ -1741,7 +1741,7 @@ begin
end
proc elna_alloc_load(instructions: ^ElnaList; instruction: ^ElnaRtlInstruction;
- variable_map: ^ElnaSymbolTable): ^ElnaRtlInstruction
+ variable_map: ^ElnaSymbolTable) -> ^ElnaRtlInstruction
var
new_instruction: ^ElnaRtlInstruction
pseudo_symbol: ^ElnaRtlObjectInfo
@@ -1770,7 +1770,7 @@ begin
end
proc elna_alloc_move(instructions: ^ElnaList; instruction: ^ElnaRtlInstruction;
- variable_map: ^ElnaSymbolTable): ^ElnaRtlInstruction
+ variable_map: ^ElnaSymbolTable) -> ^ElnaRtlInstruction
var
load_instruction: ^ElnaRtlInstruction
source_operand: ElnaRtlOperand
@@ -1865,7 +1865,7 @@ end
* current instruction and returns the new current instruction.
*)
proc elna_alloc_operand(instructions: ^ElnaList; instruction: ^ElnaRtlInstruction;
- number: Word; target: ElnaRtlRegister; variable_map: ^ElnaSymbolTable): ^ElnaRtlInstruction
+ number: Word; target: ElnaRtlRegister; variable_map: ^ElnaSymbolTable) -> ^ElnaRtlInstruction
var
main_instruction: ^ElnaRtlInstruction
load_instruction: ^ElnaRtlInstruction
@@ -1911,7 +1911,7 @@ begin
end
proc elna_alloc_binary(instructions: ^ElnaList; instruction: ^ElnaRtlInstruction;
- variable_map: ^ElnaSymbolTable): ^ElnaRtlInstruction
+ variable_map: ^ElnaSymbolTable) -> ^ElnaRtlInstruction
begin
instruction := elna_alloc_operand(instructions, instruction, 2, ElnaRtlRegister.t0, variable_map);
instruction := elna_alloc_operand(instructions, instruction, 3, ElnaRtlRegister.t1, variable_map);
@@ -1919,14 +1919,14 @@ begin
end
proc elna_alloc_unary(instructions: ^ElnaList; instruction: ^ElnaRtlInstruction;
- variable_map: ^ElnaSymbolTable): ^ElnaRtlInstruction
+ variable_map: ^ElnaSymbolTable) -> ^ElnaRtlInstruction
begin
instruction := elna_alloc_operand(instructions, instruction, 2, ElnaRtlRegister.t0, variable_map);
return elna_alloc_operation_target(instructions, instruction, variable_map)
end
proc elna_alloc_instruction(instructions: ^ElnaList; instruction: ^ElnaRtlInstruction;
- variable_map: ^ElnaSymbolTable): ^ElnaRtlInstruction
+ variable_map: ^ElnaSymbolTable) -> ^ElnaRtlInstruction
var
pseudo_symbol: ^ElnaRtlObjectInfo
new_instruction: ^ElnaRtlInstruction
@@ -2144,7 +2144,7 @@ begin
end
end
-proc elna_rtl_module_declaration(tac_module: ^ElnaInstructionModule): ^ElnaInstructionModule
+proc elna_rtl_module_declaration(tac_module: ^ElnaInstructionModule) -> ^ElnaInstructionModule
var
result: ^ElnaInstructionModule
count: Word
@@ -2191,7 +2191,7 @@ begin
elna_alloc_procedure(pair^.code)
end
-proc _align_at(address, alignment: Word): Word
+proc _align_at(address, alignment: Word) -> Word
begin
if address % alignment then
address := address + alignment
@@ -2262,7 +2262,7 @@ begin
_write_s(stdout, "\"\n")
end
-proc elna_parser_integer_literal(cursor: ^ElnaLexerCursor): ^ElnaTreeIntegerLiteral
+proc elna_parser_integer_literal(cursor: ^ElnaLexerCursor) -> ^ElnaTreeIntegerLiteral
var
token: ^ElnaLexerToken
result: ^ElnaTreeIntegerLiteral
@@ -2285,7 +2285,7 @@ begin
return result
end
-proc elna_parser_boolean_literal(cursor: ^ElnaLexerCursor): ^ElnaTreeBooleanLiteral
+proc elna_parser_boolean_literal(cursor: ^ElnaLexerCursor) -> ^ElnaTreeBooleanLiteral
var
token: ^ElnaLexerToken
result: ^ElnaTreeBooleanLiteral
@@ -2301,7 +2301,7 @@ begin
return result
end
-proc elna_parser_nil_literal(cursor: ^ElnaLexerCursor): ^ElnaTreeNilLiteral
+proc elna_parser_nil_literal(cursor: ^ElnaLexerCursor) -> ^ElnaTreeNilLiteral
var
token: ^ElnaLexerToken
result: ^ElnaTreeNilLiteral
@@ -2341,7 +2341,7 @@ begin
end
(* Escape a single character if needed. *)
-proc elna_parser_escape(current_position, result: ^Char): Word
+proc elna_parser_escape(current_position, result: ^Char) -> Word
var
parsed_length: Word
next_character: Char
@@ -2389,7 +2389,7 @@ begin
return parsed_length
end
-proc elna_parser_character_literal(cursor: ^ElnaLexerCursor): ^ElnaTreeCharacterLiteral
+proc elna_parser_character_literal(cursor: ^ElnaLexerCursor) -> ^ElnaTreeCharacterLiteral
var
result: ^ElnaTreeCharacterLiteral
token: ^ElnaLexerToken
@@ -2415,7 +2415,7 @@ begin
operand^.length := char_type^.size
end
-proc elna_parser_variable_expression(cursor: ^ElnaLexerCursor): ^ElnaTreeVariableExpression
+proc elna_parser_variable_expression(cursor: ^ElnaLexerCursor) -> ^ElnaTreeVariableExpression
var
result: ^ElnaTreeVariableExpression
token: ^ElnaLexerToken
@@ -2438,7 +2438,7 @@ begin
operand^.length := variable_expression^.name.length
end
-proc elna_parser_string_literal(cursor: ^ElnaLexerCursor): ^ElnaTreeStringLiteral
+proc elna_parser_string_literal(cursor: ^ElnaLexerCursor) -> ^ElnaTreeStringLiteral
var
result: ^ElnaTreeStringLiteral
token: ^ElnaLexerToken
@@ -2509,7 +2509,7 @@ begin
elna_list_append(instructions, instruction)
end
-proc elna_parser_trait_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeTraitExpression
+proc elna_parser_trait_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeTraitExpression
var
result: ^ElnaTreeTraitExpression
token: ^ElnaLexerToken
@@ -2536,7 +2536,7 @@ begin
return result
end
-proc elna_parser_cast_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeCastExpression
+proc elna_parser_cast_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeCastExpression
var
result: ^ElnaTreeCastExpression
token: ^ElnaLexerToken
@@ -2578,7 +2578,7 @@ begin
return result
end
-proc elna_parser_simple_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeExpression
+proc elna_parser_simple_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeExpression
var
current_character: Word
parser_node: ^ElnaTreeExpression
@@ -2608,7 +2608,7 @@ begin
end
proc elna_parser_dereference_expression(cursor: ^ElnaLexerCursor;
- simple_expression: ^ElnaTreeExpression): ^ElnaTreeDereferenceExpression
+ simple_expression: ^ElnaTreeExpression) -> ^ElnaTreeDereferenceExpression
var
result: ^ElnaTreeDereferenceExpression
token: ^ElnaLexerToken
@@ -2624,7 +2624,7 @@ begin
return result
end
-proc elna_parser_designator(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeExpression
+proc elna_parser_designator(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeExpression
var
simple_expression: ^ElnaTreeExpression
token: ^ElnaLexerToken
@@ -2702,7 +2702,7 @@ begin
end
end
-proc elna_parser_unary_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeExpression
+proc elna_parser_unary_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeExpression
var
result: ^ElnaTreeUnaryExpression
operand: Word
@@ -2823,7 +2823,7 @@ begin
end
end
-proc elna_parser_binary_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeExpression
+proc elna_parser_binary_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeExpression
var
lhs_node: ^ElnaTreeExpression
rhs_node: ^ElnaTreeExpression
@@ -2894,7 +2894,7 @@ begin
end
proc elna_tac_add_pointer(parser_node: ^ElnaTreeExpression, lhs, rhs: ^ElnaTacOperand,
- symbol_table: ^ElnaSymbolTable; operand: ^ElnaTacOperand): ^ElnaTacInstruction
+ symbol_table: ^ElnaSymbolTable; operand: ^ElnaTacOperand) -> ^ElnaTacInstruction
var
instruction: ^ElnaTacInstruction
pointer_type: ^ElnaTypePointer
@@ -3009,7 +3009,7 @@ begin
end
end
-proc elna_parser_call(cursor: ^ElnaLexerCursor; callee: ^ElnaTreeExpression; error_list: ^ElnaList): ^ElnaTreeCall
+proc elna_parser_call(cursor: ^ElnaLexerCursor; callee: ^ElnaTreeExpression; error_list: ^ElnaList) -> ^ElnaTreeCall
var
result: ^ElnaTreeCall
argument_entry: ^ElnaTreeExpressionList
@@ -3109,7 +3109,7 @@ begin
elna_list_append(instructions, call_instruction)
end
-proc elna_parser_goto_statement(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeGotoStatement
+proc elna_parser_goto_statement(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeGotoStatement
var
result: ^ElnaTreeGotoStatement
token: ^ElnaLexerToken
@@ -3149,7 +3149,7 @@ begin
elna_list_append(instructions, instruction)
end
-proc elna_parser_label_declaration(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeLabelDeclaration
+proc elna_parser_label_declaration(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeLabelDeclaration
var
result: ^ElnaTreeLabelDeclaration
token: ^ElnaLexerToken
@@ -3219,7 +3219,7 @@ begin
end
proc elna_parser_field_access_expression(cursor: ^ElnaLexerCursor;
- aggregate: ^ElnaTreeExpression): ^ElnaTreeFieldAccessExpression
+ aggregate: ^ElnaTreeExpression) -> ^ElnaTreeFieldAccessExpression
var
result: ^ElnaTreeFieldAccessExpression
token: ^ElnaLexerToken
@@ -3242,7 +3242,7 @@ begin
end
proc elna_parser_array_access_expression(cursor: ^ElnaLexerCursor;
- array: ^ElnaTreeExpression; error_list: ^ElnaList): ^ElnaTreeArrayAccessExpression
+ array: ^ElnaTreeExpression; error_list: ^ElnaList) -> ^ElnaTreeArrayAccessExpression
var
result: ^ElnaTreeArrayAccessExpression
token: ^ElnaLexerToken
@@ -3417,7 +3417,7 @@ begin
elna_list_append(instructions, instruction)
end
-proc elna_parser_assign_statement(cursor: ^ElnaLexerCursor; assignee: ^ElnaTreeNode; error_list: ^ElnaList): ^ElnaTreeAssignStatement
+proc elna_parser_assign_statement(cursor: ^ElnaLexerCursor; assignee: ^ElnaTreeNode; error_list: ^ElnaList) -> ^ElnaTreeAssignStatement
var
token: ^ElnaLexerToken
result: ^ElnaTreeAssignStatement
@@ -3474,7 +3474,7 @@ begin
elna_list_append(instructions, instruction)
end
-proc elna_parser_return_statement(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeReturnStatement
+proc elna_parser_return_statement(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeReturnStatement
var
token: ^ElnaLexerToken
result: ^ElnaTreeReturnStatement
@@ -3507,7 +3507,7 @@ begin
end
proc elna_parser_conditional_statements(cursor: ^ElnaLexerCursor; error_list: ^ElnaList;
- block_keyword: ElnaLexerKind): ^ElnaTreeConditionalStatements
+ block_keyword: ElnaLexerKind) -> ^ElnaTreeConditionalStatements
var
result: ^ElnaTreeConditionalStatements
begin
@@ -3561,7 +3561,7 @@ begin
elna_list_append(instructions, instruction)
end
-proc elna_parser_if_statement(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeIfStatement
+proc elna_parser_if_statement(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeIfStatement
var
result: ^ElnaTreeIfStatement
previous_conditional: ^ElnaTreeConditionalStatements
@@ -3598,7 +3598,7 @@ begin
return result
end
-proc elna_parser_statement(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeStatement
+proc elna_parser_statement(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeStatement
var
result: ^ElnaTreeStatement
call_result: ^ElnaTreeCallStatement
@@ -3634,7 +3634,7 @@ begin
return result
end
-proc elna_parser_statements(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeStatement
+proc elna_parser_statements(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeStatement
var
previous_statement: ^ElnaTreeStatement
next_statement: ^ElnaTreeStatement
@@ -3742,7 +3742,7 @@ begin
_write_c(stdout, register_number + '0')
end
-proc elna_parser_record_type_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeRecordTypeExpression
+proc elna_parser_record_type_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeRecordTypeExpression
var
entry: ^ElnaTreeField
result: ^ElnaTreeRecordTypeExpression
@@ -3826,7 +3826,7 @@ begin
return result
end
-proc elna_parser_enumeration_type_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeEnumerationTypeExpression
+proc elna_parser_enumeration_type_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeEnumerationTypeExpression
var
result: ^ElnaTreeEnumerationTypeExpression
entry: ^ElnaTreeEnumeration
@@ -3981,7 +3981,7 @@ begin
end
end
-proc elna_parser_named_type_expression(cursor: ^ElnaLexerCursor): ^ElnaTreeNamedTypeExpression
+proc elna_parser_named_type_expression(cursor: ^ElnaLexerCursor) -> ^ElnaTreeNamedTypeExpression
var
result: ^ElnaTreeNamedTypeExpression
token: ^ElnaLexerToken
@@ -3996,7 +3996,7 @@ begin
return result
end
-proc elna_parser_pointer_type_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreePointerTypeExpression
+proc elna_parser_pointer_type_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreePointerTypeExpression
var
result: ^ElnaTreePointerTypeExpression
token: ^ElnaLexerToken
@@ -4015,7 +4015,7 @@ begin
return result
end
-proc elna_parser_array_type_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeArrayTypeExpression
+proc elna_parser_array_type_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeArrayTypeExpression
var
result: ^ElnaTreeArrayTypeExpression
token: ^ElnaLexerToken
@@ -4047,7 +4047,7 @@ begin
return result
end
-proc elna_parser_type_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeTypeExpression
+proc elna_parser_type_expression(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeTypeExpression
var
result: ^ElnaTreeNode
token: ^ElnaLexerToken
@@ -4094,7 +4094,7 @@ begin
result^.base := aliased_type
end
-proc elna_name_named_type_expression(parser_node: ^ElnaTreeNamedTypeExpression; error_list: ^ElnaList): ^ElnaType
+proc elna_name_named_type_expression(parser_node: ^ElnaTreeNamedTypeExpression; error_list: ^ElnaList) -> ^ElnaType
var
type_symbol: ^ElnaSymbolTypeInfo
result: ^ElnaType
@@ -4117,7 +4117,7 @@ begin
return result
end
-proc elna_name_type_expression(parser_node: ^ElnaTreeTypeExpression; error_list: ^ElnaList): ^ElnaType
+proc elna_name_type_expression(parser_node: ^ElnaTreeTypeExpression; error_list: ^ElnaList) -> ^ElnaType
var
named_type_expression: ^ElnaTreeNamedTypeExpression
type_symbol: ^ElnaSymbolTypeInfo
@@ -4150,7 +4150,7 @@ begin
return result
end
-proc elna_symbol_type_info_create(type_representation: ^ElnaType): ^ElnaSymbolTypeInfo
+proc elna_symbol_type_info_create(type_representation: ^ElnaType) -> ^ElnaSymbolTypeInfo
var
result: ^ElnaSymbolTypeInfo
begin
@@ -4166,7 +4166,7 @@ end
* attr - Local variable attributes.
* temporary_type - Local variable type.
*)
-proc elna_symbol_temporary_info_create(attr: Word; temporary_type: ^ElnaType): ^ElnaSymbolTemporaryInfo
+proc elna_symbol_temporary_info_create(attr: Word; temporary_type: ^ElnaType) -> ^ElnaSymbolTemporaryInfo
var
result: ^ElnaSymbolTemporaryInfo
begin
@@ -4184,7 +4184,7 @@ end
* Parameters:
* symbol_table - Local symbol table.
*)
-proc elna_symbol_procedure_info_create(is_extern: Bool): ^ElnaSymbolProcedureInfo
+proc elna_symbol_procedure_info_create(is_extern: Bool) -> ^ElnaSymbolProcedureInfo
var
result: ^ElnaSymbolProcedureInfo
begin
@@ -4231,7 +4231,7 @@ begin
end
end
-proc elna_parser_parameters(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeVariableDeclaration
+proc elna_parser_parameters(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeVariableDeclaration
var
parameters: ^ElnaTreeVariableDeclaration
token: ^ElnaLexerToken
@@ -4268,7 +4268,7 @@ begin
return parameters
end
-proc elna_parser_procedure_declaration(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeProcedureDeclaration
+proc elna_parser_procedure_declaration(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeProcedureDeclaration
var
next_declaration: ^ElnaTreeDeclaration
current_declaration: ^ElnaTreeDeclaration
@@ -4359,7 +4359,7 @@ begin
return result
end
-proc elna_tac_parameters(ast_list: ^ElnaTreeDeclaration; parameter_count: ^Word): ^String
+proc elna_tac_parameters(ast_list: ^ElnaTreeDeclaration; parameter_count: ^Word) -> ^String
var
ast_parameter: ^ElnaTreeDeclaration
parameter_index: Word
@@ -4396,7 +4396,7 @@ begin
return parameter_list
end
-proc elna_rtl_global_declaration(tac_declaration: ^ElnaTacStaticVariable): ^ElnaRtlStaticVariable
+proc elna_rtl_global_declaration(tac_declaration: ^ElnaTacStaticVariable) -> ^ElnaRtlStaticVariable
var
result: ^ElnaRtlStaticVariable
begin
@@ -4410,7 +4410,7 @@ begin
end
proc elna_rtl_parameters(instructions: ^ElnaList; parameters, count: Word;
- variable_map: ^ElnaSymbolTable): ^ElnaRtlInstruction
+ variable_map: ^ElnaSymbolTable) -> ^ElnaRtlInstruction
var
result: ^ElnaRtlInstruction
instruction: ^ElnaRtlInstruction
@@ -4475,7 +4475,7 @@ begin
end
(* Returns whether the provided type is array or record. *)
-proc elna_type_is_aggregate(_type: ^ElnaType): Bool
+proc elna_type_is_aggregate(_type: ^ElnaType) -> Bool
var
lhs: Word
rhs: Word
@@ -4487,7 +4487,7 @@ begin
end
proc elna_rtl_generate_pseudo(operand: ^ElnaRtlOperand; variable_map: ^ElnaSymbolTable;
- rtl_type: ^ElnaRtlType): ^ElnaRtlObjectInfo
+ rtl_type: ^ElnaRtlType) -> ^ElnaRtlObjectInfo
var
pseudo_symbol: ^ElnaRtlObjectInfo
pseudo_type: ^ElnaRtlTypeWord
@@ -4511,7 +4511,7 @@ begin
return pseudo_symbol
end
-proc elna_rtl_constant_type(size: Word): ^ElnaRtlType
+proc elna_rtl_constant_type(size: Word) -> ^ElnaRtlType
var
rtl_type: ^ElnaRtlType
begin
@@ -4524,7 +4524,7 @@ begin
return rtl_type
end
-proc elna_rtl_symbol_type(variable_type: ^ElnaType): ^ElnaRtlType
+proc elna_rtl_symbol_type(variable_type: ^ElnaType) -> ^ElnaRtlType
var
byte_array: ^ElnaRtlTypeByteArray
rtl_type: ^ElnaRtlType
@@ -4542,7 +4542,7 @@ begin
return rtl_type
end
-proc elna_rtl_procedure_declaration(tac_declaration: ^ElnaTacProcedure): ^ElnaRtlProcedure
+proc elna_rtl_procedure_declaration(tac_declaration: ^ElnaTacProcedure) -> ^ElnaRtlProcedure
var
count: Word
current_entry: ^ElnaSymbolEntry
@@ -4590,7 +4590,7 @@ begin
return result
end
-proc elna_tac_procedure_declaration(parser_node: ^ElnaTreeProcedureDeclaration): ^ElnaTacProcedure
+proc elna_tac_procedure_declaration(parser_node: ^ElnaTreeProcedureDeclaration) -> ^ElnaTacProcedure
var
symbol_info: ^ElnaSymbolProcedureInfo
result: ^ElnaTacProcedure
@@ -4615,7 +4615,7 @@ begin
return result
end
-proc elna_parser_procedures(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeDeclaration
+proc elna_parser_procedures(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeDeclaration
var
parser_node: ^ElnaTreeDeclaration
result: ^ElnaTreeDeclaration
@@ -4644,7 +4644,7 @@ begin
return result
end
-proc elna_rtl_globals(tac_procedure: ^ElnaTacStaticVariable): ^ElnaRtlStaticVariable
+proc elna_rtl_globals(tac_procedure: ^ElnaTacStaticVariable) -> ^ElnaRtlStaticVariable
var
current_copy: ^ElnaRtlStaticVariable
next_copy: ^ElnaRtlStaticVariable
@@ -4672,7 +4672,7 @@ begin
return first_copy
end
-proc elna_rtl_procedures(tac_procedure: ^ElnaTacProcedure): ^ElnaRtlProcedure
+proc elna_rtl_procedures(tac_procedure: ^ElnaTacProcedure) -> ^ElnaRtlProcedure
var
current_copy: ^ElnaRtlProcedure
next_copy: ^ElnaRtlProcedure
@@ -4700,7 +4700,7 @@ begin
return first_copy
end
-proc elna_tac_procedures(parser_node: ^ElnaTreeProcedureDeclaration): ^ElnaTacProcedure
+proc elna_tac_procedures(parser_node: ^ElnaTreeProcedureDeclaration) -> ^ElnaTacProcedure
var
result: ^ElnaTacProcedure
current_procedure: ^ElnaTacProcedure
@@ -4728,7 +4728,7 @@ begin
return first_procedure
end
-proc elna_parser_type_declaration(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeTypeDeclaration
+proc elna_parser_type_declaration(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeTypeDeclaration
var
result: ^ElnaTreeTypeDeclaration
token: ^ElnaLexerToken
@@ -4773,7 +4773,7 @@ begin
end
end
-proc elna_parser_type_part(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeDeclaration
+proc elna_parser_type_part(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeDeclaration
var
parser_node: ^ElnaTreeDeclaration
result: ^ElnaTreeDeclaration
@@ -4809,7 +4809,7 @@ begin
return result
end
-proc elna_parser_variable_declaration(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeVariableDeclaration
+proc elna_parser_variable_declaration(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeVariableDeclaration
var
variable_type: Word
result: ^ElnaTreeVariableDeclaration
@@ -4836,7 +4836,7 @@ begin
return result
end
-proc elna_tac_variable_declaration(parser_tree: ^ElnaTreeVariableDeclaration): ^ElnaTacStaticVariable
+proc elna_tac_variable_declaration(parser_tree: ^ElnaTreeVariableDeclaration) -> ^ElnaTacStaticVariable
var
result: ^ElnaTacStaticVariable
variable_info: ^ElnaSymbolTemporaryInfo
@@ -4851,7 +4851,7 @@ begin
return result
end
-proc elna_parser_var_part(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeVariableDeclaration
+proc elna_parser_var_part(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeVariableDeclaration
var
result: ^ElnaTreeDeclaration
variable_node: ^ElnaTreeDeclaration
@@ -4887,7 +4887,7 @@ begin
return result
end
-proc elna_tac_var_part(parser_node: ^ElnaTreeDeclaration): ^ElnaTacStaticVariable
+proc elna_tac_var_part(parser_node: ^ElnaTreeDeclaration) -> ^ElnaTacStaticVariable
var
node: ^ElnaTacStaticVariable
current_variable: ^ElnaTacStaticVariable
@@ -4916,7 +4916,7 @@ begin
return first_variable
end
-proc elna_parser_program_body(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeStatement
+proc elna_parser_program_body(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeStatement
var
result: ^ElnaTreeStatement
token: ^ElnaLexerToken
@@ -4931,7 +4931,7 @@ begin
return result
end
-proc elna_error_unexpected_token_create(cursor: ^ElnaLexerCursor; number_of_expected: Word): ^ElnaErrorUnexpectedToken
+proc elna_error_unexpected_token_create(cursor: ^ElnaLexerCursor; number_of_expected: Word) -> ^ElnaErrorUnexpectedToken
var
parser_error: ^ElnaErrorUnexpectedToken
begin
@@ -4946,7 +4946,7 @@ begin
return parser_error
end
-proc elna_error_duplicate_declaration_create(declaration_tree: ^ElnaTreeDeclaration): ^ElnaErrorDuplicateDeclaration
+proc elna_error_duplicate_declaration_create(declaration_tree: ^ElnaTreeDeclaration) -> ^ElnaErrorDuplicateDeclaration
var
declaration_error: ^ElnaErrorDuplicateDeclaration
begin
@@ -4960,7 +4960,7 @@ end
(* Check and return whether the next token is of the expected kind.
If so the token is skipped, otherwise an error is added to the error list. *)
-proc elna_parser_expect(cursor: ^ElnaLexerCursor; expected: ElnaLexerKind; error_list: ^ElnaList): ^ElnaLexerToken
+proc elna_parser_expect(cursor: ^ElnaLexerCursor; expected: ElnaLexerKind; error_list: ^ElnaList) -> ^ElnaLexerToken
var
token: ^ElnaLexerToken
parser_error: ^ElnaErrorUnexpectedToken
@@ -4981,7 +4981,7 @@ begin
return token
end
-proc elna_parser_module_declaration(cursor: ^ElnaLexerCursor; error_list: ^ElnaList): ^ElnaTreeModuleDeclaration
+proc elna_parser_module_declaration(cursor: ^ElnaLexerCursor; error_list: ^ElnaList) -> ^ElnaTreeModuleDeclaration
var
result: ^ElnaTreeModuleDeclaration
begin
@@ -5017,7 +5017,7 @@ begin
return result
end
-proc elna_tac_program_body(parser_node: ^ElnaTreeStatement): ^ElnaTacProcedure
+proc elna_tac_program_body(parser_node: ^ElnaTreeStatement) -> ^ElnaTacProcedure
var
result: ^ElnaTacProcedure
symbol_info: ^ElnaSymbolProcedureInfo
@@ -5040,7 +5040,7 @@ begin
return result
end
-proc elna_tac_module_declaration(parser_node: ^ElnaTreeModuleDeclaration): ^ElnaInstructionModule
+proc elna_tac_module_declaration(parser_node: ^ElnaTreeModuleDeclaration) -> ^ElnaInstructionModule
var
result: ^ElnaInstructionModule
code: ^ElnaTacProcedure
@@ -5930,7 +5930,7 @@ begin
_write_s(stderr, ".\n")
end
-proc compile(): Bool
+proc compile() -> Bool
var
parser_node: Word
tac: Word
@@ -5991,7 +5991,7 @@ end
*
* Returns the symbol pointer or nil.
*)
-proc elna_symbol_table_lookup(symbol_table: ^ElnaSymbolTable; symbol_name: ^Char; name_length: Word): Pointer
+proc elna_symbol_table_lookup(symbol_table: ^ElnaSymbolTable; symbol_name: ^Char; name_length: Word) -> Pointer
var
result: Pointer
symbol_table_length: Word
@@ -6036,7 +6036,7 @@ end
*
* Returns newly allocated, empty symbol table.
*)
-proc elna_symbol_table_create(parent: ^ElnaSymbolTable): ^ElnaSymbolTable
+proc elna_symbol_table_create(parent: ^ElnaSymbolTable) -> ^ElnaSymbolTable
var
new_symbol_table: ^ElnaSymbolTable
begin
diff --git a/source/cctype.elna b/source/cctype.elna
index 1296a10..13dc50a 100644
--- a/source/cctype.elna
+++ b/source/cctype.elna
@@ -2,22 +2,22 @@
v. 2.0. If a copy of the MPL was not distributed with this file, You can
obtain one at https://mozilla.org/MPL/2.0/. *)
-proc isdigit*(c: Int ): Int
+proc isdigit*(c: Int ) -> Int
extern
-proc isalnum*(c: Int): Int
+proc isalnum*(c: Int) -> Int
extern
-proc isalpha*(c: Int): Int
+proc isalpha*(c: Int) -> Int
extern
-proc isspace*(c: Int): Int
+proc isspace*(c: Int) -> Int
extern
-proc tolower*(c: Int): Int
+proc tolower*(c: Int) -> Int
extern
-proc toupper*(c: Int): Int
+proc toupper*(c: Int) -> Int
extern
end.
diff --git a/source/command_line_interface.elna b/source/command_line_interface.elna
index 62965db..0feb53b 100644
--- a/source/command_line_interface.elna
+++ b/source/command_line_interface.elna
@@ -15,7 +15,7 @@ type
parse: Bool
end
-proc parse_command_line*(argc: Int; argv: ^^Word8): ^CommandLine
+proc parse_command_line*(argc: Int; argv: ^^Word8) -> ^CommandLine
var
parameter: ^Word8
i: Int
diff --git a/source/common.elna b/source/common.elna
index c5b67f8..0a50fe1 100644
--- a/source/common.elna
+++ b/source/common.elna
@@ -14,7 +14,7 @@ type
end_location: ElnaLocation
end
-proc write*(fd: Int; buf: Pointer; Word: Int): Int
+proc write*(fd: Int; buf: Pointer; Word: Int) -> Int
extern
proc write_s*(value: []const Word8)
@@ -72,13 +72,13 @@ begin
write_i(cast(value: Int))
return
-proc free_and_nil*(pointer: Pointer): Pointer
+proc free_and_nil*(pointer: Pointer) -> Pointer
begin
free(pointer)
return nil
(* Returns true or false depending whether two strings are equal. *)
-proc string_compare*(lhs_pointer: ^Word8; lhs_length: Word; rhs_pointer: []const Word8): Bool
+proc string_compare*(lhs_pointer: ^Word8; lhs_length: Word; rhs_pointer: []const Word8) -> Bool
var
result: Bool
begin
diff --git a/source/cstdio.elna b/source/cstdio.elna
index 78c3a24..bf74234 100644
--- a/source/cstdio.elna
+++ b/source/cstdio.elna
@@ -10,49 +10,49 @@ var
stdout*: ^FILE := extern
stderr*: ^FILE := extern
-proc fopen*(pathname, mode: ^const Word8): ^FILE
+proc fopen*(pathname, mode: ^const Word8) -> ^FILE
extern
-proc fclose*(stream: ^FILE): Int
+proc fclose*(stream: ^FILE) -> Int
extern
-proc fseek*(stream: ^FILE; off: Int; whence: Int): Int
+proc fseek*(stream: ^FILE; off: Int; whence: Int) -> Int
extern
proc rewind*(stream: ^FILE)
extern
-proc ftell*(stream: ^FILE): Int
+proc ftell*(stream: ^FILE) -> Int
extern
-proc fflush*(stream: ^FILE): Int
+proc fflush*(stream: ^FILE) -> Int
extern
-proc fread*(ptr: Pointer; size: Word; nmemb: Word; stream: ^FILE): Word
+proc fread*(ptr: Pointer; size: Word; nmemb: Word; stream: ^FILE) -> Word
extern
-proc fwrite*(ptr: const Pointer; size: Word; nitems: Word; stream: ^FILE): Word
+proc fwrite*(ptr: const Pointer; size: Word; nitems: Word; stream: ^FILE) -> Word
extern
-proc fputc*(c: Int; stream: ^FILE): Word
+proc fputc*(c: Int; stream: ^FILE) -> Word
extern
proc perror*(s: ^const Word8)
extern
-proc puts*(s: ^const Word8): Int
+proc puts*(s: ^const Word8) -> Int
extern
-proc putchar*(c: Int): Int
+proc putchar*(c: Int) -> Int
extern
-proc sprintf*(str: Pointer; format: ^const Word8; number: Word): Int
+proc sprintf*(str: Pointer; format: ^const Word8; number: Word) -> Int
extern
-proc fprintf*(stream: Pointer; format: ^const Word8; number: Word): Int
+proc fprintf*(stream: Pointer; format: ^const Word8; number: Word) -> Int
extern
-proc fdopen*(fildes: Int; mode: ^const Word8): Pointer
+proc fdopen*(fildes: Int; mode: ^const Word8) -> Pointer
extern
end.
diff --git a/source/cstdlib.elna b/source/cstdlib.elna
index 0f78c8e..09b1ddf 100644
--- a/source/cstdlib.elna
+++ b/source/cstdlib.elna
@@ -2,22 +2,22 @@
v. 2.0. If a copy of the MPL was not distributed with this file, You can
obtain one at https://mozilla.org/MPL/2.0/. *)
-proc malloc*(size: Word): Pointer
+proc malloc*(size: Word) -> Pointer
extern
proc free*(ptr: Pointer)
extern
-proc calloc*(nmemb: Word; size: Word): Pointer
+proc calloc*(nmemb: Word; size: Word) -> Pointer
extern
-proc realloc*(ptr: Pointer; size: Word): Pointer
+proc realloc*(ptr: Pointer; size: Word) -> Pointer
extern
-proc atoi*(str: ^Word8): Int
+proc atoi*(str: ^Word8) -> Int
extern
-proc exit*(code: Int): !
+proc exit*(code: Int) -> !
extern
end.
diff --git a/source/cstring.elna b/source/cstring.elna
index 9290a5c..70c468c 100644
--- a/source/cstring.elna
+++ b/source/cstring.elna
@@ -2,28 +2,28 @@
v. 2.0. If a copy of the MPL was not distributed with this file, You can
obtain one at https://mozilla.org/MPL/2.0/. *)
-proc memset*(ptr: Pointer; c: Int; n: Word): ^Word8
+proc memset*(ptr: Pointer; c: Int; n: Word) -> ^Word8
extern
proc memcpy*(dst: Pointer; src: const Pointer; n: Word)
extern
-proc memcmp*(s1, s2: const Pointer; n: Word): Int
+proc memcmp*(s1, s2: const Pointer; n: Word) -> Int
extern
-proc strcmp*(s1: ^const Word8; s2: ^const Word8): Int
+proc strcmp*(s1: ^const Word8; s2: ^const Word8) -> Int
extern
-proc strncmp*(s1: ^const Word8; s2: ^const Word8; n: Word): Int
+proc strncmp*(s1: ^const Word8; s2: ^const Word8; n: Word) -> Int
extern
-proc strncpy*(dst: ^Word8; src: ^const Word8; dsize: Word): ^Word8
+proc strncpy*(dst: ^Word8; src: ^const Word8; dsize: Word) -> ^Word8
extern
-proc strcpy*(dst: ^Word8; src: ^const Word8): ^Word8
+proc strcpy*(dst: ^Word8; src: ^const Word8) -> ^Word8
extern
-proc strlen*(ptr: ^const Word8): Word
+proc strlen*(ptr: ^const Word8) -> Word
extern
end.
diff --git a/source/lexer.elna b/source/lexer.elna
index 83e89df..1cfe097 100644
--- a/source/lexer.elna
+++ b/source/lexer.elna
@@ -135,6 +135,7 @@ type
_case,
_do,
_of,
+ arrow,
eof
)
(**
@@ -313,7 +314,7 @@ begin
end
return
-proc elna_lexer_get_transition(current_state: ElnaLexerState; character_class: ElnaLexerClass): ^ElnaLexerTransition
+proc elna_lexer_get_transition(current_state: ElnaLexerState; character_class: ElnaLexerClass) -> ^ElnaLexerTransition
(* Each state is 8 bytes long (2 words: action and next state).
There are 23 character classes, so a transition row 8 * 23 = 184 bytes long. *)
return @transition_table[cast(current_state: Word)][cast(character_class: Word)]
@@ -523,7 +524,7 @@ begin
end
return
-proc elna_lexer_token_create(kind: ElnaLexerKind; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_token_create(kind: ElnaLexerKind; position: ^ElnaPosition) -> ^ElnaLexerToken
var
result: ^ElnaLexerToken
begin
@@ -532,7 +533,7 @@ begin
result^.position := position^
return result
-proc elna_lexer_classify_keyword(position_start, position_end: ^Word8; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_classify_keyword(position_start, position_end: ^Word8; position: ^ElnaPosition) -> ^ElnaLexerToken
var
result: ^ElnaLexerToken
result_length: Word
@@ -587,7 +588,7 @@ begin
end
return result
-proc elna_lexer_classify_delimited(start_position, end_position: ^Word8; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_classify_delimited(start_position, end_position: ^Word8; position: ^ElnaPosition) -> ^ElnaLexerToken
var
delimiter: Word8
result: ^ElnaLexerToken
@@ -604,7 +605,7 @@ begin
result^.start := start_position[1 to cast(end_position - start_position: Word)]
return result
-proc elna_lexer_classify_integer(start_position, end_position: ^Word8; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_classify_integer(start_position, end_position: ^Word8; position: ^ElnaPosition) -> ^ElnaLexerToken
var
result: ^ElnaLexerToken
begin
@@ -612,7 +613,7 @@ begin
result^.start := start_position[1 to cast(end_position - start_position: Word)]
return result
-proc elna_lexer_classify_finalize(start_position: ^Word8; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_classify_finalize(start_position: ^Word8; position: ^ElnaPosition) -> ^ElnaLexerToken
var
character: Word8
result: ^ElnaLexerToken
@@ -634,7 +635,7 @@ begin
end
return result
-proc elna_lexer_classify_single(start_position: ^Word8; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_classify_single(start_position: ^Word8; position: ^ElnaPosition) -> ^ElnaLexerToken
var
character: Word8
result: ^ElnaLexerToken
@@ -675,7 +676,7 @@ begin
end
return result
-proc elna_lexer_classify_composite(start_position, one_before_last: ^Word8; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_classify_composite(start_position, one_before_last: ^Word8; position: ^ElnaPosition) -> ^ElnaLexerToken
var
first_character: Word8
last_character: Word8
@@ -696,10 +697,14 @@ begin
if last_character = '=' then
result := elna_lexer_token_create(ElnaLexerKind.greater_equal, position)
end
+ elsif first_character = '-' then
+ if last_character = '>' then
+ result := elna_lexer_token_create(ElnaLexerKind.arrow, position)
+ end
end
return result
-proc elna_lexer_execute_action(cursor: ^ElnaLexerCursor; action_to_perform: ElnaLexerAction): ^ElnaLexerToken
+proc elna_lexer_execute_action(cursor: ^ElnaLexerCursor; action_to_perform: ElnaLexerAction) -> ^ElnaLexerToken
var
token: ^ElnaLexerToken
begin
@@ -736,7 +741,7 @@ begin
end
return token
-proc elna_lexer_execute_transition(cursor: ^ElnaLexerCursor): ^ElnaLexerToken
+proc elna_lexer_execute_transition(cursor: ^ElnaLexerCursor) -> ^ElnaLexerToken
var
next_transition: ^ElnaLexerTransition
current_character: Word8
@@ -766,7 +771,7 @@ return
* Reads the next token and writes its type into the address in the kind parameter.
* Resets the lexer state for reading the next token.
*)
-proc elna_lexer_peek(cursor: ^ElnaLexerCursor): ^ElnaLexerToken
+proc elna_lexer_peek(cursor: ^ElnaLexerCursor) -> ^ElnaLexerToken
var
token: ^ElnaLexerToken
begin
@@ -783,7 +788,7 @@ return cursor^.token
(**
* Reads the token and advance the lexer.
*)
-proc elna_lexer_read(cursor: ^ElnaLexerCursor): ^ElnaLexerToken
+proc elna_lexer_read(cursor: ^ElnaLexerCursor) -> ^ElnaLexerToken
var
token: ^ElnaLexerToken
begin
diff --git a/source/main.elna b/source/main.elna
index bdcaf34..23fdc97 100644
--- a/source/main.elna
+++ b/source/main.elna
@@ -20,9 +20,9 @@ type
position: ElnaLocation;
input: Pointer;
- empty: proc(stream: Pointer): Bool;
+ empty: proc(stream: Pointer) -> Bool;
advance: proc(stream: Pointer);
- head: proc(stream: Pointer): Word8
+ head: proc(stream: Pointer) -> Word8
end
Tokenizer* = record
length: Word;
@@ -32,10 +32,10 @@ type
(*
Standard procedures.
*)
-proc reallocarray(ptr: Pointer; n: Word; size: Word): Pointer
+proc reallocarray(ptr: Pointer; n: Word; size: Word) -> Pointer
return realloc(ptr, n * size)
-proc string_dup(origin: []const Word8): []const Word8
+proc string_dup(origin: []const Word8) -> []const Word8
var
copy: ^Word8
begin
@@ -43,7 +43,7 @@ begin
strncpy(copy, origin.ptr, origin.length)
return copy[1 to origin.length]
-proc string_buffer_new(): StringBuffer
+proc string_buffer_new() -> StringBuffer
var
result: StringBuffer
begin
@@ -67,7 +67,7 @@ begin
buffer^.size := buffer^.size - count
return
-proc string_buffer_clear(buffer: ^StringBuffer): []const Word8
+proc string_buffer_clear(buffer: ^StringBuffer) -> []const Word8
var
result: []const Word8
begin
@@ -79,7 +79,7 @@ return result
Source code stream procedures.
*)
-proc read_source(filename: ^Word8): ^SourceFile
+proc read_source(filename: ^Word8) -> ^SourceFile
var
result: ^SourceFile
file_handle: ^FILE
@@ -94,7 +94,7 @@ begin
end
return result
-proc source_file_empty(source_input: Pointer): Bool
+proc source_file_empty(source_input: Pointer) -> Bool
var
source_file: ^SourceFile
begin
@@ -106,7 +106,7 @@ begin
end
return source_file^.size = 0u
-proc source_file_head(source_input: Pointer): Word8
+proc source_file_head(source_input: Pointer) -> Word8
var
source_file: ^SourceFile
begin
@@ -122,10 +122,10 @@ begin
source_file^.index := source_file^.index + 1u
return
-proc source_code_empty(source_code: ^SourceCode): Bool
+proc source_code_empty(source_code: ^SourceCode) -> Bool
return source_code^.empty(source_code^.input)
-proc source_code_head(source_code: SourceCode): Word8
+proc source_code_head(source_code: SourceCode) -> Word8
return source_code.head(source_code.input)
proc source_code_advance(source_code: ^SourceCode)
@@ -140,14 +140,14 @@ begin
source_code^.position.column := 0u
return
-proc source_code_expect(source_code: ^SourceCode; expected: Word8): Bool
+proc source_code_expect(source_code: ^SourceCode; expected: Word8) -> Bool
return ~source_code_empty(source_code) & source_code_head(source_code^) = expected
(*
Token procedures.
*)
-proc lexer_escape(escape: Word8; result: ^Word8): Bool
+proc lexer_escape(escape: Word8; result: ^Word8) -> Bool
var
successful: Bool
begin
@@ -200,7 +200,7 @@ begin
return
(* Checker whether the character is allowed in an identificator. *)
-proc lexer_is_ident(char: Word8): Bool
+proc lexer_is_ident(char: Word8) -> Bool
return isalnum(cast(char: Int)) <> 0 or char = '_'
proc lexer_identifier(source_code: ^SourceCode; token_content: ^StringBuffer)
@@ -213,7 +213,7 @@ begin
end
return
-proc lexer_comment(source_code: ^SourceCode; token_content: ^StringBuffer): Bool
+proc lexer_comment(source_code: ^SourceCode; token_content: ^StringBuffer) -> Bool
var
trailing: Word
begin
@@ -234,7 +234,7 @@ begin
end
return trailing = 2u
-proc lexer_character(source_code: ^SourceCode; token_content: ^Word8): Bool
+proc lexer_character(source_code: ^SourceCode; token_content: ^Word8) -> Bool
var
successful: Bool
begin
@@ -255,7 +255,7 @@ begin
end
return successful
-proc lexer_string(source_code: ^SourceCode; token_content: ^StringBuffer): Bool
+proc lexer_string(source_code: ^SourceCode; token_content: ^StringBuffer) -> Bool
var
token_end, constructed_string: ^Word8
token_length: Word
@@ -289,7 +289,7 @@ begin
return
(* Categorize an identifier. *)
-proc lexer_categorize(token_content: []const Word8): ^ElnaLexerToken
+proc lexer_categorize(token_content: []const Word8) -> ^ElnaLexerToken
var
current_token: ^ElnaLexerToken
begin
@@ -385,7 +385,7 @@ begin
return
(* Read the next token from the input. *)
-proc lexer_next(source_code: SourceCode; token_buffer: ^StringBuffer): ^ElnaLexerToken
+proc lexer_next(source_code: SourceCode; token_buffer: ^StringBuffer) -> ^ElnaLexerToken
var
current_token: ^ElnaLexerToken := nil
first_char: Word8
@@ -523,7 +523,15 @@ begin
elsif first_char = '-' then
source_code_advance(@source_code);
current_token := malloc(#size(ElnaLexerToken));
- current_token^.kind := ElnaLexerKind.minus
+
+ if source_code_empty(@source_code) then
+ current_token^.kind := ElnaLexerKind.minus
+ elsif source_code_head(source_code) = '>' then
+ current_token^.kind := ElnaLexerKind.arrow;
+ source_code_advance(@source_code)
+ else
+ current_token^.kind := ElnaLexerKind.minus
+ end
elsif first_char = '*' then
current_token := malloc(#size(ElnaLexerToken));
current_token^.kind := ElnaLexerKind.multiplication;
@@ -576,7 +584,7 @@ begin
return current_token
(* Split the source text into tokens. *)
-proc lexer_text(source_code: SourceCode): Tokenizer
+proc lexer_text(source_code: SourceCode) -> Tokenizer
var
current_token: ^ElnaLexerToken
token_buffer: StringBuffer
@@ -739,6 +747,8 @@ begin
write_s("DEFER")
| ElnaLexerKind.exclamation:
write_c('!')
+ | ElnaLexerKind.arrow:
+ write_s("->")
| ElnaLexerKind._import:
write_s("IMPORT")
else
@@ -757,7 +767,7 @@ return
Compilation entry.
*)
-proc compile_in_stages(command_line: ^CommandLine; source_code: SourceCode): Int
+proc compile_in_stages(command_line: ^CommandLine; source_code: SourceCode) -> Int
var
return_code: Int := 0
lexer: Tokenizer
@@ -770,7 +780,7 @@ begin
end
return return_code
-proc process(argc: Int; argv: ^^Word8): Int
+proc process(argc: Int; argv: ^^Word8) -> Int
var
tokens: ^ElnaLexerToken
tokens_size: Word
diff --git a/testsuite/compilable/opaque_type.elna b/testsuite/compilable/opaque_type.elna
index b46cf68..bdbf0d6 100644
--- a/testsuite/compilable/opaque_type.elna
+++ b/testsuite/compilable/opaque_type.elna
@@ -6,7 +6,7 @@ var
handle: ^Handle := nil
alias: ^Alias
-proc take(h: ^Handle): ^Handle
+proc take(h: ^Handle) -> ^Handle
return h
begin
diff --git a/testsuite/compilable/pointer_subtraction.elna b/testsuite/compilable/pointer_subtraction.elna
index c268113..8dd1ff6 100644
--- a/testsuite/compilable/pointer_subtraction.elna
+++ b/testsuite/compilable/pointer_subtraction.elna
@@ -1,4 +1,4 @@
-proc test(a, b: ^Char): Int
+proc test(a, b: ^Char) -> Int
return a - b
end.
diff --git a/testsuite/compilable/procedure_forward_reference.elna b/testsuite/compilable/procedure_forward_reference.elna
index bbffc73..cdf3008 100644
--- a/testsuite/compilable/procedure_forward_reference.elna
+++ b/testsuite/compilable/procedure_forward_reference.elna
@@ -1,7 +1,7 @@
-proc first(): Int
+proc first() -> Int
return second() + 1
-proc second(): Int
+proc second() -> Int
return 41
end.
diff --git a/testsuite/fail_compilation/access_record_type_field.elna b/testsuite/fail_compilation/access_record_type_field.elna
index 4e8bc6a..4378404 100644
--- a/testsuite/fail_compilation/access_record_type_field.elna
+++ b/testsuite/fail_compilation/access_record_type_field.elna
@@ -3,7 +3,7 @@ type
field1, field2: Int
end
-proc f(): Int
+proc f() -> Int
return R.field1 (* @Error Cannot access field 'field1' on type 'R' *)
end.
diff --git a/testsuite/fail_compilation/enumeration_member_missing.elna b/testsuite/fail_compilation/enumeration_member_missing.elna
index 84a13d1..6f82131 100644
--- a/testsuite/fail_compilation/enumeration_member_missing.elna
+++ b/testsuite/fail_compilation/enumeration_member_missing.elna
@@ -1,7 +1,7 @@
type
Enumeration = (one, two, three)
-proc f(): Enumeration
+proc f() -> Enumeration
return Enumeration.four (* @Error Enumeration 'Enumeration' does not have a member named 'four' *)
end.
diff --git a/testsuite/fail_compilation/non_constant_array_dimension.elna.s b/testsuite/fail_compilation/non_constant_array_dimension.elna.s
deleted file mode 100644
index 8dc704d..0000000
--- a/testsuite/fail_compilation/non_constant_array_dimension.elna.s
+++ /dev/null
@@ -1 +0,0 @@
- .file "non_constant_array_dimension.elna"
diff --git a/testsuite/fail_compilation/procedure-cycle.elna b/testsuite/fail_compilation/procedure-cycle.elna
index aaed14c..796cccf 100644
--- a/testsuite/fail_compilation/procedure-cycle.elna
+++ b/testsuite/fail_compilation/procedure-cycle.elna
@@ -1,3 +1,3 @@
type
- A = proc(): A (* @Error Type declaration forms a cycle: A -> A *)
+ A = proc() -> A (* @Error Type declaration forms a cycle: A -> A *)
end.
diff --git a/testsuite/fail_compilation/record-base-cycle.elna.s b/testsuite/fail_compilation/record-base-cycle.elna.s
deleted file mode 100644
index 64f8722..0000000
--- a/testsuite/fail_compilation/record-base-cycle.elna.s
+++ /dev/null
@@ -1 +0,0 @@
- .file "record-base-cycle.elna"
diff --git a/testsuite/fail_compilation/unary_minus_on_record.elna b/testsuite/fail_compilation/unary_minus_on_record.elna
index cfd76a2..d86995b 100644
--- a/testsuite/fail_compilation/unary_minus_on_record.elna
+++ b/testsuite/fail_compilation/unary_minus_on_record.elna
@@ -3,7 +3,7 @@ type
x: Int
end
-proc f(r: R): Int
+proc f(r: R) -> Int
return -r (* @Error Type 'R' cannot be used with unary '-' *)
end.
diff --git a/testsuite/fail_compilation/unary_negation_on_record.elna b/testsuite/fail_compilation/unary_negation_on_record.elna
index 370f04d..d08d2e3 100644
--- a/testsuite/fail_compilation/unary_negation_on_record.elna
+++ b/testsuite/fail_compilation/unary_negation_on_record.elna
@@ -3,7 +3,7 @@ type
x: Int
end
-proc f(r: R): Int
+proc f(r: R) -> Int
return ~r (* @Error Type 'R' cannot be used with unary '~' *)
end.
diff --git a/testsuite/fail_compilation/unary_plus_on_record.elna b/testsuite/fail_compilation/unary_plus_on_record.elna
index 7289873..e1f6f4c 100644
--- a/testsuite/fail_compilation/unary_plus_on_record.elna
+++ b/testsuite/fail_compilation/unary_plus_on_record.elna
@@ -3,7 +3,7 @@ type
x: Int
end
-proc f(r: R): Int
+proc f(r: R) -> Int
return +r (* @Error Type 'R' cannot be used with unary '\+' *)
end.
diff --git a/testsuite/runnable/aggregate_argument.elna b/testsuite/runnable/aggregate_argument.elna
index 4a36c74..875265e 100644
--- a/testsuite/runnable/aggregate_argument.elna
+++ b/testsuite/runnable/aggregate_argument.elna
@@ -4,7 +4,7 @@ type
b: Int
end
-proc f(r: R): Bool
+proc f(r: R) -> Bool
return r.a = 1 & r.b = 2
begin
diff --git a/testsuite/runnable/aggregate_equality.elna b/testsuite/runnable/aggregate_equality.elna
index 592d411..bfe2174 100644
--- a/testsuite/runnable/aggregate_equality.elna
+++ b/testsuite/runnable/aggregate_equality.elna
@@ -4,7 +4,7 @@ type
b: Int
end
-proc f(): Bool
+proc f() -> Bool
return R{a: 1, b: 2} = R{a: 1, b: 2}
begin
diff --git a/testsuite/runnable/define_multiple_local_variables.elna b/testsuite/runnable/define_multiple_local_variables.elna
index 51b99ac..8e44da4 100644
--- a/testsuite/runnable/define_multiple_local_variables.elna
+++ b/testsuite/runnable/define_multiple_local_variables.elna
@@ -1,4 +1,4 @@
-proc f(): Bool
+proc f() -> Bool
var
a, b: Int := 5
return a = 5 & b = 5
diff --git a/testsuite/runnable/multi_module/helper.elna b/testsuite/runnable/multi_module/helper.elna
index 9148ba6..5fd68af 100644
--- a/testsuite/runnable/multi_module/helper.elna
+++ b/testsuite/runnable/multi_module/helper.elna
@@ -1,4 +1,4 @@
-proc multiply*(x, y: Int): Int
+proc multiply*(x, y: Int) -> Int
return x * y
end.
diff --git a/testsuite/runnable/procedure_cast.elna b/testsuite/runnable/procedure_cast.elna
index 27977e1..ee97a6b 100644
--- a/testsuite/runnable/procedure_cast.elna
+++ b/testsuite/runnable/procedure_cast.elna
@@ -1,9 +1,9 @@
-var cb: proc(x: ^Char): Int
+var cb: proc(x: ^Char) -> Int
-proc probe_int(x: ^Int): Int
+proc probe_int(x: ^Int) -> Int
return 42
begin
- cb := cast(probe_int: proc(x: ^Char): Int);
+ cb := cast(probe_int: proc(x: ^Char) -> Int);
assert(cb(nil) = 42)
end.
diff --git a/testsuite/runnable/recursive_record.elna b/testsuite/runnable/recursive_record.elna
index 6f6b4fa..237eece 100644
--- a/testsuite/runnable/recursive_record.elna
+++ b/testsuite/runnable/recursive_record.elna
@@ -9,13 +9,13 @@ var
second: ^Node
third: ^Node
-proc malloc(size: Word): Pointer
+proc malloc(size: Word) -> Pointer
extern
proc free(ptr: Pointer)
extern
-proc sum(node: ^Node): Int
+proc sum(node: ^Node) -> Int
var
result: Int
begin
@@ -25,7 +25,7 @@ begin
else
result := node^.value + sum(node^.next)
end;
- return result
+return result
begin
first := malloc(#size(Node));
diff --git a/testsuite/runnable/return_aggregate.elna b/testsuite/runnable/return_aggregate.elna
index 90c1677..fbc1a08 100644
--- a/testsuite/runnable/return_aggregate.elna
+++ b/testsuite/runnable/return_aggregate.elna
@@ -4,7 +4,7 @@ type
b: Int
end
-proc f(): R
+proc f() -> R
return R{ a: 1, b: 2 }
begin
diff --git a/testsuite/runnable/two_fields_same_type.elna b/testsuite/runnable/two_fields_same_type.elna
index 649dd25..71dcbee 100644
--- a/testsuite/runnable/two_fields_same_type.elna
+++ b/testsuite/runnable/two_fields_same_type.elna
@@ -3,7 +3,7 @@ type
x, y: Int
end
-proc f(): Int
+proc f() -> Int
var
r: R := R{x: 3, y: 2}
return r.x + r.y
diff --git a/testsuite/runnable/two_parameters_same_type.elna b/testsuite/runnable/two_parameters_same_type.elna
index bd9b271..105a40c 100644
--- a/testsuite/runnable/two_parameters_same_type.elna
+++ b/testsuite/runnable/two_parameters_same_type.elna
@@ -1,4 +1,4 @@
-proc f(x, y: Int): Int
+proc f(x, y: Int) -> Int
return x + y
begin
diff --git a/testsuite/runnable/unary_plus.elna b/testsuite/runnable/unary_plus.elna
index 2bc69f3..bfd59d6 100644
--- a/testsuite/runnable/unary_plus.elna
+++ b/testsuite/runnable/unary_plus.elna
@@ -1,4 +1,4 @@
-proc f(x: Int): Int
+proc f(x: Int) -> Int
return +x
begin