Skip to content

Commit 88d6598

Browse files
authored
Partial fix for #428. (#431)
Precision of `Declare` INI setting was erroneously truncated to 6 digits. Reverted back to 7 digits, matching v3.6 behavior.
1 parent 5c8afac commit 88d6598

File tree

3 files changed

+20
-24
lines changed

3 files changed

+20
-24
lines changed

source/backend/control/scene.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,28 +143,26 @@ void Scene::StartParser(POVMS_Object& parseOptions)
143143
parseOptions.Get(kPOVAttrib_Declare, ds);
144144
for(int i = 1; i <= ds.GetListSize(); i++)
145145
{
146-
std::ostringstream sstr;
147146
POVMS_Attribute a;
148147
POVMS_Object d;
149148

150149
ds.GetNth(i, d);
150+
std::string ident = d.GetString(kPOVAttrib_Identifier);
151151
d.Get(kPOVAttrib_Value, a);
152152
switch (a.Type())
153153
{
154154
case kPOVMSType_CString:
155-
sstr << "\"" + d.TryGetString(kPOVAttrib_Value, "") + "\"";
155+
sceneData->declaredStrings.insert(make_pair(ident, d.TryGetString(kPOVAttrib_Value, "")));
156156
break;
157157

158158
case kPOVMSType_Float:
159-
sstr << d.TryGetFloat(kPOVAttrib_Value, 0.0);
159+
sceneData->declaredNumbers.insert(make_pair(ident, d.TryGetFloat(kPOVAttrib_Value, 0.0)));
160160
break;
161161

162162
default:
163163
// shouldn't happen unless we make a coding error
164164
throw POV_EXCEPTION(kParamErr, "Invalid type passed in declare list");
165165
}
166-
167-
sceneData->declaredVariables.insert(make_pair(d.GetString(kPOVAttrib_Identifier), sstr.str()));
168166
}
169167
}
170168

source/core/scene/scenedata.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ class SceneData
8181
{
8282
public:
8383

84-
typedef std::map<string, string> DeclaredVariablesMap;
84+
typedef std::map<string, string> DeclaredStringsMap;
85+
typedef std::map<string, double> DeclaredNumbersMap;
8586

8687
/// Destructor.
8788
~SceneData();
@@ -203,7 +204,8 @@ class SceneData
203204
int defaultFileType;
204205

205206
FrameSettings frameSettings; // TODO - move ???
206-
DeclaredVariablesMap declaredVariables; // TODO - move to parser
207+
DeclaredStringsMap declaredStrings; // TODO - move to parser
208+
DeclaredNumbersMap declaredNumbers; // TODO - move to parser
207209
Camera parsedCamera; // TODO - handle differently or move to parser
208210
bool clocklessAnimation; // TODO - this is support for an experimental feature and may be changed or removed
209211
vector<Camera> cameras; // TODO - this is support for an experimental feature and may be changed or removed

source/parser/parser.cpp

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -212,25 +212,21 @@ void Parser::Run()
212212

213213
Frame_Init ();
214214

215-
for(SceneData::DeclaredVariablesMap::const_iterator i(sceneData->declaredVariables.begin()); i != sceneData->declaredVariables.end(); i++)
215+
for(SceneData::DeclaredStringsMap::const_iterator i(sceneData->declaredStrings.begin()); i != sceneData->declaredStrings.end(); i++)
216216
{
217-
if(i->second.length() > 0)
218-
{
219-
SYM_ENTRY *Temp_Entry = nullptr;
217+
SYM_ENTRY *Temp_Entry = nullptr;
220218

221-
if(i->second[0] == '\"')
222-
{
223-
string tmp(i->second, 1, i->second.length() - 2);
224-
Temp_Entry = Add_Symbol(SYM_TABLE_GLOBAL, const_cast<char *>(i->first.c_str()), STRING_ID_TOKEN);
225-
Temp_Entry->Data = String_Literal_To_UCS2(const_cast<char *>(tmp.c_str()), false);
226-
}
227-
else
228-
{
229-
Temp_Entry = Add_Symbol(SYM_TABLE_GLOBAL, const_cast<char *>(i->first.c_str()), FLOAT_ID_TOKEN);
230-
Temp_Entry->Data = Create_Float();
231-
*(reinterpret_cast<DBL *>(Temp_Entry->Data)) = std::atof(i->second.c_str());
232-
}
233-
}
219+
Temp_Entry = Add_Symbol(SYM_TABLE_GLOBAL, const_cast<char *>(i->first.c_str()), STRING_ID_TOKEN);
220+
Temp_Entry->Data = String_Literal_To_UCS2(const_cast<char *>(i->second.c_str()), false);
221+
}
222+
223+
for (SceneData::DeclaredNumbersMap::const_iterator i(sceneData->declaredNumbers.begin()); i != sceneData->declaredNumbers.end(); i++)
224+
{
225+
SYM_ENTRY *Temp_Entry = nullptr;
226+
227+
Temp_Entry = Add_Symbol(SYM_TABLE_GLOBAL, const_cast<char *>(i->first.c_str()), FLOAT_ID_TOKEN);
228+
Temp_Entry->Data = Create_Float();
229+
*(reinterpret_cast<DBL *>(Temp_Entry->Data)) = i->second;
234230
}
235231

236232
IncludeHeader(sceneData->headerFile);

0 commit comments

Comments
 (0)