aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-07-21 21:27:03 +0200
committerEugen Wissner <belka@caraus.de>2026-07-21 21:27:03 +0200
commit5cc2947143f2a6ebd4ef1ae4d25ab956b87de808 (patch)
tree0d4489b298da3be04ed4bce117f616468146a0f8 /source
parent44d6e8a27294e5ca7300ab11900011b73d9336d4 (diff)
downloadelna-cpp.tar.gz
Redefine strings as slice of constant charactersHEADcpp
Diffstat (limited to 'source')
-rw-r--r--source/common.elna4
-rw-r--r--source/cstdio.elna14
-rw-r--r--source/cstring.elna14
-rw-r--r--source/lexer.elna10
-rw-r--r--source/main.elna18
5 files changed, 27 insertions, 33 deletions
diff --git a/source/common.elna b/source/common.elna
index b6f85f1..1bdfa1f 100644
--- a/source/common.elna
+++ b/source/common.elna
@@ -17,7 +17,7 @@ type
proc write*(fd: Int; buf: Pointer; Word: Int): Int
extern
-proc write_s*(value: String)
+proc write_s*(value: []const Char)
begin
(* fwrite(cast(value.ptr: Pointer), value.length, 1u, stdout) *)
write(1, cast(value.ptr: Pointer), cast(value.length: Int))
@@ -78,7 +78,7 @@ begin
return nil
(* Returns true or false depending whether two strings are equal. *)
-proc string_compare*(lhs_pointer: ^Char; lhs_length: Word; rhs_pointer: String): Bool
+proc string_compare*(lhs_pointer: ^Char; lhs_length: Word; rhs_pointer: []const Char): Bool
var
result: Bool
begin
diff --git a/source/cstdio.elna b/source/cstdio.elna
index 15c467e..f44a972 100644
--- a/source/cstdio.elna
+++ b/source/cstdio.elna
@@ -10,7 +10,7 @@ var
stdout*: ^FILE := extern
stderr*: ^FILE := extern
-proc fopen*(pathname: ^Char; mode: ^Char): ^FILE
+proc fopen*(pathname, mode: ^const Char): ^FILE
extern
proc fclose*(stream: ^FILE): Int
@@ -31,28 +31,28 @@ extern
proc fread*(ptr: Pointer; size: Word; nmemb: Word; stream: ^FILE): Word
extern
-proc fwrite*(ptr: 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
extern
-proc perror*(s: ^Char)
+proc perror*(s: ^const Char)
extern
-proc puts*(s: ^Char): Int
+proc puts*(s: ^const Char): Int
extern
proc putchar*(c: Int): Int
extern
-proc sprintf*(str: Pointer; format: ^Char; number: Word): Int
+proc sprintf*(str: Pointer; format: ^const Char; number: Word): Int
extern
-proc fprintf*(stream: Pointer; format: ^Char; number: Word): Int
+proc fprintf*(stream: Pointer; format: ^const Char; number: Word): Int
extern
-proc fdopen*(fildes: Int; mode: ^Char): Pointer
+proc fdopen*(fildes: Int; mode: ^const Char): Pointer
extern
end.
diff --git a/source/cstring.elna b/source/cstring.elna
index e21056a..0b4bd90 100644
--- a/source/cstring.elna
+++ b/source/cstring.elna
@@ -5,25 +5,25 @@
proc memset*(ptr: Pointer; c: Int; n: Word): ^Char
extern
-proc memcpy*(dst, src: Pointer; n: Word)
+proc memcpy*(dst: Pointer; src: const Pointer; n: Word)
extern
-proc memcmp*(s1, s2: Pointer; n: Word): Int
+proc memcmp*(s1, s2: const Pointer; n: Word): Int
extern
-proc strcmp*(s1: ^Char; s2: ^Char): Int
+proc strcmp*(s1: ^const Char; s2: ^const Char): Int
extern
-proc strncmp*(s1: ^Char; s2: ^Char; n: Word): Int
+proc strncmp*(s1: ^const Char; s2: ^const Char; n: Word): Int
extern
-proc strncpy*(dst: ^Char; src: ^Char; dsize: Word): ^Char
+proc strncpy*(dst: ^Char; src: ^const Char; dsize: Word): ^Char
extern
-proc strcpy*(dst: ^Char; src: ^Char): ^Char
+proc strcpy*(dst: ^Char; src: ^const Char): ^Char
extern
-proc strlen*(ptr: ^Char): Word
+proc strlen*(ptr: ^const Char): Word
extern
end.
diff --git a/source/lexer.elna b/source/lexer.elna
index 9e1db21..fa79917 100644
--- a/source/lexer.elna
+++ b/source/lexer.elna
@@ -28,7 +28,7 @@ type
)
ElnaLexerToken* = record
kind: ElnaLexerKind;
- start: String; (* DEPRECATED *)
+ start: []const Char; (* DEPRECATED *)
position: ElnaPosition
end
ElnaLexerBooleanToken* = record(ElnaLexerToken)
@@ -38,7 +38,7 @@ type
value: Char
end
ElnaLexerStringToken* = record(ElnaLexerToken)
- value: String
+ value: []const Char
end
ElnaLexerIntegerToken* = record(ElnaLexerToken)
value: Int
@@ -540,7 +540,7 @@ begin
result_length := cast(position_end - position_start: Word);
result := elna_lexer_token_create(ElnaLexerKind.identifier, position);
- result^.start := String(position_start, result_length);
+ result^.start := position_start[1 to result_length];
if position_start^ = '#' then
result^.kind := ElnaLexerKind.trait
@@ -601,7 +601,7 @@ begin
elsif delimiter = '"' then
result := elna_lexer_token_create(ElnaLexerKind.string, position)
end;
- result^.start := String(start_position, cast(end_position - start_position: Word))
+ result^.start := start_position[1 to cast(end_position - start_position: Word)]
return result
proc elna_lexer_classify_integer(start_position, end_position: ^Char; position: ^ElnaPosition): ^ElnaLexerToken
@@ -609,7 +609,7 @@ var
result: ^ElnaLexerToken
begin
result := elna_lexer_token_create(ElnaLexerKind.integer, position);
- result^.start := String(start_position, cast(end_position - start_position: Word))
+ result^.start := start_position[1 to cast(end_position - start_position: Word)]
return result
proc elna_lexer_classify_finalize(start_position: ^Char; position: ^ElnaPosition): ^ElnaLexerToken
diff --git a/source/main.elna b/source/main.elna
index 4a23898..c127ba4 100644
--- a/source/main.elna
+++ b/source/main.elna
@@ -40,19 +40,13 @@ var
proc reallocarray(ptr: Pointer; n: Word; size: Word): Pointer
return realloc(ptr, n * size)
-proc substring(string: String; start: Word; count: Word): String
-return String(string.ptr + start, count)
-
-proc open_substring(string: String; start: Word): String
-return substring(string, start, string.length - start)
-
-proc string_dup(origin: String): String
+proc string_dup(origin: []const Char): []const Char
var
copy: ^Char
begin
copy := malloc(origin.length);
strncpy(copy, origin.ptr, origin.length)
-return String(copy, origin.length)
+return copy[1 to origin.length]
proc string_buffer_new(): StringBuffer
var
@@ -78,11 +72,11 @@ begin
buffer^.size := buffer^.size - count
return
-proc string_buffer_clear(buffer: ^StringBuffer): String
+proc string_buffer_clear(buffer: ^StringBuffer): []const Char
var
- result: String
+ result: []const Char
begin
- result := String(cast(buffer^.data: ^Char), buffer^.size);
+ result := cast(buffer^.data: ^Char)[1 to buffer^.size];
buffer^.size := 0u
return result
@@ -300,7 +294,7 @@ begin
return
(* Categorize an identifier. *)
-proc lexer_categorize(token_content: String): ^ElnaLexerToken
+proc lexer_categorize(token_content: []const Char): ^ElnaLexerToken
var
current_token: ^ElnaLexerToken
begin