[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 5/5] pkl-rt.pk: _pkl_print_format_any: handle PVM types
From: |
Mohammad-Reza Nabipoor |
Subject: |
[PATCH 5/5] pkl-rt.pk: _pkl_print_format_any: handle PVM types |
Date: |
Sun, 23 Oct 2022 23:36:54 +0200 |
2022-10-23 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
* libpoke/pkl-rt.pk (_pkl_print_format_any): Handle PVM types.
---
ChangeLog | 4 +++
libpoke/pkl-rt.pk | 71 ++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 74 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
index 4801c643..e5f7abf7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2022-10-23 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
+
+ * libpoke/pkl-rt.pk (_pkl_print_format_any): Handle PVM types.
+
2022-10-23 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
* libpoke/pkl-gen-attrs.pks (attr_size): Add `typof' and `nip'
diff --git a/libpoke/pkl-rt.pk b/libpoke/pkl-rt.pk
index c2560a78..918f3b8f 100644
--- a/libpoke/pkl-rt.pk
+++ b/libpoke/pkl-rt.pk
@@ -798,7 +798,76 @@ immutable fun _pkl_print_format_any = (any val,
return s;
}
+ fun handle_type = void:
+ {
+ ctx.begin_class ("type");
+
+ var is_int_p = asm int<32>: ("tyisi; nip" : val),
+ is_uint_p = asm int<32>: ("tyisiu; nip" : val),
+ is_long_p = asm int<32>: ("tyisl; nip" : val),
+ is_ulong_p = asm int<32>: ("tyislu; nip" : val);
+
+ if (is_int_p || is_uint_p || is_long_p || is_ulong_p)
+ {
+ var sign_p = asm int<32>: ("tyigetsg; nip" : val);
+ var width = asm uint<64>: ("tyigetsz; nip" : val);
+
+ ctx.emit ((sign_p ? "" : "u") + "int<" + lutos (width, 10) + ">");
+ }
+ else if (asm int<32>: ("tyiso; nip" : val))
+ {
+ var base_type = asm any: ("tyogetm; nip" : val),
+ unit_in_bits = asm uint<64>: ("tyogetu; nip" : val);
+
+ ctx.emit ("offset<");
+ _pkl_print_format_any (base_type, ctx, depth);
+ ctx.emit ("," + lutos (unit_in_bits, 10) + ">");
+ }
+ else if (asm int<32>: ("tyiss; nip" : val))
+ ctx.emit ("string");
+ else if (asm int<32>: ("tyisv; nip" : val))
+ ctx.emit ("void");
+ else if (asm int<32>: ("tyisa; nip" : val))
+ {
+ _pkl_print_format_any (asm any: ("tyagett; nip" : val), ctx, depth);
+ ctx.emit ("[");
+ if (!asm int<32>: ("tyagetb; nip; isn; nip" : val))
+ _pkl_print_format_any (asm any: ("tyagetb; nip; call" : val), ctx,
depth);
+ ctx.emit ("]");
+ }
+ else if (asm int<32>: ("tyissct; nip" : val))
+ {
+ var maybe_name = asm any: ("tysctgetn; nip" : val);
+ var name
+ = asm int<32>: ("isn; nip" : maybe_name) ? "struct"
+ : (maybe_name as string);
+ var nfields = asm uint<64>: ("tysctgetnf; nip" : val);
+
+ ctx.emit (name);
+ ctx.emit (" {");
+ for (var i = 0UL; i < nfields; ++i)
+ {
+ var maybe_fname = asm any: ("tysctgetfn; nip2" : val, i);
+ var ftype = asm any: ("tysctgetft; nip2" : val, i);
+
+ if (i != 0UL)
+ ctx.emit (" ");
+ _pkl_print_format_any (ftype, ctx, depth);
+ if (!asm int<32>: ("isn; nip" : maybe_fname))
+ ctx.emit (" " + (maybe_fname as string));
+ ctx.emit (";");
+ }
+ ctx.emit ("}");
+ }
+ else if (asm int<32>: ("tyisc; nip" : val))
+ {
+ assert (
+ 0,
+ "Unreachable reached! (There's no PVM type for closures (for
now)!)");
+ }
+ ctx.end_class ("type");
+ }
fun handle_integral = (int<32> long_p, int<32> signed_p) void:
{
var bits = asm uint<64>: ("siz; nip" : val);
@@ -1054,7 +1123,7 @@ immutable fun _pkl_print_format_any = (any val,
if (asm int<32>: ("isn; nip" : val))
ctx.emit ("null");
else if (asm int<32>: ("isty; nip" : val))
- /* handle_type */;
+ handle_type;
else if (asm int<32>: ("typof; nip; isn; nip" : val))
{
ctx.begin_class ("special");
--
2.38.1
- [PATCH 1/5] pvm: remove PVM_TYPE_ANY, Mohammad-Reza Nabipoor, 2022/10/23
- [PATCH 3/5] pvm.jitter: fix `iolist' to have right type, Mohammad-Reza Nabipoor, 2022/10/23
- Re: [PATCH 3/5] pvm.jitter: fix `iolist' to have right type, Jose E. Marchesi, 2022/10/23
- [PATCH v2] pvm.jitter: fix `iolist' to have right type, Mohammad-Reza Nabipoor, 2022/10/24
- Re: [PATCH v2] pvm.jitter: fix `iolist' to have right type, Jose E. Marchesi, 2022/10/24
- [PATCH] pkl: split iolist instruction into two instructions, Mohammad-Reza Nabipoor, 2022/10/26
- Re: [PATCH] pkl: split iolist instruction into two instructions, Jose E. Marchesi, 2022/10/26
- Re: [PATCH] pkl: split iolist instruction into two instructions, Mohammad-Reza Nabipoor, 2022/10/27
[PATCH 5/5] pkl-rt.pk: _pkl_print_format_any: handle PVM types,
Mohammad-Reza Nabipoor <=
[PATCH 2/5] pkl: rename instruction s/tysctn/tysctgetn/, Mohammad-Reza Nabipoor, 2022/10/23
[PATCH 4/5] pkl: improve PVM type introspection 2022-10-23 Mohammad-Reza Nabipoor <address@hidden>, Mohammad-Reza Nabipoor, 2022/10/23
Re: [PATCH 1/5] pvm: remove PVM_TYPE_ANY, Jose E. Marchesi, 2022/10/23