@@ -40,6 +40,7 @@ extern "C" void EmitImportedSyntax(long p_module_index, NameRef p_name, long p_t
4040extern " C" void EmitExportedDefinition (long index);
4141extern " C" void EmitDefinitionIndex (long & r_index);
4242extern " C" void EmitTypeDefinition (long index, PositionRef position, NameRef name, long type_index);
43+ extern " C" void EmitConstantDefinition (long p_index, PositionRef p_position, NameRef p_name, long p_const_index);
4344extern " C" void EmitVariableDefinition (long index, PositionRef position, NameRef name, long type_index);
4445extern " C" void EmitBeginHandlerDefinition (long index, PositionRef position, NameRef name, long type_index);
4546extern " C" void EmitEndHandlerDefinition (void );
@@ -119,12 +120,13 @@ extern "C" void EmitBeginIndirectInvoke(long handlerreg, long contextreg, long r
119120extern " C" void EmitContinueInvoke (long reg);
120121extern " C" void EmitEndInvoke (void );
121122extern " C" void EmitAssign (long dst, long src);
122- extern " C" void EmitAssignUndefined (long reg);
123- extern " C" void EmitAssignTrue (long reg);
124- extern " C" void EmitAssignFalse (long reg);
125- extern " C" void EmitAssignInteger (long reg, long value);
126- extern " C" void EmitAssignReal (long reg, long value);
127- extern " C" void EmitAssignString (long reg, long value);
123+ extern " C" void EmitAssignConstant (long dst, long constidx);
124+ extern " C" void EmitUndefinedConstant (long *idx);
125+ extern " C" void EmitTrueConstant (long *idx);
126+ extern " C" void EmitFalseConstant (long *idx);
127+ extern " C" void EmitIntegerConstant (long value, long *idx);
128+ extern " C" void EmitRealConstant (long value, long *idx);
129+ extern " C" void EmitStringConstant (long value, long *idx);
128130extern " C" void EmitBeginAssignList (long reg);
129131extern " C" void EmitContinueAssignList (long reg);
130132extern " C" void EmitEndAssignList (void );
@@ -421,6 +423,13 @@ void EmitTypeDefinition(long p_index, PositionRef p_position, NameRef p_name, lo
421423 MCLog (" [Emit] TypeDefinition(%ld, %@, %ld)" , p_index, to_mcnameref (p_name), p_type_index);
422424}
423425
426+ void EmitConstantDefinition (long p_index, PositionRef p_position, NameRef p_name, long p_const_index)
427+ {
428+ MCScriptAddConstantToModule (s_builder, to_mcnameref (p_name), p_const_index, p_index);
429+
430+ MCLog (" [Emit] ConstantDefinition(%ld, %@, %ld)" , p_index, to_mcnameref (p_name), p_const_index);
431+ }
432+
424433void EmitVariableDefinition (long p_index, PositionRef p_position, NameRef p_name, long p_type_index)
425434{
426435 MCScriptAddVariableToModule (s_builder, to_mcnameref (p_name), p_type_index, p_index);
@@ -1068,46 +1077,46 @@ void EmitEndInvoke(void)
10681077
10691078// ////////
10701079
1071- void EmitAssignUndefined (long reg )
1080+ void EmitUndefinedConstant (long *idx )
10721081{
1073- MCScriptEmitAssignConstantInModule (s_builder, reg, kMCNull );
1074- MCLog (" [Emit] AssignUndefined( %ld)" , reg );
1082+ MCScriptAddValueToModule (s_builder, kMCNull , ( uindex_t &)*idx );
1083+ MCLog (" [Emit] UndefinedConstant(-> %ld)" , *idx );
10751084}
10761085
1077- void EmitAssignTrue (long reg )
1086+ void EmitTrueConstant (long *idx )
10781087{
1079- MCScriptEmitAssignConstantInModule (s_builder, reg, kMCTrue );
1080- MCLog (" [Emit] AssignUndefined( %ld)" , reg );
1088+ MCScriptAddValueToModule (s_builder, kMCTrue , ( uindex_t &)*idx );
1089+ MCLog (" [Emit] TrueConstant(-> %ld)" , *idx );
10811090}
10821091
1083- void EmitAssignFalse (long reg )
1092+ void EmitFalseConstant (long *idx )
10841093{
1085- MCScriptEmitAssignConstantInModule (s_builder, reg, kMCFalse );
1086- MCLog (" [Emit] AssignUndefined (%ld)" , reg );
1094+ MCScriptAddValueToModule (s_builder, kMCFalse , ( uindex_t &)*idx );
1095+ MCLog (" [Emit] FalseConstant (%ld)" , *idx );
10871096}
10881097
1089- void EmitAssignInteger (long reg , long value )
1098+ void EmitIntegerConstant (long value , long *idx )
10901099{
10911100 MCAutoNumberRef t_number;
10921101 MCNumberCreateWithInteger (value, &t_number);
1093- MCScriptEmitAssignConstantInModule (s_builder, reg, *t_number );
1094- MCLog (" [Emit] AssignInteger (%ld, %ld)" , reg, value );
1102+ MCScriptAddValueToModule (s_builder, *t_number, ( uindex_t &)*idx );
1103+ MCLog (" [Emit] IntegerConstant (%ld -> %ld)" , value, *idx );
10951104}
10961105
1097- void EmitAssignReal (long reg , long value )
1106+ void EmitRealConstant (long value , long *idx )
10981107{
10991108 MCAutoNumberRef t_number;
11001109 MCNumberCreateWithReal (*(double *)value, &t_number);
1101- MCScriptEmitAssignConstantInModule (s_builder, reg, *t_number );
1102- MCLog (" [Emit] AssignReal(%ld, %lf )" , reg, *(double *)value);
1110+ MCScriptAddValueToModule (s_builder, *t_number, ( uindex_t &)*idx );
1111+ MCLog (" [Emit] RealConstant(%lf -> %ld )" , *(double *)value, *idx );
11031112}
11041113
1105- void EmitAssignString (long reg , long value )
1114+ void EmitStringConstant (long value , long *idx )
11061115{
11071116 MCAutoStringRef t_string;
11081117 MCStringCreateWithBytes ((const byte_t *)value, strlen ((const char *)value), kMCStringEncodingUTF8 , false , &t_string);
1109- MCScriptEmitAssignConstantInModule (s_builder, reg, *t_string );
1110- MCLog (" [Emit] AssignString(%ld, \" %s\" )" , reg, (const char *)value);
1118+ MCScriptAddValueToModule (s_builder, *t_string, ( uindex_t &)*idx );
1119+ MCLog (" [Emit] StringConstant( \" %s\" -> %ld )" , (const char *)value, *idx );
11111120}
11121121
11131122void EmitBeginAssignList (long reg)
@@ -1134,12 +1143,18 @@ void EmitAssign(long dst, long src)
11341143 MCLog (" [Emit] Assign(%ld, %ld)" , dst, src);
11351144}
11361145
1146+ void EmitAssignConstant (long dst, long idx)
1147+ {
1148+ MCScriptEmitAssignConstantInModule (s_builder, dst, idx);
1149+ MCLog (" [Emit] AssignConstant(%ld, %ld)" , dst, idx);
1150+ }
1151+
11371152// ///////
11381153
11391154void EmitFetch (long reg, long var, long level)
11401155{
11411156 MCScriptEmitFetchInModule (s_builder, reg, var, level);
1142- MCLog (" [Emit] Fetch(%ld, %ld, $ ld)" , reg, var, level);
1157+ MCLog (" [Emit] Fetch(%ld, %ld, % ld)" , reg, var, level);
11431158}
11441159
11451160void EmitStore (long reg, long var, long level)
0 commit comments