aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLizzy Fleckenstein <eliasfleckenstein@web.de>2023-08-18 00:39:34 +0200
committerLizzy Fleckenstein <eliasfleckenstein@web.de>2023-08-18 00:39:34 +0200
commit31e1c967a964ad4a778799460f856e5bbec9ed8f (patch)
tree34211e75d983863c0540fbe34ba47e6042a4feb4
parent082fbc76d01275c04fa507f64842085b301d31ab (diff)
downloadparadox-31e1c967a964ad4a778799460f856e5bbec9ed8f.tar.xz
special chars & push fn
-rw-r--r--paradox.false25
1 files changed, 23 insertions, 2 deletions
diff --git a/paradox.false b/paradox.false
index 9074e6a..7d10f93 100644
--- a/paradox.false
+++ b/paradox.false
@@ -73,7 +73,7 @@
{ while state == CONTINUE }
[q;0=][
{ if current_char = EOF }
- c;[
+ c;1_=[
r;! c: { current_char <- read_char() }
]?
@@ -148,6 +148,7 @@
{ elseif c = [ }
c;'[= $[%~1_\]?[
+ f; { backup fn_id }
"jmp end_" f;. 10, { skip generated code }
x;! { call compile_fn }
@@ -161,6 +162,11 @@
{ if state != ERROR }
q;2=~ [
+ { emit push fn ref }
+ { fn_id is top }
+ "sub r12, 8" 10,
+ "mov qword[r12], fun_" . 10,
+
0 q: { state <- CONTINUE }
1_ c: { clear current_char }
]?
@@ -176,6 +182,21 @@
1 q: { state <- DONE }
]?
+ { elseif c is UTF-8 }
+ c;195= $[%~1_\]?[
+ r;! c: { c <- read_char() }
+
+ c;184= $[ 'O c: ]? { if c = ø then c <- O }
+ c;159= $[%~1_\]?[ 'B c: ]? { if c = ß then c <- B }
+ ~["unknown UTF-8 character"]e;! { else error }
+ ]?
+
+ { elseif c = ø then c <- O }
+ c;248= $[%~1_\]?[ 'O c: ]?
+
+ { elseif c = ß then c <- B }
+ c;223= $[%~1_\]?[ 'B c: ]?
+
{ elseif c = { }
c;'{= $[%~1_\]?[
[r;!'}=~][]# { while read_char() != (closing bracket) }
@@ -183,7 +204,7 @@
]?
{ else error }
- ~["invalid character: "c;,]e;!
+ ~["unknown character: "c;,]e;!
]#
{ if state != ERROR }