_F|~8R~Ka*
zrD$;jD$(LbD}gPlB`c&KTT~^IOI~-ZoLUrr(8sQ9Wv#l!tCE2vbx7a%(}Cak(~-n(
Slh|z%yB#f_rliV+{{H~gK_D3b
diff --git a/inform7/Internal/Inter/EnglishLanguageKit/arch-16d.interb b/inform7/Internal/Inter/EnglishLanguageKit/arch-16d.interb
index 546074885125ff37c44bc8a4b7ca9f34abd3c496..c364117600706ce239207d058d70db20c8a9b343 100644
GIT binary patch
delta 5362
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
delta 5442
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
diff --git a/inform7/Internal/Inter/EnglishLanguageKit/arch-32.interb b/inform7/Internal/Inter/EnglishLanguageKit/arch-32.interb
index e9ae300010e73f7e66bde3454a4ab58e6f35c107..5ddd68b8c5850a0d77cec4a6eba1788bb467efca 100644
GIT binary patch
delta 5348
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
JS*voP|3Aa2^K$?I
delta 5456
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
diff --git a/inform7/Tests/Test Makes/Eg4-C/textual.txt b/inform7/Tests/Test Makes/Eg4-C/textual.txt
index db49cdcb4..afa2fc324 100644
--- a/inform7/Tests/Test Makes/Eg4-C/textual.txt
+++ b/inform7/Tests/Test Makes/Eg4-C/textual.txt
@@ -3916,21 +3916,15 @@ package main _plain
constant NO_USE_OPTIONS = 17
package connectors _linkage
package architectural _linkage
- constant WORDSIZE = 4 __architectural
- constant NULL = 0xffffffff __architectural
- constant WORD_HIGHBIT = 0x80000000 __architectural
- constant WORD_NEXTTOHIGHBIT = 0x40000000 __architectural
- constant IMPROBABLE_VALUE = 0xdeadce11 __architectural
- constant MAX_POSITIVE_NUMBER = 2147483647 __architectural
- constant MIN_NEGATIVE_NUMBER = -2147483648 __architectural
- constant TARGET_GLULX = 1 __architectural
- constant DEBUG = 1 __architectural
- constant String = 0 __architectural __veneer
- constant Routine = 0 __architectural __veneer
- constant Object = 0 __architectural __veneer
- constant Class = 0 __architectural __veneer
- constant #dictionary_table = 0 __architectural __veneer
- constant #grammar_table = 0 __architectural __veneer
+ constant WORDSIZE = 4
+ constant NULL = 0xffffffff
+ constant WORD_HIGHBIT = 0x80000000
+ constant WORD_NEXTTOHIGHBIT = 0x40000000
+ constant IMPROBABLE_VALUE = 0xdeadce11
+ constant MAX_POSITIVE_NUMBER = 2147483647
+ constant MIN_NEGATIVE_NUMBER = -2147483648
+ constant TARGET_GLULX = 1
+ constant DEBUG = 1
package basic_inform_by_graham_nelson _module
constant (int32) ^category = 3 __translation="^category_U1"
constant (text) ^author = "Graham Nelson" __translation="^author_U1"
diff --git a/inform7/if-module/Chapter 3/Backdrops.w b/inform7/if-module/Chapter 3/Backdrops.w
index b82f0a38c..62e7c2806 100644
--- a/inform7/if-module/Chapter 3/Backdrops.w
+++ b/inform7/if-module/Chapter 3/Backdrops.w
@@ -195,12 +195,11 @@ int Backdrops::complete_model(int stage) {
@ =
package_request *PR = Hierarchy::package_within(INLINE_PROPERTIES_HAP, RTInstances::package(I));
inter_name *iname = Hierarchy::make_iname_in(INLINE_PROPERTY_HL, PR);
- packaging_state save = EmitArrays::begin_word(iname, K_value);
+ packaging_state save = EmitArrays::begin_inline(iname, K_value);
inference *inf;
POSITIVE_KNOWLEDGE_LOOP(inf, Instances::as_subject(I), found_in_inf)
EmitArrays::iname_entry(RTInstances::value_iname(Backdrops::get_inferred_location(inf)));
EmitArrays::end(save);
- InterNames::annotate_b(iname, INLINE_ARRAY_IANN, TRUE);
val_of_found_in = Rvalues::from_iname(iname);
@ =
diff --git a/inform7/runtime-module/Chapter 2/Emit Arrays.w b/inform7/runtime-module/Chapter 2/Emit Arrays.w
index 2fdb4bae0..2f60f54cb 100644
--- a/inform7/runtime-module/Chapter 2/Emit Arrays.w
+++ b/inform7/runtime-module/Chapter 2/Emit Arrays.w
@@ -61,6 +61,12 @@ packaging_state EmitArrays::begin_verb(inter_name *name, kind *K) {
return save;
}
+packaging_state EmitArrays::begin_inline(inter_name *name, kind *K) {
+ packaging_state save = Packaging::enter_home_of(name);
+ EmitArrays::begin_inner(name, K, FALSE, CONST_LIST_FORMAT_INLINE);
+ return save;
+}
+
@ Sum constants are not really arrays at all, but for difficult reasons to
do with linking we store them as such for now. The idea is that we want a
constant like |CONST1 + CONST2 + CONST3|, in circumstances where we don't
diff --git a/inform7/runtime-module/Chapter 2/Emit.w b/inform7/runtime-module/Chapter 2/Emit.w
index 0b6409bbe..947e32291 100644
--- a/inform7/runtime-module/Chapter 2/Emit.w
+++ b/inform7/runtime-module/Chapter 2/Emit.w
@@ -332,9 +332,7 @@ void Emit::intervention(int stage, text_stream *segment, text_stream *part,
=
void Emit::append(inter_name *iname, text_stream *text) {
- LOG("Append '%S'\n", text);
- packaging_state save = Packaging::enter_home_of(iname);
inter_symbol *symbol = InterNames::to_symbol(iname);
- Produce::guard(AppendInstruction::new(Emit::at(), symbol, text, Emit::baseline(), NULL));
- Packaging::exit(Emit::tree(), save);
+ SymbolAnnotation::set_t(InterPackage::tree(InterSymbol::package(symbol)),
+ InterSymbol::package(symbol), symbol, APPEND_IANN, text);
}
diff --git a/inform7/runtime-module/Chapter 5/Door Instances.w b/inform7/runtime-module/Chapter 5/Door Instances.w
index 5032cde24..8082f0a43 100644
--- a/inform7/runtime-module/Chapter 5/Door Instances.w
+++ b/inform7/runtime-module/Chapter 5/Door Instances.w
@@ -187,10 +187,9 @@ parse_node *RTDoors::found_in_for_2_sided(instance *I, instance *R1, instance *R
package_request *PR =
Hierarchy::package_within(INLINE_PROPERTIES_HAP, RTInstances::package(I));
inter_name *S = Hierarchy::make_iname_in(INLINE_PROPERTY_HL, PR);
- packaging_state save = EmitArrays::begin_word(S, K_value);
+ packaging_state save = EmitArrays::begin_inline(S, K_value);
EmitArrays::iname_entry(RTInstances::value_iname(R1));
EmitArrays::iname_entry(RTInstances::value_iname(R2));
EmitArrays::end(save);
- InterNames::annotate_b(S, INLINE_ARRAY_IANN, TRUE);
return Rvalues::from_iname(S);
}
diff --git a/inform7/runtime-module/Chapter 6/Action Bitmap Property.w b/inform7/runtime-module/Chapter 6/Action Bitmap Property.w
index d2cf78cca..2a22707b3 100644
--- a/inform7/runtime-module/Chapter 6/Action Bitmap Property.w
+++ b/inform7/runtime-module/Chapter 6/Action Bitmap Property.w
@@ -19,9 +19,8 @@ parse_node *RTActionBitmaps::compile_action_bitmap_property(inference_subject *s
package_request *PR = Hierarchy::package_within(KIND_INLINE_PROPERTIES_HAP, R);
N = Hierarchy::make_iname_in(KIND_INLINE_PROPERTY_HL, PR);
}
- packaging_state save = EmitArrays::begin_word(N, K_number);
+ packaging_state save = EmitArrays::begin_inline(N, K_number);
for (int i=0; i<=((NUMBER_CREATED(action_name))/16); i++) EmitArrays::numeric_entry(0);
EmitArrays::end(save);
- InterNames::annotate_b(N, INLINE_ARRAY_IANN, TRUE);
return Rvalues::from_iname(N);
}
diff --git a/inform7/runtime-module/Chapter 7/Name Properties.w b/inform7/runtime-module/Chapter 7/Name Properties.w
index 0de258de5..2db920cc4 100644
--- a/inform7/runtime-module/Chapter 7/Name Properties.w
+++ b/inform7/runtime-module/Chapter 7/Name Properties.w
@@ -70,7 +70,7 @@ inherit from classes. The concept of additive properties does not exist in Inter
parse_node *Name::name_property_array(instance *I, wording W, wording PW,
int from_kind) {
inter_name *name_array = Name::get_name_array_iname(I->as_subject);
- packaging_state save = EmitArrays::begin_word(name_array, K_value);
+ packaging_state save = EmitArrays::begin_inline(name_array, K_value);
LOOP_THROUGH_WORDING(j, W) {
vocabulary_entry *ve = Lexer::word(j);
@@ -112,6 +112,5 @@ parse_node *Name::name_property_array(instance *I, wording W, wording PW,
}
EmitArrays::end(save);
- InterNames::annotate_b(name_array, INLINE_ARRAY_IANN, TRUE);
return Rvalues::from_iname(name_array);
}
diff --git a/inter/Manual/Data Packages in Textual Inter.w b/inter/Manual/Data Packages in Textual Inter.w
index ca2021e13..2b2ea0315 100644
--- a/inter/Manual/Data Packages in Textual Inter.w
+++ b/inter/Manual/Data Packages in Textual Inter.w
@@ -111,6 +111,12 @@ is not legal, and the keyword |bounded| cannot be used.
for |product{ }|, |difference{ }| and |quotient{ }|. Empty calculated values
are not legal.
+(*) Finally, two special forms of list which are used only in interactive fiction
+projects, and whose semantics are identical to regular lists except for the special
+ways they are compiled: |grammar{ ... }| makes a list which is the command-parser
+grammar for a command verb, and |inline{ ... }| makes a list which is to be the
+value of a property compiled "inline".
+
@ Readers with experience of Inform 6 will recognise that |{ ... }| and |bytes{ ... }|
correspond to I6's |Array -->| and |Array ->| respectively, that |bounded { ... }|
and |bounded bytes{ ... }| correspond to |Array table| and |Array buffer|, and
@@ -475,25 +481,15 @@ question. Because I7 allows those properties to be modified or read either
qua properties or qua table entries, we cannot avoid giving Inter a similar
ability, even though we might prefer not to.
-@h Append and insert.
-Never use either |append| or |insert|.
+@h Insert.
+Never use |insert|.
-@ Well, okay then. These disreputable constructs exist to implement very
-low-level features of Inform 7, going back to its earliest days as a programming
-language, when people were still writing strange hybrid programs partly in I6.
+@ Well, okay then. This exists to implement very low-level features of Inform 7,
+going back to its earliest days as a programming language, when people were
+still writing strange hybrid programs partly in I6.
-|append| attaches raw I6-syntax additions to any instance or enumerated type.
-For example, the I7 source text:
-= (text as Inform 7)
-Include (- has door, -) when defining a door.
-=
-leads to:
-= (text as Inter)
- append K4_door " has door, \n"
-=
-
-|insert| is simpler, and tells Inter that it needs to add this raw I6-syntax
-material to the program:
+|insert| tells Inter that it needs to add this raw I6-syntax material to the
+program:
= (text as Inter)
insert "\n[ LITTLE_USED_DO_NOTHING_R; rfalse; ];\n"
=
diff --git a/inter/Manual/Inform Annotations.w b/inter/Manual/Inform Annotations.w
index 871669b40..a511b7af9 100644
--- a/inter/Manual/Inform Annotations.w
+++ b/inter/Manual/Inform Annotations.w
@@ -4,148 +4,123 @@ The standard set of symbol annotations used within Inform.
@h Status.
The Inter specification allows for any number of annotations to be used;
-none are required.
+none are required. The ones listed below are those used in the Inform toolchain
+at present.
-The Inform compiler, however, has a standard set of annotations used to
-pass hints from the front end of the compiler to the back end; hints which
-mainly do not change the meaning of the program, but cause the eventual
-Inform 6 code to be generated in a particular order, or using particular
-syntaxes, to be make it easier to read or more compatible with code not
-generated by I7.
+As a general guideline, annotations are best used for temporary storage during
+complex operations (optimisation, code generation, and so on), rather than for
+information which changes the functionality of a program. But this is only a
+guideline, and several of the cases below could be argued to break it.
-@h Miscellaneous constants.
+What is certainly true is that we want to avoid annotations if there are better
+ways to achieve the same thing. At one time there were over 30 in use, but the
+figure is now below 10.
-@ |__late|. Applies to |constant|. Suggests that this should be placed late
-on the final compiled code, rather than at its current place. (This clue
-helps the I6 code generator to avoid not-yet-declared errors; I6 is quite
-finicky about code ordering.)
+@h Translation.
+The final code we generate is itself (probably) the source code of a program
+in some other language -- C, for example. That means that most of the symbols
+in our Inter program will be "translated" into identifiers in that final
+program. For example, the Inter declaration:
+= (text as Inter)
+ constant BakersDozen = 13
+=
+might ultimately be compiled to:
+= (text as C)
+ #define CON_019900_BKRSDZN 13
+=
+An exaggerated example, perhaps, but the point is that it's normally none of
+our business what identifiers the final code-generator chooses to use.
-@ |__noun_filter|. Applies to |constant| which is a function. Marks that this
-function is a noun filter in command parser grammar.
+However, we can override its choice like so:
+= (text as Inter)
+ constant BakersDozen = 13 __translation="BAKERS_DOZEN"
+=
+And now it would come out as:
+= (text as C)
+ #define BAKERS_DOZEN 13
+=
-@ |__scope_filter|. Applies to |constant| which is a function. Marks that this
-function is a scope filter in command parser grammar.
+The |__translation| annotation is sometimes added by the final code-generator
+itself, to keep track of its translation decisions, but can also be added by
+the Inform 7 front-end compiler. Ideally it wouldn't ever do so, but this is
+the only sensible way to implement the low-level language feature:
+= (text as Inform 7)
+The tally is a number that varies. The tally translates into Inter as "SHAZAM".
+=
+And this is in turn is a feature we can't simply abolish, or not without
+inventing some similar bodge, because it's needed in order to reconcile the
+natural-language names for certain standard properties (e.g., "lighted")
+with their kit-source equivalents (e.g. |lit|).
-@ |__action|. Applies to |constant|. Marks it as the name of an action.
-
-@ |__fake_action|. Applies to symbols already tagged |_action|, and marks
-that their actions are I6 template fake actions. (It currently contains
-just four of these.)
+@h Append.
+Like the |insert| instruction (see //Data Packages in Textual Inter//), the
+|__append| annotation subverts Inter by writing some code in raw Inform 6
+syntax. This can be added to any definition of an instance of an object type,
+or to the type itself.
-@ |__assimilated|. Applies to |constant|. Marks it as a symbol defined in
-I6 template code which has been assimilated into memory inter.
+For example, the I7 source text:
+= (text as Inform 7)
+Include (- has door, -) when defining a door.
+=
+leads to:
+= (text as Inter)
+ kind K4_door <= K1_thing __append=" has door, "
+=
-@ |__holding|. Applies to |constant|. This is part of a convoluted system
-for handling references to constants not yet defined, in the sense that
-the inter to define them has not yet been generated in memory. A "holding"
-constant is used to reserve a name for later definition.
+Whereas to some extent |insert| can work even if the target is not I6, the
+|__append| annotation ties the program to I6 only. At some point we may
+simply abolish the "Include... when defining..." feature from I7, and then
+we'll gladly remove |__append|. Consider it deprecated already.
-@ |__delenda_est|. Applies to |constant|. Likewise; but marks a symbol for
-later deletion rather than later definition.
+@h Assimilation markers.
+Every symbol (other than a function name) whose definition was assimilated from
+Inform 6-syntax code in the source of a kit is given the boolean annotation
+|__assimilated|.
-@h Constant lists.
+In addition, if the definition is of a fake action or an object, the annotation
+|__fake_action| or |__object| will be applied. For example:
-@ |__buffer_array|. Applies to |constant| which is a literal list. Asks
-this to be compiled as virtual machine command parsing buffer.
-
-@ |__byte_array|. Applies to |constant| which is a literal list. Asks
-this to be compiled as an array of bytes.
-
-@ |__string_array|. Applies to |constant| which is a literal list. Asks this
-to be compiled as an array of bytes preceded by its size.
-
-@ |__table_array|. Applies to |constant| which is a literal list. Asks this
-to be compiled as an array of words preceded by its size.
+= (text as Inform 6)
+Constant Dozen = 12;
+Fake_action PluralFound;
+Object thedark "(darkness object)";
+=
+assimilates to:
+= (text as Inter)
+ package Dozen_con _plain
+ constant Dozen = 12 __assimilated
+ package ##PluralFound_con _plain
+ constant ##PluralFound = 0 __assimilated __fake_action
+ package thedark_con _plain
+ constant thedark = 0 __assimilated __object
+=
+See the Inter test case |Assim|.
-@ |__inline_array|. Applies to |constant| which is a literal list. Asks that,
-if this is compiled as a property value in Inform 6, it should use the inline
-syntax (as is conventional for the I6 |name| property, for example).
+These three markers are applied only during assimilation, and thus only by Inter.
+The main Inform 7 compiler never applies them.
-@ |__verb|. Applies to |constant| which is a literal list. Asks this to be
-compiled as Inform 6 command parser grammar.
+It would be feasible to combine these three annotations into a single one, say
+|__assimilated_from="DIRECTIVE"|, marking everything with the I6 directive it
+came from. But while that would be elegant it would cost storage and time.
+Boolean annotations are cheaper, and |__assimilated| occurs a lot.
-@ |__meta_verb|. Applies to |constant| which is a literal list and also has
-the |__verb| annotation: means that this is a "meta-verb", and should be
-compiled after the regular verbs.
+@h Miscellaneous code-generation storage.
+As noted above, the main use case intended for annotations is as a way for
+optimisation or code-generation pipeline steps to attach notes to the tree.
+These are of no significance once those steps are complete, and do not change
+the meaning of the program.
-@h Primitive names.
+They can also come or go without notice; they are not really part of the Inter
+specification at all. But briefly, the current set used is:
-@ |__bip|. Applies to |primitive|. This is used internally in the code
-generator to match textual names such as |!bitwisenot| with functionality:
-it's essentially a cache to avoid having to parse names over and over.
-(BIP stands for "built in primitive".)
+|__inner_property_name="NAME"| is used by //final: Vanilla Objects// to mark
+which property name belongs to which two-word property array.
-@h Local variables.
+|__object_kind_counter=NUMBER| is used by //pipeline: Kinds// to number off
+the kinds of object found in the program.
-@ |__call_parameter|. Applies to |local|. Inform's front end marks
-call parameters this way in case optimisation stages in the back end might
-need to know; and if nothing else, it enables the code generator to print
-I6 comments showing the intention.
-
-@ |__implied_call_parameter|. Applies to |local|. Similarly. What
-makes a call parameter "implied" is that it is not directly one of the
-tokens from an Inform 7 function, but has been added for some implementation
-reason. For example, a phrase option bitmap is passed as an implied call
-parameter.
+|__array_address=NUMBER| is used by //final: C Memory Model// to mark the
+address in process memory of each array.
-@h Global variables.
-
-@ |__explicit_variable|. Applies to |variable|. Marks this as having a name
-already supplied in high-level I7 source text.
-
-@h Kinds.
-
-@ |__weak_ID|. Applies to |kind|. The weak ID of a kind is a single small
-non-negative integer which is unique to that kind's constructor; it can't
-distinguish between lists of X and lists of Y, but in general it can
-distinguish a list from a number, or a number from a text. This annotation
-marks the name of a kind with the same weak ID value which will be used
-at run-time for that kind.
-
-@ |__source_order|. Applies (undependently) to |property| and to |kind|:
-a lower value for this annotation means that one property was defined earlier
-in the Inform source text that the other, and similarly for kinds.
-
-@h Instances.
-
-@ |__object_kind_counter|. Applies to |kind|. Towards the end of code
-generation, it's convenient to count the subkinds of |K_object| in order
-of their creation in the original source text. That count is recorded
-here: |K1_thing| will get |__object_kind_counter=1|, and so on.
-
-@ |__arrow_count|. Applies to |instance| of objects; it's the depth in the
-spatial containment tree, where 0 is the top level (usually rooms), 1 the
-level for things immediately inside level-0 objects, and so on. So called
-because the Inform 6 notation for containment is this many |->| arrows in
-a row. This is applied only at the final stage of code generation.
-
-@ |__declaration_order|. Applies to |instance| of objects; it's the order
-in which they are declared in the final Inform 6 code, with the first object
-as 0, and so on. This is applied only at the final stage of code generation.
-
-@h Properties.
-
-@ |__either_or|. Applies to |property|. Marks it as one which is either
-held or not held.
-
-@ |__attribute|. Applies to |property|, and only to those also annotated
-with |__either_or|. Asks to compile this at run-time as a virtual machine
-attribute.
-
-@ |__explicit_attribute|. Applies to |property|, and only to those also
-annotated with |__either_or|. Marks this as not only an attribute, but one
-with a name already supplied in high-level I7 source text.
-
-@ |__property_name|. Applies to |property|. Where a property name came from
-I7 source text, and thus has a friendly sort of name ("carrying capacity",
-for example), the Inform front end applies this annotation. The back end
-then uses it only to help run-time I6 code prpduce better error messages
-if the program uses the property incorrectly.
-
-@ |__rto|. Applies to |property|, and marks it as a run-time only property:
-that is, not one which is explicitly present in the Inform 7 source text,
-but one which has been added to provide run-time support for some feature.
-
-@ |__source_order|. Applies (undependently) to |property| and to |kind|:
-a lower value for this annotation means that one property was defined earlier
-in the Inform source text that the other, and similarly for kinds.
+|__global_offset=NUMBER| is used by //final: Inform 6 Global Variables// to
+mark where in its array of global variables a given variable lives.
diff --git a/inter/Tests/General/Assim.intert b/inter/Tests/General/Assim.intert
index 32e91d19c..dac3421d6 100644
--- a/inter/Tests/General/Assim.intert
+++ b/inter/Tests/General/Assim.intert
@@ -24,3 +24,5 @@ package main _plain
splat STUB "#Stub Peach 0;\n"
splat ATTRIBUTE "Attribute marmorial;\n"
splat PROPERTY "Property density;\n"
+ splat FAKEACTION "Fake_action PluralFound;\n"
+ splat OBJECT "Object thedark \"(darkness object)\";\n"
diff --git a/inter/Tests/General/_Results_Ideal/Assim.txt b/inter/Tests/General/_Results_Ideal/Assim.txt
index 3722cb2e5..dfa84e3e2 100644
--- a/inter/Tests/General/_Results_Ideal/Assim.txt
+++ b/inter/Tests/General/_Results_Ideal/Assim.txt
@@ -23,6 +23,10 @@ package main _plain
constant Budger = 32738 __assimilated
package Bydger_con _plain
constant Bydger = 777 __assimilated
+ package ##PluralFound_con _plain
+ constant ##PluralFound = 0 __assimilated __fake_action
+ package thedark_con _plain
+ constant thedark = 0 __assimilated __object
package Falsity_fn _function
package Falsity _code
code
diff --git a/inter/Tests/General/_Results_Ideal/New.txt b/inter/Tests/General/_Results_Ideal/New.txt
index 7fa6a2e67..45dd7aef2 100644
--- a/inter/Tests/General/_Results_Ideal/New.txt
+++ b/inter/Tests/General/_Results_Ideal/New.txt
@@ -2,14 +2,6 @@
packagetype _plain
packagetype _code
packagetype _linkage
-packagetype _module
-packagetype _submodule
-packagetype _function
-packagetype _action
-packagetype _command
-packagetype _property
-packagetype _to_phrase
-packagetype _response
#Pragmas:
#Primitives:
primitive !plus val val -> val
@@ -109,12 +101,12 @@ primitive !message3 val val val val val -> val
primitive !externalcall val val -> val
package main _plain
package architectural _linkage
- constant WORDSIZE = 2 __architectural
- constant NULL = 0xffff __architectural
- constant WORD_HIGHBIT = 0x8000 __architectural
- constant WORD_NEXTTOHIGHBIT = 0x4000 __architectural
- constant IMPROBABLE_VALUE = 0x7fe3 __architectural
- constant MAX_POSITIVE_NUMBER = 32767 __architectural
- constant MIN_NEGATIVE_NUMBER = -32768 __architectural
- constant TARGET_ZCODE = 1 __architectural
- constant DEBUG = 1 __architectural
+ constant WORDSIZE = 2
+ constant NULL = 0xffff
+ constant WORD_HIGHBIT = 0x8000
+ constant WORD_NEXTTOHIGHBIT = 0x4000
+ constant IMPROBABLE_VALUE = 0x7fe3
+ constant MAX_POSITIVE_NUMBER = 32767
+ constant MIN_NEGATIVE_NUMBER = -32768
+ constant TARGET_ZCODE = 1
+ constant DEBUG = 1
diff --git a/inter/Tests/General/_Results_Ideal/Prepare.txt b/inter/Tests/General/_Results_Ideal/Prepare.txt
index 7fa6a2e67..45dd7aef2 100644
--- a/inter/Tests/General/_Results_Ideal/Prepare.txt
+++ b/inter/Tests/General/_Results_Ideal/Prepare.txt
@@ -2,14 +2,6 @@
packagetype _plain
packagetype _code
packagetype _linkage
-packagetype _module
-packagetype _submodule
-packagetype _function
-packagetype _action
-packagetype _command
-packagetype _property
-packagetype _to_phrase
-packagetype _response
#Pragmas:
#Primitives:
primitive !plus val val -> val
@@ -109,12 +101,12 @@ primitive !message3 val val val val val -> val
primitive !externalcall val val -> val
package main _plain
package architectural _linkage
- constant WORDSIZE = 2 __architectural
- constant NULL = 0xffff __architectural
- constant WORD_HIGHBIT = 0x8000 __architectural
- constant WORD_NEXTTOHIGHBIT = 0x4000 __architectural
- constant IMPROBABLE_VALUE = 0x7fe3 __architectural
- constant MAX_POSITIVE_NUMBER = 32767 __architectural
- constant MIN_NEGATIVE_NUMBER = -32768 __architectural
- constant TARGET_ZCODE = 1 __architectural
- constant DEBUG = 1 __architectural
+ constant WORDSIZE = 2
+ constant NULL = 0xffff
+ constant WORD_HIGHBIT = 0x8000
+ constant WORD_NEXTTOHIGHBIT = 0x4000
+ constant IMPROBABLE_VALUE = 0x7fe3
+ constant MAX_POSITIVE_NUMBER = 32767
+ constant MIN_NEGATIVE_NUMBER = -32768
+ constant TARGET_ZCODE = 1
+ constant DEBUG = 1
diff --git a/inter/building-module/Chapter 1/Large-Scale Structure.w b/inter/building-module/Chapter 1/Large-Scale Structure.w
index 973f88b85..4f7f6b6e8 100644
--- a/inter/building-module/Chapter 1/Large-Scale Structure.w
+++ b/inter/building-module/Chapter 1/Large-Scale Structure.w
@@ -182,10 +182,6 @@ not, in fact, all constants -- |self| is a variable at runtime -- but again,
it's for the code-generator to define them as it would like, on a platform
by platform basis.
-Such symbols are the only ones given the |VENEER_IANN| annotation; the term
-veneer alludes to Inform 6's practice of creating a few built-in definitions
-which form the "veneer" of the story file it is generating.
-
For speed, the names of the permitted veneer symbols are stored in a dictionary.
(This may not in fact be worth the overhead any longer: at one time there were
many more of these.)
@@ -198,25 +194,39 @@ inter_symbol *LargeScale::find_architectural_symbol(inter_tree *I, text_stream *
inter_symbols_table *tab = InterPackage::scope(arch);
inter_symbol *S = InterSymbolsTable::symbol_from_name(tab, N);
if (S == NULL) {
- if (create_these_architectural_symbols_on_demand == NULL) {
- create_these_architectural_symbols_on_demand = Dictionaries::new(16, TRUE);
- Dictionaries::create(create_these_architectural_symbols_on_demand, I"#dictionary_table");
- Dictionaries::create(create_these_architectural_symbols_on_demand, I"#actions_table");
- Dictionaries::create(create_these_architectural_symbols_on_demand, I"#grammar_table");
- Dictionaries::create(create_these_architectural_symbols_on_demand, I"self");
- Dictionaries::create(create_these_architectural_symbols_on_demand, I"Routine");
- Dictionaries::create(create_these_architectural_symbols_on_demand, I"String");
- Dictionaries::create(create_these_architectural_symbols_on_demand, I"Class");
- Dictionaries::create(create_these_architectural_symbols_on_demand, I"Object");
- }
+ @;
if (Dictionaries::find(create_these_architectural_symbols_on_demand, N)) {
S = LargeScale::arch_constant_dec(I, N, InterTypes::unchecked(), 0);
- SymbolAnnotation::set_b(S, VENEER_IANN, TRUE);
}
}
return S;
}
+int LargeScale::is_veneer_symbol(inter_symbol *con_name) {
+ if (con_name == NULL) return FALSE;
+ inter_tree_node *D = con_name->definition;
+ if (D == NULL) return FALSE;
+ if (Inode::get_package(D) == LargeScale::architecture_package(Inode::tree(D))) {
+ text_stream *N = InterSymbol::identifier(con_name);
+ if (Dictionaries::find(create_these_architectural_symbols_on_demand, N))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+@ =
+ if (create_these_architectural_symbols_on_demand == NULL) {
+ create_these_architectural_symbols_on_demand = Dictionaries::new(16, TRUE);
+ Dictionaries::create(create_these_architectural_symbols_on_demand, I"#dictionary_table");
+ Dictionaries::create(create_these_architectural_symbols_on_demand, I"#actions_table");
+ Dictionaries::create(create_these_architectural_symbols_on_demand, I"#grammar_table");
+ Dictionaries::create(create_these_architectural_symbols_on_demand, I"self");
+ Dictionaries::create(create_these_architectural_symbols_on_demand, I"Routine");
+ Dictionaries::create(create_these_architectural_symbols_on_demand, I"String");
+ Dictionaries::create(create_these_architectural_symbols_on_demand, I"Class");
+ Dictionaries::create(create_these_architectural_symbols_on_demand, I"Object");
+ }
+
@ The other architectural constants are the ones depending on the architecture
being compiled to. These always exist, and their values are known at compile time.
@@ -279,7 +289,6 @@ inter_symbol *LargeScale::arch_constant(inter_tree *I, text_stream *N,
inter_package *arch = LargeScale::architecture_package(I);
inter_symbols_table *tab = InterPackage::scope(arch);
inter_symbol *S = InterSymbolsTable::symbol_from_name_creating(tab, N);
- SymbolAnnotation::set_b(S, ARCHITECTURAL_IANN, TRUE);
inter_bookmark *IBM = &(I->site.strdata.architecture_bookmark);
Produce::guard(ConstantInstruction::new(IBM, S, type, val,
(inter_ti) InterBookmark::baseline(IBM) + 1, NULL));
diff --git a/inter/bytecode-module/Chapter 2/Annotations.w b/inter/bytecode-module/Chapter 2/Annotations.w
index c261f5080..9dc4f0b7e 100644
--- a/inter/bytecode-module/Chapter 2/Annotations.w
+++ b/inter/bytecode-module/Chapter 2/Annotations.w
@@ -61,12 +61,9 @@ The set of annotations used by the Inform tool suite is as follows.
@e INVALID_IANN from 0
-@e ARCHITECTURAL_IANN
@e ASSIMILATED_IANN
@e FAKE_ACTION_IANN
-@e INLINE_ARRAY_IANN
@e OBJECT_IANN
-@e VENEER_IANN
@e C_ARRAY_ADDRESS_IANN
@e I6_GLOBAL_OFFSET_IANN
@@ -83,12 +80,9 @@ any symbol: it's used to mean "do not make an annotation".
void SymbolAnnotation::declare_canonical_annotations(void) {
SymbolAnnotation::declare(INVALID_IANN, I"__invalid", INTEGER_IATYPE);
- SymbolAnnotation::declare(ARCHITECTURAL_IANN, I"__architectural", BOOLEAN_IATYPE);
SymbolAnnotation::declare(ASSIMILATED_IANN, I"__assimilated", BOOLEAN_IATYPE);
SymbolAnnotation::declare(FAKE_ACTION_IANN, I"__fake_action", BOOLEAN_IATYPE);
- SymbolAnnotation::declare(INLINE_ARRAY_IANN, I"__inline_array", BOOLEAN_IATYPE);
SymbolAnnotation::declare(OBJECT_IANN, I"__object", BOOLEAN_IATYPE);
- SymbolAnnotation::declare(VENEER_IANN, I"__veneer", BOOLEAN_IATYPE);
SymbolAnnotation::declare(APPEND_IANN, I"__append", TEXTUAL_IATYPE);
SymbolAnnotation::declare(INNER_PROPERTY_NAME_IANN, I"__inner_property_name", TEXTUAL_IATYPE);
diff --git a/inter/bytecode-module/Chapter 2/Transmigration.w b/inter/bytecode-module/Chapter 2/Transmigration.w
index 8c85eccf1..3321e8ba0 100644
--- a/inter/bytecode-module/Chapter 2/Transmigration.w
+++ b/inter/bytecode-module/Chapter 2/Transmigration.w
@@ -326,7 +326,7 @@ there are three bad possibilities:
LOOP_OVER_SYMBOLS_TABLE(S, T) {
if (Wiring::is_wired(S)) {
inter_symbol *target = Wiring::cable_end(S);
- if (SymbolAnnotation::get_b(target, ARCHITECTURAL_IANN))
+ if (pack == LargeScale::architecture_package(I))
@
else if (InterSymbol::is_plug(target))
@
diff --git a/inter/bytecode-module/Chapter 3/Inter Constructs.w b/inter/bytecode-module/Chapter 3/Inter Constructs.w
index 0a403b1fa..42f33be5d 100644
--- a/inter/bytecode-module/Chapter 3/Inter Constructs.w
+++ b/inter/bytecode-module/Chapter 3/Inter Constructs.w
@@ -295,7 +295,6 @@ bump of //The Inter Version//.
These are constructs used for instructions outside function bodies:
-@e APPEND_IST
@e COMMENT_IST
@e CONSTANT_IST
@e INSTANCE_IST
@@ -384,7 +383,6 @@ void InterInstruction::create_language(void) {
VersionInstruction::define_construct();
PragmaInstruction::define_construct();
InsertInstruction::define_construct();
- AppendInstruction::define_construct();
TypenameInstruction::define_construct();
ConstantInstruction::define_construct();
InstanceInstruction::define_construct();
diff --git a/inter/bytecode-module/Chapter 4/The Append Construct.w b/inter/bytecode-module/Chapter 4/The Append Construct.w
deleted file mode 100644
index 693d0343b..000000000
--- a/inter/bytecode-module/Chapter 4/The Append Construct.w
+++ /dev/null
@@ -1,85 +0,0 @@
-[AppendInstruction::] The Append Construct.
-
-Defining the append construct.
-
-@h Definition.
-For what this does and why it is used, see //inter: Data Packages in Textual Inter//.
-But please use it as little as possible: in an ideal world it would be abolished.
-
-=
-void AppendInstruction::define_construct(void) {
- inter_construct *IC = InterInstruction::create_construct(APPEND_IST, I"append");
- InterInstruction::specify_syntax(IC, I"append IDENTIFIER TEXT");
- InterInstruction::data_extent_always(IC, 2);
- InterInstruction::permit(IC, INSIDE_PLAIN_PACKAGE_ICUP);
- METHOD_ADD(IC, CONSTRUCT_VERIFY_MTID, AppendInstruction::verify);
- METHOD_ADD(IC, CONSTRUCT_TRANSPOSE_MTID, AppendInstruction::transpose);
- METHOD_ADD(IC, CONSTRUCT_READ_MTID, AppendInstruction::read);
- METHOD_ADD(IC, CONSTRUCT_WRITE_MTID, AppendInstruction::write);
-}
-
-@h Instructions.
-In bytecode, the frame of an |append| instruction is laid out with the
-compulsory words -- see //Inter Nodes// -- followed by:
-
-@d SYMBOL_APPEND_IFLD (DATA_IFLD + 0)
-@d CONTENT_APPEND_IFLD (DATA_IFLD + 1)
-
-=
-inter_error_message *AppendInstruction::new(inter_bookmark *IBM, inter_symbol *S,
- text_stream *append_text, inter_ti level, struct inter_error_location *eloc) {
- inter_tree_node *P = Inode::new_with_2_data_fields(IBM, APPEND_IST,
- /* SYMBOL_APPEND_IFLD: */ InterSymbolsTable::id_at_bookmark(IBM, S),
- /* CONTENT_APPEND_IFLD: */ InterWarehouse::create_text_at(IBM, append_text),
- eloc, level);
- inter_error_message *E = VerifyingInter::instruction(InterBookmark::package(IBM), P);
- if (E) return E;
- NodePlacement::move_to_moving_bookmark(P, IBM);
- return NULL;
-}
-
-void AppendInstruction::transpose(inter_construct *IC, inter_tree_node *P,
- inter_ti *grid, inter_ti grid_extent, inter_error_message **E) {
- P->W.instruction[CONTENT_APPEND_IFLD] = grid[P->W.instruction[CONTENT_APPEND_IFLD]];
-}
-
-@ Verification consists of sanity checks followed by some cross-referencing.
-
-=
-void AppendInstruction::verify(inter_construct *IC, inter_tree_node *P,
- inter_package *owner, inter_error_message **E) {
- *E = VerifyingInter::SID_field(owner, P, SYMBOL_APPEND_IFLD, INVALID_IST);
- if (*E) return;
- *E = VerifyingInter::text_field(owner, P, CONTENT_APPEND_IFLD);
- if (*E) return;
-
- inter_symbol *S = InterSymbolsTable::symbol_from_ID_at_node(P, SYMBOL_APPEND_IFLD);
- text_stream *content = Inode::ID_to_text(P, P->W.instruction[CONTENT_APPEND_IFLD]);
- SymbolAnnotation::set_t(P->tree, P->package, S, APPEND_IANN, content);
-}
-
-@h Creating from textual Inter syntax.
-
-=
-void AppendInstruction::read(inter_construct *IC, inter_bookmark *IBM, inter_line_parse *ilp,
- inter_error_location *eloc, inter_error_message **E) {
- text_stream *identifier = ilp->mr.exp[0], *content = ilp->mr.exp[1];
-
- inter_symbol *S = InterSymbolsTable::symbol_from_name(InterBookmark::scope(IBM), identifier);
- if (S == NULL) { *E = InterErrors::quoted(I"no such identifier", identifier, eloc); return; }
-
- TEMPORARY_TEXT(raw)
- *E = TextualInter::parse_literal_text(raw, content, 0, Str::len(content), eloc);
- if (*E == NULL) *E = AppendInstruction::new(IBM, S, raw, (inter_ti) ilp->indent_level, eloc);
- DISCARD_TEXT(content)
-}
-
-@h Writing to textual Inter syntax.
-
-=
-void AppendInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_node *P) {
- inter_symbol *S = InterSymbolsTable::symbol_from_ID_at_node(P, SYMBOL_APPEND_IFLD);
- text_stream *content = Inode::ID_to_text(P, P->W.instruction[CONTENT_APPEND_IFLD]);
- WRITE("append %S ", InterSymbol::identifier(S));
- TextualInter::write_text(OUT, content);
-}
diff --git a/inter/bytecode-module/Chapter 4/The Constant Construct.w b/inter/bytecode-module/Chapter 4/The Constant Construct.w
index 89df2e170..c2ef01070 100644
--- a/inter/bytecode-module/Chapter 4/The Constant Construct.w
+++ b/inter/bytecode-module/Chapter 4/The Constant Construct.w
@@ -61,16 +61,17 @@ can therefore be calculated as half of (the instruction extent minus |DATA_CONST
@d CONST_LIST_FORMAT_B_BYTES 7
@d CONST_LIST_FORMAT_B_BYTES_BY_EXTENT 8
@d CONST_LIST_FORMAT_GRAMMAR 9
-@d CONST_LIST_FORMAT_SUM 10
-@d CONST_LIST_FORMAT_PRODUCT 11
-@d CONST_LIST_FORMAT_DIFFERENCE 12
-@d CONST_LIST_FORMAT_QUOTIENT 13
-@d CONST_LIST_FORMAT_STRUCT 14
+@d CONST_LIST_FORMAT_INLINE 10
+@d CONST_LIST_FORMAT_SUM 11
+@d CONST_LIST_FORMAT_PRODUCT 12
+@d CONST_LIST_FORMAT_DIFFERENCE 13
+@d CONST_LIST_FORMAT_QUOTIENT 14
+@d CONST_LIST_FORMAT_STRUCT 15
=
int ConstantInstruction::is_a_genuine_list_format(inter_ti format) {
if ((format >= CONST_LIST_FORMAT_WORDS) &&
- (format <= CONST_LIST_FORMAT_GRAMMAR))
+ (format <= CONST_LIST_FORMAT_INLINE))
return TRUE;
return FALSE;
}
@@ -219,6 +220,7 @@ void ConstantInstruction::read(inter_construct *IC, inter_bookmark *IBM,
else if (Regexp::match(&mr2, S, L"difference{ *(%c*) *}")) fmt = CONST_LIST_FORMAT_DIFFERENCE;
else if (Regexp::match(&mr2, S, L"quotient{ *(%c*) *}")) fmt = CONST_LIST_FORMAT_QUOTIENT;
else if (Regexp::match(&mr2, S, L"grammar{ *(%c*) *}")) fmt = CONST_LIST_FORMAT_GRAMMAR;
+ else if (Regexp::match(&mr2, S, L"inline{ *(%c*) *}")) fmt = CONST_LIST_FORMAT_INLINE;
else if (Regexp::match(&mr2, S, L"{ *(%c*?) *}")) fmt = CONST_LIST_FORMAT_WORDS;
else if (Regexp::match(&mr2, S, L"bytes{ *(%c*?) *}")) fmt = CONST_LIST_FORMAT_BYTES;
else if (Regexp::match(&mr2, S, L"list of *(%c*?) bytes")) fmt = CONST_LIST_FORMAT_BYTES_BY_EXTENT;
@@ -303,6 +305,7 @@ void ConstantInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_n
case CONST_LIST_FORMAT_DIFFERENCE: WRITE("difference"); break;
case CONST_LIST_FORMAT_QUOTIENT: WRITE("quotient"); break;
case CONST_LIST_FORMAT_GRAMMAR: WRITE("grammar"); break;
+ case CONST_LIST_FORMAT_INLINE: WRITE("inline"); break;
case CONST_LIST_FORMAT_STRUCT: WRITE("struct"); break;
case CONST_LIST_FORMAT_BYTES: WRITE("bytes"); break;
case CONST_LIST_FORMAT_WORDS_BY_EXTENT: WRITE("list of "); break;
@@ -372,6 +375,14 @@ inter_pair ConstantInstruction::list_entry(inter_tree_node *P, int i) {
return InterValuePairs::get(P, field);
}
+int ConstantInstruction::is_inline(inter_symbol *const_s) {
+ if ((const_s) && (const_s->definition) &&
+ (ConstantInstruction::list_format(const_s->definition) ==
+ CONST_LIST_FORMAT_INLINE))
+ return TRUE;
+ return FALSE;
+}
+
@h Definitional depth of a constant.
Constants given explicit values have depth 1. Constants defined as equal to
other constants have depth 1 more than those other constants. Constants equal
diff --git a/inter/bytecode-module/Contents.w b/inter/bytecode-module/Contents.w
index 3e609cec8..af80bcbdc 100644
--- a/inter/bytecode-module/Contents.w
+++ b/inter/bytecode-module/Contents.w
@@ -36,7 +36,6 @@ Chapter 3: Their Instructions
Inter Errors
Chapter 4: Void Constructs
- The Append Construct
The Comment Construct
The Constant Construct
The Insert Construct
diff --git a/inter/final-module/Chapter 2/Vanilla Constants.w b/inter/final-module/Chapter 2/Vanilla Constants.w
index f29adbcca..c474658c0 100644
--- a/inter/final-module/Chapter 2/Vanilla Constants.w
+++ b/inter/final-module/Chapter 2/Vanilla Constants.w
@@ -17,7 +17,7 @@ void VanillaConstants::constant(code_generation *gen, inter_tree_node *P) {
@;
} else if (Str::prefix_eq(S, I"##", 2)) {
@;
- } else if (SymbolAnnotation::get_b(con_name, VENEER_IANN)) {
+ } else if (LargeScale::is_veneer_symbol(con_name)) {
@;
} else if (SymbolAnnotation::get_b(con_name, OBJECT_IANN)) {
@;
diff --git a/inter/final-module/Chapter 4/Inform 6 Constants.w b/inter/final-module/Chapter 4/Inform 6 Constants.w
index 58f9f2785..269b35f51 100644
--- a/inter/final-module/Chapter 4/Inform 6 Constants.w
+++ b/inter/final-module/Chapter 4/Inform 6 Constants.w
@@ -52,10 +52,10 @@ single values. These are, for some reason, called "inline arrays". The I6
generator is going to take advantage of this feature: if it sees that a
property is actually an address of a small array, it will compile that array
directly into the body of the relevant object or class declaration. It therefore
-does not need to declre the name of this small array, and so --
+does not need to declare the name of this small array, and so --
@ =
- if ((const_s) && (SymbolAnnotation::get_b(const_s, INLINE_ARRAY_IANN)))
+ if (ConstantInstruction::is_inline(const_s))
return;
@ We cannot declare these constants because they exist automatically, and
diff --git a/inter/final-module/Chapter 4/Inform 6 Objects.w b/inter/final-module/Chapter 4/Inform 6 Objects.w
index 5bf29db73..927ebf567 100644
--- a/inter/final-module/Chapter 4/Inform 6 Objects.w
+++ b/inter/final-module/Chapter 4/Inform 6 Objects.w
@@ -410,7 +410,7 @@ void I6TargetObjects::assign_property(code_generator *gtr, code_generation *gen,
int inline_this = FALSE;
if (InterValuePairs::is_symbolic(pair)) {
inter_symbol *S = InterValuePairs::to_symbol_at(pair, X);
- if ((S) && (SymbolAnnotation::get_b(S, INLINE_ARRAY_IANN))) {
+ if (ConstantInstruction::is_inline(S)) {
inter_tree_node *P = InterSymbol::definition(S);
text_stream *OUT = CodeGen::current(gen);
for (int i=0; i