0a8b236159
This decouples the scope building from knowing about frame layout. Issue https://github.com/dart-lang/sdk/issues/33274 Change-Id: I9058b242fb24f859f54d6e3660a5972df86d39e6 Reviewed-on: https://dart-review.googlesource.com/59093 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
67 lines
2.3 KiB
C++
67 lines
2.3 KiB
C++
// 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 "vm/ast.h"
|
|
#include "platform/assert.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(TokenPosition::kNoSource, TokenPosition::kNoSource,
|
|
String::ZoneHandle(Symbols::New(thread, "v")),
|
|
Type::ZoneHandle(Type::DynamicType()));
|
|
AstNode* ll = new LoadLocalNode(TokenPosition::kNoSource, v);
|
|
EXPECT(ll->IsLoadLocalNode());
|
|
EXPECT(!ll->IsLiteralNode());
|
|
LoadLocalNode* lln = ll->AsLoadLocalNode();
|
|
EXPECT(NULL != lln);
|
|
v->set_index(VariableIndex(1));
|
|
EXPECT_EQ(1, v->index().value());
|
|
|
|
LocalVariable* p =
|
|
new LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
|
|
String::ZoneHandle(Symbols::New(thread, "p")),
|
|
Type::ZoneHandle(Type::DynamicType()));
|
|
EXPECT(!p->HasIndex());
|
|
p->set_index(VariableIndex(-1));
|
|
EXPECT(p->HasIndex());
|
|
EXPECT_EQ(-1, p->index().value());
|
|
|
|
ReturnNode* r = new ReturnNode(TokenPosition::kNoSource, lln);
|
|
EXPECT_EQ(lln, r->value());
|
|
|
|
LiteralNode* l =
|
|
new LiteralNode(TokenPosition::kNoSource, Smi::ZoneHandle(Smi::New(3)));
|
|
EXPECT(l->literal().IsSmi());
|
|
EXPECT_EQ(Smi::New(3), l->literal().raw());
|
|
|
|
BinaryOpNode* b =
|
|
new BinaryOpNode(TokenPosition::kNoSource, Token::kADD, l, lln);
|
|
EXPECT_EQ(Token::kADD, b->kind());
|
|
EXPECT_EQ(l, b->left());
|
|
EXPECT_EQ(lln, b->right());
|
|
|
|
UnaryOpNode* u = new UnaryOpNode(TokenPosition::kNoSource, Token::kNEGATE, b);
|
|
EXPECT_EQ(Token::kNEGATE, u->kind());
|
|
EXPECT_EQ(b, u->operand());
|
|
|
|
SequenceNode* sequence_node =
|
|
new SequenceNode(TokenPosition(1), new LocalScope(NULL, 0, 0));
|
|
LiteralNode* literal_node =
|
|
new LiteralNode(TokenPosition(2), Smi::ZoneHandle(Smi::New(3)));
|
|
ReturnNode* return_node = new ReturnNode(TokenPosition(3), literal_node);
|
|
sequence_node->Add(return_node);
|
|
GrowableArray<AstNode*> nodes;
|
|
sequence_node->CollectAllNodes(&nodes);
|
|
EXPECT_EQ(3, nodes.length());
|
|
}
|
|
|
|
} // namespace dart
|