GCC Code Coverage Report


Directory: ./
File: src/ast/magic.h
Date: 2023-04-27 00:55:30
Exec Total Coverage
Lines: 14 14 100.0%
Functions: 15 19 78.9%
Branches: 4 10 40.0%

Line Branch Exec Source
1 #ifndef LYTHON_MAGIC_HEADER
2 #define LYTHON_MAGIC_HEADER
3
4 #include "../dtypes.h"
5 #include <iostream>
6
7 namespace lython {
8
9 template <typename T>
10 void print(T const& obj, std::ostream& out = std::cout) {
11 1693 obj.print(out);
12 1693 }
13
14 template <>
15 inline void print(String const& obj, std::ostream& out) {
16 3 out << obj;
17 3 }
18
19 template <>
20 inline void print(int const& obj, std::ostream& out) {
21 256 out << obj;
22 256 }
23
24 template <typename T>
25 void print(T* const& obj, std::ostream& out = std::cout) {
26 obj->print(out);
27 }
28
29 template <typename T>
30 String str(T const& obj) {
31
1/2
✓ Branch 1 taken 2047 times.
✗ Branch 2 not taken.
4094 StringStream ss;
32
1/2
✓ Branch 1 taken 2047 times.
✗ Branch 2 not taken.
4094 print(obj, ss);
33
1/2
✓ Branch 1 taken 2047 times.
✗ Branch 2 not taken.
8188 return ss.str();
34 4094 }
35
36 template <typename T>
37 1009 String str(T* const& obj) {
38
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 11 times.
1020 if (obj == nullptr) {
39
0/2
✗ Branch 2 not taken.
✗ Branch 3 not taken.
115 return "None";
40 }
41 905 return obj->__str__();
42 }
43
44 inline String str(String const& obj) { return obj; }
45
46 #define BINARY(X) \
47 X(+, __add__(self, other)) \
48 X(-, __sub__(self, other)) \
49 X(*, __mul__(self, other)) \
50 X(/, __truediv__(self, other)) \
51 X(\/\/, __floordiv__(self, other)) \
52 X(%, __mod__(self, other)) \
53 X(**, __pow__(self, other)) \
54 X(>>, __rshift__(self, other)) \
55 X(<<, __lshift__(self, other)) \
56 X(&, __and__(self, other)) \
57 X(|, __or__(self, other)) \
58 X(^, __xor__(self, other))
59
60 #define COMP(X) \
61 X(<, __lt__(self, other)) \
62 X(>, __gt__(self, other)) \
63 X(<=, __le__(self, other)) \
64 X(>=, __ge__(self, other)) \
65 X(==, __eq__(self, other)) \
66 X(!=, __ne__(self, other))
67
68 #define AUG(X) \
69 X(-=, __isub__(self, other)) \
70 X(+=, __iadd__(self, other)) \
71 X(*=, __imul__(self, other)) \
72 X(/=, __idiv__(self, other)) \
73 X(\/\/=, __ifloordiv__(self, other)) \
74 X(%=, __imod__(self, other)) \
75 X(* *=, __ipow__(self, other)) \
76 X(>>=, __irshit__(self, other)) \
77 X(<<=, __ilshit__(self, other)) \
78 X(&=, __iand__(self, other)) \
79 X(|=, __ior__(self, other)) \
80 X(^=, __ixor__(self, other))
81
82 #define UNARY(X) \
83 X(-, __neg__(self, other)) \
84 X(+, __pos__(self, other)) \
85 X(~, __invert__(self, other))
86
87 } // namespace lython
88
89 #endif
90