// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. #include "platform/assert.h" #include "vm/ast.h" #include "vm/heap.h" #include "vm/isolate.h" #include "vm/object.h" #include "vm/object_store.h" #include "vm/unit_test.h" namespace dart { TEST_CASE(Ast) { LocalVariable* v = new LocalVariable(Scanner::kDummyTokenIndex, String::ZoneHandle(String::New("v")), Type::ZoneHandle(Type::DynamicType())); AstNode* ll = new LoadLocalNode(Scanner::kDummyTokenIndex, v); EXPECT(ll->IsLoadLocalNode()); EXPECT(!ll->IsLiteralNode()); LoadLocalNode* lln = ll->AsLoadLocalNode(); EXPECT(NULL != lln); v->set_index(1); EXPECT_EQ(1, v->index()); LocalVariable* p = new LocalVariable(Scanner::kDummyTokenIndex, String::ZoneHandle(String::New("p")), Type::ZoneHandle(Type::DynamicType())); EXPECT(!p->HasIndex()); p->set_index(-1); EXPECT(p->HasIndex()); EXPECT_EQ(-1, p->index()); ReturnNode* r = new ReturnNode(Scanner::kDummyTokenIndex, lln); EXPECT_EQ(lln, r->value()); LiteralNode* l = new LiteralNode(Scanner::kDummyTokenIndex, Smi::ZoneHandle(Smi::New(3))); EXPECT(l->literal().IsSmi()); EXPECT_EQ(Smi::New(3), l->literal().raw()); BinaryOpNode* b = new BinaryOpNode(Scanner::kDummyTokenIndex, Token::kADD, l, lln); EXPECT_EQ(Token::kADD, b->kind()); EXPECT_EQ(l, b->left()); EXPECT_EQ(lln, b->right()); UnaryOpNode* u = new UnaryOpNode(Scanner::kDummyTokenIndex, Token::kNEGATE, b); EXPECT_EQ(Token::kNEGATE, u->kind()); EXPECT_EQ(b, u->operand()); SequenceNode* sequence_node = new SequenceNode(1, new LocalScope(NULL, 0, 0)); LiteralNode* literal_node = new LiteralNode(2, Smi::ZoneHandle(Smi::New(3))); ReturnNode* return_node = new ReturnNode(3, literal_node); sequence_node->Add(return_node); GrowableArray nodes; sequence_node->CollectAllNodes(&nodes); EXPECT_EQ(3, nodes.length()); } } // namespace dart