1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-26 04:00:43 +03:00

Further work on enumerations

This commit is contained in:
Graham Nelson 2023-06-22 09:22:19 +01:00
parent a93da24ee7
commit a2e0cc98bb
13 changed files with 26 additions and 11 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.2.0-beta+6W64 'Krypton' (21 June 2023)
[Version](notes/versioning.md): 10.2.0-beta+6W65 'Krypton' (22 June 2023)
## About Inform

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 21 June 2023
Build Number: 6W64
Build Date: 22 June 2023
Build Number: 6W65

View file

@ -734,6 +734,7 @@ Section 1 - Enumerations
To decide which number is number of (S - description of values)
(documented at ph_numberof):
(- {-primitive-definition:number-of} -).
To decide what number is the numerical value of (V - enumerated value): (- {V} -).
To decide which K is (name of kind of enumerated value K) after (X - K)
(documented at ph_enumafter):
(- {-next-routine:K}({X}) -).

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "Architecture16Kit",
"version": "10.2.0-beta+6W64"
"version": "10.2.0-beta+6W65"
},
"compatibility": "16-bit",
"kit-details": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "Architecture32Kit",
"version": "10.2.0-beta+6W64"
"version": "10.2.0-beta+6W65"
},
"compatibility": "32-bit",
"kit-details": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "BasicInformKit",
"version": "10.2.0-beta+6W64"
"version": "10.2.0-beta+6W65"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "CommandParserKit",
"version": "10.2.0-beta+6W64"
"version": "10.2.0-beta+6W65"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "EnglishLanguageKit",
"version": "10.2.0-beta+6W64"
"version": "10.2.0-beta+6W65"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "WorldModelKit",
"version": "10.2.0-beta+6W64"
"version": "10.2.0-beta+6W65"
},
"needs": [ {
"need": {

View file

@ -915,6 +915,7 @@ Section 1 - Enumerations
To decide which number is number of (S - description of values)
(documented at ph_numberof):
(- {-primitive-definition:number-of} -).
To decide what number is the numerical value of (V - enumerated value): (- {V} -).
To decide which K is (name of kind of enumerated value K) after (X - K)
(documented at ph_enumafter):
(- {-next-routine:K}({X}) -).

View file

@ -350,14 +350,18 @@ void Instances::make_instances_from_Neptune(void) {
LOOP_OVER(kc, kind_constructor) {
linked_list *L = KindConstructors::instances(kc);
kind_constructor_instance *kci;
inter_ti current_val = 1;
LOOP_OVER_LINKED_LIST(kci, kind_constructor_instance, L) {
wording W = Feeds::feed_text(kci->natural_language_name);
kind *K = Kinds::base_construction(kc);
pcalc_prop *prop = Propositions::Abstract::to_create_something(K, W);
Assert::true(prop, CERTAIN_CE);
instance *I = Instances::latest();
RTKindConstructors::set_explicit_runtime_instance_value(K, I, (inter_ti) kci->value);
if (kci->value_specified) current_val = (inter_ti) kci->value;
RTKindConstructors::set_explicit_runtime_instance_value(K, I, current_val);
RTInstances::set_translation(I, kci->identifier);
// LOG("From kit: %W = %S = %d -> $O\n", W, kci->identifier, current_val, I);
current_val++;
}
}
}

View file

@ -101,11 +101,19 @@ void KindCommands::apply(single_kind_command stc, kind_constructor *con) {
}
if (tcc == instance_KCC) {
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, stc.textual_argument, L" *(%c+?) *= *(%c+?) *= *(%d+) *")) {
if (Regexp::match(&mr, stc.textual_argument, L" *(%c+?) *= *(%C+) *= *(%d+) *")) {
kind_constructor_instance *kci = CREATE(kind_constructor_instance);
kci->natural_language_name = Str::duplicate(mr.exp[0]);
kci->identifier = Str::duplicate(mr.exp[1]);
kci->value = Str::atoi(mr.exp[2], 0);
kci->value_specified = TRUE;
ADD_TO_LINKED_LIST(kci, kind_constructor_instance, con->instances);
} else if (Regexp::match(&mr, stc.textual_argument, L" *(%c+?) *= *(%C+) *")) {
kind_constructor_instance *kci = CREATE(kind_constructor_instance);
kci->natural_language_name = Str::duplicate(mr.exp[0]);
kci->identifier = Str::duplicate(mr.exp[1]);
kci->value = 0;
kci->value_specified = FALSE;
ADD_TO_LINKED_LIST(kci, kind_constructor_instance, con->instances);
} else {
NeptuneFiles::error(stc.textual_argument,

View file

@ -135,6 +135,7 @@ typedef struct kind_constructor_instance {
struct text_stream *natural_language_name;
struct text_stream *identifier;
int value;
int value_specified;
} kind_constructor_instance;
@ The "tupling" of an argument is the extent to which an argument can be