Home | History | Annotate | Download | only in scripts
      1 import sys
      2 from genutil import *
      3 
      4 # Templates
      5 
      6 reservedOperatorCaseTemplate = """
      7 case operator_${{NAME}}
      8 	expect compile_fail
      9 	values {}
     10 
     11 	both ""
     12 		precision mediump float;
     13 		precision mediump int;
     14 
     15 		${DECLARATIONS}
     16 
     17 		void main()
     18 		{
     19 			${SETUP}
     20 			int value = 100;
     21 			${{OP}}
     22 			${OUTPUT}
     23 		}
     24 	""
     25 end
     26 """[1:-1]
     27 
     28 # Classes
     29 
     30 class ReservedOperatorCase(ShaderCase):
     31 	def __init__(self, op):
     32 		self.name 		= op.name
     33 		if op.operator == "~":
     34 			self.operation = 'value = ~value;'
     35 		else:
     36 			self.operation 	= 'value ' + op.operator + ' 1;'
     37 
     38 	def __str__(self):
     39 		params = {
     40 			"NAME": self.name,
     41 			"OP"  : self.operation
     42 		}
     43 		return fillTemplate(reservedOperatorCaseTemplate, params)
     44 
     45 
     46 class Operator():
     47 	def __init__(self, operator, name):
     48 		self.operator 	= operator
     49 		self.name 		= name
     50 
     51 # Declarations
     52 
     53 RESERVED_OPERATORS = [
     54 	Operator("%",	"modulo"),
     55 	Operator("~",	"bitwise_not"),
     56 	Operator("<<",	"bitwise_shift_left"),
     57 	Operator(">>",	"bitwise_shift_right"),
     58 	Operator("&",	"bitwise_and"),
     59 	Operator("^",	"bitwise_xor"),
     60 	Operator("|",	"bitwise_or"),
     61 	Operator("%=",	"assign_modulo"),
     62 	Operator("<<=",	"assign_shift_left"),
     63 	Operator(">>=", "assign_shift_right"),
     64 	Operator("&=",	"assign_and"),
     65 	Operator("^=",	"assign_xor"),
     66 	Operator("|=",	"assign_or")
     67 ]
     68 
     69 # Reserved operator usage cases
     70 
     71 reservedOperatorCases = []
     72 
     73 for operator in RESERVED_OPERATORS:
     74 	reservedOperatorCases.append(ReservedOperatorCase(operator)) 		# Reserved operators
     75 
     76 # Main program
     77 
     78 if __name__ == "__main__":
     79 	print "Generating shader case files."
     80 	writeAllCases("reserved_operators.test", 	reservedOperatorCases)