@@ -1321,24 +1321,19 @@ void Parser::Parse_Directive(int After_Hash)
13211321 PMac->endPosition = hashPosition;
13221322 POV_OFF_T macroLength = mToken .raw .lexeme .position - PMac->source ;
13231323 // / @todo Re-enable cached macros.
1324- #if 0
13251324 if (macroLength <= MaxCachedMacroSize)
13261325 {
13271326 PMac->CacheSize = macroLength;
13281327 PMac->Cache = new unsigned char [PMac->CacheSize ];
1329- if (PMac->Cache)
1328+ RawTokenizer::HotBookmark pos = mTokenizer .GetHotBookmark ();
1329+ mTokenizer .GoToBookmark (PMac->source );
1330+ if (!mTokenizer .GetRaw (PMac->Cache , PMac->CacheSize ))
13301331 {
1331- mTokenizer.GoToBookmark(PMac->source);
1332- Input_File->inFile->seekg(PMac->Macro_File_Pos);
1333- if (!Input_File->inFile->ReadRaw(PMac->Cache, PMac->CacheSize))
1334- {
1335- delete[] PMac->Cache;
1336- PMac->Cache = nullptr;
1337- }
1338- Input_File->inFile->seekg(pos);
1332+ delete[] PMac->Cache ;
1333+ PMac->Cache = nullptr ;
13391334 }
1335+ mTokenizer .GoToBookmark (pos);
13401336 }
1341- #endif
13421337 }
13431338 }
13441339 Cond_Stack.pop_back ();
@@ -2580,7 +2575,6 @@ void Parser::Invoke_Macro()
25802575 UCS2String ign;
25812576 /* Not in same file */
25822577 Cond_Stack.back ().Macro_Same_Flag = false ;
2583- Cond_Stack.back ().returnToBookmark = mTokenizer .GetHotBookmark ();
25842578 Got_EOF=false ;
25852579 POV_PARSER_ASSERT (!readingExternalFile);
25862580 shared_ptr<IStream> is;
@@ -2604,7 +2598,8 @@ void Parser::Invoke_Macro()
26042598 Got_EOF=false ;
26052599 if (!mTokenizer .GoToBookmark (PMac->source ))
26062600 {
2607- Error (" Unable to file seek in macro." );
2601+ ErrorInfo (mToken , " Invoking macro from here." );
2602+ Error (PMac->source , " Unable to file seek in macro invocation." );
26082603 }
26092604
26102605 mToken .sourceFile = mTokenizer .GetSource ();
@@ -2621,17 +2616,16 @@ void Parser::Return_From_Macro()
26212616{
26222617 Check_Macro_Vers ();
26232618
2624- if (!Cond_Stack.back ().Macro_Same_Flag )
2625- {
2626- POV_PARSER_ASSERT (!readingExternalFile);
2627- mTokenizer .SetInputStream (Cond_Stack.back ().returnToBookmark .pSource );
2628- mToken .sourceFile = mTokenizer .GetSource ();
2629- }
2619+ POV_PARSER_ASSERT (!readingExternalFile);
26302620
26312621 Got_EOF=false ;
26322622
26332623 if (!mTokenizer .GoToBookmark (Cond_Stack.back ().returnToBookmark ))
2634- Error (" Unable to file seek in return from macro." );
2624+ {
2625+ ErrorInfo (mToken , " Returning from macro." );
2626+ Error (Cond_Stack.back ().returnToBookmark , " Unable to file seek in return from macro." );
2627+ }
2628+ mToken .sourceFile = mTokenizer .GetSource ();
26352629
26362630 // Always destroy macro locals
26372631 Destroy_Table (Table_Index--);
0 commit comments