通过SRCML文件获取导入实体的定义位置

如何解决通过SRCML文件获取导入实体的定义位置

有没有一种方法可以获取以下信息:

  • 继承的类
  • 创建对象的
  • 类。
  • 当前单元中未定义的
  • 方法调用 特别是在C ++的情况下

是否有更好的工具或方法。 与其遵循include语句, 现在我正在使用srcml,所以切槽不是大问题。 但是准确性是主要问题,因为以下内容可能容易出错。


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<unit xmlns="http://www.srcML.org/srcML/src" revision="1.0.0" url="temp/STL/stl/src/">

<unit xmlns:cpp="http://www.srcML.org/srcML/cpp" revision="1.0.0" language="C++" filename="../temp/STL/stl/src/StlCompareStringA.cpp" hash="e0f96dbf757dc31aecdca67e74455e0fb8f9bfcf"><comment type="line">// Copyright (c) Microsoft Corporation.</comment>
<comment type="line">// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception</comment>

<cpp:include>#<cpp:directive>include</cpp:directive> <cpp:file>&lt;crtdbg.h&gt;</cpp:file></cpp:include>
<cpp:include>#<cpp:directive>include</cpp:directive> <cpp:file>&lt;internal_shared.h&gt;</cpp:file></cpp:include>
<cpp:include>#<cpp:directive>include</cpp:directive> <cpp:file>&lt;string.h&gt;</cpp:file></cpp:include>

<cpp:include>#<cpp:directive>include</cpp:directive> <cpp:file>&lt;Windows.h&gt;</cpp:file></cpp:include>

<cpp:include>#<cpp:directive>include</cpp:directive> <cpp:file>"awint.hpp"</cpp:file></cpp:include>


