[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[COMMITTED] poke: support for --no-stdtypes
From: |
Jose E. Marchesi |
Subject: |
[COMMITTED] poke: support for --no-stdtypes |
Date: |
Tue, 25 Apr 2023 09:49:45 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
This patch adds support for a new command line option --no-stdtypes to
the poke CLI.
2023-04-25 Jose E. Marchesi <jemarch@gnu.org>
* poke/poke.c (initialize): Use pk_compiler_new_with_flags.
(NO_STDTYPES_ARG): Define.
(parse_args_1): Handle NO_STDTYPES_ARG.
(parse_args_2): Likewise.
* poke/pk-hserver.pk: Do not use standard types.
* poke/pk-settings.pk: Likewise.
* poke/pk-dump.pk: Likewise.
* poke/pk-copy.pk: Likewise.
* poke/pk-save.pk: Likewise.
* poke/pk-scrabble.pk: Likewise.
* poke/pk-diff.pk: Likewise.
* pickles/diff.pk: Likewise.
---
ChangeLog | 15 +++++++++++++++
doc/poke.texi | 4 ++++
pickles/diff.pk | 32 +++++++++++++++----------------
poke/pk-copy.pk | 10 +++++-----
poke/pk-diff.pk | 2 +-
poke/pk-dump.pk | 18 +++++++++---------
poke/pk-hserver.pk | 20 ++++++++++----------
poke/pk-save.pk | 10 +++++-----
poke/pk-scrabble.pk | 18 +++++++++---------
poke/pk-settings.pk | 46 ++++++++++++++++++++++-----------------------
poke/poke.c | 17 +++++++++++++++--
11 files changed, 112 insertions(+), 80 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index cdad23fa..56fa9165 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2023-04-25 Jose E. Marchesi <jemarch@gnu.org>
+
+ * poke/poke.c (initialize): Use pk_compiler_new_with_flags.
+ (NO_STDTYPES_ARG): Define.
+ (parse_args_1): Handle NO_STDTYPES_ARG.
+ (parse_args_2): Likewise.
+ * poke/pk-hserver.pk: Do not use standard types.
+ * poke/pk-settings.pk: Likewise.
+ * poke/pk-dump.pk: Likewise.
+ * poke/pk-copy.pk: Likewise.
+ * poke/pk-save.pk: Likewise.
+ * poke/pk-scrabble.pk: Likewise.
+ * poke/pk-diff.pk: Likewise.
+ * pickles/diff.pk: Likewise.
+
2023-04-24 Jose E. Marchesi <jemarch@gnu.org>
* pickles/bpf.pk: Do not use "standard" types.
diff --git a/doc/poke.texi b/doc/poke.texi
index d8918526..a971f9ef 100644
--- a/doc/poke.texi
+++ b/doc/poke.texi
@@ -554,6 +554,10 @@ Do not load map-files automatically when poke opens IO
spaces.
@item --no-hserver
Do not run the terminal hyperlinks server.
+@item --no-stdtypes
+Do not define standard Poke types (such as @code{int}, @code{char},
+@i{etc}) in the Poke incremental compiler.
+
@item --quiet
Be as terse as possible.
diff --git a/pickles/diff.pk b/pickles/diff.pk
index 532d82cf..f23c250b 100644
--- a/pickles/diff.pk
+++ b/pickles/diff.pk
@@ -33,14 +33,14 @@ type Diff_Thunk =
type Diff_Thunk_Line =
struct
{
- int kind : kind in [DIFF_THUNK_ADD, DIFF_THUNK_REM];
+ int<32> kind : kind in [DIFF_THUNK_ADD, DIFF_THUNK_REM];
string data;
string name;
string value;
};
- int emit_values_p;
- offset<int,B> group_by = 1#B;
+ int<32> emit_values_p;
+ offset<int<32>,B> group_by = 1#B;
var A = 0, B = 1;
offset<uint<64>,B>[2] offset;
@@ -59,12 +59,12 @@ type Diff_Thunk =
lines = Diff_Thunk_Line[]();
}
- method append_line = (int kind,
- byte[] bytes,
+ method append_line = (int<32> kind,
+ uint<8>[] bytes,
string name = "",
string value = "") void:
{
- fun format_bytes = (byte[] bytes) string:
+ fun format_bytes = (uint<8>[] bytes) string:
{
var x = 1#B;
var s = "";
@@ -111,7 +111,7 @@ type Diff_Thunk =
method change = (offset<uint<64>,B> aoff, offset<uint<64>,B> asiz,
offset<uint<64>,B> boff, offset<uint<64>,B> bsiz,
- byte[] abytes, byte[] bbytes,
+ uint<8>[] abytes, uint<8>[] bbytes,
string aname = "", string bname = "",
string avalue = "", string bvalue = "") void:
{
@@ -131,9 +131,9 @@ type Diff_Thunk =
append_line (DIFF_THUNK_ADD, bbytes, bname, bvalue);
}
- method addrem = (int what,
+ method addrem = (int<32> what,
offset<uint<64>,B> off, offset<uint<64>,B> siz,
- byte[] bytes, string name = "", string value = "") void:
+ uint<8>[] bytes, string name = "", string value = "")
void:
{
var to = what == DIFF_THUNK_ADD ? B : A;
@@ -175,7 +175,7 @@ type Diff_Thunk =
fun diff_structured = (any a, any b,
string prefix_a = "a", string prefix_b = "b",
- int values = 1, offset<int,B> group_by = 1#B) void:
+ int<32> values = 1, offset<int<32>,B> group_by = 1#B)
void:
{
var thunk = Diff_Thunk { emit_values_p = values,
group_by = group_by };
@@ -188,19 +188,19 @@ fun diff_structured = (any a, any b,
return "." + ename;
}
- fun get_bytes = (any v) byte[]:
+ fun get_bytes = (any v) uint<8>[]:
{
- try return byte[v'size] @ v'ios : v'offset;
+ try return uint<8>[v'size] @ v'ios : v'offset;
catch if E_constraint { raise E_inval; }
}
- fun get_elem_bytes = (any v, uint<64> idx) byte[]:
+ fun get_elem_bytes = (any v, uint<64> idx) uint<8>[]:
{
- try return byte[v'esize (idx)] @ v'ios : v'eoffset (idx);
+ try return uint<8>[v'esize (idx)] @ v'ios : v'eoffset (idx);
catch if E_constraint { raise E_inval; }
}
- fun elem_simple_p = (any elem, uint<64> idx) int:
+ fun elem_simple_p = (any elem, uint<64> idx) int<32>:
{
try { elem'elem(idx)'elem (0); return 0; }
catch (Exception e)
@@ -213,7 +213,7 @@ fun diff_structured = (any a, any b,
return 1;
}
- fun sdiff_addrem = (int what, any val,
+ fun sdiff_addrem = (int<32> what, any val,
string prefix, uint<64> idx) void:
{
for (; idx < val'length; ++idx)
diff --git a/poke/pk-copy.pk b/poke/pk-copy.pk
index 7131caf6..0aec300f 100644
--- a/poke/pk-copy.pk
+++ b/poke/pk-copy.pk
@@ -62,11 +62,11 @@ See `.doc copy' for more information.",
pk_copy_from, pk_copy_size)
};
-fun copy = (int from_ios = get_ios,
- int to_ios = get_ios,
- off64 from = pk_copy_from,
- off64 to = from,
- off64 size = pk_copy_size) void:
+fun copy = (int<32> from_ios = get_ios,
+ int<32> to_ios = get_ios,
+ offset<int<64>,b> from = pk_copy_from,
+ offset<int<64>,b> to = from,
+ offset<int<64>,b> size = pk_copy_size) void:
{
ios_copy_bytes :from_ios from_ios :to_ios to_ios
:from from :to (to) :size size;
diff --git a/poke/pk-diff.pk b/poke/pk-diff.pk
index 461b25f3..8c9b1a9f 100644
--- a/poke/pk-diff.pk
+++ b/poke/pk-diff.pk
@@ -64,7 +64,7 @@ See `.doc sdiff' for more information.",
fun sdiff = (any a, any b,
string prefix_a = "a",
string prefix_b = "b",
- int values = pk_sdiff_print_values,
+ int<32> values = pk_sdiff_print_values,
offset<uint<64>,B> group_by = pk_diff_group_by)
void:
{
diff --git a/poke/pk-dump.pk b/poke/pk-dump.pk
index aaeb7fbb..62eb8035 100644
--- a/poke/pk-dump.pk
+++ b/poke/pk-dump.pk
@@ -89,19 +89,19 @@ type Pk_Dump_Offset =
struct
{
int<32> ios;
- off64 offset;
+ offset<int<64>,b> offset;
};
var pk_dump_offsets = Pk_Dump_Offset[]();
-fun pk_dump_get_offset = (int<32> ios) off64:
+fun pk_dump_get_offset = (int<32> ios) offset<int<64>,b>:
{
for (e in pk_dump_offsets where e.ios == ios)
return e.offset;
return 0#B;
}
-fun pk_dump_set_offset = (int<32> ios, off64 offset) void:
+fun pk_dump_set_offset = (int<32> ios, offset<int<64>,b> offset) void:
{
for (e in pk_dump_offsets where e.ios == ios)
{
@@ -115,12 +115,12 @@ fun pk_dump_set_offset = (int<32> ios, off64 offset) void:
/* And the command itself. */
fun dump = (int<32> ios = get_ios,
- off64 from = pk_dump_get_offset (ios),
- off64 size = pk_dump_size,
- off64 group_by = pk_dump_group_by,
- int cluster_by = pk_dump_cluster_by,
- int ruler = pk_dump_ruler,
- int ascii = pk_dump_ascii) void:
+ offset<int<64>,b> from = pk_dump_get_offset (ios),
+ offset<int<64>,b> size = pk_dump_size,
+ offset<int<64>,b> group_by = pk_dump_group_by,
+ int<32> cluster_by = pk_dump_cluster_by,
+ int<32> ruler = pk_dump_ruler,
+ int<32> ascii = pk_dump_ascii) void:
{
ios_dump_bytes :ios ios :from from :size size :group_by group_by
:cluster_by cluster_by :ruler_p ruler :ascii_p ascii
diff --git a/poke/pk-hserver.pk b/poke/pk-hserver.pk
index 0d5a2f21..fe1189b3 100644
--- a/poke/pk-hserver.pk
+++ b/poke/pk-hserver.pk
@@ -35,9 +35,9 @@ type HServer_Callback = ()void;
type HServer_Token =
struct
{
- int used_p;
- int id;
- char kind;
+ int<32> used_p;
+ int<32> id;
+ uint<8> kind;
string cmd;
HServer_Callback function;
};
@@ -45,35 +45,35 @@ type HServer_Token =
var hserver_tokens = HServer_Token[hserver_max_tokens]();
/* Get the kind of a given token. */
-fun hserver_token_kind = (int token) char:
+fun hserver_token_kind = (int<32> token) uint<8>:
{
var index = token % hserver_max_tokens;
return hserver_tokens[index].kind;
}
/* Get the command associated with a given token. */
-fun hserver_token_cmd = (int token) string:
+fun hserver_token_cmd = (int<32> token) string:
{
var index = token % hserver_max_tokens;
return hserver_tokens[index].cmd;
}
/* Get the function associated with a given token. */
-fun hserver_token_function = (int token) HServer_Callback:
+fun hserver_token_function = (int<32> token) HServer_Callback:
{
var index = token % hserver_max_tokens;
return (hserver_tokens[index].function);
}
/* Determine whether a given token exists. */
-fun hserver_token_p = (int token) int:
+fun hserver_token_p = (int<32> token) int<32>:
{
var index = token % hserver_max_tokens;
return hserver_tokens[index].used_p;
}
/* Allocate and get a random token. */
-fun hserver_get_token = uint:
+fun hserver_get_token = uint<32>:
{
var index = hserver_cur_token % hserver_max_tokens;
@@ -87,7 +87,7 @@ fun hserver_get_token = uint:
/* Build a hserver hyperlink. */
-fun hserver_make_hyperlink = (char kind,
+fun hserver_make_hyperlink = (uint<8> kind,
string cmd = "",
HServer_Callback function = lambda void: {})
string:
{
@@ -111,7 +111,7 @@ fun hserver_make_hyperlink = (char kind,
/* Print an hserver-served hyperlink. */
-fun hserver_print_hl = (char kind, string str, string cmd,
+fun hserver_print_hl = (uint<8> kind, string str, string cmd,
HServer_Callback function = lambda void: {}) void:
{
var url = hserver_make_hyperlink (kind, cmd, (function));
diff --git a/poke/pk-save.pk b/poke/pk-save.pk
index f2f01d6e..ad80a0f3 100644
--- a/poke/pk-save.pk
+++ b/poke/pk-save.pk
@@ -68,12 +68,12 @@ See `.doc save' for more information.",
pk_save_append, pk_save_verbose)
};
-fun save = (int ios = get_ios,
+fun save = (int<32> ios = get_ios,
string file = "",
- off64 from = pk_save_from,
- off64 size = pk_save_size,
- int append = pk_save_append,
- int verbose = pk_save_verbose) void:
+ offset<int<64>,b> from = pk_save_from,
+ offset<int<64>,b> size = pk_save_size,
+ int<32> append = pk_save_append,
+ int<32> verbose = pk_save_verbose) void:
{
if (file == "" || size == 0#B)
return;
diff --git a/poke/pk-scrabble.pk b/poke/pk-scrabble.pk
index 92e6f8cb..c2dcbd76 100644
--- a/poke/pk-scrabble.pk
+++ b/poke/pk-scrabble.pk
@@ -72,15 +72,15 @@ See `.doc scrabble' for more information.",
pk_scrabble_ent_size)
};
-fun scrabble = (off64 from = pk_scrabble_from,
- off64 size = pk_scrabble_size,
+fun scrabble = (offset<int<64>,b> from = pk_scrabble_from,
+ offset<int<64>,b> size = pk_scrabble_size,
string from_pattern = pk_scrabble_from_pattern,
string to_pattern = from_pattern,
- off64 ent_size = pk_scrabble_ent_size,
- int from_ios = get_ios,
- int to_ios = from_ios) void:
+ offset<int<64>,b> ent_size = pk_scrabble_ent_size,
+ int<32> from_ios = get_ios,
+ int<32> to_ios = from_ios) void:
{
- type Entity = struct { char code; bit[ent_size] value; };
+ type Entity = struct { uint<8> code; uint<1>[ent_size] value; };
var ent = Entity {};
var to = from + size;
@@ -94,7 +94,7 @@ fun scrabble = (off64 from = pk_scrabble_from,
{
collected = Entity[]();
- fun lookup_entity = (char code) Entity:
+ fun lookup_entity = (uint<8> code) Entity:
{
for (ent in collected where ent.code == code)
return ent;
@@ -103,14 +103,14 @@ fun scrabble = (off64 from = pk_scrabble_from,
for (var i = 0; i < from_pattern'length; i++, from += ent_size)
collected += [Entity { code = from_pattern[i],
- value = unmap bit[ent_size] @ from_ios : from}];
+ value = unmap uint<1>[ent_size] @ from_ios :
from}];
for (var i = 0; i < to_pattern'length; i++)
{
ent = lookup_entity (to_pattern[i]);
if (ent.code != '\0')
{
- bit[ent_size] @ to_ios : end = ent.value;
+ uint<1>[ent_size] @ to_ios : end = ent.value;
end += ent_size;
}
}
diff --git a/poke/pk-settings.pk b/poke/pk-settings.pk
index a98dc23c..46420779 100644
--- a/poke/pk-settings.pk
+++ b/poke/pk-settings.pk
@@ -62,14 +62,14 @@ type Poke_Setting =
= (string s) int<32>: { return strchr (s, '\n') == s'length; }
string name;
- int kind : kind in [POKE_SETTING_INT,
- POKE_SETTING_BOOL,
- POKE_SETTING_STR];
+ int<32> kind : kind in [POKE_SETTING_INT,
+ POKE_SETTING_BOOL,
+ POKE_SETTING_STR];
string summary : is_line_p (summary);
string usage : is_line_p (usage);
string description;
()any getter;
- (any)int setter;
+ (any)int<32> setter;
};
/* The global settings registry. */
@@ -174,7 +174,7 @@ Pretty-printers are defined as methods named `_print'.",
{
return vm_opprint;
},
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
vm_set_opprint (val as int<32>);
return 1;
@@ -204,7 +204,7 @@ The entry above makes poke to automatically load the maps
`elf.map'
and `dwarf.map' when opening any file whose name ends in `.o',
provided `auto-map' is set to `yes'.",
getter = lambda any: { return pk_auto_map_p; },
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
pk_auto_map_p = val as int<32>;
return 1;
@@ -237,7 +237,7 @@ Example of a prompt with prompt-commented, map information,
and `prompt-maps' se
",
getter = lambda any: { return pk_prompt_commented_p; },
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
pk_prompt_commented_p = val as int<32>;
return 1;
@@ -263,7 +263,7 @@ Example of a prompt with map information and `prompt-maps'
set to
Which indicates that the opening of the IO space `foo.o' resulted in
the `elf.map' and `dwarf.map' maps to be automatically loaded.",
getter = lambda any: { return pk_prompt_maps_p; },
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
pk_prompt_maps_p = val as int<32>;
return 1;
@@ -289,7 +289,7 @@ Example:
This setting defaults to `no'.",
getter = lambda any: { return vm_omaps; },
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
vm_set_omaps (val as int<32>);
return 1;
@@ -311,7 +311,7 @@ for hexadecimal.",
{
return vm_obase;
},
- setter = lambda (any v) int:
+ setter = lambda (any v) int<32>:
{
var obase = v as int<32>;
@@ -344,7 +344,7 @@ Example:
The default value is 0, which means no limit.",
getter = lambda any: { return vm_oacutoff; },
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
vm_set_oacutoff (val as int<32>);
return 1;
@@ -372,7 +372,7 @@ Example:
The default value for `odepth' is 0, which means infinite depth.",
getter = lambda any: { return vm_odepth; },
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
vm_set_odepth (val as int<32>);
return 1;
@@ -401,7 +401,7 @@ Example:
This setting defaults to 2.
See also \".help omode\".",
getter = lambda any: { return vm_oindent; },
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
vm_set_oindent (val as int<32>);
return 1;
@@ -448,7 +448,7 @@ The default value of `omode' is `flat'.",
assert (0, "this point shouldn't be reached");
},
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
var s = val as string;
@@ -489,7 +489,7 @@ order to communicate with the network.",
else
return "little";
},
- setter = lambda (any v) int:
+ setter = lambda (any v) int<32>:
{
var s = v as string;
var endian = ENDIAN_LITTLE;
@@ -528,7 +528,7 @@ text version of the user manual.
See also \".help .doc\".",
getter = lambda any: { return pk_doc_viewer; },
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
var s = val as string;
@@ -552,7 +552,7 @@ be paged or not. Each page will have the height of the
terminal.
This setting is `no' by default.",
getter = lambda any: { return pk_pager_p; },
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
pk_pager_p = val as int<32>;
return 1;
@@ -578,7 +578,7 @@ disabled once the debugging is done.
This setting is `no' by default.",
getter = lambda any: { return pk_tracer_p; },
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
pk_tracer_p = val as int<32>;
return 1;
@@ -603,7 +603,7 @@ force the re-mapping of any given value, explicitly.
This setting is `yes' by default.",
getter = lambda any: { return vm_autoremap; },
- setter = lambda (any val) int:
+ setter = lambda (any val) int<32>:
{
vm_set_autoremap (val as int<32>);
return 1;
@@ -657,9 +657,9 @@ fun pk_settings_dump = void:
table.column (setting.name, "",
hserver_make_hyperlink ('e', ".help " + setting.name));
table.column (setting.kind == POKE_SETTING_INT
- ? format ("%i32d", setting.getter as int)
+ ? format ("%i32d", setting.getter as int<32>)
: setting.kind == POKE_SETTING_BOOL
- ? setting.getter as int ? "yes" : "no"
+ ? setting.getter as int<32> ? "yes" : "no"
: setting.kind == POKE_SETTING_STR
? setting.getter as string
: "<unknown>",
@@ -681,11 +681,11 @@ fun pk_settings_dump = void:
var setting_setter = (setting.setter);
fun toggle_setting = void:
{
- var newval = !(setting_getter as int);
+ var newval = !(setting_getter as int<32>);
print ("Toggling setting " + setting_name
+ " to " + (newval ? "`yes'" : "`no'") + "\n");
- setting_setter (!(setting_getter as int));
+ setting_setter (!(setting_getter as int<32>));
}
table.column ("[toggle]", "",
diff --git a/poke/poke.c b/poke/poke.c
index 28cfbba8..5f33042c 100644
--- a/poke/poke.c
+++ b/poke/poke.c
@@ -107,6 +107,11 @@ int poke_default_auto_map_p = 1;
int poke_no_hserver_arg = 0;
+/* The following global determines whether the user specified to not
+ load "standard" types in the Poke incremental compiler. */
+
+int poke_no_stdtypes_arg = 0;
+
/* This is used by commands to indicate to the REPL that it must
exit. */
@@ -138,7 +143,8 @@ enum
STYLE_DARK_ARG,
STYLE_BRIGHT_ARG,
NO_AUTO_MAP_ARG,
- NO_HSERVER_ARG
+ NO_HSERVER_ARG,
+ NO_STDTYPES_ARG
};
static const struct option long_options[] =
@@ -156,6 +162,7 @@ static const struct option long_options[] =
{"style-bright", no_argument, NULL, STYLE_BRIGHT_ARG},
{"no-auto-map", no_argument, NULL, NO_AUTO_MAP_ARG},
{"no-hserver", no_argument, NULL, NO_HSERVER_ARG},
+ {"no-stdtypes", no_argument, NULL, NO_STDTYPES_ARG},
{NULL, 0, NULL, 0},
};
@@ -202,6 +209,7 @@ print_help (void)
#if HAVE_HSERVER
puts (_(" --no-hserver do not run the hyperlinks
server"));
#endif
+ puts (_(" --no-stdtypes do not define standard
types"));
puts (_(" --quiet be as terse as possible"));
puts (_(" --help print a help message and
exit"));
puts (_(" --version show version and exit"));
@@ -391,6 +399,9 @@ parse_args_1 (int argc, char *argv[])
case NO_HSERVER_ARG:
poke_no_hserver_arg = 1;
break;
+ case NO_STDTYPES_ARG:
+ poke_no_stdtypes_arg = 1;
+ break;
case 'q':
case NO_INIT_FILE_ARG:
poke_load_init_file = 0;
@@ -494,6 +505,7 @@ parse_args_2 (int argc, char *argv[])
}
case NO_AUTO_MAP_ARG:
case NO_HSERVER_ARG:
+ case NO_STDTYPES_ARG:
case 'q':
case NO_INIT_FILE_ARG:
/* These are handled in parse_args_1. */
@@ -599,7 +611,8 @@ initialize (int argc, char *argv[])
pk_term_init (argc, argv);
/* Initialize the poke incremental compiler. */
- poke_compiler = pk_compiler_new (&poke_term_if);
+ poke_compiler = pk_compiler_new_with_flags (&poke_term_if,
+ poke_no_stdtypes_arg ?
PK_F_NOSTDTYPES : 0);
if (poke_compiler == NULL)
pk_fatal ("creating the incremental compiler");
--
2.30.2
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [COMMITTED] poke: support for --no-stdtypes,
Jose E. Marchesi <=