Merge pull request #1634 from greg-lunarg/lines10
Create separate OpSource for each included file when compiling -g
This commit is contained in:
commit
83b2647293
@ -1297,6 +1297,10 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, const gl
|
|||||||
text.append("#line 1\n");
|
text.append("#line 1\n");
|
||||||
text.append(glslangIntermediate->getSourceText());
|
text.append(glslangIntermediate->getSourceText());
|
||||||
builder.setSourceText(text);
|
builder.setSourceText(text);
|
||||||
|
// Pass name and text for all included files
|
||||||
|
const std::map<std::string, std::string>& include_txt = glslangIntermediate->getIncludeText();
|
||||||
|
for (auto iItr = include_txt.begin(); iItr != include_txt.end(); ++iItr)
|
||||||
|
builder.addInclude(iItr->first, iItr->second);
|
||||||
}
|
}
|
||||||
stdBuiltins = builder.import("GLSL.std.450");
|
stdBuiltins = builder.import("GLSL.std.450");
|
||||||
if (glslangIntermediate->usingVulkanMemoryModel()) {
|
if (glslangIntermediate->usingVulkanMemoryModel()) {
|
||||||
|
|||||||
@ -114,20 +114,8 @@ void Builder::setLine(int lineNum, const char* filename)
|
|||||||
currentLine = lineNum;
|
currentLine = lineNum;
|
||||||
currentFile = filename;
|
currentFile = filename;
|
||||||
if (emitOpLines) {
|
if (emitOpLines) {
|
||||||
// If filename previously seen, use its id, else create a string
|
spv::Id strId = getStringId(filename);
|
||||||
// and put it in the map.
|
addLine(strId, currentLine, 0);
|
||||||
auto sItr = stringIds.find(filename);
|
|
||||||
if (sItr != stringIds.end()) {
|
|
||||||
addLine(sItr->second, currentLine, 0);
|
|
||||||
} else {
|
|
||||||
Instruction* fileString =
|
|
||||||
new Instruction(getUniqueId(), NoType, OpString);
|
|
||||||
fileString->addStringOperand(filename);
|
|
||||||
spv::Id stringId = fileString->getResultId();
|
|
||||||
strings.push_back(std::unique_ptr<Instruction>(fileString));
|
|
||||||
addLine(stringId, currentLine, 0);
|
|
||||||
stringIds[filename] = stringId;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2843,7 +2831,8 @@ void Builder::createConditionalBranch(Id condition, Block* thenBlock, Block* els
|
|||||||
// OpSource
|
// OpSource
|
||||||
// [OpSourceContinued]
|
// [OpSourceContinued]
|
||||||
// ...
|
// ...
|
||||||
void Builder::dumpSourceInstructions(std::vector<unsigned int>& out) const
|
void Builder::dumpSourceInstructions(const spv::Id fileId, const std::string& text,
|
||||||
|
std::vector<unsigned int>& out) const
|
||||||
{
|
{
|
||||||
const int maxWordCount = 0xFFFF;
|
const int maxWordCount = 0xFFFF;
|
||||||
const int opSourceWordCount = 4;
|
const int opSourceWordCount = 4;
|
||||||
@ -2855,14 +2844,14 @@ void Builder::dumpSourceInstructions(std::vector<unsigned int>& out) const
|
|||||||
sourceInst.addImmediateOperand(source);
|
sourceInst.addImmediateOperand(source);
|
||||||
sourceInst.addImmediateOperand(sourceVersion);
|
sourceInst.addImmediateOperand(sourceVersion);
|
||||||
// File operand
|
// File operand
|
||||||
if (sourceFileStringId != NoResult) {
|
if (fileId != NoResult) {
|
||||||
sourceInst.addIdOperand(sourceFileStringId);
|
sourceInst.addIdOperand(fileId);
|
||||||
// Source operand
|
// Source operand
|
||||||
if (sourceText.size() > 0) {
|
if (text.size() > 0) {
|
||||||
int nextByte = 0;
|
int nextByte = 0;
|
||||||
std::string subString;
|
std::string subString;
|
||||||
while ((int)sourceText.size() - nextByte > 0) {
|
while ((int)text.size() - nextByte > 0) {
|
||||||
subString = sourceText.substr(nextByte, nonNullBytesPerInstruction);
|
subString = text.substr(nextByte, nonNullBytesPerInstruction);
|
||||||
if (nextByte == 0) {
|
if (nextByte == 0) {
|
||||||
// OpSource
|
// OpSource
|
||||||
sourceInst.addStringOperand(subString.c_str());
|
sourceInst.addStringOperand(subString.c_str());
|
||||||
@ -2882,6 +2871,14 @@ void Builder::dumpSourceInstructions(std::vector<unsigned int>& out) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Dump an OpSource[Continued] sequence for the source and every include file
|
||||||
|
void Builder::dumpSourceInstructions(std::vector<unsigned int>& out) const
|
||||||
|
{
|
||||||
|
dumpSourceInstructions(sourceFileStringId, sourceText, out);
|
||||||
|
for (auto iItr = includeFiles.begin(); iItr != includeFiles.end(); ++iItr)
|
||||||
|
dumpSourceInstructions(iItr->first, *iItr->second, out);
|
||||||
|
}
|
||||||
|
|
||||||
void Builder::dumpInstructions(std::vector<unsigned int>& out, const std::vector<std::unique_ptr<Instruction> >& instructions) const
|
void Builder::dumpInstructions(std::vector<unsigned int>& out, const std::vector<std::unique_ptr<Instruction> >& instructions) const
|
||||||
{
|
{
|
||||||
for (int i = 0; i < (int)instructions.size(); ++i) {
|
for (int i = 0; i < (int)instructions.size(); ++i) {
|
||||||
|
|||||||
@ -57,6 +57,7 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
namespace spv {
|
namespace spv {
|
||||||
|
|
||||||
@ -74,20 +75,33 @@ public:
|
|||||||
source = lang;
|
source = lang;
|
||||||
sourceVersion = version;
|
sourceVersion = version;
|
||||||
}
|
}
|
||||||
|
spv::Id getStringId(const std::string& str)
|
||||||
|
{
|
||||||
|
auto sItr = stringIds.find(str);
|
||||||
|
if (sItr != stringIds.end())
|
||||||
|
return sItr->second;
|
||||||
|
spv::Id strId = getUniqueId();
|
||||||
|
Instruction* fileString = new Instruction(strId, NoType, OpString);
|
||||||
|
const char* file_c_str = str.c_str();
|
||||||
|
fileString->addStringOperand(file_c_str);
|
||||||
|
strings.push_back(std::unique_ptr<Instruction>(fileString));
|
||||||
|
stringIds[file_c_str] = strId;
|
||||||
|
return strId;
|
||||||
|
}
|
||||||
void setSourceFile(const std::string& file)
|
void setSourceFile(const std::string& file)
|
||||||
{
|
{
|
||||||
Instruction* fileString = new Instruction(getUniqueId(), NoType, OpString);
|
sourceFileStringId = getStringId(file);
|
||||||
const char* file_c_str = file.c_str();
|
|
||||||
fileString->addStringOperand(file_c_str);
|
|
||||||
sourceFileStringId = fileString->getResultId();
|
|
||||||
strings.push_back(std::unique_ptr<Instruction>(fileString));
|
|
||||||
stringIds[file_c_str] = sourceFileStringId;
|
|
||||||
}
|
}
|
||||||
void setSourceText(const std::string& text) { sourceText = text; }
|
void setSourceText(const std::string& text) { sourceText = text; }
|
||||||
void addSourceExtension(const char* ext) { sourceExtensions.push_back(ext); }
|
void addSourceExtension(const char* ext) { sourceExtensions.push_back(ext); }
|
||||||
void addModuleProcessed(const std::string& p) { moduleProcesses.push_back(p.c_str()); }
|
void addModuleProcessed(const std::string& p) { moduleProcesses.push_back(p.c_str()); }
|
||||||
void setEmitOpLines() { emitOpLines = true; }
|
void setEmitOpLines() { emitOpLines = true; }
|
||||||
void addExtension(const char* ext) { extensions.insert(ext); }
|
void addExtension(const char* ext) { extensions.insert(ext); }
|
||||||
|
void addInclude(const std::string& name, const std::string& text)
|
||||||
|
{
|
||||||
|
spv::Id incId = getStringId(name);
|
||||||
|
includeFiles[incId] = &text;
|
||||||
|
}
|
||||||
Id import(const char*);
|
Id import(const char*);
|
||||||
void setMemoryModel(spv::AddressingModel addr, spv::MemoryModel mem)
|
void setMemoryModel(spv::AddressingModel addr, spv::MemoryModel mem)
|
||||||
{
|
{
|
||||||
@ -658,6 +672,7 @@ public:
|
|||||||
void createAndSetNoPredecessorBlock(const char*);
|
void createAndSetNoPredecessorBlock(const char*);
|
||||||
void createSelectionMerge(Block* mergeBlock, unsigned int control);
|
void createSelectionMerge(Block* mergeBlock, unsigned int control);
|
||||||
void dumpSourceInstructions(std::vector<unsigned int>&) const;
|
void dumpSourceInstructions(std::vector<unsigned int>&) const;
|
||||||
|
void dumpSourceInstructions(const spv::Id fileId, const std::string& text, std::vector<unsigned int>&) const;
|
||||||
void dumpInstructions(std::vector<unsigned int>&, const std::vector<std::unique_ptr<Instruction> >&) const;
|
void dumpInstructions(std::vector<unsigned int>&, const std::vector<std::unique_ptr<Instruction> >&) const;
|
||||||
void dumpModuleProcesses(std::vector<unsigned int>&) const;
|
void dumpModuleProcesses(std::vector<unsigned int>&) const;
|
||||||
|
|
||||||
@ -708,6 +723,9 @@ public:
|
|||||||
// map from strings to their string ids
|
// map from strings to their string ids
|
||||||
std::unordered_map<std::string, spv::Id> stringIds;
|
std::unordered_map<std::string, spv::Id> stringIds;
|
||||||
|
|
||||||
|
// map from include file name ids to their contents
|
||||||
|
std::map<spv::Id, const std::string*> includeFiles;
|
||||||
|
|
||||||
// The stream for outputting warnings and errors.
|
// The stream for outputting warnings and errors.
|
||||||
SpvBuildLogger* logger;
|
SpvBuildLogger* logger;
|
||||||
}; // end Builder class
|
}; // end Builder class
|
||||||
|
|||||||
@ -4,12 +4,12 @@ hlsl.pp.line3.frag
|
|||||||
// Id's are bound by 78
|
// Id's are bound by 78
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
2: ExtInstImport "GLSL.std.450"
|
3: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 5 "MainPs" 69 73
|
EntryPoint Fragment 6 "MainPs" 69 73
|
||||||
ExecutionMode 5 OriginUpperLeft
|
ExecutionMode 6 OriginUpperLeft
|
||||||
1: String "hlsl.pp.line3.frag"
|
1: String "hlsl.pp.line3.frag"
|
||||||
31: String "./i1.h"
|
2: String "./i1.h"
|
||||||
Source HLSL 500 1 "// OpModuleProcessed entry-point MainPs
|
Source HLSL 500 1 "// OpModuleProcessed entry-point MainPs
|
||||||
// OpModuleProcessed client vulkan100
|
// OpModuleProcessed client vulkan100
|
||||||
// OpModuleProcessed target-env vulkan1.0
|
// OpModuleProcessed target-env vulkan1.0
|
||||||
@ -50,18 +50,20 @@ PS_OUTPUT MainPs ( PS_INPUT i )
|
|||||||
}
|
}
|
||||||
|
|
||||||
"
|
"
|
||||||
Name 5 "MainPs"
|
Source HLSL 500 2 " u = g_nDataIdx;
|
||||||
Name 9 "PS_INPUT"
|
"
|
||||||
MemberName 9(PS_INPUT) 0 "vTextureCoords"
|
Name 6 "MainPs"
|
||||||
Name 12 "PS_OUTPUT"
|
Name 10 "PS_INPUT"
|
||||||
MemberName 12(PS_OUTPUT) 0 "vColor"
|
MemberName 10(PS_INPUT) 0 "vTextureCoords"
|
||||||
Name 15 "@MainPs(struct-PS_INPUT-vf21;"
|
Name 13 "PS_OUTPUT"
|
||||||
Name 14 "i"
|
MemberName 13(PS_OUTPUT) 0 "vColor"
|
||||||
Name 18 "PerViewConstantBuffer_t"
|
Name 16 "@MainPs(struct-PS_INPUT-vf21;"
|
||||||
MemberName 18(PerViewConstantBuffer_t) 0 "g_nDataIdx"
|
Name 15 "i"
|
||||||
MemberName 18(PerViewConstantBuffer_t) 1 "g_nDataIdx2"
|
Name 19 "PerViewConstantBuffer_t"
|
||||||
MemberName 18(PerViewConstantBuffer_t) 2 "g_B"
|
MemberName 19(PerViewConstantBuffer_t) 0 "g_nDataIdx"
|
||||||
Name 20 ""
|
MemberName 19(PerViewConstantBuffer_t) 1 "g_nDataIdx2"
|
||||||
|
MemberName 19(PerViewConstantBuffer_t) 2 "g_B"
|
||||||
|
Name 21 ""
|
||||||
Name 33 "u"
|
Name 33 "u"
|
||||||
Name 42 "ps_output"
|
Name 42 "ps_output"
|
||||||
Name 47 "g_tColor"
|
Name 47 "g_tColor"
|
||||||
@ -70,40 +72,40 @@ PS_OUTPUT MainPs ( PS_INPUT i )
|
|||||||
Name 69 "i.vTextureCoords"
|
Name 69 "i.vTextureCoords"
|
||||||
Name 73 "@entryPointOutput.vColor"
|
Name 73 "@entryPointOutput.vColor"
|
||||||
Name 74 "param"
|
Name 74 "param"
|
||||||
MemberDecorate 18(PerViewConstantBuffer_t) 0 Offset 0
|
MemberDecorate 19(PerViewConstantBuffer_t) 0 Offset 0
|
||||||
MemberDecorate 18(PerViewConstantBuffer_t) 1 Offset 4
|
MemberDecorate 19(PerViewConstantBuffer_t) 1 Offset 4
|
||||||
MemberDecorate 18(PerViewConstantBuffer_t) 2 Offset 8
|
MemberDecorate 19(PerViewConstantBuffer_t) 2 Offset 8
|
||||||
Decorate 18(PerViewConstantBuffer_t) Block
|
Decorate 19(PerViewConstantBuffer_t) Block
|
||||||
Decorate 47(g_tColor) DescriptorSet 0
|
Decorate 47(g_tColor) DescriptorSet 0
|
||||||
Decorate 47(g_tColor) Binding 0
|
Decorate 47(g_tColor) Binding 0
|
||||||
Decorate 54(g_sAniso) DescriptorSet 0
|
Decorate 54(g_sAniso) DescriptorSet 0
|
||||||
Decorate 54(g_sAniso) Binding 0
|
Decorate 54(g_sAniso) Binding 0
|
||||||
Decorate 69(i.vTextureCoords) Location 0
|
Decorate 69(i.vTextureCoords) Location 0
|
||||||
Decorate 73(@entryPointOutput.vColor) Location 0
|
Decorate 73(@entryPointOutput.vColor) Location 0
|
||||||
3: TypeVoid
|
4: TypeVoid
|
||||||
4: TypeFunction 3
|
5: TypeFunction 4
|
||||||
7: TypeFloat 32
|
8: TypeFloat 32
|
||||||
8: TypeVector 7(float) 2
|
9: TypeVector 8(float) 2
|
||||||
9(PS_INPUT): TypeStruct 8(fvec2)
|
10(PS_INPUT): TypeStruct 9(fvec2)
|
||||||
10: TypePointer Function 9(PS_INPUT)
|
11: TypePointer Function 10(PS_INPUT)
|
||||||
11: TypeVector 7(float) 4
|
12: TypeVector 8(float) 4
|
||||||
12(PS_OUTPUT): TypeStruct 11(fvec4)
|
13(PS_OUTPUT): TypeStruct 12(fvec4)
|
||||||
13: TypeFunction 12(PS_OUTPUT) 10(ptr)
|
14: TypeFunction 13(PS_OUTPUT) 11(ptr)
|
||||||
17: TypeInt 32 0
|
18: TypeInt 32 0
|
||||||
18(PerViewConstantBuffer_t): TypeStruct 17(int) 17(int) 17(int)
|
19(PerViewConstantBuffer_t): TypeStruct 18(int) 18(int) 18(int)
|
||||||
19: TypePointer PushConstant 18(PerViewConstantBuffer_t)
|
20: TypePointer PushConstant 19(PerViewConstantBuffer_t)
|
||||||
20: 19(ptr) Variable PushConstant
|
21: 20(ptr) Variable PushConstant
|
||||||
21: TypeInt 32 1
|
22: TypeInt 32 1
|
||||||
22: 21(int) Constant 2
|
23: 22(int) Constant 2
|
||||||
23: TypePointer PushConstant 17(int)
|
24: TypePointer PushConstant 18(int)
|
||||||
26: TypeBool
|
27: TypeBool
|
||||||
27: 17(int) Constant 0
|
28: 18(int) Constant 0
|
||||||
32: TypePointer Function 17(int)
|
32: TypePointer Function 18(int)
|
||||||
34: 21(int) Constant 0
|
34: 22(int) Constant 0
|
||||||
38: 21(int) Constant 1
|
38: 22(int) Constant 1
|
||||||
41: TypePointer Function 12(PS_OUTPUT)
|
41: TypePointer Function 13(PS_OUTPUT)
|
||||||
43: TypeImage 7(float) 2D sampled format:Unknown
|
43: TypeImage 8(float) 2D sampled format:Unknown
|
||||||
44: 17(int) Constant 128
|
44: 18(int) Constant 128
|
||||||
45: TypeArray 43 44
|
45: TypeArray 43 44
|
||||||
46: TypePointer UniformConstant 45
|
46: TypePointer UniformConstant 45
|
||||||
47(g_tColor): 46(ptr) Variable UniformConstant
|
47(g_tColor): 46(ptr) Variable UniformConstant
|
||||||
@ -112,63 +114,63 @@ PS_OUTPUT MainPs ( PS_INPUT i )
|
|||||||
53: TypePointer UniformConstant 52
|
53: TypePointer UniformConstant 52
|
||||||
54(g_sAniso): 53(ptr) Variable UniformConstant
|
54(g_sAniso): 53(ptr) Variable UniformConstant
|
||||||
56: TypeSampledImage 43
|
56: TypeSampledImage 43
|
||||||
58: TypePointer Function 8(fvec2)
|
58: TypePointer Function 9(fvec2)
|
||||||
62: TypePointer Function 11(fvec4)
|
62: TypePointer Function 12(fvec4)
|
||||||
68: TypePointer Input 8(fvec2)
|
68: TypePointer Input 9(fvec2)
|
||||||
69(i.vTextureCoords): 68(ptr) Variable Input
|
69(i.vTextureCoords): 68(ptr) Variable Input
|
||||||
72: TypePointer Output 11(fvec4)
|
72: TypePointer Output 12(fvec4)
|
||||||
73(@entryPointOutput.vColor): 72(ptr) Variable Output
|
73(@entryPointOutput.vColor): 72(ptr) Variable Output
|
||||||
5(MainPs): 3 Function None 4
|
6(MainPs): 4 Function None 5
|
||||||
6: Label
|
7: Label
|
||||||
67(i): 10(ptr) Variable Function
|
67(i): 11(ptr) Variable Function
|
||||||
74(param): 10(ptr) Variable Function
|
74(param): 11(ptr) Variable Function
|
||||||
Line 1 23 0
|
Line 1 23 0
|
||||||
70: 8(fvec2) Load 69(i.vTextureCoords)
|
70: 9(fvec2) Load 69(i.vTextureCoords)
|
||||||
71: 58(ptr) AccessChain 67(i) 34
|
71: 58(ptr) AccessChain 67(i) 34
|
||||||
Store 71 70
|
Store 71 70
|
||||||
75: 9(PS_INPUT) Load 67(i)
|
75:10(PS_INPUT) Load 67(i)
|
||||||
Store 74(param) 75
|
Store 74(param) 75
|
||||||
76:12(PS_OUTPUT) FunctionCall 15(@MainPs(struct-PS_INPUT-vf21;) 74(param)
|
76:13(PS_OUTPUT) FunctionCall 16(@MainPs(struct-PS_INPUT-vf21;) 74(param)
|
||||||
77: 11(fvec4) CompositeExtract 76 0
|
77: 12(fvec4) CompositeExtract 76 0
|
||||||
Store 73(@entryPointOutput.vColor) 77
|
Store 73(@entryPointOutput.vColor) 77
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
15(@MainPs(struct-PS_INPUT-vf21;):12(PS_OUTPUT) Function None 13
|
16(@MainPs(struct-PS_INPUT-vf21;):13(PS_OUTPUT) Function None 14
|
||||||
14(i): 10(ptr) FunctionParameter
|
15(i): 11(ptr) FunctionParameter
|
||||||
16: Label
|
17: Label
|
||||||
33(u): 32(ptr) Variable Function
|
33(u): 32(ptr) Variable Function
|
||||||
42(ps_output): 41(ptr) Variable Function
|
42(ps_output): 41(ptr) Variable Function
|
||||||
Line 1 27 0
|
Line 1 27 0
|
||||||
24: 23(ptr) AccessChain 20 22
|
25: 24(ptr) AccessChain 21 23
|
||||||
25: 17(int) Load 24
|
26: 18(int) Load 25
|
||||||
28: 26(bool) INotEqual 25 27
|
29: 27(bool) INotEqual 26 28
|
||||||
SelectionMerge 30 None
|
SelectionMerge 31 None
|
||||||
BranchConditional 28 29 37
|
BranchConditional 29 30 37
|
||||||
29: Label
|
30: Label
|
||||||
Line 31 1 0
|
Line 2 1 0
|
||||||
35: 23(ptr) AccessChain 20 34
|
35: 24(ptr) AccessChain 21 34
|
||||||
36: 17(int) Load 35
|
36: 18(int) Load 35
|
||||||
Store 33(u) 36
|
Store 33(u) 36
|
||||||
Branch 30
|
Branch 31
|
||||||
37: Label
|
37: Label
|
||||||
Line 1 30 0
|
Line 1 30 0
|
||||||
39: 23(ptr) AccessChain 20 38
|
39: 24(ptr) AccessChain 21 38
|
||||||
40: 17(int) Load 39
|
40: 18(int) Load 39
|
||||||
Store 33(u) 40
|
Store 33(u) 40
|
||||||
Branch 30
|
Branch 31
|
||||||
30: Label
|
31: Label
|
||||||
Line 1 31 0
|
Line 1 31 0
|
||||||
48: 17(int) Load 33(u)
|
48: 18(int) Load 33(u)
|
||||||
50: 49(ptr) AccessChain 47(g_tColor) 48
|
50: 49(ptr) AccessChain 47(g_tColor) 48
|
||||||
51: 43 Load 50
|
51: 43 Load 50
|
||||||
55: 52 Load 54(g_sAniso)
|
55: 52 Load 54(g_sAniso)
|
||||||
57: 56 SampledImage 51 55
|
57: 56 SampledImage 51 55
|
||||||
59: 58(ptr) AccessChain 14(i) 34
|
59: 58(ptr) AccessChain 15(i) 34
|
||||||
60: 8(fvec2) Load 59
|
60: 9(fvec2) Load 59
|
||||||
61: 11(fvec4) ImageSampleImplicitLod 57 60
|
61: 12(fvec4) ImageSampleImplicitLod 57 60
|
||||||
63: 62(ptr) AccessChain 42(ps_output) 34
|
63: 62(ptr) AccessChain 42(ps_output) 34
|
||||||
Store 63 61
|
Store 63 61
|
||||||
Line 1 32 0
|
Line 1 32 0
|
||||||
64:12(PS_OUTPUT) Load 42(ps_output)
|
64:13(PS_OUTPUT) Load 42(ps_output)
|
||||||
ReturnValue 64
|
ReturnValue 64
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|||||||
@ -668,6 +668,8 @@ public:
|
|||||||
const std::string& getSourceFile() const { return sourceFile; }
|
const std::string& getSourceFile() const { return sourceFile; }
|
||||||
void addSourceText(const char* text) { sourceText = sourceText + text; }
|
void addSourceText(const char* text) { sourceText = sourceText + text; }
|
||||||
const std::string& getSourceText() const { return sourceText; }
|
const std::string& getSourceText() const { return sourceText; }
|
||||||
|
const std::map<std::string, std::string>& getIncludeText() const { return includeText; }
|
||||||
|
void addIncludeText(const char* name, const char* text, size_t len) { includeText[name].assign(text,len); }
|
||||||
void addProcesses(const std::vector<std::string>& p)
|
void addProcesses(const std::vector<std::string>& p)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < (int)p.size(); ++i)
|
for (int i = 0; i < (int)p.size(); ++i)
|
||||||
@ -815,6 +817,9 @@ protected:
|
|||||||
std::string sourceFile;
|
std::string sourceFile;
|
||||||
std::string sourceText;
|
std::string sourceText;
|
||||||
|
|
||||||
|
// Included text. First string is a name, second is the included text
|
||||||
|
std::map<std::string, std::string> includeText;
|
||||||
|
|
||||||
// for OpModuleProcessed, or equivalent
|
// for OpModuleProcessed, or equivalent
|
||||||
TProcesses processes;
|
TProcesses processes;
|
||||||
|
|
||||||
|
|||||||
@ -653,6 +653,7 @@ int TPpContext::CPPinclude(TPpToken* ppToken)
|
|||||||
epilogue << (res->headerData[res->headerLength - 1] == '\n'? "" : "\n") <<
|
epilogue << (res->headerData[res->headerLength - 1] == '\n'? "" : "\n") <<
|
||||||
"#line " << directiveLoc.line + forNextLine << " " << directiveLoc.getStringNameOrNum() << "\n";
|
"#line " << directiveLoc.line + forNextLine << " " << directiveLoc.getStringNameOrNum() << "\n";
|
||||||
pushInput(new TokenizableIncludeFile(directiveLoc, prologue.str(), res, epilogue.str(), this));
|
pushInput(new TokenizableIncludeFile(directiveLoc, prologue.str(), res, epilogue.str(), this));
|
||||||
|
parseContext.intermediate.addIncludeText(res->headerName.c_str(), res->headerData, res->headerLength);
|
||||||
// There's no "current" location anymore.
|
// There's no "current" location anymore.
|
||||||
parseContext.setCurrentColumn(0);
|
parseContext.setCurrentColumn(0);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user