[clang] 1ac3e13 - [clang-repl] Improve the clang-repl documentation.

Vassil Vassilev via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 5 11:27:40 PDT 2023


Author: Krishna-13-cyber
Date: 2023-07-05T18:27:22Z
New Revision: 1ac3e13c3e4ab6816116a6e6997f81acf1039849

URL: https://github.com/llvm/llvm-project/commit/1ac3e13c3e4ab6816116a6e6997f81acf1039849
DIFF: https://github.com/llvm/llvm-project/commit/1ac3e13c3e4ab6816116a6e6997f81acf1039849.diff

LOG: [clang-repl] Improve the clang-repl documentation.

We add usage, build instructions and examples illustrating how clang-repl works.

Differential revision: https://reviews.llvm.org/D152109

Added: 
    

Modified: 
    clang/docs/ClangRepl.rst

Removed: 
    


################################################################################
diff  --git a/clang/docs/ClangRepl.rst b/clang/docs/ClangRepl.rst
index e4892bb9ff72f9..ff986be9da89b6 100644
--- a/clang/docs/ClangRepl.rst
+++ b/clang/docs/ClangRepl.rst
@@ -16,22 +16,6 @@ analysis framework `ROOT <https://root.cern/>`_. Clang-Repl allows to move parts
 of Cling upstream, making them useful and available to a broader audience.
 
 
-
-Clang-Repl Usage
-================
-
-
-.. code-block:: text
-
-  clang-repl> #include <iostream>
-  clang-repl> int f() { std::cout << "Hello Interpreted World!\n"; return 0; }
-  clang-repl> auto r = f();
-  // Prints Hello Interpreted World!
-
-Note that the implementation is not complete and highly experimental. We do
-not yet support statements on the global scope, for example.
-
-
 Clang-Repl Basic Data Flow
 ==========================
 
@@ -63,14 +47,173 @@ Clang-Repl data flow can be divided into roughly 8 phases:
 
 8. The machine code is then executed.
 
+===================
+Build Instructions:
+===================
+
+
+.. code-block:: console
+
+   $ cd llvm-project
+   $ mkdir build
+   $ cd build
+   $ cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLLVM_ENABLE_PROJECTS=clang -G "Unix Makefiles" ../llvm
+
+**Note here**, above RelWithDebInfo - Debug / Release
+
+.. code-block:: console
+
+   cmake --build . --target clang clang-repl -j n
+      OR
+   cmake --build . --target clang clang-repl
+
+**Clang-repl** is built under llvm-project/build/bin. Proceed into the directory **llvm-project/build/bin**
+
+.. code-block:: console
+
+   ./clang-repl
+   clang-repl>
+
+
+================
+Clang-Repl Usage
+================
+
+**Clang-Repl** is an interactive C++ interpreter that allows for incremental
+compilation. It supports interactive programming for C++ in a
+read-evaluate-print-loop (REPL) style. It uses Clang as a library to compile the
+high level programming language into LLVM IR. Then the LLVM IR is executed by
+the LLVM just-in-time (JIT) infrastructure.
+
+
+Basic:
+======
+
+.. code-block:: text
+
+  clang-repl> #include <iostream>
+  clang-repl> int f() { std::cout << "Hello Interpreted World!\n"; return 0; }
+  clang-repl> auto r = f();
+   // Prints Hello Interpreted World!
+
+.. code-block:: text
+
+   clang-repl> #include<iostream>
+   clang-repl> using namespace std;
+   clang-repl> std::cout << "Welcome to CLANG-REPL" << std::endl;
+   Welcome to CLANG-REPL
+   // Prints Welcome to CLANG-REPL
+
+
+Function Definitions and Calls:
+===============================
+
+.. code-block:: text
+
+   clang-repl> #include <iostream>
+   clang-repl> int sum(int a, int b){ return a+b; };
+   clang-repl> int c = sum(9,10);
+   clang-repl> std::cout << c << std::endl;
+   19
+   clang-repl>
+
+Iterative Structures:
+=====================
+
+.. code-block:: text
+
+   clang-repl> #include <iostream>
+   clang-repl> for (int i = 0;i < 3;i++){ std::cout << i << std::endl;}
+   0
+   1
+   2
+   clang-repl> while(i < 7){ i++; std::cout << i << std::endl;}
+   4
+   5
+   6
+   7
+
+Classes and Structures:
+=======================
+
+.. code-block:: text
+
+   clang-repl> #include <iostream>
+   clang-repl> class Rectangle {int width, height; public: void set_values (int,int);\
+   clang-repl... int area() {return width*height;}};
+   clang-repl>  void Rectangle::set_values (int x, int y) { width = x;height = y;}
+   clang-repl> int main () { Rectangle rect;rect.set_values (3,4);\
+   clang-repl... std::cout << "area: " << rect.area() << std::endl;\
+   clang-repl... return 0;}
+   clang-repl> main();
+   area: 12
+   clang-repl>
+   // Note: This '\' can be used for continuation of the statements in the next line
+
+Lamdas:
+=======
+
+.. code-block:: text
+
+   clang-repl> #include <iostream>
+   clang-repl> using namespace std;
+   clang-repl> auto welcome = []()  { std::cout << "Welcome to REPL" << std::endl;};
+   clang-repl> welcome();
+   Welcome to REPL
+
+Using Dynamic Library:
+======================
+
+.. code-block:: text
+
+   clang-repl> %lib print.so
+   clang-repl> #include"print.hpp"
+   clang-repl> print(9);
+   9
+
+**Generation of dynamic library**
+
+.. code-block:: text
+
+   // print.cpp
+   #include <iostream>
+   #include "print.hpp"
+
+   void print(int a)
+   {
+      std::cout << a << std::endl;
+   }
+
+   // print.hpp
+   void print (int a);
+
+   // Commands
+   clang++-17  -c -o print.o print.cpp
+   clang-17 -shared print.o -o print.so
+
+Comments:
+=========
+
+.. code-block:: text
+
+   clang-repl> // Comments in Clang-Repl
+   clang-repl> /* Comments in Clang-Repl */
+
+
+Closure or Termination:
+=======================
+
+.. code-block:: text
+
+   clang-repl>%quit
+
 
-Just like Clang, Clang-Repl can be integrated in existing applications as a
-library (via using the clangInterpreter library). This turning your C++ compiler
-into a service which incrementally can consume and execute code. The
-**Compiler as A Service** (**CaaS**) concept helps supporting move advanced use
-cases such as template instantiations on demand and automatic language
-interoperability. It also helps static languages such as C/C++ become apt for
-data science.
+Just like Clang, Clang-Repl can be integrated in existing applications as a library
+(using the clangInterpreter library). This turns your C++ compiler into a service that
+can incrementally consume and execute code. The **Compiler as A Service** (**CaaS**)
+concept helps support advanced use cases such as template instantiations on demand and
+automatic language interoperability. It also helps static languages such as C/C++ become
+apt for data science.
 
 
 Related Reading


        


More information about the cfe-commits mailing list