mirror of
https://github.com/ganelson/inform.git
synced 2024-06-29 05:24:57 +03:00
Eliminated HEX_IANN and SIGNED_IANN
This commit is contained in:
parent
df5da12ead
commit
0ab1d23d9e
|
@ -1,6 +1,6 @@
|
||||||
# Inform 7
|
# Inform 7
|
||||||
|
|
||||||
v10.1.0-alpha.1+6U59 'Krypton' (16 March 2022)
|
v10.1.0-alpha.1+6U60 'Krypton' (17 March 2022)
|
||||||
|
|
||||||
## About Inform 7
|
## About Inform 7
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
Prerelease: alpha.1
|
Prerelease: alpha.1
|
||||||
Build Date: 16 March 2022
|
Build Date: 17 March 2022
|
||||||
Build Number: 6U59
|
Build Number: 6U60
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -134,32 +134,36 @@ it represents an actual number at run-time, the second if not:
|
||||||
|
|
||||||
=
|
=
|
||||||
inter_name *Emit::numeric_constant(inter_name *con_iname, inter_ti val) {
|
inter_name *Emit::numeric_constant(inter_name *con_iname, inter_ti val) {
|
||||||
return Emit::numeric_constant_inner(con_iname, val, INT32_ITCONC, INVALID_IANN);
|
return Emit::numeric_constant_inner(con_iname,
|
||||||
|
InterValuePairs::number_in_base(val, 10), INT32_ITCONC);
|
||||||
}
|
}
|
||||||
|
|
||||||
inter_name *Emit::named_numeric_constant_hex(inter_name *con_iname, inter_ti val) {
|
inter_name *Emit::named_numeric_constant_hex(inter_name *con_iname, inter_ti val) {
|
||||||
return Emit::numeric_constant_inner(con_iname, val, INT32_ITCONC, HEX_IANN);
|
return Emit::numeric_constant_inner(con_iname,
|
||||||
|
InterValuePairs::number_in_base(val, 16), INT32_ITCONC);
|
||||||
}
|
}
|
||||||
|
|
||||||
inter_name *Emit::named_unchecked_constant_hex(inter_name *con_iname, inter_ti val) {
|
inter_name *Emit::named_unchecked_constant_hex(inter_name *con_iname, inter_ti val) {
|
||||||
return Emit::numeric_constant_inner(con_iname, val, UNCHECKED_ITCONC, HEX_IANN);
|
return Emit::numeric_constant_inner(con_iname,
|
||||||
|
InterValuePairs::number_in_base(val, 16), UNCHECKED_ITCONC);
|
||||||
}
|
}
|
||||||
|
|
||||||
inter_name *Emit::named_numeric_constant_signed(inter_name *con_iname, int val) {
|
inter_name *Emit::named_numeric_constant_signed(inter_name *con_iname, int val) {
|
||||||
return Emit::numeric_constant_inner(con_iname, (inter_ti) val, INT32_ITCONC, SIGNED_IANN);
|
return Emit::numeric_constant_inner(con_iname,
|
||||||
|
InterValuePairs::signed_number(val), INT32_ITCONC);
|
||||||
}
|
}
|
||||||
|
|
||||||
inter_name *Emit::unchecked_numeric_constant(inter_name *con_iname, inter_ti val) {
|
inter_name *Emit::unchecked_numeric_constant(inter_name *con_iname, inter_ti val) {
|
||||||
return Emit::numeric_constant_inner(con_iname, val, UNCHECKED_ITCONC, INVALID_IANN);
|
return Emit::numeric_constant_inner(con_iname,
|
||||||
|
InterValuePairs::number_in_base(val, 10), UNCHECKED_ITCONC);
|
||||||
}
|
}
|
||||||
|
|
||||||
inter_name *Emit::numeric_constant_inner(inter_name *con_iname, inter_ti val,
|
inter_name *Emit::numeric_constant_inner(inter_name *con_iname, inter_pair val,
|
||||||
inter_ti constructor_code, inter_ti annotation) {
|
inter_ti constructor_code) {
|
||||||
packaging_state save = Packaging::enter_home_of(con_iname);
|
packaging_state save = Packaging::enter_home_of(con_iname);
|
||||||
inter_symbol *con_s = InterNames::to_symbol(con_iname);
|
inter_symbol *con_s = InterNames::to_symbol(con_iname);
|
||||||
if (annotation != INVALID_IANN) SymbolAnnotation::set_b(con_s, annotation, 0);
|
|
||||||
Produce::guard(ConstantInstruction::new(Emit::at(), con_s,
|
Produce::guard(ConstantInstruction::new(Emit::at(), con_s,
|
||||||
InterTypes::from_constructor_code(constructor_code), InterValuePairs::number(val),
|
InterTypes::from_constructor_code(constructor_code), val,
|
||||||
Emit::baseline(), NULL));
|
Emit::baseline(), NULL));
|
||||||
Packaging::exit(Emit::tree(), save);
|
Packaging::exit(Emit::tree(), save);
|
||||||
return con_iname;
|
return con_iname;
|
||||||
|
|
|
@ -162,23 +162,18 @@ we see that the two variables have different URLs, |/main/one/V_speed| and
|
||||||
|/main/two/V_speed|.
|
|/main/two/V_speed|.
|
||||||
|
|
||||||
@h Annotations.
|
@h Annotations.
|
||||||
A few of the defined names in Inter can be "annotated": to be exact, those
|
A few of the defined names in Inter can be "annotated".
|
||||||
created by |constant|, |property|, |variable| and |local|.
|
|
||||||
|
|
||||||
Many annotations are simply markers temporarily given to these names during
|
Many annotations are simply markers temporarily given to these names during
|
||||||
the compilation process, and they usually do not change the meaning of the
|
the compilation process, and they usually do not change the meaning of the
|
||||||
program. For example, a constant given the annotation |_hex| has its value
|
program. For example, the final C code generator annotates the names of arrays
|
||||||
printed out in textual Inter in hexadecimal not decimal. So:
|
with their addresses in (virtual) memory, with the |__array_address| annotation.
|
||||||
|
In textual format:
|
||||||
= (text as Inter)
|
= (text as Inter)
|
||||||
constant SPEED_LIMIT = 0x1ff __hex
|
constant my_array = { 1, 2, 4, 8 } __array_address=7718
|
||||||
=
|
=
|
||||||
This tells the code generator that it is more natural to express this value
|
All annotation names begin with a double underscore, |__|. They do not all
|
||||||
as |1ff| hexadecimal rather than 511 decimal.
|
express a value: some are boolean flags, where no |=...| part is written.
|
||||||
|
|
||||||
Most annotations are either there or not there, like |__hex|. (All annotation
|
|
||||||
names begin with a double underscore, |__|.) But some supply a value: for
|
|
||||||
example, |__priority=17| would be the syntax to specify this, though |__priority|
|
|
||||||
is not in the standard set, as it happens.
|
|
||||||
|
|
||||||
For the list of standard annotation names in use, see //Inform Annotations//.
|
For the list of standard annotation names in use, see //Inform Annotations//.
|
||||||
|
|
||||||
|
|
|
@ -15,17 +15,6 @@ generated by I7.
|
||||||
|
|
||||||
@h Miscellaneous constants.
|
@h Miscellaneous constants.
|
||||||
|
|
||||||
@ |__hex|. Applies to |constant|. Marks that the value of this constant
|
|
||||||
is most legible in hexadecimal rather than decimal. Inter itself uses
|
|
||||||
this when writing a textual inter fomr of the constant's declaration,
|
|
||||||
and the Inform back end uses it when compiling Inform 6, in that it will
|
|
||||||
compile to a hexadecimal literal like |$4F02| rather than a decimal one
|
|
||||||
like |20226|. There is no effect on the final program.
|
|
||||||
|
|
||||||
@ |__signed|. Applies to |constant|. Marks that the value of this constant
|
|
||||||
is most legible if printed as a signed decimal literal than as an
|
|
||||||
unsigned one.
|
|
||||||
|
|
||||||
@ |__late|. Applies to |constant|. Suggests that this should be placed late
|
@ |__late|. Applies to |constant|. Suggests that this should be placed late
|
||||||
on the final compiled code, rather than at its current place. (This clue
|
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
|
helps the I6 code generator to avoid not-yet-declared errors; I6 is quite
|
||||||
|
|
|
@ -16,7 +16,7 @@ package main _plain
|
||||||
constant (K_number) C_death = -5
|
constant (K_number) C_death = -5
|
||||||
constant (K_number) C_taxes = 14
|
constant (K_number) C_taxes = 14
|
||||||
variable (K_number) V_anxiety = C_death
|
variable (K_number) V_anxiety = C_death
|
||||||
constant (K_number) C_x = 0x7f2a __hex
|
constant (K_number) C_x = 0x7f2a
|
||||||
constant (K_number) cornelius = dw"frogs"
|
constant (K_number) cornelius = dw"frogs"
|
||||||
constant (K_number) gaius = dw"toads"
|
constant (K_number) gaius = dw"toads"
|
||||||
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
||||||
|
|
|
@ -16,7 +16,7 @@ package main _plain
|
||||||
constant (K_number) C_death = -5
|
constant (K_number) C_death = -5
|
||||||
constant (K_number) C_taxes = 14
|
constant (K_number) C_taxes = 14
|
||||||
variable (K_number) V_anxiety = C_death
|
variable (K_number) V_anxiety = C_death
|
||||||
constant (K_number) C_x = 0x7f2a __hex
|
constant (K_number) C_x = 0x7f2a
|
||||||
constant (K_number) cornelius = dw"frogs"
|
constant (K_number) cornelius = dw"frogs"
|
||||||
constant (K_number) gaius = dw"toads"
|
constant (K_number) gaius = dw"toads"
|
||||||
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
||||||
|
|
|
@ -16,7 +16,7 @@ package main _plain
|
||||||
constant (K_number) C_death = -5
|
constant (K_number) C_death = -5
|
||||||
constant (K_number) C_taxes = 14
|
constant (K_number) C_taxes = 14
|
||||||
variable (K_number) V_anxiety = C_death
|
variable (K_number) V_anxiety = C_death
|
||||||
constant (K_number) C_x = 0x7f2a __hex
|
constant (K_number) C_x = 0x7f2a
|
||||||
constant (K_number) cornelius = dw"frogs"
|
constant (K_number) cornelius = dw"frogs"
|
||||||
constant (K_number) gaius = dw"toads"
|
constant (K_number) gaius = dw"toads"
|
||||||
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
||||||
|
|
|
@ -17,7 +17,7 @@ package main _plain
|
||||||
constant (K_number) C_death = -5
|
constant (K_number) C_death = -5
|
||||||
constant (K_number) C_taxes = 14
|
constant (K_number) C_taxes = 14
|
||||||
variable (K_number) V_anxiety = C_death
|
variable (K_number) V_anxiety = C_death
|
||||||
constant (K_number) C_x = 0x7f2a __hex
|
constant (K_number) C_x = 0x7f2a
|
||||||
constant (K_number) cornelius = dw"frogs"
|
constant (K_number) cornelius = dw"frogs"
|
||||||
constant (K_number) gaius = dw"toads"
|
constant (K_number) gaius = dw"toads"
|
||||||
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
||||||
|
|
|
@ -17,7 +17,7 @@ package main _plain
|
||||||
constant (K_number) C_death = -5
|
constant (K_number) C_death = -5
|
||||||
constant (K_number) C_taxes = 14
|
constant (K_number) C_taxes = 14
|
||||||
variable (K_number) V_anxiety = C_death
|
variable (K_number) V_anxiety = C_death
|
||||||
constant (K_number) C_x = 0x7f2a __hex
|
constant (K_number) C_x = 0x7f2a
|
||||||
constant (K_number) cornelius = dw"frogs"
|
constant (K_number) cornelius = dw"frogs"
|
||||||
constant (K_number) gaius = dw"toads"
|
constant (K_number) gaius = dw"toads"
|
||||||
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
||||||
|
|
|
@ -16,7 +16,7 @@ package main _plain
|
||||||
constant (K_number) C_death = -5
|
constant (K_number) C_death = -5
|
||||||
constant (K_number) C_taxes = 14
|
constant (K_number) C_taxes = 14
|
||||||
variable (K_number) V_anxiety = C_death
|
variable (K_number) V_anxiety = C_death
|
||||||
constant (K_number) C_x = 0x7f2a __hex
|
constant (K_number) C_x = 0x7f2a
|
||||||
constant (K_number) cornelius = dw"frogs"
|
constant (K_number) cornelius = dw"frogs"
|
||||||
constant (K_number) gaius = dw"toads"
|
constant (K_number) gaius = dw"toads"
|
||||||
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
||||||
|
|
|
@ -16,7 +16,7 @@ package main _plain
|
||||||
constant (K_number) C_death = -5
|
constant (K_number) C_death = -5
|
||||||
constant (K_number) C_taxes = 14
|
constant (K_number) C_taxes = 14
|
||||||
variable (K_number) V_anxiety = C_death
|
variable (K_number) V_anxiety = C_death
|
||||||
constant (K_number) C_x = 0x7f2a __hex
|
constant (K_number) C_x = 0x7f2a
|
||||||
constant (K_number) cornelius = dw"frogs"
|
constant (K_number) cornelius = dw"frogs"
|
||||||
constant (K_number) gaius = dw"toads"
|
constant (K_number) gaius = dw"toads"
|
||||||
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
||||||
|
|
|
@ -16,7 +16,7 @@ package main _plain
|
||||||
constant (K_number) C_death = -5
|
constant (K_number) C_death = -5
|
||||||
constant (K_number) C_taxes = 14
|
constant (K_number) C_taxes = 14
|
||||||
variable (K_number) V_anxiety = C_death
|
variable (K_number) V_anxiety = C_death
|
||||||
constant (K_number) C_x = 0x7f2a __hex
|
constant (K_number) C_x = 0x7f2a
|
||||||
constant (K_number) cornelius = dw"frogs"
|
constant (K_number) cornelius = dw"frogs"
|
||||||
constant (K_number) gaius = dw"toads"
|
constant (K_number) gaius = dw"toads"
|
||||||
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
||||||
|
|
|
@ -19,7 +19,7 @@ package main _plain
|
||||||
constant (K_number) C_death = -5
|
constant (K_number) C_death = -5
|
||||||
constant (K_number) C_taxes = 14
|
constant (K_number) C_taxes = 14
|
||||||
variable (K_number) V_anxiety = C_death
|
variable (K_number) V_anxiety = C_death
|
||||||
constant (K_number) C_x = 0x7f2a __hex
|
constant (K_number) C_x = 0x7f2a
|
||||||
constant (K_number) cornelius = dw"frogs"
|
constant (K_number) cornelius = dw"frogs"
|
||||||
constant (K_number) gaius = dw"toads"
|
constant (K_number) gaius = dw"toads"
|
||||||
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
||||||
|
|
|
@ -19,7 +19,7 @@ package main _plain
|
||||||
constant (K_number) C_death = -5
|
constant (K_number) C_death = -5
|
||||||
constant (K_number) C_taxes = 14
|
constant (K_number) C_taxes = 14
|
||||||
variable (K_number) V_anxiety = C_death
|
variable (K_number) V_anxiety = C_death
|
||||||
constant (K_number) C_x = 0x7f2a __hex
|
constant (K_number) C_x = 0x7f2a
|
||||||
constant (K_number) cornelius = dw"frogs"
|
constant (K_number) cornelius = dw"frogs"
|
||||||
constant (K_number) gaius = dw"toads"
|
constant (K_number) gaius = dw"toads"
|
||||||
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
||||||
|
|
|
@ -110,12 +110,12 @@ primitive !externalcall val val -> val
|
||||||
package main _plain
|
package main _plain
|
||||||
package architectural _linkage
|
package architectural _linkage
|
||||||
constant WORDSIZE = 2 __architectural
|
constant WORDSIZE = 2 __architectural
|
||||||
constant NULL = 0xffff __architectural __hex
|
constant NULL = 0xffff __architectural
|
||||||
constant WORD_HIGHBIT = 0x8000 __architectural __hex
|
constant WORD_HIGHBIT = 0x8000 __architectural
|
||||||
constant WORD_NEXTTOHIGHBIT = 0x4000 __architectural __hex
|
constant WORD_NEXTTOHIGHBIT = 0x4000 __architectural
|
||||||
constant IMPROBABLE_VALUE = 0x7fe3 __architectural __hex
|
constant IMPROBABLE_VALUE = 0x7fe3 __architectural
|
||||||
constant MAX_POSITIVE_NUMBER = 32767 __architectural
|
constant MAX_POSITIVE_NUMBER = 32767 __architectural
|
||||||
constant MIN_NEGATIVE_NUMBER = -32768 __architectural __signed
|
constant MIN_NEGATIVE_NUMBER = -32768 __architectural
|
||||||
constant TARGET_ZCODE = 1 __architectural
|
constant TARGET_ZCODE = 1 __architectural
|
||||||
constant DEBUG = 1 __architectural
|
constant DEBUG = 1 __architectural
|
||||||
package generic _module
|
package generic _module
|
||||||
|
|
|
@ -110,12 +110,12 @@ primitive !externalcall val val -> val
|
||||||
package main _plain
|
package main _plain
|
||||||
package architectural _linkage
|
package architectural _linkage
|
||||||
constant WORDSIZE = 2 __architectural
|
constant WORDSIZE = 2 __architectural
|
||||||
constant NULL = 0xffff __architectural __hex
|
constant NULL = 0xffff __architectural
|
||||||
constant WORD_HIGHBIT = 0x8000 __architectural __hex
|
constant WORD_HIGHBIT = 0x8000 __architectural
|
||||||
constant WORD_NEXTTOHIGHBIT = 0x4000 __architectural __hex
|
constant WORD_NEXTTOHIGHBIT = 0x4000 __architectural
|
||||||
constant IMPROBABLE_VALUE = 0x7fe3 __architectural __hex
|
constant IMPROBABLE_VALUE = 0x7fe3 __architectural
|
||||||
constant MAX_POSITIVE_NUMBER = 32767 __architectural
|
constant MAX_POSITIVE_NUMBER = 32767 __architectural
|
||||||
constant MIN_NEGATIVE_NUMBER = -32768 __architectural __signed
|
constant MIN_NEGATIVE_NUMBER = -32768 __architectural
|
||||||
constant TARGET_ZCODE = 1 __architectural
|
constant TARGET_ZCODE = 1 __architectural
|
||||||
constant DEBUG = 1 __architectural
|
constant DEBUG = 1 __architectural
|
||||||
package generic _module
|
package generic _module
|
||||||
|
|
|
@ -16,7 +16,7 @@ package main _plain
|
||||||
constant (K_number) C_death = -5
|
constant (K_number) C_death = -5
|
||||||
constant (K_number) C_taxes = 14
|
constant (K_number) C_taxes = 14
|
||||||
variable (K_number) V_anxiety = C_death
|
variable (K_number) V_anxiety = C_death
|
||||||
constant (K_number) C_x = 0x7f2a __hex
|
constant (K_number) C_x = 0x7f2a
|
||||||
constant (K_number) cornelius = dw"frogs"
|
constant (K_number) cornelius = dw"frogs"
|
||||||
constant (K_number) gaius = dw"toads"
|
constant (K_number) gaius = dw"toads"
|
||||||
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
splat "Sing a song of \"six splats\"...\nand don't wait up"
|
||||||
|
|
|
@ -206,7 +206,7 @@ inter_symbol *LargeScale::find_architectural_symbol(inter_tree *I, text_stream *
|
||||||
Dictionaries::create(create_these_architectural_symbols_on_demand, I"Object");
|
Dictionaries::create(create_these_architectural_symbols_on_demand, I"Object");
|
||||||
}
|
}
|
||||||
if (Dictionaries::find(create_these_architectural_symbols_on_demand, N)) {
|
if (Dictionaries::find(create_these_architectural_symbols_on_demand, N)) {
|
||||||
S = LargeScale::arch_constant(I, N, InterTypes::unchecked(), 0);
|
S = LargeScale::arch_constant_dec(I, N, InterTypes::unchecked(), 0);
|
||||||
SymbolAnnotation::set_b(S, VENEER_IANN, TRUE);
|
SymbolAnnotation::set_b(S, VENEER_IANN, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -244,55 +244,62 @@ void LargeScale::make_architectural_definitions(inter_tree *I,
|
||||||
if (current_architecture == NULL) internal_error("no architecture set");
|
if (current_architecture == NULL) internal_error("no architecture set");
|
||||||
inter_type type = InterTypes::unchecked();
|
inter_type type = InterTypes::unchecked();
|
||||||
if (Architectures::is_16_bit(current_architecture)) {
|
if (Architectures::is_16_bit(current_architecture)) {
|
||||||
LargeScale::arch_constant(I, I"WORDSIZE", type, 2);
|
LargeScale::arch_constant_dec(I, I"WORDSIZE", type, 2);
|
||||||
LargeScale::arch_constant_hex(I, I"NULL", type, 0xffff);
|
LargeScale::arch_constant_hex(I, I"NULL", type, 0xffff);
|
||||||
LargeScale::arch_constant_hex(I, I"WORD_HIGHBIT", type, 0x8000);
|
LargeScale::arch_constant_hex(I, I"WORD_HIGHBIT", type, 0x8000);
|
||||||
LargeScale::arch_constant_hex(I, I"WORD_NEXTTOHIGHBIT", type, 0x4000);
|
LargeScale::arch_constant_hex(I, I"WORD_NEXTTOHIGHBIT", type, 0x4000);
|
||||||
LargeScale::arch_constant_hex(I, I"IMPROBABLE_VALUE", type, 0x7fe3);
|
LargeScale::arch_constant_hex(I, I"IMPROBABLE_VALUE", type, 0x7fe3);
|
||||||
LargeScale::arch_constant(I, I"MAX_POSITIVE_NUMBER", type, 32767);
|
LargeScale::arch_constant_dec(I, I"MAX_POSITIVE_NUMBER", type, 32767);
|
||||||
LargeScale::arch_constant_signed(I, I"MIN_NEGATIVE_NUMBER", type, -32768);
|
LargeScale::arch_constant_signed(I, I"MIN_NEGATIVE_NUMBER", type, -32768);
|
||||||
LargeScale::arch_constant(I, I"TARGET_ZCODE", type, 1);
|
LargeScale::arch_constant_dec(I, I"TARGET_ZCODE", type, 1);
|
||||||
} else {
|
} else {
|
||||||
LargeScale::arch_constant(I, I"WORDSIZE", type, 4);
|
LargeScale::arch_constant_dec(I, I"WORDSIZE", type, 4);
|
||||||
LargeScale::arch_constant_hex(I, I"NULL", type, 0xffffffff);
|
LargeScale::arch_constant_hex(I, I"NULL", type, 0xffffffff);
|
||||||
LargeScale::arch_constant_hex(I, I"WORD_HIGHBIT", type, 0x80000000);
|
LargeScale::arch_constant_hex(I, I"WORD_HIGHBIT", type, 0x80000000);
|
||||||
LargeScale::arch_constant_hex(I, I"WORD_NEXTTOHIGHBIT", type, 0x40000000);
|
LargeScale::arch_constant_hex(I, I"WORD_NEXTTOHIGHBIT", type, 0x40000000);
|
||||||
LargeScale::arch_constant_hex(I, I"IMPROBABLE_VALUE", type, 0xdeadce11);
|
LargeScale::arch_constant_hex(I, I"IMPROBABLE_VALUE", type, 0xdeadce11);
|
||||||
LargeScale::arch_constant(I, I"MAX_POSITIVE_NUMBER", type, 2147483647);
|
LargeScale::arch_constant_dec(I, I"MAX_POSITIVE_NUMBER", type, 2147483647);
|
||||||
LargeScale::arch_constant_signed(I, I"MIN_NEGATIVE_NUMBER", type, -2147483648);
|
LargeScale::arch_constant_signed(I, I"MIN_NEGATIVE_NUMBER", type, -2147483648);
|
||||||
LargeScale::arch_constant(I, I"TARGET_GLULX", type, 1);
|
LargeScale::arch_constant_dec(I, I"TARGET_GLULX", type, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Architectures::debug_enabled(current_architecture))
|
if (Architectures::debug_enabled(current_architecture))
|
||||||
LargeScale::arch_constant(I, I"DEBUG", type, 1);
|
LargeScale::arch_constant_dec(I, I"DEBUG", type, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ The functions above use the following tiny API to create architectural constants:
|
@ The functions above use the following tiny API to create architectural constants:
|
||||||
|
|
||||||
=
|
=
|
||||||
inter_symbol *LargeScale::arch_constant(inter_tree *I, text_stream *N,
|
inter_symbol *LargeScale::arch_constant(inter_tree *I, text_stream *N,
|
||||||
inter_type type, inter_ti val) {
|
inter_type type, inter_pair val) {
|
||||||
inter_package *arch = LargeScale::architecture_package(I);
|
inter_package *arch = LargeScale::architecture_package(I);
|
||||||
inter_symbols_table *tab = InterPackage::scope(arch);
|
inter_symbols_table *tab = InterPackage::scope(arch);
|
||||||
inter_symbol *S = InterSymbolsTable::symbol_from_name_creating(tab, N);
|
inter_symbol *S = InterSymbolsTable::symbol_from_name_creating(tab, N);
|
||||||
SymbolAnnotation::set_b(S, ARCHITECTURAL_IANN, TRUE);
|
SymbolAnnotation::set_b(S, ARCHITECTURAL_IANN, TRUE);
|
||||||
inter_bookmark *IBM = &(I->site.strdata.architecture_bookmark);
|
inter_bookmark *IBM = &(I->site.strdata.architecture_bookmark);
|
||||||
Produce::guard(ConstantInstruction::new(IBM, S, type, InterValuePairs::number(val),
|
Produce::guard(ConstantInstruction::new(IBM, S, type, val,
|
||||||
(inter_ti) InterBookmark::baseline(IBM) + 1, NULL));
|
(inter_ti) InterBookmark::baseline(IBM) + 1, NULL));
|
||||||
return S;
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inter_symbol *LargeScale::arch_constant_dec(inter_tree *I, text_stream *N,
|
||||||
|
inter_type type, inter_ti val) {
|
||||||
|
inter_symbol *S = LargeScale::arch_constant(I, N, type,
|
||||||
|
InterValuePairs::number_in_base(val, 10));
|
||||||
|
return S;
|
||||||
|
}
|
||||||
|
|
||||||
inter_symbol *LargeScale::arch_constant_hex(inter_tree *I, text_stream *N,
|
inter_symbol *LargeScale::arch_constant_hex(inter_tree *I, text_stream *N,
|
||||||
inter_type type, inter_ti val) {
|
inter_type type, inter_ti val) {
|
||||||
inter_symbol *S = LargeScale::arch_constant(I, N, type, val);
|
inter_symbol *S = LargeScale::arch_constant(I, N, type,
|
||||||
SymbolAnnotation::set_b(S, HEX_IANN, 1);
|
InterValuePairs::number_in_base(val, 16));
|
||||||
return S;
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
inter_symbol *LargeScale::arch_constant_signed(inter_tree *I, text_stream *N,
|
inter_symbol *LargeScale::arch_constant_signed(inter_tree *I, text_stream *N,
|
||||||
inter_type type, int val) {
|
inter_type type, int val) {
|
||||||
inter_symbol *S = LargeScale::arch_constant(I, N, type, (inter_ti) val);
|
inter_symbol *S = LargeScale::arch_constant(I, N, type,
|
||||||
SymbolAnnotation::set_b(S, SIGNED_IANN, 1);
|
InterValuePairs::signed_number(val));
|
||||||
return S;
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,14 +70,12 @@ The set of annotations used by the Inform tool suite is as follows.
|
||||||
@e EITHER_OR_IANN
|
@e EITHER_OR_IANN
|
||||||
@e EXTENT_IANN
|
@e EXTENT_IANN
|
||||||
@e FAKE_ACTION_IANN
|
@e FAKE_ACTION_IANN
|
||||||
@e HEX_IANN
|
|
||||||
@e IMPLIED_ARGUMENT_IANN
|
@e IMPLIED_ARGUMENT_IANN
|
||||||
@e INLINE_ARRAY_IANN
|
@e INLINE_ARRAY_IANN
|
||||||
@e METAVERB_IANN
|
@e METAVERB_IANN
|
||||||
@e NOUN_FILTER_IANN
|
@e NOUN_FILTER_IANN
|
||||||
@e OBJECT_IANN
|
@e OBJECT_IANN
|
||||||
@e SCOPE_FILTER_IANN
|
@e SCOPE_FILTER_IANN
|
||||||
@e SIGNED_IANN
|
|
||||||
@e TABLEARRAY_IANN
|
@e TABLEARRAY_IANN
|
||||||
@e TEXT_LITERAL_IANN
|
@e TEXT_LITERAL_IANN
|
||||||
@e VENEER_IANN
|
@e VENEER_IANN
|
||||||
|
@ -111,14 +109,12 @@ void SymbolAnnotation::declare_canonical_annotations(void) {
|
||||||
SymbolAnnotation::declare(EITHER_OR_IANN, I"__either_or", BOOLEAN_IATYPE);
|
SymbolAnnotation::declare(EITHER_OR_IANN, I"__either_or", BOOLEAN_IATYPE);
|
||||||
SymbolAnnotation::declare(EXTENT_IANN, I"__extent", BOOLEAN_IATYPE);
|
SymbolAnnotation::declare(EXTENT_IANN, I"__extent", BOOLEAN_IATYPE);
|
||||||
SymbolAnnotation::declare(FAKE_ACTION_IANN, I"__fake_action", BOOLEAN_IATYPE);
|
SymbolAnnotation::declare(FAKE_ACTION_IANN, I"__fake_action", BOOLEAN_IATYPE);
|
||||||
SymbolAnnotation::declare(HEX_IANN, I"__hex", BOOLEAN_IATYPE);
|
|
||||||
SymbolAnnotation::declare(IMPLIED_ARGUMENT_IANN, I"__implied_argument", BOOLEAN_IATYPE);
|
SymbolAnnotation::declare(IMPLIED_ARGUMENT_IANN, I"__implied_argument", BOOLEAN_IATYPE);
|
||||||
SymbolAnnotation::declare(INLINE_ARRAY_IANN, I"__inline_array", BOOLEAN_IATYPE);
|
SymbolAnnotation::declare(INLINE_ARRAY_IANN, I"__inline_array", BOOLEAN_IATYPE);
|
||||||
SymbolAnnotation::declare(METAVERB_IANN, I"__meta_verb", BOOLEAN_IATYPE);
|
SymbolAnnotation::declare(METAVERB_IANN, I"__meta_verb", BOOLEAN_IATYPE);
|
||||||
SymbolAnnotation::declare(NOUN_FILTER_IANN, I"__noun_filter", BOOLEAN_IATYPE);
|
SymbolAnnotation::declare(NOUN_FILTER_IANN, I"__noun_filter", BOOLEAN_IATYPE);
|
||||||
SymbolAnnotation::declare(OBJECT_IANN, I"__object", BOOLEAN_IATYPE);
|
SymbolAnnotation::declare(OBJECT_IANN, I"__object", BOOLEAN_IATYPE);
|
||||||
SymbolAnnotation::declare(SCOPE_FILTER_IANN, I"__scope_filter", BOOLEAN_IATYPE);
|
SymbolAnnotation::declare(SCOPE_FILTER_IANN, I"__scope_filter", BOOLEAN_IATYPE);
|
||||||
SymbolAnnotation::declare(SIGNED_IANN, I"__signed", BOOLEAN_IATYPE);
|
|
||||||
SymbolAnnotation::declare(TABLEARRAY_IANN, I"__table_array", BOOLEAN_IATYPE);
|
SymbolAnnotation::declare(TABLEARRAY_IANN, I"__table_array", BOOLEAN_IATYPE);
|
||||||
SymbolAnnotation::declare(TEXT_LITERAL_IANN, I"__text_literal", BOOLEAN_IATYPE);
|
SymbolAnnotation::declare(TEXT_LITERAL_IANN, I"__text_literal", BOOLEAN_IATYPE);
|
||||||
SymbolAnnotation::declare(VENEER_IANN, I"__veneer", BOOLEAN_IATYPE);
|
SymbolAnnotation::declare(VENEER_IANN, I"__veneer", BOOLEAN_IATYPE);
|
||||||
|
|
|
@ -22,7 +22,10 @@ typedef struct inter_pair {
|
||||||
@ These are the formats. Note that changing any of these values would invalidate
|
@ These are the formats. Note that changing any of these values would invalidate
|
||||||
existing Inter binary files, necessitating a bump of //The Inter Version//.
|
existing Inter binary files, necessitating a bump of //The Inter Version//.
|
||||||
|
|
||||||
@e NUMERIC_IVAL from 0x10000
|
@e DECIMAL_IVAL from 0x10000
|
||||||
|
@e HEX_IVAL
|
||||||
|
@e BINARY_IVAL
|
||||||
|
@e SIGNED_IVAL
|
||||||
@e TEXTUAL_IVAL
|
@e TEXTUAL_IVAL
|
||||||
@e REAL_IVAL
|
@e REAL_IVAL
|
||||||
@e DWORD_IVAL
|
@e DWORD_IVAL
|
||||||
|
@ -33,16 +36,38 @@ existing Inter binary files, necessitating a bump of //The Inter Version//.
|
||||||
|
|
||||||
@h Numeric pairs.
|
@h Numeric pairs.
|
||||||
These can represent any |inter_ti| value, and are used when the data is a
|
These can represent any |inter_ti| value, and are used when the data is a
|
||||||
literal integer.
|
literal integer. Note that they express both an integer and also a preferred
|
||||||
|
way to print it out -- as decimal, hexadecimal, binary, or signed decimal.
|
||||||
|
But these are all numerically equal. They affect only the way in which the
|
||||||
|
Inter program is printed to text files, not the meaning of the program.
|
||||||
|
|
||||||
=
|
=
|
||||||
inter_pair InterValuePairs::number(inter_ti N) {
|
inter_pair InterValuePairs::number(inter_ti N) {
|
||||||
inter_pair pair;
|
inter_pair pair;
|
||||||
pair.data_format = NUMERIC_IVAL;
|
pair.data_format = DECIMAL_IVAL;
|
||||||
pair.data_content = N;
|
pair.data_content = N;
|
||||||
return pair;
|
return pair;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inter_pair InterValuePairs::number_in_base(inter_ti N, int b) {
|
||||||
|
inter_pair pair;
|
||||||
|
switch (b) {
|
||||||
|
case 2: pair.data_format = BINARY_IVAL; break;
|
||||||
|
case 10: pair.data_format = DECIMAL_IVAL; break;
|
||||||
|
case 16: pair.data_format = HEX_IVAL; break;
|
||||||
|
default: internal_error("only bases 2, 10, 16 are supported");
|
||||||
|
}
|
||||||
|
pair.data_content = N;
|
||||||
|
return pair;
|
||||||
|
}
|
||||||
|
|
||||||
|
inter_pair InterValuePairs::signed_number(int N) {
|
||||||
|
inter_pair pair;
|
||||||
|
pair.data_format = SIGNED_IVAL;
|
||||||
|
pair.data_content = (inter_ti) N;
|
||||||
|
return pair;
|
||||||
|
}
|
||||||
|
|
||||||
inter_pair InterValuePairs::number_from_I6_notation(text_stream *S) {
|
inter_pair InterValuePairs::number_from_I6_notation(text_stream *S) {
|
||||||
int sign = 1, base = 10, from = 0;
|
int sign = 1, base = 10, from = 0;
|
||||||
if (Str::prefix_eq(S, I"-", 1)) { sign = -1; from = 1; }
|
if (Str::prefix_eq(S, I"-", 1)) { sign = -1; from = 1; }
|
||||||
|
@ -64,7 +89,17 @@ inter_pair InterValuePairs::number_from_I6_notation(text_stream *S) {
|
||||||
}
|
}
|
||||||
|
|
||||||
inter_ti InterValuePairs::to_number(inter_pair pair) {
|
inter_ti InterValuePairs::to_number(inter_pair pair) {
|
||||||
if (pair.data_format == NUMERIC_IVAL) return pair.data_content;
|
if (InterValuePairs::is_number(pair)) return pair.data_content;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
inter_ti InterValuePairs::to_base(inter_pair pair) {
|
||||||
|
switch (pair.data_format) {
|
||||||
|
case DECIMAL_IVAL: return 10;
|
||||||
|
case SIGNED_IVAL: return 10;
|
||||||
|
case HEX_IVAL: return 16;
|
||||||
|
case BINARY_IVAL: return 2;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,18 +107,22 @@ inter_ti InterValuePairs::to_number(inter_pair pair) {
|
||||||
|
|
||||||
=
|
=
|
||||||
int InterValuePairs::is_number(inter_pair pair) {
|
int InterValuePairs::is_number(inter_pair pair) {
|
||||||
if (pair.data_format == NUMERIC_IVAL) return TRUE;
|
if ((pair.data_format == DECIMAL_IVAL) ||
|
||||||
|
(pair.data_format == HEX_IVAL) ||
|
||||||
|
(pair.data_format == BINARY_IVAL) ||
|
||||||
|
(pair.data_format == SIGNED_IVAL))
|
||||||
|
return TRUE;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int InterValuePairs::is_one(inter_pair pair) {
|
int InterValuePairs::is_one(inter_pair pair) {
|
||||||
if ((pair.data_format == NUMERIC_IVAL) &&
|
if ((InterValuePairs::is_number(pair)) &&
|
||||||
(pair.data_content == 1)) return TRUE;
|
(pair.data_content == 1)) return TRUE;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int InterValuePairs::is_zero(inter_pair pair) {
|
int InterValuePairs::is_zero(inter_pair pair) {
|
||||||
if ((pair.data_format == NUMERIC_IVAL) &&
|
if ((InterValuePairs::is_number(pair)) &&
|
||||||
(pair.data_content == 0)) return TRUE;
|
(pair.data_content == 0)) return TRUE;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -400,8 +439,8 @@ inter_error_message *InterValuePairs::verify(inter_package *owner, inter_tree_no
|
||||||
inter_pair pair, inter_type type) {
|
inter_pair pair, inter_type type) {
|
||||||
inter_symbols_table *scope = InterPackage::scope(owner);
|
inter_symbols_table *scope = InterPackage::scope(owner);
|
||||||
if (scope == NULL) scope = Inode::globals(P);
|
if (scope == NULL) scope = Inode::globals(P);
|
||||||
|
if (InterValuePairs::is_number(pair)) @<Check this is in range for the type@>
|
||||||
switch (pair.data_format) {
|
switch (pair.data_format) {
|
||||||
case NUMERIC_IVAL: @<Check this is in range for the type@>;
|
|
||||||
case SYMBOLIC_IVAL: @<Check this is reasonable, if we know what it is yet@>;
|
case SYMBOLIC_IVAL: @<Check this is reasonable, if we know what it is yet@>;
|
||||||
case DWORD_IVAL:
|
case DWORD_IVAL:
|
||||||
case PDWORD_IVAL:
|
case PDWORD_IVAL:
|
||||||
|
|
|
@ -422,7 +422,7 @@ in an interleaved form, to keep each notation together. Both have a simple
|
||||||
outer structure:
|
outer structure:
|
||||||
|
|
||||||
=
|
=
|
||||||
void TextualInter::write_pair(OUTPUT_STREAM, inter_tree_node *P, inter_pair pair, int hex) {
|
void TextualInter::write_pair(OUTPUT_STREAM, inter_tree_node *P, inter_pair pair) {
|
||||||
inter_tree *I = Inode::tree(P);
|
inter_tree *I = Inode::tree(P);
|
||||||
|
|
||||||
if (InterValuePairs::is_number(pair)) @<Print numeric literal syntax@>
|
if (InterValuePairs::is_number(pair)) @<Print numeric literal syntax@>
|
||||||
|
@ -480,8 +480,12 @@ inter_error_message *TextualInter::parse_pair(text_stream *line, inter_error_loc
|
||||||
or (unsigned) binary, but cannot be printed back in binary.
|
or (unsigned) binary, but cannot be printed back in binary.
|
||||||
|
|
||||||
@<Print numeric literal syntax@> =
|
@<Print numeric literal syntax@> =
|
||||||
if (hex) WRITE("0x%x", InterValuePairs::to_number(pair));
|
switch (InterValuePairs::to_base(pair)) {
|
||||||
else WRITE("%d", InterValuePairs::to_number(pair));
|
case 10: WRITE("%d", InterValuePairs::to_number(pair)); break;
|
||||||
|
case 2:
|
||||||
|
case 16: WRITE("0x%x", InterValuePairs::to_number(pair)); break;
|
||||||
|
default: WRITE("???"); break;
|
||||||
|
}
|
||||||
|
|
||||||
@<Parse numeric literal syntax@> =
|
@<Parse numeric literal syntax@> =
|
||||||
wchar_t c = first_char;
|
wchar_t c = first_char;
|
||||||
|
@ -506,7 +510,8 @@ or (unsigned) binary, but cannot be printed back in binary.
|
||||||
N = sign*N;
|
N = sign*N;
|
||||||
if (InterTypes::literal_is_in_range(N, type_wanted) == FALSE)
|
if (InterTypes::literal_is_in_range(N, type_wanted) == FALSE)
|
||||||
return InterErrors::quoted(I"value out of range", S, eloc);
|
return InterErrors::quoted(I"value out of range", S, eloc);
|
||||||
*pair = InterValuePairs::number((inter_ti) N);
|
if (sign == -1) *pair = InterValuePairs::signed_number((int) N);
|
||||||
|
else *pair = InterValuePairs::number_in_base((inter_ti) N, base);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -245,8 +245,6 @@ void ConstantInstruction::read(inter_construct *IC, inter_bookmark *IBM,
|
||||||
=
|
=
|
||||||
void ConstantInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_node *P) {
|
void ConstantInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_node *P) {
|
||||||
inter_symbol *con_name = InterSymbolsTable::symbol_from_ID_at_node(P, DEFN_CONST_IFLD);
|
inter_symbol *con_name = InterSymbolsTable::symbol_from_ID_at_node(P, DEFN_CONST_IFLD);
|
||||||
int hex = FALSE;
|
|
||||||
if (SymbolAnnotation::get_b(con_name, HEX_IANN)) hex = TRUE;
|
|
||||||
WRITE("constant ");
|
WRITE("constant ");
|
||||||
TextualInter::write_optional_type_marker(OUT, P, TYPE_CONST_IFLD);
|
TextualInter::write_optional_type_marker(OUT, P, TYPE_CONST_IFLD);
|
||||||
WRITE("%S = ", InterSymbol::identifier(con_name));
|
WRITE("%S = ", InterSymbol::identifier(con_name));
|
||||||
|
@ -262,10 +260,9 @@ void ConstantInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_n
|
||||||
for (int i=DATA_CONST_IFLD; i<P->W.extent; i=i+2) {
|
for (int i=DATA_CONST_IFLD; i<P->W.extent; i=i+2) {
|
||||||
if (i > DATA_CONST_IFLD) WRITE(",");
|
if (i > DATA_CONST_IFLD) WRITE(",");
|
||||||
if (fmt != CONST_LIST_FORMAT_NONE) WRITE(" ");
|
if (fmt != CONST_LIST_FORMAT_NONE) WRITE(" ");
|
||||||
TextualInter::write_pair(OUT, P, InterValuePairs::get(P, i), hex);
|
TextualInter::write_pair(OUT, P, InterValuePairs::get(P, i));
|
||||||
}
|
}
|
||||||
if (fmt != CONST_LIST_FORMAT_NONE) WRITE(" }");
|
if (fmt != CONST_LIST_FORMAT_NONE) WRITE(" }");
|
||||||
// SymbolAnnotation::write_annotations(OUT, P, con_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@h Access functions.
|
@h Access functions.
|
||||||
|
|
|
@ -137,8 +137,7 @@ void InstanceInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_n
|
||||||
inter_symbol *typename_s = InterSymbolsTable::symbol_from_ID_at_node(P, TYPE_INST_IFLD);
|
inter_symbol *typename_s = InterSymbolsTable::symbol_from_ID_at_node(P, TYPE_INST_IFLD);
|
||||||
WRITE("instance (%S) %S = ",
|
WRITE("instance (%S) %S = ",
|
||||||
InterSymbol::identifier(typename_s), InterSymbol::identifier(instance_s));
|
InterSymbol::identifier(typename_s), InterSymbol::identifier(instance_s));
|
||||||
TextualInter::write_pair(OUT, P, InterValuePairs::get(P, VAL1_INST_IFLD), FALSE);
|
TextualInter::write_pair(OUT, P, InterValuePairs::get(P, VAL1_INST_IFLD));
|
||||||
// SymbolAnnotation::write_annotations(OUT, P, instance_s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@h Access functions.
|
@h Access functions.
|
||||||
|
|
|
@ -88,7 +88,6 @@ void PropertyInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_n
|
||||||
WRITE("property ");
|
WRITE("property ");
|
||||||
TextualInter::write_optional_type_marker(OUT, P, TYPE_PROP_IFLD);
|
TextualInter::write_optional_type_marker(OUT, P, TYPE_PROP_IFLD);
|
||||||
WRITE("%S", InterSymbol::identifier(prop_name));
|
WRITE("%S", InterSymbol::identifier(prop_name));
|
||||||
// SymbolAnnotation::write_annotations(OUT, P, prop_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@h Access functions.
|
@h Access functions.
|
||||||
|
|
|
@ -160,7 +160,7 @@ void PropertyValueInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_t
|
||||||
inter_symbol *owner_s = PropertyValueInstruction::owner(P);
|
inter_symbol *owner_s = PropertyValueInstruction::owner(P);
|
||||||
WRITE("propertyvalue %S of %S = ",
|
WRITE("propertyvalue %S of %S = ",
|
||||||
InterSymbol::identifier(prop_s), InterSymbol::identifier(owner_s));
|
InterSymbol::identifier(prop_s), InterSymbol::identifier(owner_s));
|
||||||
TextualInter::write_pair(OUT, P, PropertyValueInstruction::value(P), FALSE);
|
TextualInter::write_pair(OUT, P, PropertyValueInstruction::value(P));
|
||||||
}
|
}
|
||||||
|
|
||||||
@h Access functions.
|
@h Access functions.
|
||||||
|
|
|
@ -160,7 +160,6 @@ void TypenameInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_n
|
||||||
WRITE("= ");
|
WRITE("= ");
|
||||||
InterTypes::write_typename_definition(OUT, typename_s);
|
InterTypes::write_typename_definition(OUT, typename_s);
|
||||||
}
|
}
|
||||||
// SymbolAnnotation::write_annotations(OUT, P, typename_s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@h Access functions.
|
@h Access functions.
|
||||||
|
|
|
@ -96,8 +96,7 @@ void VariableInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_n
|
||||||
WRITE("variable ");
|
WRITE("variable ");
|
||||||
TextualInter::write_optional_type_marker(OUT, P, TYPE_VAR_IFLD);
|
TextualInter::write_optional_type_marker(OUT, P, TYPE_VAR_IFLD);
|
||||||
WRITE("%S = ", InterSymbol::identifier(var_s));
|
WRITE("%S = ", InterSymbol::identifier(var_s));
|
||||||
TextualInter::write_pair(OUT, P, VariableInstruction::value(P), FALSE);
|
TextualInter::write_pair(OUT, P, VariableInstruction::value(P));
|
||||||
// SymbolAnnotation::write_annotations(OUT, P, var_s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@h Access functions.
|
@h Access functions.
|
||||||
|
|
|
@ -76,7 +76,6 @@ void LocalInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_node
|
||||||
TextualInter::write_optional_type_marker(OUT, P, TYPE_LOCAL_IFLD);
|
TextualInter::write_optional_type_marker(OUT, P, TYPE_LOCAL_IFLD);
|
||||||
inter_symbol *variable_s = LocalInstruction::variable(P);
|
inter_symbol *variable_s = LocalInstruction::variable(P);
|
||||||
WRITE("%S", InterSymbol::identifier(variable_s));
|
WRITE("%S", InterSymbol::identifier(variable_s));
|
||||||
// SymbolAnnotation::write_annotations(OUT, P, variable_s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@h Access function.
|
@h Access function.
|
||||||
|
|
|
@ -78,7 +78,7 @@ void RefInstruction::read(inter_construct *IC, inter_bookmark *IBM, inter_line_p
|
||||||
void RefInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_node *P) {
|
void RefInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_node *P) {
|
||||||
WRITE("ref ");
|
WRITE("ref ");
|
||||||
TextualInter::write_optional_type_marker(OUT, P, TYPE_REF_IFLD);
|
TextualInter::write_optional_type_marker(OUT, P, TYPE_REF_IFLD);
|
||||||
TextualInter::write_pair(OUT, P, RefInstruction::value(P), FALSE);
|
TextualInter::write_pair(OUT, P, RefInstruction::value(P));
|
||||||
}
|
}
|
||||||
|
|
||||||
@h Access function.
|
@h Access function.
|
||||||
|
|
|
@ -96,7 +96,7 @@ void ValInstruction::read(inter_construct *IC, inter_bookmark *IBM, inter_line_p
|
||||||
void ValInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_node *P) {
|
void ValInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_node *P) {
|
||||||
WRITE("val ");
|
WRITE("val ");
|
||||||
TextualInter::write_optional_type_marker(OUT, P, TYPE_VAL_IFLD);
|
TextualInter::write_optional_type_marker(OUT, P, TYPE_VAL_IFLD);
|
||||||
TextualInter::write_pair(OUT, P, ValInstruction::value(P), FALSE);
|
TextualInter::write_pair(OUT, P, ValInstruction::value(P));
|
||||||
}
|
}
|
||||||
|
|
||||||
@h Access function.
|
@h Access function.
|
||||||
|
|
|
@ -163,17 +163,9 @@ void VanillaConstants::definition_value(code_generation *gen, int form,
|
||||||
Generators::compile_literal_number(gen, 1, FALSE);
|
Generators::compile_literal_number(gen, 1, FALSE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DATA_GDCFORM: {
|
case DATA_GDCFORM:
|
||||||
inter_pair val = ConstantInstruction::constant(P);
|
CodeGen::pair(gen, P, ConstantInstruction::constant(P));
|
||||||
if ((InterValuePairs::is_number(val)) &&
|
|
||||||
(SymbolAnnotation::get_b(con_name, HEX_IANN))) {
|
|
||||||
inter_ti N = InterValuePairs::to_number(val);
|
|
||||||
Generators::compile_literal_number(gen, N, TRUE);
|
|
||||||
} else {
|
|
||||||
CodeGen::pair(gen, P, val);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case COMPUTED_GDCFORM: {
|
case COMPUTED_GDCFORM: {
|
||||||
WRITE("(");
|
WRITE("(");
|
||||||
for (int i=0; i<ConstantInstruction::list_len(P); i++) {
|
for (int i=0; i<ConstantInstruction::list_len(P); i++) {
|
||||||
|
|
Loading…
Reference in a new issue