| /* | |
| Copyright 2019 Alain Dargelas | |
| Licensed under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| */ | |
| /* | |
| * File: Function.cpp | |
| * Author: alain | |
| * | |
| * Created on February 21, 2019, 8:19 PM | |
| */ | |
| #include "Design/Function.h" | |
| using namespace SURELOG; | |
| Function::~Function() {} | |
| bool Function::compile(CompileHelper& compile_helper) { | |
| bool result = true; | |
| FileContent* fC = m_fileContent; | |
| NodeId function_declaration = fC->Child(m_nodeId); | |
| VObjectType function_type = fC->Type(function_declaration); | |
| NodeId tf_port_list = 0; | |
| NodeId function_statement_or_null = 0; | |
| switch (function_type) { | |
| case VObjectType::slClass_constructor_declaration: { | |
| tf_port_list = fC->Sibling(function_declaration); | |
| if (tf_port_list) | |
| function_statement_or_null = fC->Sibling(tf_port_list); | |
| else | |
| function_statement_or_null = fC->Child(function_declaration); | |
| break; | |
| } | |
| default: { | |
| NodeId function_body_declaration = fC->Child(function_declaration); | |
| NodeId function_data_type_or_implicit = | |
| fC->Child(function_body_declaration); | |
| NodeId function_name = fC->Sibling(function_data_type_or_implicit); | |
| tf_port_list = fC->Sibling(function_name); | |
| function_statement_or_null = tf_port_list; | |
| break; | |
| } | |
| } | |
| if (fC->Type(tf_port_list) == VObjectType::slTf_port_list) { | |
| result &= | |
| compile_helper.compileTfPortList(this, fC, tf_port_list, m_params); | |
| function_statement_or_null = fC->Sibling(tf_port_list); | |
| } | |
| result &= compile_helper.compileScopeBody(this, this, fC, | |
| function_statement_or_null); | |
| return result; | |
| } |