SlideShare a Scribd company logo
CRANGE
CROSS-REFERENCING SOURCE CODE WITH CLANG
— —AnuragPatel RedHat github.com/crange/crange
0
TABLE OF CONTENTS
1. Tools considered
2. Clangand AST
3. Indexingwith libclang
4. Crange
5. Challenges
6. Summary
SOURCE CODE
#include<stdio.h>
intFibonacci(int);
intFibonacci(intn){
if(n==0)
return0;
elseif(n==1)
return1;
else
return(Fibonacci(n-1)+Fibonacci(n-2));
}
intmain(){
intn=12,i=0,c;
for(c=1;c<=n;c++){
printf("%dn",Fibonacci(i));i++;
}
return0;
}
Fibonacciseries
TOOLS CONSIDERED
CTAGS
+ Fast, comprehensive language support
-Definitions only
DOXYGEN
+ X-Ref, XML output
-Slow
GNU GLOBAL
+ Fast, definitions, X-Ref
ANTLR
+ Seems powerful, LL(*) parser
-Java, grammar files, complicated
FLEX+BISON
+ Is powerful
-CS 143 -Compilers
CLANG
+ Declarations, definitions, X-Ref, range, statements, operators,
expressions, literals
CLANG
CLANG
Compiler frontend and static analyzer for C, C++, Objective-C.
Converts programs to ASTand allows ASTmanipulation.
AST
[snip]
|-FunctionDecl0x610a090<fibonacci.c:2:1,col:18>Fibonacci'int(int)'
|`-ParmVarDecl0x6109fd0<col:15>'int'
|-FunctionDecl0x610a1d0prev0x610a090<line:3:1,line:10:1>Fibonacci'int(int)'
||-ParmVarDecl0x610a150<line:3:15,col:19>n'int'
|`-CompoundStmt0x6153a70<col:22,line:10:1>
| `-IfStmt0x6153a40<line:4:3,line:9:44>
| |-<<<NULL>>>
| |-BinaryOperator0x610a2d8<line:4:7,col:12>'int''=='
| ||-ImplicitCastExpr0x610a2c0<col:7>'int'<LValueToRValue>
| ||`-DeclRefExpr0x610a278<col:7>'int'lvalueParmVar0x610a150'n''int'
| |`-IntegerLiteral0x610a2a0<col:12>'int'0
| |-ReturnStmt0x610a320<line:5:5,col:12>
| |`-IntegerLiteral0x610a300<col:12>'int'0
| `-IfStmt0x6153a10<line:6:8,line:9:44>
[snip]
$ clang-cc1 -ast-dump fibonacci.c
LIBCLANG
LIBCLANG
Libraryfor processingsource code.
Translate source to AST
Resolve identifiers and symbols
Expand macros
Syntax highlighting
Code completion
INDEXING AND X-REF (0/6)
#include<stdio.h>
intFibonacci(int);
intFibonacci(intn){
if(n==0)
return0;
elseif(n==1)
return1;
else
return(Fibonacci(n-1)+Fibonacci(n-2));
}
intmain(){
intn=12,i=0,c;
for(c=1;c<=n;c++){
printf("%dn",Fibonacci(i));i++;
}
return0;
}
Walk the AST
INDEXING AND X-REF (1/6)
intFibonacci(int);
intFibonacci(intn){
if(n==0)
return0;
elseif(n==1)
return1;
else
return(Fibonacci(n-1)+Fibonacci(n-2));
}
intmain(){
intn=12,i=0,c;
for(c=1;c<=n;c++){
printf("%dn",Fibonacci(i));i++;
}
return0;
}
#include<stdio.h>
Macros
INDEXING AND X-REF (2/6)
#include<stdio.h>
int (int);
int (int ){
if(n==0)
return0;
elseif(n==1)
return1;
else
return(Fibonacci(n-1)+Fibonacci(n-2));
}
int (){
int =12, =0, ;
for(c=1;c<=n;c++){
printf("%dn",Fibonacci(i));i++;
}
return0;
}
Fibonacci
Fibonacci n
main
n i c
Declarations
INDEXING AND X-REF (3/6)
#include<stdio.h>
intFibonacci(int);
intFibonacci(intn){
if( ==0)
return0;
elseif( ==1)
return1;
else
return( (-1)+ (-2));
}
intmain(){
intn=12,i=0,c;
for( =1; <= ; ++){
printf("%dn", ()); ++;
}
return0;
}
n
n
Fibonaccin Fibonaccin
c c n c
Fibonaccii i
References
INDEXING AND X-REF (4/6)
#include<stdio.h>
intFibonacci(int);
intFibonacci(intn){
if(n==0)
;
elseif(n==1)
;
else
;
}
intmain(){
intn=12,i=0,c;
;
}
return0
return1
return(Fibonacci(n-1)+Fibonacci(n-2))
for(c=1;c<=n;c++){
printf("%dn",Fibonacci(i));i++;
}
return0
Statements
INDEXING AND X-REF (5/6)
#include<stdio.h>
intFibonacci(int);
intFibonacci(intn){
if(n==0)
return0;
elseif(n==1)
return1;
else
return( + );
}
intmain(){
intn=12,i=0,c;
for(c=1;c<=n;c++){
("%dn", );i++;
}
return0;
}
Fibonacci(n-1) Fibonacci(n-2)
printf Fibonacci(i)
Expressions
INDEXING AND X-REF (6/6)
#include<stdio.h>
intFibonacci(int);
intFibonacci(intn){
if(n 0)
return0;
elseif(n 1)
return1;
else
return(Fibonacci(n1) Fibonacci(n2));
}
intmain(){
intn=12,i=0,c;
for(c 1;c n;c ){
printf("%dn",Fibonacci(i));i ;
}
return0;
}
==
==
- + -
= <= ++
++
Operators
CRANGE
FRONTEND
C++
libclang+ Python
libclang+ Python + multiprocessing
crtags: generatingtagdb
crange: query
DATASTORE
JSON
HDF5
BerkeleyDB
SQLite
MULTIPROCESSING MODEL
1 DBworker
1 multiprocessing.Queue
n-1 ASTworkers*
MULTIPROCESSING.POOL()
1 async DBworker, n-1 sync ASTworkers
CRTAGS
$cdlinux-3.13.5
$timecrtags-v-j32.
Parsingfs/xfs/xfs_bmap_btree.c(count:1)
Indexingfs/xfs/xfs_bmap_btree.c(nodes:379,qsize:0)
...
Parsingsound/soc/codecs/ak4641.h(count:34348)
Generatingindexes
real 415m10.974s
user 8108m52.241s
sys 72m51.554s
$
Generates 22GBtags file in ~7 hours
16GBRAM &32 CPUs
CURL DEMO
$ time crtags -v-j 32 curl-7.35.0/
CHALLENGES
INCLUDE PATHS
$ clang-I/usr/include -Iinclude -I`llvm-config--cflags`
MACROS
-D_DEBUG -D_GNU_SOURCE -D_CONSTANT_MACROS
MAKEFILE/CMAKE
[
{"directory":"/home/anurag/llvm/build",
"command":"/usr/bin/clang++-Irelative-DSOMEDEF="Withspaces,quotesand-es."
"file":"MachineVerifier.cpp"},
...
]
PYTHON VS C++
SUMMARY
CRANGE CAN PROVIDE
Definitions
Declarations
References
Expressions
Operators
Symbols
Source range
Fancysearch
Code folding*
Find similar code*
FURTHER READING
https://github.com/crange/crange
http://clang.llvm.org/get_started.html
github.com/trolldbois/python-clang/tree/master/tests/cindex
https://docs.python.org/2/library/multiprocessing.html
http://clang.llvm.org/doxygen/group__CINDEX.html
END

More Related Content

Similar to Crange: Clang based tool to index and cross-reference C/C++ source code

Pydiomatic
PydiomaticPydiomatic
Pydiomatic
rik0
 
Python idiomatico
Python idiomaticoPython idiomatico
Python idiomatico
PyCon Italia
 
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
Chris Adamson
 
Intel JIT Talk
Intel JIT TalkIntel JIT Talk
Intel JIT Talkiamdvander
 
Introduction to python & its applications.ppt
Introduction to python & its applications.pptIntroduction to python & its applications.ppt
Introduction to python & its applications.ppt
PradeepNB2
 
Cluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CCluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in C
Steffen Wenz
 
Python basics - for bigginers
Python basics - for bigginersPython basics - for bigginers
Python basics - for bigginers
Abdulaziz M. Ghaleb
 
Python
PythonPython
C ISRO Debugging
C ISRO DebuggingC ISRO Debugging
C ISRO Debuggingsplix757
 
Functions in c++
Functions in c++Functions in c++
Functions in c++
HalaiHansaika
 
Rcpp: Seemless R and C++
Rcpp: Seemless R and C++Rcpp: Seemless R and C++
Rcpp: Seemless R and C++Romain Francois
 
Functional programming in C++
Functional programming in C++Functional programming in C++
Functional programming in C++
Alexandru Bolboaca
 
The Present and The Future of Functional Programming in C++
The Present and The Future of Functional Programming in C++The Present and The Future of Functional Programming in C++
The Present and The Future of Functional Programming in C++
Alexander Granin
 
掀起 Swift 的面紗
掀起 Swift 的面紗掀起 Swift 的面紗
掀起 Swift 的面紗
Pofat Tseng
 
C463_02_python.ppt
C463_02_python.pptC463_02_python.ppt
C463_02_python.ppt
athulprathap1
 
C463_02_python.ppt
C463_02_python.pptC463_02_python.ppt
C463_02_python.ppt
DiegoARosales
 
sonam Kumari python.ppt
sonam Kumari python.pptsonam Kumari python.ppt
sonam Kumari python.ppt
ssuserd64918
 
An Overview Of Python With Functional Programming
An Overview Of Python With Functional ProgrammingAn Overview Of Python With Functional Programming
An Overview Of Python With Functional ProgrammingAdam Getchell
 
C463_02_python.ppt
C463_02_python.pptC463_02_python.ppt
C463_02_python.ppt
KapilMighani
 

Similar to Crange: Clang based tool to index and cross-reference C/C++ source code (20)

Pydiomatic
PydiomaticPydiomatic
Pydiomatic
 
Python idiomatico
Python idiomaticoPython idiomatico
Python idiomatico
 
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]
 
Intel JIT Talk
Intel JIT TalkIntel JIT Talk
Intel JIT Talk
 
Introduction to python & its applications.ppt
Introduction to python & its applications.pptIntroduction to python & its applications.ppt
Introduction to python & its applications.ppt
 
Cluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CCluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in C
 
Python basics - for bigginers
Python basics - for bigginersPython basics - for bigginers
Python basics - for bigginers
 
Python
PythonPython
Python
 
C ISRO Debugging
C ISRO DebuggingC ISRO Debugging
C ISRO Debugging
 
Functions in c++
Functions in c++Functions in c++
Functions in c++
 
Rcpp: Seemless R and C++
Rcpp: Seemless R and C++Rcpp: Seemless R and C++
Rcpp: Seemless R and C++
 
Functional programming in C++
Functional programming in C++Functional programming in C++
Functional programming in C++
 
The Present and The Future of Functional Programming in C++
The Present and The Future of Functional Programming in C++The Present and The Future of Functional Programming in C++
The Present and The Future of Functional Programming in C++
 
掀起 Swift 的面紗
掀起 Swift 的面紗掀起 Swift 的面紗
掀起 Swift 的面紗
 
C463_02_python.ppt
C463_02_python.pptC463_02_python.ppt
C463_02_python.ppt
 
C463_02_python.ppt
C463_02_python.pptC463_02_python.ppt
C463_02_python.ppt
 
sonam Kumari python.ppt
sonam Kumari python.pptsonam Kumari python.ppt
sonam Kumari python.ppt
 
An Overview Of Python With Functional Programming
An Overview Of Python With Functional ProgrammingAn Overview Of Python With Functional Programming
An Overview Of Python With Functional Programming
 
Faster Python, FOSDEM
Faster Python, FOSDEMFaster Python, FOSDEM
Faster Python, FOSDEM
 
C463_02_python.ppt
C463_02_python.pptC463_02_python.ppt
C463_02_python.ppt
 

Recently uploaded

一比一原版(QU毕业证)皇后大学毕业证成绩单
一比一原版(QU毕业证)皇后大学毕业证成绩单一比一原版(QU毕业证)皇后大学毕业证成绩单
一比一原版(QU毕业证)皇后大学毕业证成绩单
enxupq
 
一比一原版(UofM毕业证)明尼苏达大学毕业证成绩单
一比一原版(UofM毕业证)明尼苏达大学毕业证成绩单一比一原版(UofM毕业证)明尼苏达大学毕业证成绩单
一比一原版(UofM毕业证)明尼苏达大学毕业证成绩单
ewymefz
 
一比一原版(NYU毕业证)纽约大学毕业证成绩单
一比一原版(NYU毕业证)纽约大学毕业证成绩单一比一原版(NYU毕业证)纽约大学毕业证成绩单
一比一原版(NYU毕业证)纽约大学毕业证成绩单
ewymefz
 
My burning issue is homelessness K.C.M.O.
My burning issue is homelessness K.C.M.O.My burning issue is homelessness K.C.M.O.
My burning issue is homelessness K.C.M.O.
rwarrenll
 
哪里卖(usq毕业证书)南昆士兰大学毕业证研究生文凭证书托福证书原版一模一样
哪里卖(usq毕业证书)南昆士兰大学毕业证研究生文凭证书托福证书原版一模一样哪里卖(usq毕业证书)南昆士兰大学毕业证研究生文凭证书托福证书原版一模一样
哪里卖(usq毕业证书)南昆士兰大学毕业证研究生文凭证书托福证书原版一模一样
axoqas
 
一比一原版(YU毕业证)约克大学毕业证成绩单
一比一原版(YU毕业证)约克大学毕业证成绩单一比一原版(YU毕业证)约克大学毕业证成绩单
一比一原版(YU毕业证)约克大学毕业证成绩单
enxupq
 
The affect of service quality and online reviews on customer loyalty in the E...
The affect of service quality and online reviews on customer loyalty in the E...The affect of service quality and online reviews on customer loyalty in the E...
The affect of service quality and online reviews on customer loyalty in the E...
jerlynmaetalle
 
standardisation of garbhpala offhgfffghh
standardisation of garbhpala offhgfffghhstandardisation of garbhpala offhgfffghh
standardisation of garbhpala offhgfffghh
ArpitMalhotra16
 
一比一原版(Bradford毕业证书)布拉德福德大学毕业证如何办理
一比一原版(Bradford毕业证书)布拉德福德大学毕业证如何办理一比一原版(Bradford毕业证书)布拉德福德大学毕业证如何办理
一比一原版(Bradford毕业证书)布拉德福德大学毕业证如何办理
mbawufebxi
 
Predicting Product Ad Campaign Performance: A Data Analysis Project Presentation
Predicting Product Ad Campaign Performance: A Data Analysis Project PresentationPredicting Product Ad Campaign Performance: A Data Analysis Project Presentation
Predicting Product Ad Campaign Performance: A Data Analysis Project Presentation
Boston Institute of Analytics
 
Machine learning and optimization techniques for electrical drives.pptx
Machine learning and optimization techniques for electrical drives.pptxMachine learning and optimization techniques for electrical drives.pptx
Machine learning and optimization techniques for electrical drives.pptx
balafet
 
Empowering Data Analytics Ecosystem.pptx
Empowering Data Analytics Ecosystem.pptxEmpowering Data Analytics Ecosystem.pptx
Empowering Data Analytics Ecosystem.pptx
benishzehra469
 
Sample_Global Non-invasive Prenatal Testing (NIPT) Market, 2019-2030.pdf
Sample_Global Non-invasive Prenatal Testing (NIPT) Market, 2019-2030.pdfSample_Global Non-invasive Prenatal Testing (NIPT) Market, 2019-2030.pdf
Sample_Global Non-invasive Prenatal Testing (NIPT) Market, 2019-2030.pdf
Linda486226
 
一比一原版(BCU毕业证书)伯明翰城市大学毕业证如何办理
一比一原版(BCU毕业证书)伯明翰城市大学毕业证如何办理一比一原版(BCU毕业证书)伯明翰城市大学毕业证如何办理
一比一原版(BCU毕业证书)伯明翰城市大学毕业证如何办理
dwreak4tg
 
06-04-2024 - NYC Tech Week - Discussion on Vector Databases, Unstructured Dat...
06-04-2024 - NYC Tech Week - Discussion on Vector Databases, Unstructured Dat...06-04-2024 - NYC Tech Week - Discussion on Vector Databases, Unstructured Dat...
06-04-2024 - NYC Tech Week - Discussion on Vector Databases, Unstructured Dat...
Timothy Spann
 
Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...
Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...
Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...
John Andrews
 
一比一原版(UofS毕业证书)萨省大学毕业证如何办理
一比一原版(UofS毕业证书)萨省大学毕业证如何办理一比一原版(UofS毕业证书)萨省大学毕业证如何办理
一比一原版(UofS毕业证书)萨省大学毕业证如何办理
v3tuleee
 
Criminal IP - Threat Hunting Webinar.pdf
Criminal IP - Threat Hunting Webinar.pdfCriminal IP - Threat Hunting Webinar.pdf
Criminal IP - Threat Hunting Webinar.pdf
Criminal IP
 
一比一原版(CU毕业证)卡尔顿大学毕业证成绩单
一比一原版(CU毕业证)卡尔顿大学毕业证成绩单一比一原版(CU毕业证)卡尔顿大学毕业证成绩单
一比一原版(CU毕业证)卡尔顿大学毕业证成绩单
yhkoc
 
一比一原版(ArtEZ毕业证)ArtEZ艺术学院毕业证成绩单
一比一原版(ArtEZ毕业证)ArtEZ艺术学院毕业证成绩单一比一原版(ArtEZ毕业证)ArtEZ艺术学院毕业证成绩单
一比一原版(ArtEZ毕业证)ArtEZ艺术学院毕业证成绩单
vcaxypu
 

Recently uploaded (20)

一比一原版(QU毕业证)皇后大学毕业证成绩单
一比一原版(QU毕业证)皇后大学毕业证成绩单一比一原版(QU毕业证)皇后大学毕业证成绩单
一比一原版(QU毕业证)皇后大学毕业证成绩单
 
一比一原版(UofM毕业证)明尼苏达大学毕业证成绩单
一比一原版(UofM毕业证)明尼苏达大学毕业证成绩单一比一原版(UofM毕业证)明尼苏达大学毕业证成绩单
一比一原版(UofM毕业证)明尼苏达大学毕业证成绩单
 
一比一原版(NYU毕业证)纽约大学毕业证成绩单
一比一原版(NYU毕业证)纽约大学毕业证成绩单一比一原版(NYU毕业证)纽约大学毕业证成绩单
一比一原版(NYU毕业证)纽约大学毕业证成绩单
 
My burning issue is homelessness K.C.M.O.
My burning issue is homelessness K.C.M.O.My burning issue is homelessness K.C.M.O.
My burning issue is homelessness K.C.M.O.
 
哪里卖(usq毕业证书)南昆士兰大学毕业证研究生文凭证书托福证书原版一模一样
哪里卖(usq毕业证书)南昆士兰大学毕业证研究生文凭证书托福证书原版一模一样哪里卖(usq毕业证书)南昆士兰大学毕业证研究生文凭证书托福证书原版一模一样
哪里卖(usq毕业证书)南昆士兰大学毕业证研究生文凭证书托福证书原版一模一样
 
一比一原版(YU毕业证)约克大学毕业证成绩单
一比一原版(YU毕业证)约克大学毕业证成绩单一比一原版(YU毕业证)约克大学毕业证成绩单
一比一原版(YU毕业证)约克大学毕业证成绩单
 
The affect of service quality and online reviews on customer loyalty in the E...
The affect of service quality and online reviews on customer loyalty in the E...The affect of service quality and online reviews on customer loyalty in the E...
The affect of service quality and online reviews on customer loyalty in the E...
 
standardisation of garbhpala offhgfffghh
standardisation of garbhpala offhgfffghhstandardisation of garbhpala offhgfffghh
standardisation of garbhpala offhgfffghh
 
一比一原版(Bradford毕业证书)布拉德福德大学毕业证如何办理
一比一原版(Bradford毕业证书)布拉德福德大学毕业证如何办理一比一原版(Bradford毕业证书)布拉德福德大学毕业证如何办理
一比一原版(Bradford毕业证书)布拉德福德大学毕业证如何办理
 
Predicting Product Ad Campaign Performance: A Data Analysis Project Presentation
Predicting Product Ad Campaign Performance: A Data Analysis Project PresentationPredicting Product Ad Campaign Performance: A Data Analysis Project Presentation
Predicting Product Ad Campaign Performance: A Data Analysis Project Presentation
 
Machine learning and optimization techniques for electrical drives.pptx
Machine learning and optimization techniques for electrical drives.pptxMachine learning and optimization techniques for electrical drives.pptx
Machine learning and optimization techniques for electrical drives.pptx
 
Empowering Data Analytics Ecosystem.pptx
Empowering Data Analytics Ecosystem.pptxEmpowering Data Analytics Ecosystem.pptx
Empowering Data Analytics Ecosystem.pptx
 
Sample_Global Non-invasive Prenatal Testing (NIPT) Market, 2019-2030.pdf
Sample_Global Non-invasive Prenatal Testing (NIPT) Market, 2019-2030.pdfSample_Global Non-invasive Prenatal Testing (NIPT) Market, 2019-2030.pdf
Sample_Global Non-invasive Prenatal Testing (NIPT) Market, 2019-2030.pdf
 
一比一原版(BCU毕业证书)伯明翰城市大学毕业证如何办理
一比一原版(BCU毕业证书)伯明翰城市大学毕业证如何办理一比一原版(BCU毕业证书)伯明翰城市大学毕业证如何办理
一比一原版(BCU毕业证书)伯明翰城市大学毕业证如何办理
 
06-04-2024 - NYC Tech Week - Discussion on Vector Databases, Unstructured Dat...
06-04-2024 - NYC Tech Week - Discussion on Vector Databases, Unstructured Dat...06-04-2024 - NYC Tech Week - Discussion on Vector Databases, Unstructured Dat...
06-04-2024 - NYC Tech Week - Discussion on Vector Databases, Unstructured Dat...
 
Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...
Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...
Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...
 
一比一原版(UofS毕业证书)萨省大学毕业证如何办理
一比一原版(UofS毕业证书)萨省大学毕业证如何办理一比一原版(UofS毕业证书)萨省大学毕业证如何办理
一比一原版(UofS毕业证书)萨省大学毕业证如何办理
 
Criminal IP - Threat Hunting Webinar.pdf
Criminal IP - Threat Hunting Webinar.pdfCriminal IP - Threat Hunting Webinar.pdf
Criminal IP - Threat Hunting Webinar.pdf
 
一比一原版(CU毕业证)卡尔顿大学毕业证成绩单
一比一原版(CU毕业证)卡尔顿大学毕业证成绩单一比一原版(CU毕业证)卡尔顿大学毕业证成绩单
一比一原版(CU毕业证)卡尔顿大学毕业证成绩单
 
一比一原版(ArtEZ毕业证)ArtEZ艺术学院毕业证成绩单
一比一原版(ArtEZ毕业证)ArtEZ艺术学院毕业证成绩单一比一原版(ArtEZ毕业证)ArtEZ艺术学院毕业证成绩单
一比一原版(ArtEZ毕业证)ArtEZ艺术学院毕业证成绩单
 

Crange: Clang based tool to index and cross-reference C/C++ source code