<comment type="line">// int __cdecl __crtCompareStringA - Get type information about an ANSI string.</comment>
<comment type="line">//</comment>
<comment type="line">// Purpose:</comment>
<comment type="line">//        Internal support function. Assumes info in ANSI string format. Tries</comment>
<comment type="line">//        to use NLS API call CompareStringA if available and uses CompareStringW</comment>
<comment type="line">//        if it must. If neither is available it fails and returns 0.</comment>
<comment type="line">//</comment>
<comment type="line">// Entry:</comment>
<comment type="line">//        LPCWSTR LocaleName  - locale context for the comparison.</comment>
<comment type="line">//        DWORD   dwCmpFlags  - see docs.microsoft.com</comment>
<comment type="line">//        LPCSTR  lpStringn   - multibyte string to be compared</comment>
<comment type="line">//        int     cchCountn   - char (byte) count (NOT including null terminator)</comment>
<comment type="line">//                              (-1 if null terminated)</comment>
<comment type="line">//        int     code_page   - for MB/WC conversion. If 0,use __lc_codepage</comment>
<comment type="line">//</comment>
<comment type="line">// Exit:</comment>
<comment type="line">//        Success: 1 - if lpString1 &lt;  lpString2</comment>
<comment type="line">//                 2 - if lpString1 == lpString2</comment>
<comment type="line">//                 3 - if lpString1 &gt;  lpString2</comment>
<comment type="line">//        Failure: 0</comment>
<extern>extern <literal type="string">"C"</literal> <function><type><name>int</name> <name>__cdecl</name></type> <name>__crtCompareStringA</name><parameter_list>(<parameter><decl><type><name>LPCWSTR</name></type> <name>LocaleName</name></decl></parameter>,<parameter><decl><type><name>DWORD</name></type> <name>dwCmpFlags</name></decl></parameter>,<parameter><decl><type><name>LPCSTR</name></type> <name>lpString1</name></decl></parameter>,<parameter><decl><type><name>int</name></type> <name>cchCount1</name></decl></parameter>,<parameter><decl><type><name>LPCSTR</name></type> <name>lpString2</name></decl></parameter>,<parameter><decl><type><name>int</name></type> <name>cchCount2</name></decl></parameter>,<parameter><decl><type><name>int</name></type> <name>code_page</name></decl></parameter>)</parameter_list> <block>{<block_content>
    <comment type="line">// CompareString will compare past null terminator. Must find null terminator if in string before cchCountn chars.</comment>
    <if_stmt><if>if <condition>(<expr><name>cchCount1</name> <operator>&gt;</operator> <literal type="number">0</literal></expr>)</condition> <block>{<block_content>
        <expr_stmt><expr><name>cchCount1</name> <operator>=</operator> <cast type="static">static_cast<argument_list type="generic">&lt;<argument><expr><name>int</name></expr></argument>&gt;</argument_list><argument_list>(<argument><expr><call><name>__strncnt</name><argument_list>(<argument><expr><name>lpString1</name></expr></argument>,<argument><expr><name>cchCount1</name></expr></argument>)</argument_list></call></expr></argument>)</argument_list></cast></expr>;</expr_stmt>
    </block_content>}</block></if> <if type="elseif">else if <condition>(<expr><name>cchCount1</name> <operator>&lt;</operator> <operator>-</operator><literal type="number">1</literal></expr>)</condition> <block>{<block_content>
        <return>return <expr><name>FALSE</name></expr>;</return>
    </block_content>}</block></if></if_stmt>

    <if_stmt><if>if <condition>(<expr><name>cchCount2</name> <operator>&gt;</operator> <literal type="number">0</literal></expr>)</condition> <block>{<block_content>
        <expr_stmt><expr><name>cchCount2</name> <operator>=</operator> <cast type="static">static_cast<argument_list type="generic">&lt;<argument><expr><name>int</name></expr></argument>&gt;</argument_list><argument_list>(<argument><expr><call><name>__strncnt</name><argument_list>(<argument><expr><name>lpString2</name></expr></argument>,<argument><expr><name>cchCount2</name></expr></argument>)</argument_list></call></expr></argument>)</argument_list></cast></expr>;</expr_stmt>
    </block_content>}</block></if> <if type="elseif">else if <condition>(<expr><name>cchCount2</name> <operator>&lt;</operator> <operator>-</operator><literal type="number">1</literal></expr>)</condition> <block>{<block_content>
        <return>return <expr><name>FALSE</name></expr>;</return>
    </block_content>}</block></if></if_stmt>

    <comment type="line">// Special case: at least one count is zero</comment>
    <if_stmt><if>if <condition>(<expr><operator>!</operator><name>cchCount1</name> <operator>||</operator> <operator>!</operator><name>cchCount2</name></expr>)</condition> <block>{<block_content>
        <comment type="line">// both strings zero</comment>
        <if_stmt><if>if <condition>(<expr><name>cchCount1</name> <operator>==</operator> <name>cchCount2</name></expr>)</condition> <block>{<block_content>
            <return>return <expr><literal type="number">2</literal></expr>;</return>
        </block_content>}</block></if></if_stmt>

        <comment type="line">// string 1 greater</comment>
        <if_stmt><if>if <condition>(<expr><name>cchCount2</name> <operator>&gt;</operator> <literal type="number">1</literal></expr>)</condition> <block>{<block_content>
            <return>return <expr><literal type="number">1</literal></expr>;</return>
        </block_content>}</block></if></if_stmt>

        <comment type="line">// string 2 greater</comment>
        <if_stmt><if>if <condition>(<expr><name>cchCount1</name> <operator>&gt;</operator> <literal type="number">1</literal></expr>)</condition> <block>{<block_content>
            <return>return <expr><literal type="number">3</literal></expr>;</return>
        </block_content>}</block></if></if_stmt>

        <comment type="line">// one has zero count,the other has a count of one</comment>
        <comment type="line">// - if the one count is a naked lead byte,the strings are equal</comment>
        <comment type="line">// - otherwise it is a single character and they are unequal</comment>
        <decl_stmt><decl><type><name>CPINFO</name></type> <name>cpInfo</name></decl>;</decl_stmt>
        <if_stmt><if>if <condition>(<expr><call><name>GetCPInfo</name><argument_list>(<argument><expr><name>code_page</name></expr></argument>,<argument><expr><operator>&amp;</operator><name>cpInfo</name></expr></argument>)</argument_list></call> <operator>==</operator> <name>FALSE</name></expr>)</condition> <block>{<block_content>
            <return>return <expr><literal type="number">0</literal></expr>;</return>
        </block_content>}</block></if></if_stmt>

        <expr_stmt><expr><call><name>_ASSERTE</name><argument_list>(<argument><expr><operator>(</operator><name>cchCount1</name> <operator>==</operator> <literal type="number">0</literal> <operator>&amp;&amp;</operator> <name>cchCount2</name> <operator>==</operator> <literal type="number">1</literal><operator>)</operator> <operator>||</operator> <operator>(</operator><name>cchCount1</name> <operator>==</operator> <literal type="number">1</literal> <operator>&amp;&amp;</operator> <name>cchCount2</name> <operator>==</operator> <literal type="number">0</literal><operator>)</operator></expr></argument>)</argument_list></call></expr>;</expr_stmt>

        <comment type="line">// string 1 has count of 1</comment>
        <if_stmt><if>if <condition>(<expr><name>cchCount1</name> <operator>&gt;</operator> <literal type="number">0</literal></expr>)</condition> <block>{<block_content>
            <if_stmt><if>if <condition>(<expr><name><name>cpInfo</name><operator>.</operator><name>MaxCharSize</name></name> <operator>&lt;</operator> <literal type="number">2</literal></expr>)</condition> <block>{<block_content>
                <return>return <expr><literal type="number">3</literal></expr>;</return>
            </block_content>}</block></if></if_stmt>

            <for>for <control>(<init><decl><type><name>auto</name></type> <name>cp</name> <init>= <expr><operator>&amp;</operator><name><name>cpInfo</name><operator>.</operator><name>LeadByte</name><index>[<expr><literal type="number">0</literal></expr>]</index></name></expr></init></decl>;</init> <condition><expr><name><name>cp</name><index>[<expr><literal type="number">0</literal></expr>]</index></name> <operator>&amp;&amp;</operator> <name><name>cp</name><index>[<expr><literal type="number">1</literal></expr>]</index></name></expr>;</condition> <incr><expr><name>cp</name> <operator>+=</operator> <literal type="number">2</literal></expr></incr>)</control> <block>{<block_content>
                <decl_stmt><decl><type><specifier>const</specifier> <specifier>auto</specifier></type> <name>ch</name> <init>= <expr><cast type="static">static_cast<argument_list type="generic">&lt;<argument><expr><name>unsigned</name> <name>char</name></expr></argument>&gt;</argument_list><argument_list>(<argument><expr><operator>*</operator><name>lpString1</name></expr></argument>)</argument_list></cast></expr></init></decl>;</decl_stmt>
                <if_stmt><if>if <condition>(<expr><name>ch</name> <operator>&gt;=</operator> <name><name>cp</name><index>[<expr><literal type="number">0</literal></expr>]</index></name> <operator>&amp;&amp;</operator> <name>ch</name> <operator>&lt;=</operator> <name><name>cp</name><index>[<expr><literal type="number">1</literal></expr>]</index></name></expr>)</condition> <block>{<block_content>
                    <return>return <expr><literal type="number">2</literal></expr>;</return>
                </block_content>}</block></if></if_stmt>
            </block_content>}</block></for>

            <return>return <expr><literal type="number">3</literal></expr>;</return>
        </block_content>}</block></if></if_stmt>

        <comment type="line">// string 2 has count of 1</comment>
        <if_stmt><if>if <condition>(<expr><name>cchCount2</name> <operator>&gt;</operator> <literal type="number">0</literal></expr>)</condition> <block>{<block_content>
            <if_stmt><if>if <condition>(<expr><name><name>cpInfo</name><operator>.</operator><name>MaxCharSize</name></name> <operator>&lt;</operator> <literal type="number">2</literal></expr>)</condition> <block>{<block_content>
                <return>return <expr><literal type="number">1</literal></expr>;</return>
            </block_content>}</block></if></if_stmt>

            <for>for <control>(<init><decl><type><name>auto</name></type> <name>cp</name> <init>= <expr><operator>&amp;</operator><name><name>cpInfo</name><operator>.</operator><name>LeadByte</name><index>[<expr><literal type="number">0</literal></expr>]</index></name></expr></init></decl>;</init> <condition><expr><name><name>cp</name><index>[<expr><literal type="number">0</literal></expr>]</index></name> <operator>&amp;&amp;</operator> <name><name>cp</name><index>[<expr><literal type="number">1</literal></expr>]</index></name></expr>;</condition> <incr><expr><name>cp</name> <operator>+=</operator> <literal type="number">2</literal></expr></incr>)</control> <block>{<block_content>
                <decl_stmt><decl><type><specifier>const</specifier> <specifier>auto</specifier></type> <name>ch</name> <init>= <expr><cast type="static">static_cast<argument_list type="generic">&lt;<argument><expr><name>unsigned</name> <name>char</name></expr></argument>&gt;</argument_list><argument_list>(<argument><expr><operator>*</operator><name>lpString2</name></expr></argument>)</argument_list></cast></expr></init></decl>;</decl_stmt>
                <if_stmt><if>if <condition>(<expr><name>ch</name> <operator>&gt;=</operator> <name><name>cp</name><index>[<expr><literal type="number">0</literal></expr>]</index></name> <operator>&amp;&amp;</operator> <name>ch</name> <operator>&lt;=</operator> <name><name>cp</name><index>[<expr><literal type="number">1</literal></expr>]</index></name></expr>)</condition> <block>{<block_content>
                    <return>return <expr><literal type="number">2</literal></expr>;</return>
                </block_content>}</block></if></if_stmt>
            </block_content>}</block></for>

            <return>return <expr><literal type="number">1</literal></expr>;</return>
        </block_content>}</block></if></if_stmt>
    </block_content>}</block></if></if_stmt>

    <comment type="line">// Convert strings and return the requested information.</comment>

    <comment type="line">// find out how big a buffer we need (includes null terminator if any)</comment>
    <decl_stmt><decl><type><specifier>const</specifier> <name>int</name></type> <name>buff_size1</name> <init>=
        <expr><call><name>MultiByteToWideChar</name><argument_list>(<argument><expr><name>code_page</name></expr></argument>,<argument><expr><name>MB_PRECOMPOSED</name> <operator>|</operator> <name>MB_ERR_INVALID_CHARS</name></expr></argument>,<argument><expr><name>lpString1</name></expr></argument>,<argument><expr><name>cchCount1</name></expr></argument>,<argument><expr><literal type="null">nullptr</literal></expr></argument>,<argument><expr><literal type="number">0</literal></expr></argument>)</argument_list></call></expr></init></decl>;</decl_stmt>
    <if_stmt><if>if <condition>(<expr><literal type="number">0</literal> <operator>==</operator> <name>buff_size1</name></expr>)</condition> <block>{<block_content>
        <return>return <expr><literal type="number">0</literal></expr>;</return>
    </block_content>}</block></if></if_stmt>

    <comment type="line">// allocate enough space for chars</comment>
    <decl_stmt><decl><type><name><name>__crt_scoped_stack_ptr</name><argument_list type="generic">&lt;<argument><expr><name>wchar_t</name></expr></argument>&gt;</argument_list></name></type> <name>wbuffer1</name><argument_list>(<argument><expr><call><name>_malloca_crt_t</name><argument_list>(<argument><expr><name>wchar_t</name></expr></argument>,<argument><expr><name>buff_size1</name></expr></argument>)</argument_list></call></expr></argument>)</argument_list></decl>;</decl_stmt>
    <if_stmt><if>if <condition>(<expr><call><name><name>wbuffer1</name><operator>.</operator><name>get</name></name><argument_list>()</argument_list></call> <operator>==</operator> <literal type="null">nullptr</literal></expr>)</condition> <block>{<block_content>
        <return>return <expr><literal type="number">0</literal></expr>;</return>
    </block_content>}</block></if></if_stmt>

    <comment type="line">// do the conversion</comment>
    <if_stmt><if>if <condition>(<expr><literal type="number">0</literal> <operator>==</operator> <call><name>MultiByteToWideChar</name><argument_list>(<argument><expr><name>code_page</name></expr></argument>,<argument><expr><name>MB_PRECOMPOSED</name></expr></argument>,<argument><expr><call><name><name>wbuffer1</name><operator>.</operator><name>get</name></name><argument_list>()</argument_list></call></expr></argument>,<argument><expr><name>buff_size1</name></expr></argument>)</argument_list></call></expr>)</condition> <block>{<block_content>
        <return>return <expr><literal type="number">0</literal></expr>;</return>
    </block_content>}</block></if></if_stmt>

    <comment type="line">// find out how big a buffer we need (includes null terminator if any)</comment>
    <decl_stmt><decl><type><specifier>const</specifier> <name>int</name></type> <name>buff_size2</name> <init>=
        <expr><call><name>MultiByteToWideChar</name><argument_list>(<argument><expr><name>code_page</name></expr></argument>,<argument><expr><name>lpString2</name></expr></argument>,<argument><expr><name>cchCount2</name></expr></argument>,<argument><expr><literal type="number">0</literal></expr></argument>)</argument_list></call></expr></init></decl>;</decl_stmt>
    <if_stmt><if>if <condition>(<expr><literal type="number">0</literal> <operator>==</operator> <name>buff_size2</name></expr>)</condition> <block>{<block_content>
        <return>return <expr><literal type="number">0</literal></expr>;</return>
    </block_content>}</block></if></if_stmt>

    <comment type="line">// allocate enough space for chars</comment>
    <decl_stmt><decl><type><specifier>const</specifier> <name><name>__crt_scoped_stack_ptr</name><argument_list type="generic">&lt;<argument><expr><name>wchar_t</name></expr></argument>&gt;</argument_list></name></type> <name>wbuffer2</name><argument_list>(<argument><expr><call><name>_malloca_crt_t</name><argument_list>(<argument><expr><name>wchar_t</name></expr></argument>,<argument><expr><name>buff_size2</name></expr></argument>)</argument_list></call></expr></argument>)</argument_list></decl>;</decl_stmt>
    <if_stmt><if>if <condition>(<expr><call><name><name>wbuffer2</name><operator>.</operator><name>get</name></name><argument_list>()</argument_list></call> <operator>==</operator> <literal type="null">nullptr</literal></expr>)</condition> <block>{<block_content>
        <return>return <expr><literal type="number">0</literal></expr>;</return>
    </block_content>}</block></if></if_stmt>

    <decl_stmt><decl><type><specifier>const</specifier> <name>int</name></type> <name>actual_size</name> <init>=
        <expr><call><name>MultiByteToWideChar</name><argument_list>(<argument><expr><name>code_page</name></expr></argument>,<argument><expr><call><name><name>wbuffer2</name><operator>.</operator><name>get</name></name><argument_list>()</argument_list></call></expr></argument>,<argument><expr><name>buff_size2</name></expr></argument>)</argument_list></call></expr></init></decl>;</decl_stmt>
    <if_stmt><if>if <condition>(<expr><name>actual_size</name> <operator>==</operator> <literal type="number">0</literal></expr>)</condition> <block>{<block_content>
        <return>return <expr><literal type="number">0</literal></expr>;</return>
    </block_content>}</block></if></if_stmt>

    <return>return <expr><call><name>__crtCompareStringEx</name><argument_list>(<argument><expr><name>LocaleName</name></expr></argument>,<argument><expr><name>dwCmpFlags</name></expr></argument>,<argument><expr><name>buff_size1</name></expr></argument>,<argument><expr><name>buff_size2</name></expr></argument>)</argument_list></call></expr>;</return>
</block_content>}</block></function></extern>
</unit>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-