c++: further optimize tsubst_template_decl
[official-gcc.git] / libvtv / testsuite / libvtv.cc / v8-test-2.cc
blob6bfda56e8c6c577600853d861334a1aac6051940
1 // { dg-do run }
3 #include <stdlib.h>
4 #include <string>
6 class Literal;
7 class CallRuntime;
9 class AstNode {
10 public:
12 enum Type {
13 kLiteral, kCallRuntime,
14 kInvalid = -1
17 AstNode() { }
19 virtual ~AstNode() { }
21 virtual Type node_type() const = 0;
23 bool
24 IsLiteral() { return node_type() == AstNode::kLiteral; }
26 Literal *
27 AsLiteral() { return IsLiteral() ? reinterpret_cast<Literal*>(this)
28 : NULL; }
30 bool
31 IsCallRuntime() { return node_type() == AstNode::kCallRuntime; }
33 CallRuntime *
34 AsCallRuntime() { return IsCallRuntime() ? reinterpret_cast<CallRuntime*>(this)
35 : NULL; }
39 class Expression: public AstNode {
40 public:
41 private:
42 int id_;
45 class Literal: public Expression {
46 public:
48 virtual AstNode::Type node_type() const { return AstNode::kLiteral; }
50 private:
51 std::string ToString();
55 class CallRuntime: public Expression {
56 public:
58 virtual AstNode::Type node_type() const { return AstNode::kCallRuntime; }
60 private:
61 std::string name_;
64 Expression *
65 ExpressionCheck (bool *ok)
67 if (*ok == true)
68 return new CallRuntime();
69 else
70 return new Literal ();
72 return NULL;
75 Expression *
76 GetExpression (bool *ok)
78 Expression *expression = ExpressionCheck (ok);
79 Expression *return_expr = NULL;
81 if (expression != NULL && expression->AsLiteral() != NULL)
82 return_expr = new Literal();
83 else if (expression != NULL && expression->AsCallRuntime() != NULL)
84 return_expr = expression;
86 return return_expr;
89 int
90 main (int argc, char **argv)
92 bool a_bool = true;
94 AstNode *node = GetExpression (&a_bool);
96 return 0;