Updated parser to emit simpler AST for translation units functions and detect duplicate definitions of functions in predefined nodes
This commit is contained in:
parent
f1cce86dc6
commit
214856a0ba
|
@ -2,10 +2,11 @@ tool
|
|||
extends Node
|
||||
|
||||
var predefined_generators : Dictionary = {}
|
||||
var predefined_functions : Dictionary = {}
|
||||
|
||||
var current_project_path : String = ""
|
||||
|
||||
const CHECK_PREDEFINED : bool = false
|
||||
const CHECK_PREDEFINED : bool = true
|
||||
|
||||
func _ready()-> void:
|
||||
update_predefined_generators()
|
||||
|
@ -15,6 +16,7 @@ func update_predefined_generators()-> void:
|
|||
if CHECK_PREDEFINED:
|
||||
parser = load("res://addons/material_maker/parser/glsl_parser.gd").new()
|
||||
predefined_generators = {}
|
||||
predefined_functions = {}
|
||||
for path in MMPaths.get_nodes_paths():
|
||||
var dir = Directory.new()
|
||||
if dir.open(path) == OK:
|
||||
|
@ -30,6 +32,19 @@ func update_predefined_generators()-> void:
|
|||
var parse_result = parser.parse(generator.shader_model.global)
|
||||
if parse_result.status != "OK":
|
||||
print(file_name+" has errors in global")
|
||||
elif parse_result.value.type == "translation_unit":
|
||||
for definition in parse_result.value.value:
|
||||
if definition.type == "function_definition":
|
||||
var function_name = definition.value[0].value[0].value.name
|
||||
if function_name.type == "IDENTIFIER":
|
||||
if predefined_functions.has(function_name.value):
|
||||
print(str(function_name.value)+" is defined in "+file_name.get_basename()+" and "+predefined_functions[function_name.value])
|
||||
else:
|
||||
predefined_functions[function_name.value] = file_name.get_basename()
|
||||
else:
|
||||
print(definition)
|
||||
else:
|
||||
print(definition.type)
|
||||
predefined_generators[file_name.get_basename()] = generator
|
||||
file.close()
|
||||
file_name = dir.get_next()
|
||||
|
|
|
@ -51,13 +51,32 @@ func build_field_selection_test(t1):
|
|||
return null
|
||||
return t1.value
|
||||
|
||||
func build_function_header(t1, t2, t3):
|
||||
return { return_type=t1, name=t2, parameters=[] }
|
||||
|
||||
func build_function_header_with_parameters(t1, t2):
|
||||
t1.value.parameters.push_back(t2)
|
||||
return t1.value
|
||||
|
||||
func build_function_header_with_parameters_2(t1, t2, t3):
|
||||
t1.value.parameters.push_back(t3)
|
||||
return t1.value
|
||||
|
||||
func build_function_call_header(t1, t2):
|
||||
return { name=t1, parameters=[] }
|
||||
|
||||
func build_function_call_header_with_parameters(t1, t2):
|
||||
t1.value.parameters.push_back(t2)
|
||||
return t1.value
|
||||
|
||||
|
||||
func build_function_call_header_with_parameters_2(t1, t2, t3):
|
||||
t1.value.parameters.push_back(t3)
|
||||
return t1.value
|
||||
|
||||
func build_translation_unit(t1):
|
||||
return [ t1 ]
|
||||
|
||||
func build_translation_unit_2(t1, t2):
|
||||
t1.value.push_back(t2)
|
||||
return t1.value
|
||||
|
||||
|
|
Loading…
Reference in New Issue