blob: 8a377b2fe720407d92b6ce8dbb1c79222fc03dca [file] [log] [blame]
// 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<AstNode*> nodes;
sequence_node->CollectAllNodes(&nodes);
EXPECT_EQ(3, nodes.length());
}
} // namespace dart