Exemplo n.º 1
0
void patch_branch_recr(Dll* dll, Branch* branch, std::string namespacePrefix)
{
    for (int i=0; i < branch->length(); i++)
    {
        Term* term = branch->get(i);

        if (is_namespace(term)) {
            patch_branch_recr(dll, nested_contents(term), namespacePrefix + term->name + "__");
        }
        else if (is_function(term)) {
            std::string name = term->name;

            // Replace '.' with '_'
            for (size_t i=0; i < name.length(); i++)
                if (name[i] == '.')
                    name[i] = '_';

            std::string searchName = namespacePrefix + name;

            void* newEvaluateFunc = find_func_in_dll(dll, searchName.c_str());

            // Patch in this function and record the affected term
            if (newEvaluateFunc != NULL) {
                function_set_evaluate_func(term, (EvaluateFunc) newEvaluateFunc);
                dll->affectedTerms.append(term);
                dll->loadedFunctions.insert(newEvaluateFunc);
            }
        }
    }
}
Exemplo n.º 2
0
bool Grammar::is_variable(const std::string& str) {
    if (str.size() == 0)
        return false;
    for (int i = 0; i < int(str.size()) - 1; i++)
        if (str[i] == ':' && str[i + 1] == ':')
            return is_namespace(str.substr(0, i)) && is_identifier(str.substr(i + 2));
    return is_identifier(str);
}
Exemplo n.º 3
0
bool Grammar::is_keyword_message_argument(const std::string& str) {
    return is_object_value(str) || is_namespace(str) || is_variable(str);
}