Skip to content

Commit 3905781

Browse files
committed
Sart updating to v2404.1.0.20241127
1 parent 559b832 commit 3905781

File tree

12 files changed

+38
-41
lines changed

12 files changed

+38
-41
lines changed

CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# <https://github.com/llvm/llvm-project/blob/llvmorg-17.0.6/llvm/CMakeLists.txt>
1+
# <https://github.com/llvm/llvm-project/blob/llvmorg-18.0.6/llvm/CMakeLists.txt>
22
cmake_minimum_required(VERSION 3.20.0)
3-
project(SYsU-lang VERSION 2404.0.0.20240229)
3+
project(SYsU-lang VERSION 2404.1.0.20241127)
44
include(CPack)
55
include(CTest)
66
add_subdirectory(compiler)

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# syntax=docker/dockerfile:1.4
2-
ARG BASE_IMAGE=ubuntu:noble
2+
ARG BASE_IMAGE=ubuntu:24.04
33
FROM ${BASE_IMAGE}
44
WORKDIR /root/SYsU-lang
55
COPY <<build_install.sh <<run.sh . /root/SYsU-lang

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ SYsU 是一个教学语言,应用于中山大学(**S**un **Y**at-**s**en **U
1313

1414
## 编译运行
1515

16-
需要注意的是,[SysY](https://gitlab.eduxiji.net/nscscc/compiler2021/-/blob/master/SysY%E8%AF%AD%E8%A8%80%E5%AE%9A%E4%B9%89.pdf) 语言允许编译时能够求值的 `const int` 作为数组大小,导致部分算例不能通过 `gcc` 的编译,因此为保持兼容推荐使用 `clang` 编译。经过测试的实验环境为 `ubuntu:noble`
16+
需要注意的是,[SysY](https://gitlab.eduxiji.net/nscscc/compiler2021/-/blob/master/SysY%E8%AF%AD%E8%A8%80%E5%AE%9A%E4%B9%89.pdf) 语言允许编译时能够求值的 `const int` 作为数组大小,导致部分算例不能通过 `gcc` 的编译,因此为保持兼容推荐使用 `clang` 编译。经过测试的实验环境为 `ubuntu:24.04`
1717

1818
```bash
1919
# 安装依赖
@@ -389,7 +389,7 @@ git submodule update --init --recursive --depth 1
389389

390390
### Q & A: 本项目的版本管理的规则是?为什么项目名为 SYsU-lang,而非 SYsU-compiler ?
391391

392-
[`latest`](https://github.com/arcsysu/SYsU-lang/tree/latest) 分支下为中大课程教学中使用的代码,功能较为稳定,预期在 `ubuntu:noble` 环境中工作。文档可能不会及时更新,以对应 [Dockerfile](https://github.com/arcsysu/SYsU-lang/blob/latest/Dockerfile) 中的测试语句为准。
392+
[`latest`](https://github.com/arcsysu/SYsU-lang/tree/latest) 分支下为中大课程教学中使用的代码,功能较为稳定,预期在 `ubuntu:24.04` 环境中工作。文档可能不会及时更新,以对应 [Dockerfile](https://github.com/arcsysu/SYsU-lang/blob/latest/Dockerfile) 中的测试语句为准。
393393

394394
对于中大以外的高校教学者与个人自学者,我们建议使用 [releases](https://github.com/arcsysu/SYsU-lang/releases) 中最新发布的实验框架源码以及对应版本号的 [docker image](https://hub.docker.com/r/wukan0621/sysu-lang)。它们可能在时间上略有落后,但经过了中大一学期的教学检验,不存在潜在的可能导致教学事故的错误。我们也十分欢迎来自你们的课堂反馈[![Discussions](https://img.shields.io/github/discussions/arcsysu/SYsU-lang)](https://github.com/arcsysu/SYsU-lang/discussions) 与改进建议[![Issues](https://img.shields.io/github/issues/arcsysu/SYsU-lang)](https://github.com/arcsysu/SYsU-lang/issues)[![Issues-pr](https://img.shields.io/github/issues-pr/arcsysu/SYsU-lang)](https://github.com/arcsysu/SYsU-lang/pulls)
395395

generator/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@ $ echo $? # 在 Unix & Linux 中,可以通过 echo $? 来查看最后运行的
134134

135135
## 你可能会感兴趣的
136136

137-
- [Kaleidoscope: Code generation to LLVM IR](https://releases.llvm.org/17.0.0/docs/tutorial/MyFirstLanguageFrontend/LangImpl03.html)
137+
- [Kaleidoscope: Code generation to LLVM IR](https://releases.llvm.org/18.1.8/docs/tutorial/MyFirstLanguageFrontend/LangImpl03.html)
138138
- [SYsU-lang 实验三快速上手](https://www.yuque.com/shuitang/rra4fg/bnqy1c)
139139
- [Viz.js — Graphviz in your browser.](http://viz-js.com/)
140-
- [llvm::IRBuilder](https://github.com/llvm/llvm-project/blob/llvmorg-17.0.6/llvm/include/llvm/IR/IRBuilder.h)
141-
- 该文件同样位于 ubuntu:noble[llvm-dev](https://packages.ubuntu.com/noble/llvm-dev) 包的 </usr/include/llvm/IR/IRBuilder.h>。
140+
- [llvm::IRBuilder](https://github.com/llvm/llvm-project/blob/llvmorg-18.0.6/llvm/include/llvm/IR/IRBuilder.h)
141+
- 该文件同样位于 ubuntu:24.04[llvm-dev](https://packages.ubuntu.com/noble/llvm-dev) 包的 </usr/include/llvm/IR/IRBuilder.h>。

grammar/README.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ flowchart TD;
271271
### Q & A:为什么要输出到 `llvm::json`?
272272

273273
1. 输出到 json,便于使用 python 脚本和 clang 导出的语法树对比,自动批改。
274-
2. 输出到 json,因为 json 格式非常容易理解,不需要像 [LLVM 官方教程](https://releases.llvm.org/17.0.0/docs/tutorial/MyFirstLanguageFrontend/LangImpl02.html) 一样定义很多节点。
274+
2. 输出到 json,因为 json 格式非常容易理解,不需要像 [LLVM 官方教程](https://releases.llvm.org/18.1.8/docs/tutorial/MyFirstLanguageFrontend/LangImpl02.html) 一样定义很多节点。
275275
3. 输出到 `llvm::json`,可以让同学们提前上手 LLVM 库的使用,平滑下一个实验的难度。
276276

277277
### Q & A:该选择 Visitor 还是 Listener?
@@ -336,16 +336,16 @@ Visitor 有更强的可定制性,但是需要自行实现每个节点到子节
336336
- `sysu-refactor`:面向 SYsU 的代码重构工具
337337
- 将输入代码的 `while (Cond) Simt` 替换为 `if (Cond) do Simt while (Cond)`
338338
- 或者相反!
339-
6. 鉴于本次实验已经开始进入 LLVM 开发范畴,建议遵守 [LLVM Coding Standards](https://releases.llvm.org/17.0.0/docs/CodingStandards.html)
339+
6. 鉴于本次实验已经开始进入 LLVM 开发范畴,建议遵守 [LLVM Coding Standards](https://releases.llvm.org/18.1.8/docs/CodingStandards.html)
340340
- 可以使用 `clang-tidy``clang-format` 工具检查你的代码是否规范,如 `cmake -DCMAKE_CXX_CLANG_TIDY=clang-tidy #...`
341-
- 将 [LLVM Coding Standards](https://releases.llvm.org/17.0.0/docs/CodingStandards.html) 与 [GNU](https://www.gnu.org/prep/standards/standards.html)、[Google](https://google.github.io/styleguide/)、[Chromium](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/c++-dos-and-donts.md)、[Microsoft](https://docs.microsoft.com/zh-cn/dotnet/csharp/fundamentals/coding-style/coding-conventions)、[Mozilla](https://firefox-source-docs.mozilla.org/code-quality/coding-style/coding_style_cpp.html)、[WebKit](https://webkit.org/code-style-guidelines/) 等其他知名编程规范进行比较,选出一种或是基于他们归纳出一个你认为最合理的编程规范,编写对应的 `.clang-format``.clang-tidy` 文件,并在以后坚持使用下去!~~(就助教来说更加偏好 LLVM,毕竟没有人会比编译器更懂语言)~~
341+
- 将 [LLVM Coding Standards](https://releases.llvm.org/18.1.8/docs/CodingStandards.html) 与 [GNU](https://www.gnu.org/prep/standards/standards.html)、[Google](https://google.github.io/styleguide/)、[Chromium](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/c++-dos-and-donts.md)、[Microsoft](https://docs.microsoft.com/zh-cn/dotnet/csharp/fundamentals/coding-style/coding-conventions)、[Mozilla](https://firefox-source-docs.mozilla.org/code-quality/coding-style/coding_style_cpp.html)、[WebKit](https://webkit.org/code-style-guidelines/) 等其他知名编程规范进行比较,选出一种或是基于他们归纳出一个你认为最合理的编程规范,编写对应的 `.clang-format``.clang-tidy` 文件,并在以后坚持使用下去!~~(就助教来说更加偏好 LLVM,毕竟没有人会比编译器更懂语言)~~
342342
7. 改进这个实验模板(欢迎 PR!)。
343343
8. Do what you want to do。
344344
345345
## 你可能会感兴趣的
346346
347347
- [Preprocessor Output](https://gcc.gnu.org/onlinedocs/gcc-13.2.0/cpp/Preprocessor-Output.html)
348348
- [`antlr4-runtime/antlr4-runtime.h`](https://github.com/antlr/antlr4/blob/4.9.3/runtime/Cpp/runtime/src/antlr4-runtime.h)
349-
- 该目录同样位于 ubuntu:noble 中 [libantlr4-runtime-dev](https://packages.ubuntu.com/noble/libantlr4-runtime-dev) 包的 </usr/include/antlr4-runtime/antlr4-runtime.h>
350-
- [llvm::json](https://github.com/llvm/llvm-project/blob/llvmorg-17.0.6/llvm/include/llvm/Support/JSON.h)
351-
- 该文件同样位于 ubuntu:noble 中 [llvm-dev](https://packages.ubuntu.com/noble/llvm-dev) 包的 </usr/include/llvm/Support/JSON.h>
349+
- 该目录同样位于 ubuntu:24.04 中 [libantlr4-runtime-dev](https://packages.ubuntu.com/noble/libantlr4-runtime-dev) 包的 </usr/include/antlr4-runtime/antlr4-runtime.h>
350+
- [llvm::json](https://github.com/llvm/llvm-project/blob/llvmorg-18.0.6/llvm/include/llvm/Support/JSON.h)
351+
- 该文件同样位于 ubuntu:24.04 中 [llvm-dev](https://packages.ubuntu.com/noble/llvm-dev) 包的 </usr/include/llvm/Support/JSON.h>

grammar/main.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ int main(int argc, char **argv) {
2626
if (token->getChannel() != antlr4::Token::HIDDEN_CHANNEL) {
2727
auto t1 = lexer.getVocabulary().getSymbolicName(token->getType());
2828
std::string t(t1.begin(), t1.end());
29-
std::unordered_map<std::string, std::string> transform_table{
29+
const std::unordered_map<std::string, std::string> transform_table{
3030
{"Int", "int"},
3131
{"Identifier", "identifier"},
3232
{"LeftParen", "l_paren"},
@@ -38,7 +38,7 @@ int main(int argc, char **argv) {
3838
{"RightBrace", "r_brace"},
3939
{"EOF", "eof"}};
4040
if (transform_table.count(t))
41-
t = transform_table[t];
41+
t = transform_table.at(t);
4242
llvm::outs() << t << " \'" << (t != "eof" ? token->getText() : "")
4343
<< "\'\t\tLoc=<"
4444
<< "<stdin>"

librarian/lib/sysy/sylib.cc

+9-12
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@
44
#include <chrono>
55
#include <cstdarg>
66
#include <cstdio>
7-
#include <tuple>
87
#include <vector>
98

109
/* Timing function implementation */
1110
namespace {
12-
struct WuK_Timer {
11+
struct Timer {
1312
using Clock = std::chrono::high_resolution_clock;
14-
std::vector<std::tuple<int, Clock::time_point>> t1, t2;
15-
~WuK_Timer() {
13+
std::vector<std::pair<int, Clock::time_point>> t1, t2;
14+
~Timer() {
1615
std::fflush(stdout);
1716
long long sum_us = 0;
1817
for (int i = 0; i < t2.size(); ++i) {
@@ -42,15 +41,13 @@ struct WuK_Timer {
4241
std::fprintf(stderr, "%dH-%dM-%dS-%dus\n", (int)h, (int)m, (int)s, (int)us);
4342
}
4443
void start(int lineno) {
45-
if (t1.size() == t1.capacity()) {
46-
t1.reserve(t1.size() + (t1.size() >> 1 | 1));
47-
}
48-
if (t2.size() == t2.capacity()) {
49-
t2.reserve(t2.size() + (t2.size() >> 1 | 1));
50-
}
44+
t2.emplace_back(lineno, Clock::now()); // reduce latency
5145
t1.emplace_back(lineno, Clock::now());
5246
}
53-
void stop(int lineno) { t2.emplace_back(lineno, Clock::now()); }
47+
void stop(int lineno) {
48+
t2.back().second = Clock::now();
49+
t2.back().first = lineno;
50+
}
5451
} wuk_timer;
5552
} // namespace
5653

@@ -66,7 +63,7 @@ int _sysy_getch() {
6663
std::scanf("%c", &c);
6764
return (int)c;
6865
}
69-
void _sysy_putch(int a) { std::printf("%c", a); }
66+
void _sysy_putch(int a) { std::printf("%c", (char)a); }
7067

7168
int _sysy_getint() {
7269
int t;

optimizer/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545

4646
并思考,这些优化是否可以在语法树(即 `sysu-generator`)上完成?在这两个阶段各自的优点与缺点是什么?
4747

48-
如果你使用了来自 LLVM 的其他组件,你需要将其加入本目录下 `CMakeLists.txt` 中的 `llvm_map_components_to_libnames`,否则可能无法通过编译。你可以终端执行 `llvm-config --components`,查看所有的 LLVM 组件名称。然而,禁止使用任何 LLVM 自带的 [transform-passes](https://releases.llvm.org/17.0.0/docs/Passes.html#transform-passes)(当然,你被鼓励去学习这些 pass 的实现原理),助教会结合 `llvm-objdump` 等工具检查。
48+
如果你使用了来自 LLVM 的其他组件,你需要将其加入本目录下 `CMakeLists.txt` 中的 `llvm_map_components_to_libnames`,否则可能无法通过编译。你可以终端执行 `llvm-config --components`,查看所有的 LLVM 组件名称。然而,禁止使用任何 LLVM 自带的 [transform-passes](https://releases.llvm.org/18.1.8/docs/Passes.html#transform-passes)(当然,你被鼓励去学习这些 pass 的实现原理),助教会结合 `llvm-objdump` 等工具检查。
4949

5050
### Q & A:有关 new pass manager 与 legacy pass manager
5151

@@ -92,8 +92,8 @@ Pass/PassManager 是 LLVM 里最重要的核心组件之一,自 LLVM 诞生以
9292

9393
## 你可能会感兴趣的
9494

95-
- [Writing an LLVM Pass](https://releases.llvm.org/17.0.0/docs/WritingAnLLVMNewPMPass.html)
96-
- [Using the New Pass Manager](https://releases.llvm.org/17.0.0/docs/NewPassManager.html)
95+
- [Writing an LLVM Pass](https://releases.llvm.org/18.1.8/docs/WritingAnLLVMNewPMPass.html)
96+
- [Using the New Pass Manager](https://releases.llvm.org/18.1.8/docs/NewPassManager.html)
9797
- [Writing an LLVM Pass: 101 - LLVM 2019 tutorial](https://llvm.org/devmtg/2019-10/slides/Warzynski-WritingAnLLVMPass.pdf)
9898
- [Writing LLVM Pass in 2018-part I](https://medium.com/@mshockwave/writing-llvm-pass-in-2018-part-i-531c700e85eb)
9999
- [banach-space/llvm-tutor](https://github.com/banach-space/llvm-tutor)

optimizer/main.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ int main(int argc, char **argv) {
2121
"calls in the input IR file\n");
2222

2323
// Makes sure llvm_shutdown() is called (which cleans up LLVM objects)
24-
// https://releases.llvm.org/17.0.0/docs/ProgrammersManual.html#ending-execution-with-llvm-shutdown
24+
// https://releases.llvm.org/18.1.8/docs/ProgrammersManual.html#ending-execution-with-llvm-shutdown
2525
llvm::llvm_shutdown_obj SDO;
2626

2727
// Parse the IR file passed on the command line.

parser/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ project(sysu-parser)
22
find_package(LLVM REQUIRED)
33
find_package(BISON REQUIRED)
44
bison_target(parser parser.y ${CMAKE_CURRENT_BINARY_DIR}/main.cc
5-
DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parser.hh)
5+
DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/sysu-parser.hh)
66
add_executable(${PROJECT_NAME} ${BISON_parser_OUTPUT_SOURCE})
77
llvm_map_components_to_libnames(LLVM_LIBS support)
88
target_link_libraries(${PROJECT_NAME} ${LLVM_LIBS})

parser/README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ flowchart TD;
255255
### Q & A:为什么要输出到 `llvm::json`?
256256

257257
1. 输出到 json,便于使用 python 脚本和 clang 导出的语法树对比,自动批改。
258-
2. 输出到 json,因为 json 格式非常容易理解,不需要像 [LLVM 官方教程](https://releases.llvm.org/17.0.0/docs/tutorial/MyFirstLanguageFrontend/LangImpl02.html) 一样定义很多节点。
258+
2. 输出到 json,因为 json 格式非常容易理解,不需要像 [LLVM 官方教程](https://releases.llvm.org/18.1.8/docs/tutorial/MyFirstLanguageFrontend/LangImpl02.html) 一样定义很多节点。
259259
3. 输出到 `llvm::json`,可以让同学们提前上手 LLVM 库的使用,平滑下一个实验的难度。
260260

261261
## 评分规则
@@ -310,9 +310,9 @@ flowchart TD;
310310
- `sysu-refactor`:面向 SYsU 的代码重构工具
311311
- 将输入代码的 `while (Cond) Simt` 替换为 `if (Cond) do Simt while (Cond)`
312312
- 或者相反!
313-
6. 鉴于本次实验已经开始进入 LLVM 开发范畴,建议遵守 [LLVM Coding Standards](https://releases.llvm.org/17.0.0/docs/CodingStandards.html)
313+
6. 鉴于本次实验已经开始进入 LLVM 开发范畴,建议遵守 [LLVM Coding Standards](https://releases.llvm.org/18.1.8/docs/CodingStandards.html)
314314
- 可以使用 `clang-tidy``clang-format` 工具检查你的代码是否规范,如 `cmake -DCMAKE_CXX_CLANG_TIDY=clang-tidy #...`
315-
- 将 [LLVM Coding Standards](https://releases.llvm.org/17.0.0/docs/CodingStandards.html) 与 [GNU](https://www.gnu.org/prep/standards/standards.html)、[Google](https://google.github.io/styleguide/)、[Chromium](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/c++-dos-and-donts.md)、[Microsoft](https://docs.microsoft.com/zh-cn/dotnet/csharp/fundamentals/coding-style/coding-conventions)、[Mozilla](https://firefox-source-docs.mozilla.org/code-quality/coding-style/coding_style_cpp.html)、[WebKit](https://webkit.org/code-style-guidelines/) 等其他知名编程规范进行比较,选出一种或是基于他们归纳出一个你认为最合理的编程规范,编写对应的 `.clang-format``.clang-tidy` 文件,并在以后坚持使用下去!~~(就助教来说更加偏好 LLVM,毕竟没有人会比编译器更懂语言)~~
315+
- 将 [LLVM Coding Standards](https://releases.llvm.org/18.1.8/docs/CodingStandards.html) 与 [GNU](https://www.gnu.org/prep/standards/standards.html)、[Google](https://google.github.io/styleguide/)、[Chromium](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/c++-dos-and-donts.md)、[Microsoft](https://docs.microsoft.com/zh-cn/dotnet/csharp/fundamentals/coding-style/coding-conventions)、[Mozilla](https://firefox-source-docs.mozilla.org/code-quality/coding-style/coding_style_cpp.html)、[WebKit](https://webkit.org/code-style-guidelines/) 等其他知名编程规范进行比较,选出一种或是基于他们归纳出一个你认为最合理的编程规范,编写对应的 `.clang-format``.clang-tidy` 文件,并在以后坚持使用下去!~~(就助教来说更加偏好 LLVM,毕竟没有人会比编译器更懂语言)~~
316316
7. 将 `sysu-lexer``sysu-parser` 的核心代码链接到一起,作为 `sysu-lang` 完整编译器的一部分。
317317
- 输入一个经过预处理的 SYsU 源程序,输出其语法分析树。
318318
- 建议:将 `sysu-lexer` 的核心代码打包成一个 `libsysuLexer.so`,将 `sysu-parser` 的核心代码打包成一个 `libsysuParser.so`,然后链接到到同一个 `main.cc`
@@ -324,5 +324,5 @@ flowchart TD;
324324
325325
- [GNU Bison - The Yacc-compatible Parser Generator](https://www.gnu.org/software/bison/manual/)
326326
- [FindBISON — CMake 3.20.6 Documentation](https://cmake.org/cmake/help/v3.20/module/FindBISON.html)
327-
- [llvm::json](https://github.com/llvm/llvm-project/blob/llvmorg-17.0.6/llvm/include/llvm/Support/JSON.h)
328-
- 该文件同样位于 ubuntu:noble 中 [llvm-dev](https://packages.ubuntu.com/noble/llvm-dev) 包的 </usr/include/llvm/Support/JSON.h>
327+
- [llvm::json](https://github.com/llvm/llvm-project/blob/llvmorg-18.0.6/llvm/include/llvm/Support/JSON.h)
328+
- 该文件同样位于 ubuntu:24.04 中 [llvm-dev](https://packages.ubuntu.com/noble/llvm-dev) 包的 </usr/include/llvm/Support/JSON.h>

parser/parser.y

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
%{
2-
#include "parser.hh"
2+
#include "sysu-parser.hh"
33
#include <llvm/Support/JSON.h>
44
#include <llvm/Support/MemoryBuffer.h>
55
#include <llvm/Support/raw_ostream.h>
@@ -11,7 +11,7 @@ namespace {
1111
auto llvmin = llvm::MemoryBuffer::getFileOrSTDIN("-");
1212
auto input = llvmin.get() -> getBuffer();
1313
auto end = input.end(), it = input.begin();
14-
auto wk_getline(char endline = "\n"[0]) {
14+
auto getline_llvm(char endline = "\n"[0]) {
1515
auto beg = it;
1616
while (it != end && *it != endline)
1717
++it;
@@ -23,7 +23,7 @@ auto wk_getline(char endline = "\n"[0]) {
2323
llvm::json::Array stak;
2424
} // namespace
2525
auto yylex() {
26-
auto tk = wk_getline();
26+
auto tk = getline_llvm();
2727
auto b = tk.find("'") + 1, e = tk.rfind("'");
2828
auto s = tk.substr(b, e - b).str(), t = tk.substr(0, tk.find(" ")).str();
2929
if (t == "numeric_constant") {

0 commit comments

Comments
 (0)