- Removed file reading logic from leibniz.cpp and hardcoded rounds as 100000000u + 2u - Removed fs module import and file reading from leibniz.js, replaced with constant 10000000 - Removed file reading code from pi.go and hardcoded rounds as 100000000 - Removed file reading from pi.php and replaced with hardcoded value 10000000 - Deleted rounds.txt file that contained the input value - Updated version numbers in project.yml from 0.1.0.1052/0.1.0 to 0.6.3.1112/0.6.3 - Removed package.json and package-lock.json files with node dependenciesmaster
parent
2c74be470e
commit
0061d1595a
10 changed files with 8 additions and 716 deletions
@ -1,52 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
|
||||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> |
|
||||||
|
|
||||||
<!-- 程序集标识 --> |
|
||||||
<assemblyIdentity |
|
||||||
type="win32" |
|
||||||
name="AotCompiler.App" |
|
||||||
version="1.0.0.0" /> |
|
||||||
|
|
||||||
<!-- 信任信息 / UAC 权限级别 --> |
|
||||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> |
|
||||||
<security> |
|
||||||
<requestedPrivileges> |
|
||||||
<!-- |
|
||||||
asInvoker: 以当前用户权限运行(推荐默认值) |
|
||||||
highestAvailable: 请求当前用户能获得的最高权限 |
|
||||||
requireAdministrator: 要求管理员权限 |
|
||||||
--> |
|
||||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" /> |
|
||||||
</requestedPrivileges> |
|
||||||
</security> |
|
||||||
</trustInfo> |
|
||||||
|
|
||||||
<!-- 应用程序兼容性 --> |
|
||||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> |
|
||||||
<application> |
|
||||||
<!-- Windows 10 / 11 --> |
|
||||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" /> |
|
||||||
<!-- Windows 8.1 --> |
|
||||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" /> |
|
||||||
<!-- Windows 8 --> |
|
||||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" /> |
|
||||||
<!-- Windows 7 --> |
|
||||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" /> |
|
||||||
</application> |
|
||||||
</compatibility> |
|
||||||
|
|
||||||
<!-- DPI 感知(Windows 10 版本 1607+) --> |
|
||||||
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> |
|
||||||
<asmv3:windowsSettings> |
|
||||||
<!-- |
|
||||||
PerMonitorV2: 逐显示器 DPI 感知 v2(推荐,支持混合模式 DPI 缩放) |
|
||||||
PerMonitor: 逐显示器 DPI 感知 v1 |
|
||||||
System: 系统 DPI 感知 |
|
||||||
None / 不设置: DPI 不感知(系统会自动缩放) |
|
||||||
--> |
|
||||||
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> |
|
||||||
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness> |
|
||||||
</asmv3:windowsSettings> |
|
||||||
</asmv3:application> |
|
||||||
|
|
||||||
</assembly> |
|
||||||
@ -1,495 +0,0 @@ |
|||||||
#!/usr/bin/env python3 |
|
||||||
""" |
|
||||||
使用 libclang 解析 C++ 代码并添加头文件路径 |
|
||||||
""" |
|
||||||
|
|
||||||
import clang.cindex |
|
||||||
from clang.cindex import Index, CursorKind, TypeKind, StorageClass |
|
||||||
import json |
|
||||||
import sys |
|
||||||
import os |
|
||||||
from pathlib import Path |
|
||||||
import subprocess |
|
||||||
import argparse |
|
||||||
|
|
||||||
|
|
||||||
class PHPConfigHelper: |
|
||||||
"""PHP 配置辅助类""" |
|
||||||
|
|
||||||
def __init__(self, php_config_path='php-config'): |
|
||||||
self.php_config = php_config_path |
|
||||||
self._check_availability() |
|
||||||
|
|
||||||
def _check_availability(self): |
|
||||||
"""检查 php-config 是否可用""" |
|
||||||
try: |
|
||||||
result = subprocess.run( |
|
||||||
[self.php_config, '--version'], |
|
||||||
capture_output=True, |
|
||||||
text=True, |
|
||||||
check=True |
|
||||||
) |
|
||||||
print(f"✓ 找到 PHP {result.stdout.strip()}") |
|
||||||
except (FileNotFoundError, subprocess.CalledProcessError) as e: |
|
||||||
print(f"警告: php-config 不可用: {e}") |
|
||||||
# 尝试使用常见路径 |
|
||||||
common_paths = [ |
|
||||||
'/usr/bin/php-config', |
|
||||||
'/usr/local/bin/php-config', |
|
||||||
'/opt/php/bin/php-config' |
|
||||||
] |
|
||||||
for path in common_paths: |
|
||||||
if os.path.exists(path): |
|
||||||
self.php_config = path |
|
||||||
try: |
|
||||||
result = subprocess.run( |
|
||||||
[self.php_config, '--version'], |
|
||||||
capture_output=True, |
|
||||||
text=True, |
|
||||||
check=True |
|
||||||
) |
|
||||||
print(f"✓ 找到 PHP {result.stdout.strip()} 在 {path}") |
|
||||||
return |
|
||||||
except (FileNotFoundError, subprocess.CalledProcessError): |
|
||||||
continue |
|
||||||
print("警告: php-config 在任何常见路径都不可用,使用默认路径") |
|
||||||
|
|
||||||
def get_includes(self): |
|
||||||
""" |
|
||||||
获取 include 路径列表 |
|
||||||
|
|
||||||
Returns: |
|
||||||
list: 头文件路径列表(不带 -I 前缀) |
|
||||||
""" |
|
||||||
try: |
|
||||||
result = subprocess.run( |
|
||||||
[self.php_config, '--includes'], |
|
||||||
capture_output=True, |
|
||||||
text=True, |
|
||||||
check=True |
|
||||||
) |
|
||||||
|
|
||||||
# 解析输出: "-I/path1 -I/path2" -> ['/path1', '/path2'] |
|
||||||
includes = [] |
|
||||||
for flag in result.stdout.strip().split(): |
|
||||||
if flag.startswith('-I'): |
|
||||||
includes.append(flag[2:]) |
|
||||||
|
|
||||||
return includes |
|
||||||
except (subprocess.CalledProcessError, FileNotFoundError): |
|
||||||
print("警告: 无法获取 PHP includes,使用默认路径") |
|
||||||
return ['/usr/include/php', '/usr/include/php/20210902'] # 默认路径 |
|
||||||
|
|
||||||
def get_include_dir(self): |
|
||||||
"""获取主 include 目录""" |
|
||||||
try: |
|
||||||
result = subprocess.run( |
|
||||||
[self.php_config, '--include-dir'], |
|
||||||
capture_output=True, |
|
||||||
text=True, |
|
||||||
check=True |
|
||||||
) |
|
||||||
return result.stdout.strip() |
|
||||||
except (subprocess.CalledProcessError, FileNotFoundError): |
|
||||||
return '/usr/include/php' |
|
||||||
|
|
||||||
def get_extension_dir(self): |
|
||||||
"""获取扩展目录""" |
|
||||||
try: |
|
||||||
result = subprocess.run( |
|
||||||
[self.php_config, '--extension-dir'], |
|
||||||
capture_output=True, |
|
||||||
text=True, |
|
||||||
check=True |
|
||||||
) |
|
||||||
return result.stdout.strip() |
|
||||||
except (subprocess.CalledProcessError, FileNotFoundError): |
|
||||||
return '/usr/lib/php' |
|
||||||
|
|
||||||
def get_version(self): |
|
||||||
"""获取 PHP 版本""" |
|
||||||
try: |
|
||||||
result = subprocess.run( |
|
||||||
[self.php_config, '--version'], |
|
||||||
capture_output=True, |
|
||||||
text=True, |
|
||||||
check=True |
|
||||||
) |
|
||||||
return result.stdout.strip() |
|
||||||
except (subprocess.CalledProcessError, FileNotFoundError): |
|
||||||
return 'unknown' |
|
||||||
|
|
||||||
def get_php_binary(self): |
|
||||||
"""获取 PHP 二进制路径""" |
|
||||||
try: |
|
||||||
result = subprocess.run( |
|
||||||
[self.php_config, '--php-binary'], |
|
||||||
capture_output=True, |
|
||||||
text=True, |
|
||||||
check=True |
|
||||||
) |
|
||||||
return result.stdout.strip() |
|
||||||
except (subprocess.CalledProcessError, FileNotFoundError): |
|
||||||
return 'php' |
|
||||||
|
|
||||||
def get_configure_options(self): |
|
||||||
"""获取配置选项""" |
|
||||||
try: |
|
||||||
result = subprocess.run( |
|
||||||
[self.php_config, '--configure-options'], |
|
||||||
capture_output=True, |
|
||||||
text=True, |
|
||||||
check=True |
|
||||||
) |
|
||||||
return result.stdout.strip() |
|
||||||
except (subprocess.CalledProcessError, FileNotFoundError): |
|
||||||
return '' |
|
||||||
|
|
||||||
def get_all_info(self): |
|
||||||
"""获取所有配置信息""" |
|
||||||
return { |
|
||||||
'version': self.get_version(), |
|
||||||
'includes': self.get_includes(), |
|
||||||
'include_dir': self.get_include_dir(), |
|
||||||
'extension_dir': self.get_extension_dir(), |
|
||||||
'php_binary': self.get_php_binary(), |
|
||||||
'configure_options': self.get_configure_options(), |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
class ClangParser: |
|
||||||
def __init__(self, libclang_path=None): |
|
||||||
""" |
|
||||||
初始化 Clang 解析器 |
|
||||||
|
|
||||||
Args: |
|
||||||
libclang_path: libclang 库的路径(可选) |
|
||||||
""" |
|
||||||
if libclang_path: |
|
||||||
try: |
|
||||||
clang.cindex.Config.set_library_file(libclang_path) |
|
||||||
except Exception as e: |
|
||||||
print(f"警告: 无法设置 libclang 路径 {libclang_path}: {e}") |
|
||||||
print("尝试使用默认路径...") |
|
||||||
|
|
||||||
try: |
|
||||||
self.index = Index.create() |
|
||||||
except Exception as e: |
|
||||||
print(f"错误: 无法创建 Clang 索引: {e}") |
|
||||||
print("请确保已安装 python3-clang 和 clang 库") |
|
||||||
raise |
|
||||||
|
|
||||||
def parse_file(self, filename, include_paths=None, defines=None, |
|
||||||
compiler_args=None, language='c++'): |
|
||||||
""" |
|
||||||
解析 C++ 文件 |
|
||||||
|
|
||||||
Args: |
|
||||||
filename: 要解析的文件路径 |
|
||||||
include_paths: 头文件搜索路径列表 |
|
||||||
defines: 宏定义列表 ['MACRO=value', 'DEBUG'] |
|
||||||
compiler_args: 额外的编译器参数 |
|
||||||
language: 语言类型 ('c', 'c++', 'objective-c') |
|
||||||
|
|
||||||
Returns: |
|
||||||
TranslationUnit 对象 |
|
||||||
""" |
|
||||||
if not os.path.exists(filename): |
|
||||||
raise FileNotFoundError(f"文件不存在: {filename}") |
|
||||||
|
|
||||||
args = [] |
|
||||||
|
|
||||||
# 1. 设置语言标准 |
|
||||||
if language == 'c++': |
|
||||||
args.extend([ |
|
||||||
'-x', 'c++', |
|
||||||
'-std=c++14', # 更标准的 C++ 版本 |
|
||||||
]) |
|
||||||
elif language == 'c': |
|
||||||
args.extend(['-x', 'c', '-std=c11']) |
|
||||||
|
|
||||||
# 2. 添加头文件搜索路径 |
|
||||||
if include_paths: |
|
||||||
for path in include_paths: |
|
||||||
if os.path.exists(path): # 检查路径是否存在 |
|
||||||
args.append(f'-I{path}') |
|
||||||
else: |
|
||||||
print(f"警告: 包含路径不存在: {path}") |
|
||||||
|
|
||||||
# 3. 添加宏定义 |
|
||||||
if defines: |
|
||||||
for define in defines: |
|
||||||
args.append(f'-D{define}') |
|
||||||
|
|
||||||
# 4. 添加额外的编译器参数 |
|
||||||
if compiler_args: |
|
||||||
args.extend(compiler_args) |
|
||||||
|
|
||||||
# 5. 常用的编译选项 |
|
||||||
args.extend([ |
|
||||||
'-Wno-pragma-once-outside-header', # 忽略警告 |
|
||||||
'-ferror-limit=0', # 不限制错误数量 |
|
||||||
'-fno-delayed-template-parsing', # 避免某些 C++ 模板解析问题 |
|
||||||
'-w', # 禁用所有警告以减少输出 |
|
||||||
]) |
|
||||||
|
|
||||||
print(f"编译参数: {' '.join(args)}") |
|
||||||
|
|
||||||
# 解析文件 |
|
||||||
try: |
|
||||||
tu = self.index.parse( |
|
||||||
filename, |
|
||||||
args=args, |
|
||||||
options=clang.cindex.TranslationUnit.PARSE_DETAILED_PROCESSING_RECORD |
|
||||||
) |
|
||||||
except Exception as e: |
|
||||||
print(f"解析文件时出错: {e}") |
|
||||||
print("尝试使用最小参数集...") |
|
||||||
# 尝试使用最小参数集 |
|
||||||
minimal_args = ['-x', 'c++', '-std=c++14', '-w'] |
|
||||||
if include_paths: |
|
||||||
for path in include_paths: |
|
||||||
if os.path.exists(path): |
|
||||||
minimal_args.append(f'-I{path}') |
|
||||||
try: |
|
||||||
tu = self.index.parse( |
|
||||||
filename, |
|
||||||
args=minimal_args, |
|
||||||
options=clang.cindex.TranslationUnit.PARSE_DETAILED_PROCESSING_RECORD |
|
||||||
) |
|
||||||
print("使用最小参数集成功解析") |
|
||||||
except Exception as e2: |
|
||||||
print(f"使用最小参数集也失败: {e2}") |
|
||||||
print("尝试解析不包含头文件的简化版本...") |
|
||||||
# 创建一个临时文件,移除头文件包含行 |
|
||||||
temp_filename = filename + ".tmp" |
|
||||||
with open(filename, 'r') as original: |
|
||||||
lines = original.readlines() |
|
||||||
|
|
||||||
# 移除 #include 行 |
|
||||||
filtered_lines = [line for line in lines if not line.strip().startswith('#include')] |
|
||||||
|
|
||||||
with open(temp_filename, 'w') as temp: |
|
||||||
temp.writelines(filtered_lines) |
|
||||||
|
|
||||||
try: |
|
||||||
tu = self.index.parse( |
|
||||||
temp_filename, |
|
||||||
args=minimal_args, |
|
||||||
options=clang.cindex.TranslationUnit.PARSE_DETAILED_PROCESSING_RECORD |
|
||||||
) |
|
||||||
print("解析简化版本成功") |
|
||||||
# 清理临时文件 |
|
||||||
os.remove(temp_filename) |
|
||||||
except Exception as e3: |
|
||||||
print(f"简化版本也失败: {e3}") |
|
||||||
# 清理临时文件 |
|
||||||
if os.path.exists(temp_filename): |
|
||||||
os.remove(temp_filename) |
|
||||||
raise |
|
||||||
|
|
||||||
# 检查诊断信息 |
|
||||||
if tu.diagnostics: |
|
||||||
print(f"\n诊断信息 ({len(tu.diagnostics)} 个):") |
|
||||||
error_count = 0 |
|
||||||
warning_count = 0 |
|
||||||
|
|
||||||
for diag in tu.diagnostics: |
|
||||||
if diag.severity >= 3: # 错误级别 |
|
||||||
error_count += 1 |
|
||||||
else: # 警告级别 |
|
||||||
warning_count += 1 |
|
||||||
|
|
||||||
print(f"错误: {error_count}, 警告: {warning_count}") |
|
||||||
|
|
||||||
# 只显示前几个诊断信息,避免输出过多 |
|
||||||
for i, diag in enumerate(tu.diagnostics): |
|
||||||
if i >= 5: # 只显示前5个 |
|
||||||
print("... 还有更多诊断信息") |
|
||||||
break |
|
||||||
print(f" [{diag.severity}] {diag.spelling}") |
|
||||||
if diag.location.file: |
|
||||||
print(f" at {diag.location.file.name}:{diag.location.line}") |
|
||||||
|
|
||||||
return tu |
|
||||||
|
|
||||||
def extract_functions(self, tu, name_prefixes=None): |
|
||||||
""" |
|
||||||
提取函数定义 |
|
||||||
|
|
||||||
Args: |
|
||||||
tu: TranslationUnit 对象 |
|
||||||
name_prefixes: 函数名前缀过滤列表 |
|
||||||
|
|
||||||
Returns: |
|
||||||
函数信息列表 |
|
||||||
""" |
|
||||||
functions = [] |
|
||||||
|
|
||||||
def visit_node(node, depth=0): |
|
||||||
# 只处理函数声明/定义 |
|
||||||
if node.kind == CursorKind.FUNCTION_DECL: |
|
||||||
try: |
|
||||||
func_info = self.parse_function(node) |
|
||||||
|
|
||||||
# 过滤函数名 |
|
||||||
if name_prefixes: |
|
||||||
if any(func_info['name'].startswith(prefix) |
|
||||||
for prefix in name_prefixes): |
|
||||||
functions.append(func_info) |
|
||||||
else: |
|
||||||
functions.append(func_info) |
|
||||||
except Exception as e: |
|
||||||
print(f"解析函数时出错: {e}") |
|
||||||
|
|
||||||
# 递归访问子节点 |
|
||||||
for child in node.get_children(): |
|
||||||
visit_node(child, depth + 1) |
|
||||||
|
|
||||||
visit_node(tu.cursor) |
|
||||||
return functions |
|
||||||
|
|
||||||
def parse_function(self, cursor): |
|
||||||
""" |
|
||||||
解析函数详细信息 |
|
||||||
""" |
|
||||||
# 检查方法是否存在 |
|
||||||
def safe_call(method, default_value=None): |
|
||||||
try: |
|
||||||
return method() |
|
||||||
except AttributeError: |
|
||||||
return default_value |
|
||||||
|
|
||||||
# 基本信息 |
|
||||||
func_info = { |
|
||||||
'name': cursor.spelling, |
|
||||||
'displayName': cursor.displayname, |
|
||||||
'mangledName': cursor.mangled_name, |
|
||||||
'returnType': cursor.result_type.spelling, |
|
||||||
'isStatic': cursor.storage_class == StorageClass.STATIC, |
|
||||||
'isInline': safe_call(lambda: cursor.is_inline_function(), False), |
|
||||||
'isVirtual': safe_call(lambda: cursor.is_virtual_method(), False), |
|
||||||
'isConst': safe_call(lambda: cursor.is_const_method(), False), |
|
||||||
'location': { |
|
||||||
'file': str(cursor.location.file) if cursor.location.file else None, |
|
||||||
'line': cursor.location.line, |
|
||||||
'column': cursor.location.column, |
|
||||||
}, |
|
||||||
'parameters': [], |
|
||||||
'namespaces': self.get_namespaces(cursor), |
|
||||||
} |
|
||||||
|
|
||||||
# 解析参数 |
|
||||||
for arg in cursor.get_arguments(): |
|
||||||
param_info = { |
|
||||||
'name': arg.spelling or f'arg{len(func_info["parameters"])}', |
|
||||||
'type': arg.type.spelling, |
|
||||||
'canonicalType': arg.type.get_canonical().spelling, |
|
||||||
} |
|
||||||
|
|
||||||
# 检查是否有默认值 |
|
||||||
try: |
|
||||||
for token in arg.get_tokens(): |
|
||||||
if token.spelling == '=': |
|
||||||
# 有默认值 |
|
||||||
param_info['hasDefault'] = True |
|
||||||
break |
|
||||||
except: |
|
||||||
# 如果无法获取 tokens,跳过默认值检查 |
|
||||||
pass |
|
||||||
|
|
||||||
func_info['parameters'].append(param_info) |
|
||||||
|
|
||||||
return func_info |
|
||||||
|
|
||||||
def get_namespaces(self, cursor): |
|
||||||
""" |
|
||||||
获取函数所在的命名空间 |
|
||||||
""" |
|
||||||
namespaces = [] |
|
||||||
parent = cursor.semantic_parent |
|
||||||
|
|
||||||
while parent and parent.kind != CursorKind.TRANSLATION_UNIT: |
|
||||||
if parent.kind == CursorKind.NAMESPACE: |
|
||||||
namespaces.insert(0, parent.spelling) |
|
||||||
parent = parent.semantic_parent |
|
||||||
|
|
||||||
return namespaces |
|
||||||
|
|
||||||
|
|
||||||
def main(): |
|
||||||
parser = argparse.ArgumentParser(description='使用 libclang 解析 C++ 代码并提取函数信息') |
|
||||||
parser.add_argument('filename', help='要解析的 C++ 文件路径') |
|
||||||
parser.add_argument('--libclang-path', help='libclang 库路径') |
|
||||||
parser.add_argument('--include-paths', nargs='*', help='额外的包含路径') |
|
||||||
parser.add_argument('--function-prefixes', nargs='*', help='函数名前缀过滤器') |
|
||||||
|
|
||||||
args = parser.parse_args() |
|
||||||
|
|
||||||
if not os.path.exists(args.filename): |
|
||||||
print(f"错误: 文件不存在: {args.filename}") |
|
||||||
sys.exit(1) |
|
||||||
|
|
||||||
try: |
|
||||||
# 创建解析器 |
|
||||||
parser_obj = ClangParser(libclang_path=args.libclang_path) |
|
||||||
|
|
||||||
# 配置头文件路径 |
|
||||||
include_paths = args.include_paths or [ |
|
||||||
"/usr/include/linux", |
|
||||||
"/home/swoole/workspace/projects/phpx/include" |
|
||||||
] |
|
||||||
|
|
||||||
# 尝试获取 PHP 配置的头文件路径 |
|
||||||
try: |
|
||||||
php_config = PHPConfigHelper() |
|
||||||
php_includes = php_config.get_includes() |
|
||||||
include_paths.extend(php_includes) |
|
||||||
except Exception as e: |
|
||||||
print(f"警告: 无法获取 PHP 配置: {e}") |
|
||||||
print("继续使用默认路径...") |
|
||||||
|
|
||||||
# 配置宏定义 |
|
||||||
defines = [ |
|
||||||
'HAVE_CONFIG_H', |
|
||||||
'ZEND_ENABLE_STATIC_TSRMLS_CACHE=1', |
|
||||||
] |
|
||||||
|
|
||||||
# 额外的编译器参数 |
|
||||||
compiler_args = [ |
|
||||||
'-fparse-all-comments', # 解析所有注释 |
|
||||||
'-Wno-unknown-pragmas', |
|
||||||
] |
|
||||||
|
|
||||||
# 解析文件 |
|
||||||
tu = parser_obj.parse_file( |
|
||||||
args.filename, |
|
||||||
include_paths=include_paths, |
|
||||||
defines=defines, |
|
||||||
compiler_args=compiler_args, |
|
||||||
language='c++' |
|
||||||
) |
|
||||||
|
|
||||||
# 提取函数 |
|
||||||
name_prefixes = args.function_prefixes or None |
|
||||||
functions = parser_obj.extract_functions(tu, name_prefixes=name_prefixes) |
|
||||||
|
|
||||||
# 输出结果 |
|
||||||
output = { |
|
||||||
'file': args.filename, |
|
||||||
'functions': functions, |
|
||||||
'total': len(functions), |
|
||||||
} |
|
||||||
|
|
||||||
print(json.dumps(output, indent=2, ensure_ascii=False)) |
|
||||||
|
|
||||||
except clang.cindex.TranslationUnitLoadError as e: |
|
||||||
print(f"翻译单元加载错误: {e}") |
|
||||||
print("这通常意味着 C++ 代码包含语法错误或缺少必要的头文件") |
|
||||||
sys.exit(1) |
|
||||||
except Exception as e: |
|
||||||
print(f"错误: {e}") |
|
||||||
sys.exit(1) |
|
||||||
|
|
||||||
if __name__ == '__main__': |
|
||||||
main() |
|
||||||
@ -1,116 +0,0 @@ |
|||||||
{ |
|
||||||
"name": "typephp-compiler", |
|
||||||
"version": "1.0.0", |
|
||||||
"lockfileVersion": 3, |
|
||||||
"requires": true, |
|
||||||
"packages": { |
|
||||||
"": { |
|
||||||
"name": "typephp-compiler", |
|
||||||
"version": "1.0.0", |
|
||||||
"license": "GPL-3.0-or-later", |
|
||||||
"dependencies": { |
|
||||||
"sharp": "^0.34.5" |
|
||||||
} |
|
||||||
}, |
|
||||||
"node_modules/@img/colour": { |
|
||||||
"version": "1.1.0", |
|
||||||
"license": "MIT", |
|
||||||
"engines": { |
|
||||||
"node": ">=18" |
|
||||||
} |
|
||||||
}, |
|
||||||
"node_modules/@img/sharp-libvips-linux-x64": { |
|
||||||
"version": "1.2.4", |
|
||||||
"cpu": [ |
|
||||||
"x64" |
|
||||||
], |
|
||||||
"license": "LGPL-3.0-or-later", |
|
||||||
"optional": true, |
|
||||||
"os": [ |
|
||||||
"linux" |
|
||||||
], |
|
||||||
"funding": { |
|
||||||
"url": "https://opencollective.com/libvips" |
|
||||||
} |
|
||||||
}, |
|
||||||
"node_modules/@img/sharp-linux-x64": { |
|
||||||
"version": "0.34.5", |
|
||||||
"cpu": [ |
|
||||||
"x64" |
|
||||||
], |
|
||||||
"license": "Apache-2.0", |
|
||||||
"optional": true, |
|
||||||
"os": [ |
|
||||||
"linux" |
|
||||||
], |
|
||||||
"engines": { |
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0" |
|
||||||
}, |
|
||||||
"funding": { |
|
||||||
"url": "https://opencollective.com/libvips" |
|
||||||
}, |
|
||||||
"optionalDependencies": { |
|
||||||
"@img/sharp-libvips-linux-x64": "1.2.4" |
|
||||||
} |
|
||||||
}, |
|
||||||
"node_modules/detect-libc": { |
|
||||||
"version": "2.1.2", |
|
||||||
"license": "Apache-2.0", |
|
||||||
"engines": { |
|
||||||
"node": ">=8" |
|
||||||
} |
|
||||||
}, |
|
||||||
"node_modules/semver": { |
|
||||||
"version": "7.8.4", |
|
||||||
"license": "ISC", |
|
||||||
"bin": { |
|
||||||
"semver": "bin/semver.js" |
|
||||||
}, |
|
||||||
"engines": { |
|
||||||
"node": ">=10" |
|
||||||
} |
|
||||||
}, |
|
||||||
"node_modules/sharp": { |
|
||||||
"version": "0.34.5", |
|
||||||
"hasInstallScript": true, |
|
||||||
"license": "Apache-2.0", |
|
||||||
"dependencies": { |
|
||||||
"@img/colour": "^1.0.0", |
|
||||||
"detect-libc": "^2.1.2", |
|
||||||
"semver": "^7.7.3" |
|
||||||
}, |
|
||||||
"engines": { |
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0" |
|
||||||
}, |
|
||||||
"funding": { |
|
||||||
"url": "https://opencollective.com/libvips" |
|
||||||
}, |
|
||||||
"optionalDependencies": { |
|
||||||
"@img/sharp-darwin-arm64": "0.34.5", |
|
||||||
"@img/sharp-darwin-x64": "0.34.5", |
|
||||||
"@img/sharp-libvips-darwin-arm64": "1.2.4", |
|
||||||
"@img/sharp-libvips-darwin-x64": "1.2.4", |
|
||||||
"@img/sharp-libvips-linux-arm": "1.2.4", |
|
||||||
"@img/sharp-libvips-linux-arm64": "1.2.4", |
|
||||||
"@img/sharp-libvips-linux-ppc64": "1.2.4", |
|
||||||
"@img/sharp-libvips-linux-riscv64": "1.2.4", |
|
||||||
"@img/sharp-libvips-linux-s390x": "1.2.4", |
|
||||||
"@img/sharp-libvips-linux-x64": "1.2.4", |
|
||||||
"@img/sharp-libvips-linuxmusl-arm64": "1.2.4", |
|
||||||
"@img/sharp-libvips-linuxmusl-x64": "1.2.4", |
|
||||||
"@img/sharp-linux-arm": "0.34.5", |
|
||||||
"@img/sharp-linux-arm64": "0.34.5", |
|
||||||
"@img/sharp-linux-ppc64": "0.34.5", |
|
||||||
"@img/sharp-linux-riscv64": "0.34.5", |
|
||||||
"@img/sharp-linux-s390x": "0.34.5", |
|
||||||
"@img/sharp-linux-x64": "0.34.5", |
|
||||||
"@img/sharp-linuxmusl-arm64": "0.34.5", |
|
||||||
"@img/sharp-linuxmusl-x64": "0.34.5", |
|
||||||
"@img/sharp-wasm32": "0.34.5", |
|
||||||
"@img/sharp-win32-arm64": "0.34.5", |
|
||||||
"@img/sharp-win32-ia32": "0.34.5", |
|
||||||
"@img/sharp-win32-x64": "0.34.5" |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,25 +0,0 @@ |
|||||||
{ |
|
||||||
"name": "typephp-compiler", |
|
||||||
"version": "1.0.0", |
|
||||||
"description": "- 需要 PHP-8.2 以上版本 - 需要 GCC-9 以上版本,支持 C++17 标准 - 需要 CMake-3.24 以上版本", |
|
||||||
"main": "index.js", |
|
||||||
"directories": { |
|
||||||
"doc": "docs", |
|
||||||
"example": "examples", |
|
||||||
"test": "tests" |
|
||||||
}, |
|
||||||
"scripts": { |
|
||||||
"test": "echo \"Error: no test specified\" && exit 1" |
|
||||||
}, |
|
||||||
"repository": { |
|
||||||
"type": "git", |
|
||||||
"url": "git@git.code-galaxy.net:aot/compiler.git" |
|
||||||
}, |
|
||||||
"keywords": [], |
|
||||||
"author": "", |
|
||||||
"license": "GPL-3.0-or-later", |
|
||||||
"type": "commonjs", |
|
||||||
"dependencies": { |
|
||||||
"sharp": "^0.34.5" |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1 +0,0 @@ |
|||||||
100000000 |
|
||||||
Loading…
Reference in new issue