ShBindingTable FixedAttributeTable = { 3, FixedAttributeBindings };
static EShLanguage FindLanguage(char *lang);
-bool CompileFile(char *fileName, ShHandle, int, const TBuiltInResource*);
+bool CompileFile(const char *fileName, ShHandle, int, const TBuiltInResource*);
void usage();
void FreeFileData(char **data);
-char** ReadFileData(char *fileName);
-void InfoLogMsg(char* msg, const char* name, const int num);
-int ShOutputMultipleStrings(char ** );
+char** ReadFileData(const char *fileName);
+void InfoLogMsg(const char* msg, const char* name, const int num);
+int ShOutputMultipleStrings(const char *);
//Added to accomodate the multiple strings.
int OutputMultipleStrings = 1;
case 'i': debugOptions |= EDebugOpIntermediate; break;
case 'a': debugOptions |= EDebugOpAssembly; break;
#endif
- case 'c': if(!ShOutputMultipleStrings(++argv))
+ case 'c': if(!ShOutputMultipleStrings((++argv)[0]))
return EFailUsage;
--argc; break;
case 'm': debugOptions |= EDebugOpLinkMaps; break;
//
// Read a file's data into a string, and compile it using ShCompile
//
-bool CompileFile(char *fileName, ShHandle compiler, int debugOptions, const TBuiltInResource *resources)
+bool CompileFile(const char *fileName, ShHandle compiler, int debugOptions, const TBuiltInResource *resources)
{
int ret;
char **data = ReadFileData(fileName);
// Malloc a string of sufficient size and read a string into it.
//
# define MAX_SOURCE_STRINGS 5
-char** ReadFileData(char *fileName)
+char** ReadFileData(const char *fileName)
{
FILE *in;
int errorCode = fopen_s(&in, fileName, "r");
-void InfoLogMsg(char* msg, const char* name, const int num)
+void InfoLogMsg(const char* msg, const char* name, const int num)
{
printf(num >= 0 ? "#### %s %s %d INFO LOG ####\n" :
"#### %s %s INFO LOG ####\n", msg, name, num);
}
-int ShOutputMultipleStrings(char **argv)
+int ShOutputMultipleStrings(const char *argv)
{
- if(!(abs(OutputMultipleStrings = atoi(*argv)))||((OutputMultipleStrings >5 || OutputMultipleStrings < 1)? 1:0)){
+ if(!(abs(OutputMultipleStrings = atoi(argv)))||((OutputMultipleStrings >5 || OutputMultipleStrings < 1)? 1:0)){
printf("Invalid Command Line Argument after -c option.\n"
"Usage: -c <integer> where integer =[1,5]\n"
"This option must be specified before the input file path\n");
#ifdef _WIN32
#include <basetsd.h>
+ #define snprintf sprintf_s
+ #define safe_vsprintf(buf,max,format,args) vsnprintf_s((buf), (max), (max), (format), (args))
#elif defined (solaris)
+ #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args))
#include <sys/int_types.h>
#define UINT_PTR uintptr_t
#else
+ #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args))
#include <stdint.h>
#define UINT_PTR uintptr_t
#endif
#include <list>
#include <string>
#include <stdio.h>
+#include <assert.h>
typedef int TSourceLoc;
- #include <assert.h>
-
#include "PoolAlloc.h"
//
int line = loc & SourceLocLineMask;
if (line)
- sprintf_s(locText, maxSize, "%d:%d", string, line);
+ snprintf(locText, maxSize, "%d:%d", string, line);
else
- sprintf_s(locText, maxSize, "%d:? ", string);
+ snprintf(locText, maxSize, "%d:? ", string);
return TPersistString(locText);
}
TInfoSinkBase& operator<<(int n) { append(String(n)); return *this; }
TInfoSinkBase& operator<<(const unsigned int n) { append(String(n)); return *this; }
TInfoSinkBase& operator<<(float n) { const int size = 40; char buf[size];
- sprintf_s(buf, size, (fabs(n) > 1e-8 && fabs(n) < 1e8) || n == 0.0f ?
+ snprintf(buf, size, (fabs(n) > 1e-8 && fabs(n) < 1e8) || n == 0.0f ?
"%f" : "%g", n);
append(buf);
return *this; }
}
private:
- void checkGuardBlock(unsigned char* blockMem, unsigned char val, char* locText) const;
+ void checkGuardBlock(unsigned char* blockMem, unsigned char val, const char* locText) const;
// Find offsets to pre and post guard blocks, and user data buffer
unsigned char* preGuard() const { return mem + headerSize(); }
};
typedef std::map<TTypeList*, TTypeList*> TStructureMap;
-typedef std::map<TTypeList*, TTypeList*>::iterator TStructureMapIterator;
+typedef std::map<TTypeList*, TTypeList*>::const_iterator TStructureMapIterator;
//
// Base class for things that have a type.
//
TType(const TType& type) { *this = type; }
- void copyType(const TType& copyOf, TStructureMap& remapper)
+ void copyType(const TType& copyOf, const TStructureMap& remapper)
{
type = copyOf.type;
qualifier = copyOf.qualifier;
arrayInformationType = 0; // arrayInformationType should not be set for builtIn symbol table level
}
- TType* clone(TStructureMap& remapper)
+ TType* clone(const TStructureMap& remapper)
{
TType *newType = new TType();
newType->copyType(*this, remapper);
void setArrayInformationType(TType* t) { arrayInformationType = t; }
TType* getArrayInformationType() { return arrayInformationType; }
virtual bool isVector() const { return vectorSize > 1; }
- static char* getBasicString(TBasicType t) {
+ static const char* getBasicString(TBasicType t) {
switch (t) {
case EbtVoid: return "void"; break;
case EbtFloat: return "float"; break;
#ifdef _WIN32
#include <windows.h>
+#else
+ #include <string.h>
#endif
void TInfoSinkBase::append(const char *s)
//
const int maxSize = 80;
char builtInConstant[maxSize];
- sprintf_s(builtInConstant, maxSize, "const int gl_MaxLights = %d;", resources.maxLights); // GL 1.0
+ snprintf(builtInConstant, maxSize, "const int gl_MaxLights = %d;", resources.maxLights); // GL 1.0
s.append(TString(builtInConstant));
- sprintf_s(builtInConstant, maxSize, "const int gl_MaxClipPlanes = %d;", resources.maxClipPlanes); // GL 1.0
+ snprintf(builtInConstant, maxSize, "const int gl_MaxClipPlanes = %d;", resources.maxClipPlanes); // GL 1.0
s.append(TString(builtInConstant));
- sprintf_s(builtInConstant, maxSize, "const int gl_MaxTextureUnits = %d;", resources.maxTextureUnits); // GL 1.2
+ snprintf(builtInConstant, maxSize, "const int gl_MaxTextureUnits = %d;", resources.maxTextureUnits); // GL 1.2
s.append(TString(builtInConstant));
- sprintf_s(builtInConstant, maxSize, "const int gl_MaxTextureCoords = %d;", resources.maxTextureCoords); // ARB_fragment_program
+ snprintf(builtInConstant, maxSize, "const int gl_MaxTextureCoords = %d;", resources.maxTextureCoords); // ARB_fragment_program
s.append(TString(builtInConstant));
- sprintf_s(builtInConstant, maxSize, "const int gl_MaxVertexAttribs = %d;", resources.maxVertexAttribs); // ARB_vertex_shader
+ snprintf(builtInConstant, maxSize, "const int gl_MaxVertexAttribs = %d;", resources.maxVertexAttribs); // ARB_vertex_shader
s.append(TString(builtInConstant));
- sprintf_s(builtInConstant, maxSize, "const int gl_MaxVertexUniformComponents = %d;", resources.maxVertexUniformComponents); // ARB_vertex_shader
+ snprintf(builtInConstant, maxSize, "const int gl_MaxVertexUniformComponents = %d;", resources.maxVertexUniformComponents); // ARB_vertex_shader
s.append(TString(builtInConstant));
- sprintf_s(builtInConstant, maxSize, "const int gl_MaxVaryingFloats = %d;", resources.maxVaryingFloats); // ARB_vertex_shader
+ snprintf(builtInConstant, maxSize, "const int gl_MaxVaryingFloats = %d;", resources.maxVaryingFloats); // ARB_vertex_shader
s.append(TString(builtInConstant));
- sprintf_s(builtInConstant, maxSize, "const int gl_MaxVertexTextureImageUnits = %d;", resources.maxVertexTextureImageUnits); // ARB_vertex_shader
+ snprintf(builtInConstant, maxSize, "const int gl_MaxVertexTextureImageUnits = %d;", resources.maxVertexTextureImageUnits); // ARB_vertex_shader
s.append(TString(builtInConstant));
- sprintf_s(builtInConstant, maxSize, "const int gl_MaxCombinedTextureImageUnits = %d;", resources.maxCombinedTextureImageUnits); // ARB_vertex_shader
+ snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedTextureImageUnits = %d;", resources.maxCombinedTextureImageUnits); // ARB_vertex_shader
s.append(TString(builtInConstant));
- sprintf_s(builtInConstant, maxSize, "const int gl_MaxTextureImageUnits = %d;", resources.maxTextureImageUnits); // ARB_fragment_shader
+ snprintf(builtInConstant, maxSize, "const int gl_MaxTextureImageUnits = %d;", resources.maxTextureImageUnits); // ARB_fragment_shader
s.append(TString(builtInConstant));
- sprintf_s(builtInConstant, maxSize, "const int gl_MaxFragmentUniformComponents = %d;", resources.maxFragmentUniformComponents); // ARB_fragment_shader
+ snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentUniformComponents = %d;", resources.maxFragmentUniformComponents); // ARB_fragment_shader
s.append(TString(builtInConstant));
- sprintf_s(builtInConstant, maxSize, "const int gl_MaxDrawBuffers = %d;", resources.maxDrawBuffers); // proposed ARB_draw_buffers
+ snprintf(builtInConstant, maxSize, "const int gl_MaxDrawBuffers = %d;", resources.maxDrawBuffers); // proposed ARB_draw_buffers
s.append(TString(builtInConstant));
//
default: break;
}
}
-
-char* GetPreprocessorBuiltinString()
-{
- static char *PreprocessorBuiltinString = "#define GL_ARB_texture_rectangle 1\n"
- "#define GL_3DL_array_objects 1\n";
-
- return PreprocessorBuiltinString;
-}
void IdentifyBuiltIns(EShLanguage, TSymbolTable&, const TBuiltInResource &resources);
bool GenerateBuiltInSymbolTable(const TBuiltInResource* resources, TInfoSink&, TSymbolTable*, EShLanguage language = EShLangCount);
bool InitializeSymbolTable(TBuiltInStrings* BuiltInStrings, EShLanguage language, TInfoSink& infoSink, const TBuiltInResource *resources, TSymbolTable*);
-char* GetPreprocessorBuiltinString();
extern "C" int InitPreprocessor(void);
extern "C" int FinalizePreprocessor(void);
return right;
} else {
TIntermTyped *commaAggregate = growAggregate(left, right, line);
- commaAggregate->getAsAggregate()->setOperator(EOpComma);
+ commaAggregate->getAsAggregate()->setOperator(EOpComma);
commaAggregate->setType(right->getType());
commaAggregate->getTypePointer()->getQualifier().storage = EvqTemporary;
return commaAggregate;
}
}
-TIntermTyped* TIntermediate::addMethod(TIntermTyped* object, TType& type, const TString* name, TSourceLoc line)
+TIntermTyped* TIntermediate::addMethod(TIntermTyped* object, const TType& type, const TString* name, TSourceLoc line)
{
TIntermMethod* method = new TIntermMethod(object, type, *name);
method->setLine(line);
case EbtInt:
if (rightUnionArray[i] == 0) {
infoSink.info.message(EPrefixWarning, "Divide by zero error during constant folding", getLine());
- tempConstArray[i].setIConst(INT_MAX);
+ tempConstArray[i].setIConst(0xEFFFFFFF);
} else
tempConstArray[i].setIConst(unionArray[i].getIConst() / rightUnionArray[i].getIConst());
break;
RemoveTree.o ShaderLang.o intermOut.o parseConst.o SymbolTable.o \
InfoSink.o
-SRCS= Gen_glslang.cpp Gen_glslang_tab.cpp Initialize.cpp IntermTraverse.cpp \
+SRCS= gen_glslang.cpp gen_glslang_tab.cpp Initialize.cpp IntermTraverse.cpp \
Intermediate.cpp ParseHelper.cpp PoolAlloc.cp QualifierAlive.cpp \
RemoveTree.cpp ShaderLang.cpp SymbolTable.cpp intermOut.cpp \
parseConst.cpp InfoSink.cpp
all: $(SHAREDOBJECT)
-$(SHAREDOBJECT): Gen_glslang.o Gen_glslang_tab.o $(OBJECTS) \
+$(SHAREDOBJECT): gen_glslang.o gen_glslang_tab.o $(OBJECTS) \
$(LIBPREPROCESSOR) $(LIBCODEGEN) $(LIBOSDEPENDENT) $(LIBINITIALISATION)
- $(CC) -fPIC -shared -lc -o $@ $(OBJECTS) $(LIBPREPROCESSOR) $(LIBCODEGEN) $(LIBOSDEPENDENT) $(LIBINITIALISATION) Gen_glslang.o Gen_glslang_tab.o
+ $(CC) -fPIC -shared -lc -o $@ $(OBJECTS) $(LIBPREPROCESSOR) $(LIBCODEGEN) $(LIBOSDEPENDENT) $(LIBINITIALISATION) gen_glslang.o gen_glslang_tab.o
-Gen_glslang.o : Gen_glslang.cpp glslang_tab.h
- $(CC) -c $(INCLUDE) Gen_glslang.cpp -o $@
+gen_glslang.o : gen_glslang.cpp glslang_tab.h
+ $(CC) -c $(INCLUDE) gen_glslang.cpp -o $@
-Gen_glslang_tab.o : Gen_glslang_tab.cpp
- $(CC) -c $(INCLUDE) Gen_glslang_tab.cpp -o $@
+gen_glslang_tab.o : gen_glslang_tab.cpp
+ $(CC) -c $(INCLUDE) gen_glslang_tab.cpp -o $@
-Gen_glslang.cpp: glslang.l
- @echo Generating Gen_glslang.cpp
+gen_glslang.cpp: glslang.l
+ @echo Generating gen_glslang.cpp
@dos2unix glslang.l
flex glslang.l
-Gen_glslang_tab.cpp glslang_tab.h: glslang.y
- @echo Generating Gen_glslang_tab.cpp
+gen_glslang_tab.cpp glslang_tab.h: glslang.y
+ @echo Generating gen_glslang_tab.cpp
@dos2unix glslang.y
bison -t -v -d glslang.y
- mv glslang.tab.c Gen_glslang_tab.cpp
- mv glslang.tab.h glslang_tab.h
+ mv glslang.tab.c gen_glslang_tab.cpp
+ mv glslang.tab.h glslang_tab.cpp.h
%.o : %.cpp
$(CC) $(CPPFLAGS) -c $<
#
.PHONY : clean
clean :
- $(RM) *.o *.a Gen_glslang_tab.cpp Gen_glslang.cpp glslang_tab.h glslang.output
+ $(RM) *.o *.a gen_glslang_tab.cpp gen_glslang.cpp glslang_tab.h glslang.output
$(RM) ./lib/*.so
cd $(INCPREPROCESSOR); make clean
cd $(INCCODEGEN); make clean
# DO NOT DELETE
-Gen_glslang.o: ParseHelper.h ../Include/ShHandle.h
-Gen_glslang.o: ../Public/ShaderLang.h ../Include/InfoSink.h
-Gen_glslang.o: ../Include/Common.h ../Include/PoolAlloc.h SymbolTable.h
-Gen_glslang.o: ../Include/Common.h ../Include/intermediate.h
-Gen_glslang.o: ../Include/Types.h ../Include/BaseTypes.h
-Gen_glslang.o: ../Include/ConstantUnion.h ../Include/InfoSink.h
-Gen_glslang.o: localintermediate.h ../Include/intermediate.h
-Gen_glslang.o: ../Public/ShaderLang.h glslang_tab.h ./unistd.h
-Gen_glslang.o: ./preprocessor/preprocess.h ./preprocessor/slglobals.h
-Gen_glslang.o: ./preprocessor/memory.h ./preprocessor/atom.h
-Gen_glslang.o: ./preprocessor/scanner.h ./preprocessor/parser.h
-Gen_glslang.o: ./preprocessor/cpp.h ./preprocessor/tokens.h
-Gen_glslang.o: ./preprocessor/symbols.h ./preprocessor/compile.h
-Gen_glslang_tab.o: SymbolTable.h ../Include/Common.h
-Gen_glslang_tab.o: ../Include/intermediate.h ../Include/Common.h
-Gen_glslang_tab.o: ../Include/PoolAlloc.h ../Include/Types.h
-Gen_glslang_tab.o: ../Include/BaseTypes.h ../Include/ConstantUnion.h
-Gen_glslang_tab.o: ../Include/InfoSink.h ParseHelper.h ../Include/ShHandle.h
-Gen_glslang_tab.o: ../Public/ShaderLang.h
-Gen_glslang_tab.o: ../Include/InfoSink.h localintermediate.h
-Gen_glslang_tab.o: ../Include/intermediate.h ../Public/ShaderLang.h
+gen_glslang.o: ParseHelper.h ../Include/ShHandle.h
+gen_glslang.o: ../Public/ShaderLang.h ../Include/InfoSink.h
+gen_glslang.o: ../Include/Common.h ../Include/PoolAlloc.h SymbolTable.h
+gen_glslang.o: ../Include/Common.h ../Include/intermediate.h
+gen_glslang.o: ../Include/Types.h ../Include/BaseTypes.h
+gen_glslang.o: ../Include/ConstantUnion.h ../Include/InfoSink.h
+gen_glslang.o: localintermediate.h ../Include/intermediate.h
+gen_glslang.o: ../Public/ShaderLang.h glslang_tab.h ./unistd.h
+gen_glslang.o: ./preprocessor/preprocess.h ./preprocessor/slglobals.h
+gen_glslang.o: ./preprocessor/memory.h ./preprocessor/atom.h
+gen_glslang.o: ./preprocessor/scanner.h ./preprocessor/parser.h
+gen_glslang.o: ./preprocessor/cpp.h ./preprocessor/tokens.h
+gen_glslang.o: ./preprocessor/symbols.h ./preprocessor/compile.h
+gen_glslang_tab.o: SymbolTable.h ../Include/Common.h
+gen_glslang_tab.o: ../Include/intermediate.h ../Include/Common.h
+gen_glslang_tab.o: ../Include/PoolAlloc.h ../Include/Types.h
+gen_glslang_tab.o: ../Include/BaseTypes.h ../Include/ConstantUnion.h
+gen_glslang_tab.o: ../Include/InfoSink.h ParseHelper.h ../Include/ShHandle.h
+gen_glslang_tab.o: ../Public/ShaderLang.h
+gen_glslang_tab.o: ../Include/InfoSink.h localintermediate.h
+gen_glslang_tab.o: ../Include/intermediate.h ../Public/ShaderLang.h
Initialize.o: ../Include/intermediate.h Initialize.h
Initialize.o: ../Include/ResourceLimits.h ../Include/Common.h
Initialize.o: ../Include/PoolAlloc.h ../Include/ShHandle.h
va_start(marker, szExtraInfoFormat);
- _vsnprintf_s(szExtraInfo, maxSize, sizeof(szExtraInfo), szExtraInfoFormat, marker);
+ safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, marker);
/* VC++ format: file(linenum) : error #: 'token' : extrainfo */
infoSink.info.prefix(EPrefixError);
//
// Same error message for all places unary operations don't work.
//
-void TParseContext::unaryOpError(int line, char* op, TString operand)
+void TParseContext::unaryOpError(int line, const char* op, TString operand)
{
error(line, " wrong operand type", op,
"no operation '%s' exists that takes an operand of type %s (or there is no acceptable conversion)",
//
// Same error message for all binary operations don't work.
//
-void TParseContext::binaryOpError(int line, char* op, TString left, TString right)
+void TParseContext::binaryOpError(int line, const char* op, TString left, TString right)
{
error(line, " wrong operand types:", op,
"no operation '%s' exists that takes a left-hand operand of type '%s' and "
//
// Returns true if the was an error.
//
-bool TParseContext::lValueErrorCheck(int line, char* op, TIntermTyped* node)
+bool TParseContext::lValueErrorCheck(int line, const char* op, TIntermTyped* node)
{
TIntermSymbol* symNode = node->getAsSymbolNode();
TIntermBinary* binaryNode = node->getAsBinaryNode();
if (symNode != 0)
symbol = symNode->getSymbol().c_str();
- char* message = 0;
+ const char* message = 0;
switch (node->getQualifier().storage) {
case EvqConst: message = "can't modify a const"; break;
case EvqConstReadOnly: message = "can't modify a const"; break;
//
// Returns true if the was an error.
//
-bool TParseContext::integerErrorCheck(TIntermTyped* node, char* token)
+bool TParseContext::integerErrorCheck(TIntermTyped* node, const char* token)
{
if (node->getBasicType() == EbtInt && node->getVectorSize() == 1)
return false;
//
// Returns true if the was an error.
//
-bool TParseContext::globalErrorCheck(int line, bool global, char* token)
+bool TParseContext::globalErrorCheck(int line, bool global, const char* token)
{
if (global)
return false;
bool parseVectorFields(const TString&, int vecSize, TVectorFields&, int line);
void assignError(int line, const char* op, TString left, TString right);
- void unaryOpError(int line, char* op, TString operand);
- void binaryOpError(int line, char* op, TString left, TString right);
+ void unaryOpError(int line, const char* op, TString operand);
+ void binaryOpError(int line, const char* op, TString left, TString right);
void variableErrorCheck(TIntermTyped*& nodePtr);
- bool lValueErrorCheck(int line, char* op, TIntermTyped*);
+ bool lValueErrorCheck(int line, const char* op, TIntermTyped*);
bool constErrorCheck(TIntermTyped* node);
- bool integerErrorCheck(TIntermTyped* node, char* token);
- bool globalErrorCheck(int line, bool global, char* token);
+ bool integerErrorCheck(TIntermTyped* node, const char* token);
+ bool globalErrorCheck(int line, bool global, const char* token);
bool constructorErrorCheck(int line, TIntermNode*, TFunction&, TOperator, TType*);
bool arraySizeErrorCheck(int line, TIntermTyped* expr, int& size);
bool arrayQualifierErrorCheck(int line, TPublicType type);
//
// Check a single guard block for damage
//
-void TAllocation::checkGuardBlock(unsigned char* blockMem, unsigned char val, char* locText) const
+void TAllocation::checkGuardBlock(unsigned char* blockMem, unsigned char val, const char* locText) const
{
for (int x = 0; x < guardBlockSize; x++) {
if (blockMem[x] != val) {
char assertMsg[80];
// We don't print the assert message. It's here just to be helpful.
- sprintf_s(assertMsg, maxSize, "PoolAlloc: Damage %s %lu byte allocation at 0x%p\n",
+ snprintf(assertMsg, maxSize, "PoolAlloc: Damage %s %lu byte allocation at 0x%p\n",
locText, size, data());
assert(0 && "PoolAlloc: Damage in guard block");
}
//POSSIBILITY OF SUCH DAMAGE.
//
+#ifdef USE_QUALIFIER_ALIVE
+
#include "../Include/intermediate.h"
class TAliveTraverser : public TIntermTraverser {
return true;
}
+
+#endif
if (arraySizes) {
const int maxSize = 10;
char buf[maxSize];
- sprintf_s(buf, maxSize, "%d", arraySizes->front());
+ snprintf(buf, maxSize, "%d", arraySizes->front());
mangledName += '[';
mangledName += buf;
mangledName += ']';
return variable;
}
-TFunction::TFunction(const TFunction& copyOf, TStructureMap& remapper) : TSymbol(copyOf)
+TFunction::TFunction(const TFunction& copyOf, const TStructureMap& remapper) : TSymbol(copyOf)
{
for (unsigned int i = 0; i < copyOf.parameters.size(); ++i) {
TParameter param;
struct TParameter {
TString *name;
TType* type;
- void copyParam(const TParameter& param, TStructureMap& remapper) {
+ void copyParam(const TParameter& param, const TStructureMap& remapper) {
name = NewPoolTString(param.name->c_str());
type = param.type->clone(remapper);
}
returnType(TType(EbtVoid)),
op(o),
defined(false) { }
- TFunction(const TString *name, TType& retType, TOperator tOp = EOpNull) :
+ TFunction(const TString *name, const TType& retType, TOperator tOp = EOpNull) :
TSymbol(name),
returnType(retType),
mangledName(*name + '('),
op(tOp),
defined(false) { }
+ TFunction(const TFunction&, const TStructureMap& remapper);
virtual ~TFunction();
virtual bool isFunction() const { return true; }
const TParameter& operator [](int i) const { return parameters[i]; }
virtual void dump(TInfoSink &infoSink) const;
- TFunction(const TFunction&, TStructureMap& remapper);
virtual TFunction* clone(TStructureMap& remapper);
protected:
if (version >= removedVersion) {
const int maxSize = 60;
char buf[maxSize];
- sprintf_s(buf, maxSize, "%s profile; removed in version %d", ProfileName[profile], removedVersion);
+ snprintf(buf, maxSize, "%s profile; removed in version %d", ProfileName[profile], removedVersion);
error(line, "no longer supported in", featureDesc, buf);
recover();
}
#include "ParseHelper.h"\r
#include "glslang_tab.cpp.h"\r
\r
-int PaIdentOrReserved(bool reserved, TParseContext&, int line, char* text, YYSTYPE* pyylval);\r
-int PaPrecisionKeyword(TParseContext&, int line, char* text, YYSTYPE* pyylval, int keyword);\r
-int PaMatNxM(TParseContext&, int line, char* text, YYSTYPE* pyylval, int keyword);\r
-int PaDMat(TParseContext&, int line, char* text, YYSTYPE* pyylval, int keyword);\r
+int PaIdentOrReserved(bool reserved, TParseContext&, int line, const char* text, YYSTYPE* pyylval);\r
+int PaPrecisionKeyword(TParseContext&, int line, const char* text, YYSTYPE* pyylval, int keyword);\r
+int PaMatNxM(TParseContext&, int line, const char* text, YYSTYPE* pyylval, int keyword);\r
+int PaDMat(TParseContext&, int line, const char* text, YYSTYPE* pyylval, int keyword);\r
\r
/* windows only pragma */\r
#ifdef _MSC_VER\r
#endif\r
\r
int yy_input(char* buf, int max_size);\r
-TSourceLoc yylineno;\r
\r
#ifdef _WIN32\r
+ TSourceLoc yylineno;\r
extern int yyparse(TParseContext&);\r
#define YY_DECL int yylex(YYSTYPE* pyylval, TParseContext& parseContext)\r
#else\r
\r
void yyerror(char *s)\r
{\r
- TParseContext& parseContext = *((TParseContext *)cpp->pC);\r
+ TParseContext& pc = *((TParseContext *)cpp->pC);\r
\r
- if (parseContext.AfterEOF) {\r
+ if (pc.AfterEOF) {\r
if (cpp->tokensBeforeEOF == 1) {\r
GlobalParseContext->error(yylineno, "", "pre-mature EOF", s, "");\r
GlobalParseContext->recover();\r
return IDENTIFIER;\r
}\r
\r
-int PaIdentOrReserved(bool reserved, TParseContext& parseContext, int line, char* text, YYSTYPE* pyylval)\r
+int PaIdentOrReserved(bool reserved, TParseContext& pc, int line, const char* text, YYSTYPE* pyylval)\r
{\r
if (reserved)\r
PaReservedWord();\r
pyylval->lex.line = line;\r
pyylval->lex.string = NewPoolTString(text);\r
\r
- return PaIdentOrType(*pyylval->lex.string, parseContext, pyylval->lex.symbol);\r
+ return PaIdentOrType(*pyylval->lex.string, pc, pyylval->lex.symbol);\r
}\r
\r
-int PaPrecisionKeyword(TParseContext& parseContext, int line, char* text, YYSTYPE* pyylval, int keyword)\r
+int PaPrecisionKeyword(TParseContext& pc, int line, const char* text, YYSTYPE* pyylval, int keyword)\r
{\r
- if (parseContext.profile == EEsProfile || parseContext.version >= 130)\r
+ if (pc.profile == EEsProfile || pc.version >= 130)\r
return keyword;\r
\r
pyylval->lex.line = line;\r
pyylval->lex.string = NewPoolTString(text);\r
\r
- return PaIdentOrType(*pyylval->lex.string, parseContext, pyylval->lex.symbol);\r
+ return PaIdentOrType(*pyylval->lex.string, pc, pyylval->lex.symbol);\r
}\r
\r
-int PaMatNxM(TParseContext& parseContext, int line, char* text, YYSTYPE* pyylval, int keyword)\r
+int PaMatNxM(TParseContext& pc, int line, const char* text, YYSTYPE* pyylval, int keyword)\r
{\r
- if (parseContext.version > 110)\r
+ if (pc.version > 110)\r
return keyword;\r
\r
pyylval->lex.line = line;\r
pyylval->lex.string = NewPoolTString(text);\r
\r
- return PaIdentOrType(*pyylval->lex.string, parseContext, pyylval->lex.symbol);\r
+ return PaIdentOrType(*pyylval->lex.string, pc, pyylval->lex.symbol);\r
}\r
\r
-int PaDMat(TParseContext& parseContext, int line, char* text, YYSTYPE* pyylval, int keyword)\r
+int PaDMat(TParseContext& pc, int line, const char* text, YYSTYPE* pyylval, int keyword)\r
{\r
- if (parseContext.profile == EEsProfile && parseContext.version >= 300) {\r
+ if (pc.profile == EEsProfile && pc.version >= 300) {\r
PaReservedWord();\r
return 0;\r
}\r
\r
- if (parseContext.profile != EEsProfile && parseContext.version >= 400)\r
+ if (pc.profile != EEsProfile && pc.version >= 400)\r
return keyword;\r
\r
pyylval->lex.line = line;\r
pyylval->lex.string = NewPoolTString(text);\r
\r
- return PaIdentOrType(*pyylval->lex.string, parseContext, pyylval->lex.symbol);\r
+ return PaIdentOrType(*pyylval->lex.string, pc, pyylval->lex.symbol);\r
}\r
\r
int PaParseComment(int& lineno, TParseContext& parseContextLocal)\r
\r
void CPPDebugLogMsg(const char *msg)\r
{\r
- TParseContext& parseContext = *((TParseContext *)cpp->pC);\r
+ TParseContext& pc = *((TParseContext *)cpp->pC);\r
\r
- parseContext.infoSink.debug.message(EPrefixNone, msg);\r
+ pc.infoSink.debug.message(EPrefixNone, msg);\r
}\r
\r
void CPPWarningToInfoLog(const char *msg)\r
{\r
- TParseContext& parseContext = *((TParseContext *)cpp->pC);\r
+ TParseContext& pc = *((TParseContext *)cpp->pC);\r
\r
- parseContext.infoSink.info.message(EPrefixWarning, msg, yylineno);\r
+ pc.infoSink.info.message(EPrefixWarning, msg, yylineno);\r
}\r
\r
void CPPShInfoLogMsg(const char *msg)\r
{\r
- TParseContext& parseContext = *((TParseContext *)cpp->pC);\r
+ TParseContext& pc = *((TParseContext *)cpp->pC);\r
\r
- parseContext.error(yylineno,"", "",msg,"");\r
+ pc.error(yylineno,"", "",msg,"");\r
GlobalParseContext->recover();\r
}\r
\r
void CPPErrorToInfoLog(char *msg)\r
{\r
- TParseContext& parseContext = *((TParseContext *)cpp->pC);\r
+ TParseContext& pc = *((TParseContext *)cpp->pC);\r
\r
- parseContext.error(yylineno, "CPP error:", "",msg,"");\r
+ pc.error(yylineno, "CPP error:", "",msg,"");\r
GlobalParseContext->recover();\r
}\r
\r
\r
void HandlePragma(const char **tokens, int numTokens)\r
{\r
- TParseContext& parseContext = *((TParseContext *)cpp->pC);\r
+ TParseContext& pc = *((TParseContext *)cpp->pC);\r
\r
if (!strcmp(tokens[0], "optimize")) {\r
if (numTokens != 4) {\r
}\r
\r
if (!strcmp(tokens[2], "on"))\r
- parseContext.contextPragma.optimize = true;\r
+ pc.contextPragma.optimize = true;\r
else if (!strcmp(tokens[2], "off"))\r
- parseContext.contextPragma.optimize = false;\r
+ pc.contextPragma.optimize = false;\r
else {\r
CPPShInfoLogMsg("\"on\" or \"off\" expected after '(' for 'optimize' pragma");\r
return;\r
}\r
\r
if (!strcmp(tokens[2], "on"))\r
- parseContext.contextPragma.debug = true;\r
+ pc.contextPragma.debug = true;\r
else if (!strcmp(tokens[2], "off"))\r
- parseContext.contextPragma.debug = false;\r
+ pc.contextPragma.debug = false;\r
else {\r
CPPShInfoLogMsg("\"on\" or \"off\" expected after '(' for 'debug' pragma");\r
return;\r
\r
void StoreStr(char *string)\r
{\r
- TParseContext& parseContext = *((TParseContext *)cpp->pC);\r
+ TParseContext& pc = *((TParseContext *)cpp->pC);\r
\r
TString strSrc;\r
strSrc = TString(string);\r
\r
- parseContext.HashErrMsg = parseContext.HashErrMsg + " " + strSrc;\r
+ pc.HashErrMsg = pc.HashErrMsg + " " + strSrc;\r
}\r
\r
const char* GetStrfromTStr(void)\r
{\r
- TParseContext& parseContext = *((TParseContext *)cpp->pC);\r
+ TParseContext& pc = *((TParseContext *)cpp->pC);\r
\r
- cpp->ErrMsg = parseContext.HashErrMsg.c_str();\r
+ cpp->ErrMsg = pc.HashErrMsg.c_str();\r
return cpp->ErrMsg;\r
}\r
\r
void ResetTString(void)\r
{\r
- TParseContext& parseContext = *((TParseContext *)cpp->pC);\r
+ TParseContext& pc = *((TParseContext *)cpp->pC);\r
\r
- parseContext.HashErrMsg = "";\r
+ pc.HashErrMsg = "";\r
}\r
\r
void SetVersion(int version)\r
{\r
- TParseContext& parseContext = *((TParseContext *)cpp->pC);\r
- parseContext.setVersion(version);\r
+ TParseContext& pc = *((TParseContext *)cpp->pC);\r
+ pc.setVersion(version);\r
}\r
\r
void SetProfile(EProfile profile)\r
{\r
- TParseContext& parseContext = *((TParseContext *)cpp->pC);\r
- parseContext.setProfile(profile);\r
+ TParseContext& pc = *((TParseContext *)cpp->pC);\r
+ pc.setProfile(profile);\r
}\r
\r
TBehavior GetBehavior(const char* behavior)\r
\r
void updateExtensionBehavior(const char* extName, const char* behavior)\r
{\r
- TParseContext& parseContext = *((TParseContext *)cpp->pC);\r
+ TParseContext& pc = *((TParseContext *)cpp->pC);\r
TBehavior behaviorVal = GetBehavior(behavior);\r
TMap<TString, TBehavior>:: iterator iter;\r
TString msg;\r
CPPShInfoLogMsg("extension 'all' cannot have 'require' or 'enable' behavior");\r
return;\r
} else {\r
- for (iter = parseContext.extensionBehavior.begin(); iter != parseContext.extensionBehavior.end(); ++iter)\r
+ for (iter = pc.extensionBehavior.begin(); iter != pc.extensionBehavior.end(); ++iter)\r
iter->second = behaviorVal;\r
}\r
} else {\r
- iter = parseContext.extensionBehavior.find(TString(extName));\r
- if (iter == parseContext.extensionBehavior.end()) {\r
+ iter = pc.extensionBehavior.find(TString(extName));\r
+ if (iter == pc.extensionBehavior.end()) {\r
switch (behaviorVal) {\r
case EBhRequire:\r
CPPShInfoLogMsg((TString("extension '") + extName + "' is not supported").c_str());\r
case EBhWarn:\r
case EBhDisable:\r
msg = TString("extension '") + extName + "' is not supported";\r
- parseContext.infoSink.info.message(EPrefixWarning, msg.c_str(), yylineno);\r
+ pc.infoSink.info.message(EPrefixWarning, msg.c_str(), yylineno);\r
break;\r
}\r
return;\r
\r
if ($$.function == 0) {\r
// error recover\r
- $$.function = new TFunction(&TString(""), TType(EbtVoid), EOpNull);\r
+ TString empty("");\r
+ $$.function = new TFunction(&empty, TType(EbtVoid), EOpNull);\r
}\r
}\r
;\r
if ($1.op != EOpNull) {\r
$$ = parseContext.intermediate.addUnaryMath($1.op, $2, $1.line, parseContext.symbolTable);\r
if ($$ == 0) {\r
- char* errorOp = "";\r
+ char errorOp[2] = {0, 0};\r
switch($1.op) {\r
- case EOpNegative: errorOp = "-"; break;\r
- case EOpLogicalNot: errorOp = "!"; break;\r
- case EOpBitwiseNot: errorOp = "~"; break;\r
+ case EOpNegative: errorOp[0] = '-'; break;\r
+ case EOpLogicalNot: errorOp[0] = '!'; break;\r
+ case EOpBitwiseNot: errorOp[0] = '~'; break;\r
default: break;\r
}\r
parseContext.unaryOpError($1.line, errorOp, $2->getCompleteString());\r
char *end = &buf[maxSize];
if (qualifier.storage != EvqTemporary && qualifier.storage != EvqGlobal)
- p += sprintf_s(p, end - p, "%s ", getStorageQualifierString());
+ p += snprintf(p, end - p, "%s ", getStorageQualifierString());
if (arraySizes) {
if (arraySizes->front() == 0)
- p += sprintf_s(p, end - p, "unsized array of ");
+ p += snprintf(p, end - p, "unsized array of ");
else
- p += sprintf_s(p, end - p, "%d-element array of ", arraySizes->front());
+ p += snprintf(p, end - p, "%d-element array of ", arraySizes->front());
}
if (qualifier.precision != EpqNone)
- p += sprintf_s(p, end - p, "%s ", getPrecisionQualifierString());
+ p += snprintf(p, end - p, "%s ", getPrecisionQualifierString());
if (matrixCols > 0)
- p += sprintf_s(p, end - p, "%dX%d matrix of ", matrixCols, matrixRows);
+ p += snprintf(p, end - p, "%dX%d matrix of ", matrixCols, matrixRows);
else if (vectorSize > 1)
- p += sprintf_s(p, end - p, "%d-component vector of ", vectorSize);
+ p += snprintf(p, end - p, "%d-component vector of ", vectorSize);
- sprintf_s(p, end - p, "%s", getBasicString());
+ snprintf(p, end - p, "%s", getBasicString());
return TString(buf);
}
const int maxSize = 100;
char buf[maxSize];
- sprintf_s(buf, maxSize, "'%s' (%s)\n",
+ snprintf(buf, maxSize, "'%s' (%s)\n",
node->getSymbol().c_str(),
node->getCompleteString().c_str());
{
const int maxSize = 300;
char buf[maxSize];
- sprintf_s(buf, maxSize, "%f (%s)", node->getUnionArrayPointer()[i].getFConst(), "const float");
+ snprintf(buf, maxSize, "%f (%s)", node->getUnionArrayPointer()[i].getFConst(), "const float");
out.debug << buf << "\n";
}
{
const int maxSize = 300;
char buf[maxSize];
- sprintf_s(buf, maxSize, "%f (%s)", node->getUnionArrayPointer()[i].getDConst(), "const double");
+ snprintf(buf, maxSize, "%f (%s)", node->getUnionArrayPointer()[i].getDConst(), "const double");
out.debug << buf << "\n";
}
{
const int maxSize = 300;
char buf[maxSize];
- sprintf_s(buf, maxSize, "%d (%s)", node->getUnionArrayPointer()[i].getIConst(), "const int");
+ snprintf(buf, maxSize, "%d (%s)", node->getUnionArrayPointer()[i].getIConst(), "const int");
out.debug << buf << "\n";
}
TIntermNode* addSelection(TIntermTyped* cond, TIntermNodePair code, TSourceLoc);
TIntermTyped* addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, TSourceLoc);
TIntermTyped* addComma(TIntermTyped* left, TIntermTyped* right, TSourceLoc);
- TIntermTyped* addMethod(TIntermTyped*, TType&, const TString*, TSourceLoc);
+ TIntermTyped* addMethod(TIntermTyped*, const TType&, const TString*, TSourceLoc);
TIntermConstantUnion* addConstantUnion(constUnion*, const TType&, TSourceLoc);
TIntermTyped* promoteConstantUnion(TBasicType, TIntermConstantUnion*) ;
bool parseConstTree(TSourceLoc, TIntermNode*, constUnion*, TOperator, TSymbolTable&, TType, bool singleConstantParam = false);
if (qualifier != EvqConst) {
const int maxSize = 200;
char buf[maxSize];
- sprintf_s(buf, maxSize, "'constructor' : assigning non-constant to %s", oit->type.getCompleteString().c_str());
+ snprintf(buf, maxSize, "'constructor' : assigning non-constant to %s", oit->type.getCompleteString().c_str());
oit->infoSink.info.message(EPrefixError, buf, node->getLine());
oit->error = true;
const int maxSize = 200;
char buf[maxSize];
- sprintf_s(buf, maxSize, "'constructor' : assigning non-constant to '%s'", oit->type.getCompleteString().c_str());
+ snprintf(buf, maxSize, "'constructor' : assigning non-constant to '%s'", oit->type.getCompleteString().c_str());
oit->infoSink.info.message(EPrefixError, buf, node->getLine());
oit->error = true;
if (!node->isConstructor() && node->getOp() != EOpComma) {
const int maxSize = 200;
char buf[maxSize];
- sprintf_s(buf, maxSize, "'constructor' : assigning non-constant to '%s'", oit->type.getCompleteString().c_str());
+ snprintf(buf, maxSize, "'constructor' : assigning non-constant to '%s'", oit->type.getCompleteString().c_str());
oit->infoSink.info.message(EPrefixError, buf, node->getLine());
oit->error = true;
NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\****************************************************************************/
-# include "slglobals.h"
+#include "slglobals.h"
extern CPPStruct *cpp;
int InitCPPStruct(void);
int InitScanner(CPPStruct *cpp);
//
// tokens.c
//
-#define _CRT_SECURE_NO_WARNINGS
+#ifdef _WIN32
+ #define _CRT_SECURE_NO_WARNINGS
+ #define snprintf sprintf_s
+#endif
#include <assert.h>
#include <stdlib.h>
switch (token) {
case CPP_IDENTIFIER:
case CPP_TYPEIDENTIFIER:
- sprintf_s(str, maxSize, "%s ", GetAtomString(atable, yylvalpp->sc_ident));
+ snprintf(str, maxSize, "%s ", GetAtomString(atable, yylvalpp->sc_ident));
break;
case CPP_STRCONSTANT:
- sprintf_s(str, maxSize, "\"%s\"", GetAtomString(atable, yylvalpp->sc_ident));
+ snprintf(str, maxSize, "\"%s\"", GetAtomString(atable, yylvalpp->sc_ident));
break;
case CPP_FLOATCONSTANT:
//printf("%g9.6 ", yylvalpp->sc_fval);
break;
default:
if (token >= 127)
- sprintf_s(str, maxSize, "%s ", GetAtomString(atable, token));
+ snprintf(str, maxSize, "%s ", GetAtomString(atable, token));
else
- sprintf_s(str, maxSize, "%c", token);
+ snprintf(str, maxSize, "%c", token);
break;
}
CPPDebugLogMsg(str);