clang
気がついたら LLVM 3.5 がリリースされてました。 LLVM 3.5 Release Notes — LLVM 3.5 documentation LLVM Download Page C++1z の機能に関しては Clang 3.5 ではまだ組み込まれてない感じぽいですね。 C++14 の機能はすでに 3.4 ですべて実装されているので…
The LLVM Compiler Infrastructure Project LLVM 3.5 のリリーススケジュールがトップページに記述されていました。 リリースまでのスケジュールは以下の通りです。 7月21日: Branch for 3.5 release 7月21日〜27日: Testing Phase I 7月28日〜8月03日: Fix …
少し前になるんですが LLVM 3.4.1 がリリースされました。 LLVM 3.4.1 Release Notes — LLVM 3.4 documentation LLVM Download Page
某所で教えてもらったんですが、MinGW でのビルド済み LLVM/Clang のバイナリが bitbucket で配布されているらしい。 Haroogan / LLVM for Windows 2000 や XP にも対応しているっぽいので、わたしの環境でも試してみたんですが、うまく動作しなかった…。 他…
前回はカーソル位置の型名を取得する方法について書きました。 今回は詳細な型名を取得する方法について書きます。 さて、前回使用した方法では例えば以下のように typedef されている場合、typedef した型名を取得します。 typedef int hoge; hoge h; // h …
前回は Type について簡単に書きました。 今回はその Type の名前を取得する方法について書きます。 [注意] 今回使用している clang_getTypeSpelling なのですが、Clang 3.3 以前の python binding を使用している場合はユーザ側で動的ライブラリから呼び出…
前回からすっかり時間があいてしまいましたがまだ続けますよ。 決して忘れていたわけではない 前回までは Cursor について書いていましたが、今回は型情報について簡単に書きます。 Cursor からその位置の型情報を取得する事ができます。 [ソース] # -*- cod…
前回から少し時間があきました。 前回は definition に関する記事を書きました。 今回は referenced について書きます。 referenced は前回紹介した definition と似ており定義位置を返します。 definition との違いは definition が宣言のみの場合は None …
前回は Cursor に関する記事を書きました。 次は型情報について書く予定だったのですが、先に definition 周りについて書きます。 さて、定義位置は Cursor の get_definition() メソッドを使用して取得する事ができます。 [ソース] # -*- coding: utf-8 -* …
前回は SourceLocation に関する記事を書きました。 今回は Cursor について簡単に書きます。 Cursor は指定したファイル位置の情報を取得する事ができます。 [ソース] # -*- coding: utf-8 -* import clang.cindex from clang.cindex import Cursor # sourc…
前回は diagnostics に関する記事を書きました。 今回は SourceLocation について簡単に書きます。 SourceLocation はファイルの位置情報を保持するデータになります。 任意のファイルの位置の情報を取得する場合などに使用します。 前回使用した diagnostic…
前回は unsave_files に関する記事を書きました。 今回は diagnostics について簡単に書きます。 diagnostics はパースした結果のエラーや警告などを取得する事ができます。 [ソース] import clang.cindex # source code source = """\ struct X{ const int …
前回は Index に関する記事を書きました。 今回は存在しないファイルをパースする方法について書きます。 Vim などを使用しているとわかりやすいんですが、ファイルは存在していないけど編集中のソースファイルをパースしたい、という事はあると思います。 …
前回は Config に関する記事を書きました。 今回は Index 周りについて簡単に書きます。 libclang では Index を使用してソースコードをパースし、TranslationUnit の生成を行います。 [test.cpp] struct X{ int value1 = 0; float value2 = 0.0f; }; int ma…
前回は Python binding を導入する記事を書きました。 今回は Config 周りについて書きます。 libclang の Python binding(以下、cindex.py)では Config クラスで読み込む動的ライブラリ(以下 libclang)の管理を行います。 Config では以下のような設定…
最近 libclang の Python binding を使用をしようた Vim プラグインを作成しているのでその覚書としてポツポツ書いていこうかと思います。 ibclang とは Clang が提供している構文解析ツールになります。 この構文解析器は Clang から提供されている Python …
LLVM 3.4 がリリースされました。 Download LLVM 3.4 LLVM 3.4 Release Notes Clang 3.4 Release Notes Clang Language Extensions — Clang 3.4 documentation Clang Compiler User’s Manual — Clang 3.4 documentation LLVM 3.4 リリースノートの訳 - Boost…
そういえば、Clang で既に実装されていたなーと思って試してみました。 [ソース] #include <iostream> int main(){ // 任意の場所で ' をおける int n = 1'000'000; int m = 1'23'456'7; std::cout << n << std::endl; std::cout << m << std::endl; // 10進数以外も i</iostream>…
この記事は C++ Advent Calendar 2013 の 19日目の前編の記事になります。 本記事は 2011 年に書いた Vim で C++ のコーディングを行うなら知っておきたい10のこと の 2013 年版になります。 2013 年版といいつつ全然 10個じゃないんですが…。 えー Vim 本体…
この記事は C++ Advent Calendar 2013 の 19日目の後編の記事になります。 さて、Clang なのですが C++er では知らない人はいないと思います。 Clang とは LLVM をバックエンドとした C++ のコンパイラです。 最近では Clang が C++14 の機能を全て実装して…
覚書。 とりあえず、手元の環境では libcall() で取得する事は可能でした。 echo libcall("libclang", "clang_getClangVersion", "") " => clang version 3.5 他の環境でも動作するかな。
The LLVM Compiler Infrastructure LLVM 3.4 のリリーススケジュールがトップページに記述されていました。 リリースまでのスケジュールは以下の通りです。 11月19日 - Phase I Testing 11月25日 〜 12月01日 - Fix bugs from Phase I 12月02日 〜 12月08日 …
前回試したときは Generic lambda でキャプチャが出来なかったんですが、今回すべてが実装されたようなので再度試してみました。 [ソース] #include <iostream> template<typename F, typename T> auto bind1st(F func, T t){ return [=](auto... args){ return func(t, args...); }; } int plu</typename></iostream>…
C++14 の仕様はあまり追えていないのですが、現在のドラフト(n3797)の提案はすべて svn に組み込まれたようです。 http://clang.llvm.org/cxx_status.html#cxx14 Generic Lambdas あたりも全部実装されたようなのでいろいろと遊んでみたい。 土日にでもビ…
Clang 3.4(svn) で試してみました。 [ソース] #include <iostream> #include <string> int main(){ auto sum = [](auto x, auto&&... args){ for(auto&& n : {args...}){ x += n; } return x; }; std::cout << sum(1, 2, 3) << std::endl; std::cout << sum(std::string("homu"</string></iostream>…
結構前に実装されたのですがやっとこさ試してみました。 とりあえず、簡単に。 [ソース] #include <iostream> #include <string> int main(){ auto twice = [](auto n){ return n + n; }; std::cout << twice(10) << std::endl; std::cout << twice(0.52) << std::endl; std::c</string></iostream>…
この記事は Vim Advent Calendar 2012 316日目の記事になります。 ちなみによく Twitter とかで 『2012年と2013年の Vim Advent Calendar が並走するのか』 みたいな発言を見かけますが Vim Advent Calendar 2012 は11月末で終了します。 ですので、参加され…
実装されてしました。 C++98, C++11, and C++14 Support in Clang これで C++14 の機能は全部手が付けられたのかな。 (部分的ではあるけど)Generic lambdas ついに来たか…という感じ。 一応、ビルドはしたんですがまだ試してないのでちょっと触ってみたい…
clang 3.4(svn) に C++1y で実装される予定の Variable templates が部分的に実装されていたので少し試してみました。 C++1y では以下のようにコードを記述することができるみたいです。 [ソース] #include <iostream> #include <limits> #include <iomanip> #include <array> template<typename T> constex</typename></array></iomanip></limits></iostream>…
多分、先月末だと思うんですが Clang に Relaxing constraints on constexpr functions が実装されました。 C++11 の constexpr 関数はいろいろと制限があったんですが、C++14 ではこれが緩和され、一般ユーザー(非中3女子)にも扱いやすくなります。 例え…