Updated parser to emit simpler AST for translation units functions and detect duplicate definitions of functions in predefined nodes

This commit is contained in:
Rodz Labs 2022-05-12 08:47:44 +02:00
parent f1cce86dc6
commit 214856a0ba
2 changed files with 36 additions and 2 deletions

View File

@ -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()

View File

@ -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