• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <fstream>
6 #include <iostream>
7 
8 #include "src/torque/declarable.h"
9 
10 namespace v8 {
11 namespace internal {
12 namespace torque {
13 
operator <<(std::ostream & os,const Callable & m)14 std::ostream& operator<<(std::ostream& os, const Callable& m) {
15   os << "callable " << m.name() << "(" << m.signature().parameter_types
16      << "): " << *m.signature().return_type;
17   return os;
18 }
19 
operator <<(std::ostream & os,const Variable & v)20 std::ostream& operator<<(std::ostream& os, const Variable& v) {
21   os << "variable " << v.name() << ": " << *v.type();
22   return os;
23 }
24 
operator <<(std::ostream & os,const Builtin & b)25 std::ostream& operator<<(std::ostream& os, const Builtin& b) {
26   os << "builtin " << *b.signature().return_type << " " << b.name()
27      << b.signature().parameter_types;
28   return os;
29 }
30 
operator <<(std::ostream & os,const RuntimeFunction & b)31 std::ostream& operator<<(std::ostream& os, const RuntimeFunction& b) {
32   os << "runtime function " << *b.signature().return_type << " " << b.name()
33      << b.signature().parameter_types;
34   return os;
35 }
36 
RValue() const37 std::string Variable::RValue() const {
38   if (!IsDefined()) {
39     ReportError("Reading uninitialized variable.");
40   }
41   if (type()->IsStructType()) {
42     return value();
43   }
44   std::string result = "(*" + value() + ")";
45   if (!IsConst()) result += ".value()";
46   return result;
47 }
48 
PrintLabel(std::ostream & os,const Label & l,bool with_names)49 void PrintLabel(std::ostream& os, const Label& l, bool with_names) {
50   os << l.name();
51   if (l.GetParameterCount() != 0) {
52     os << "(";
53     if (with_names) {
54       PrintCommaSeparatedList(os, l.GetParameters(),
55                               [](Variable* v) -> std::string {
56                                 std::stringstream stream;
57                                 stream << v->name();
58                                 stream << ": ";
59                                 stream << *(v->type());
60                                 return stream.str();
61                               });
62     } else {
63       PrintCommaSeparatedList(
64           os, l.GetParameters(),
65           [](Variable* v) -> const Type& { return *(v->type()); });
66     }
67     os << ")";
68   }
69 }
70 
operator <<(std::ostream & os,const Label & l)71 std::ostream& operator<<(std::ostream& os, const Label& l) {
72   PrintLabel(os, l, true);
73   return os;
74 }
75 
operator <<(std::ostream & os,const Generic & g)76 std::ostream& operator<<(std::ostream& os, const Generic& g) {
77   os << "generic " << g.name() << "<";
78   PrintCommaSeparatedList(os, g.declaration()->generic_parameters);
79   os << ">";
80 
81   return os;
82 }
83 
84 size_t Label::next_id_ = 0;
85 
86 }  // namespace torque
87 }  // namespace internal
88 }  // namespace v8
89