koi-reference-compiler 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +76 -0
- data/Rakefile +42 -0
- data/VERSION +1 -0
- data/lib/koi-reference-compiler.rb +10 -0
- data/lib/koi-reference-compiler/exceptions.rb +2 -0
- data/lib/koi-reference-compiler/koi-reference-compiler.rb +23 -0
- data/lib/koi-reference-compiler/node_extensions/assignment/assignment.rb +12 -0
- data/lib/koi-reference-compiler/node_extensions/blocks/block.rb +13 -0
- data/lib/koi-reference-compiler/node_extensions/control_flow/if.rb +14 -0
- data/lib/koi-reference-compiler/node_extensions/control_flow/unless.rb +14 -0
- data/lib/koi-reference-compiler/node_extensions/expressions/additive_expression.rb +13 -0
- data/lib/koi-reference-compiler/node_extensions/expressions/comparative_expression.rb +13 -0
- data/lib/koi-reference-compiler/node_extensions/expressions/expression.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/expressions/multitive_expression.rb +13 -0
- data/lib/koi-reference-compiler/node_extensions/functions/function_call.rb +54 -0
- data/lib/koi-reference-compiler/node_extensions/functions/function_definition.rb +19 -0
- data/lib/koi-reference-compiler/node_extensions/hash_literals/hash_access.rb +12 -0
- data/lib/koi-reference-compiler/node_extensions/hash_literals/hash_accessor.rb +15 -0
- data/lib/koi-reference-compiler/node_extensions/hash_literals/hash_accessor_list.rb +26 -0
- data/lib/koi-reference-compiler/node_extensions/hash_literals/hash_assignment.rb +17 -0
- data/lib/koi-reference-compiler/node_extensions/hash_literals/hash_literal.rb +11 -0
- data/lib/koi-reference-compiler/node_extensions/hash_literals/key_value.rb +13 -0
- data/lib/koi-reference-compiler/node_extensions/hash_literals/key_value_list.rb +13 -0
- data/lib/koi-reference-compiler/node_extensions/identifiers/identifier.rb +31 -0
- data/lib/koi-reference-compiler/node_extensions/literals/false_literal.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/literals/float_literal.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/literals/integer_literal.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/literals/nil_literal.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/literals/string_literal.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/literals/true_literal.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/operators/addition_operator.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/operators/assignment_operator.rb +6 -0
- data/lib/koi-reference-compiler/node_extensions/operators/division_operator.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/operators/equality_operator.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/operators/great_than_operator.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/operators/inequality_operator.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/operators/less_than_operator.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/operators/multiplication_operator.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/operators/subtraction_operator.rb +9 -0
- data/lib/koi-reference-compiler/node_extensions/statements/statement.rb +9 -0
- data/lib/koi-reference-compiler/syntax_node.rb +18 -0
- data/lib/koi-reference-compiler/vm_opcodes.rb +70 -0
- data/test/compiler/unit/ast_hash_loader/ast_hash_loader_test.rb +46 -0
- data/test/compiler/unit/node_extensions/assignment/assignment_test.rb +22 -0
- data/test/compiler/unit/node_extensions/blocks/block_test.rb +37 -0
- data/test/compiler/unit/node_extensions/control_flow/if_test.rb +39 -0
- data/test/compiler/unit/node_extensions/control_flow/unless_test.rb +40 -0
- data/test/compiler/unit/node_extensions/expressions/additive_expression_test.rb +21 -0
- data/test/compiler/unit/node_extensions/expressions/comparative_expression_test.rb +21 -0
- data/test/compiler/unit/node_extensions/expressions/expression_test.rb +17 -0
- data/test/compiler/unit/node_extensions/expressions/multitive_expression_test.rb +21 -0
- data/test/compiler/unit/node_extensions/functions/function_call_test.rb +296 -0
- data/test/compiler/unit/node_extensions/functions/function_definition_test.rb +37 -0
- data/test/compiler/unit/node_extensions/hash_literals/hash_accessor_list_test.rb +83 -0
- data/test/compiler/unit/node_extensions/hash_literals/hash_accessor_test.rb +33 -0
- data/test/compiler/unit/node_extensions/hash_literals/hash_literal_test.rb +29 -0
- data/test/compiler/unit/node_extensions/hash_literals/key_value_list_test.rb +37 -0
- data/test/compiler/unit/node_extensions/hash_literals/key_value_test.rb +24 -0
- data/test/compiler/unit/node_extensions/identifiers/identifier_test.rb +103 -0
- data/test/compiler/unit/node_extensions/literals/false_literal_test.rb +13 -0
- data/test/compiler/unit/node_extensions/literals/float_literal_test.rb +13 -0
- data/test/compiler/unit/node_extensions/literals/integer_literal_test.rb +13 -0
- data/test/compiler/unit/node_extensions/literals/nil_literal_test.rb +13 -0
- data/test/compiler/unit/node_extensions/literals/string_literal_test.rb +13 -0
- data/test/compiler/unit/node_extensions/literals/true_literal_test.rb +13 -0
- data/test/compiler/unit/node_extensions/operators/addition_operator_test.rb +13 -0
- data/test/compiler/unit/node_extensions/operators/division_operator_test.rb +13 -0
- data/test/compiler/unit/node_extensions/operators/equality_operator_test.rb +13 -0
- data/test/compiler/unit/node_extensions/operators/greater_than_operator_test.rb +13 -0
- data/test/compiler/unit/node_extensions/operators/inequality_operator_test.rb +13 -0
- data/test/compiler/unit/node_extensions/operators/less_than_operator_test.rb +13 -0
- data/test/compiler/unit/node_extensions/operators/multiplication_operator_test.rb +13 -0
- data/test/compiler/unit/node_extensions/operators/subtraction_operator_test.rb +13 -0
- data/test/compiler/unit/node_extensions/statements/statement_test.rb +24 -0
- data/test/setup/test_unit_extensions.rb +21 -0
- data/test/test_helper.rb +10 -0
- metadata +177 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class FunctionDefinitionTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile FunctionDefinition" do
|
8
|
+
tree = FunctionDefinition.new("function( arg )\n arg = 1\n end", 0, [
|
9
|
+
Identifier.new("arg", 10),
|
10
|
+
Block.new("arg = 1\n", 17,[
|
11
|
+
Statement.new("arg = 1", 17, [
|
12
|
+
Assignment.new("arg = 1", 17, [
|
13
|
+
Identifier.new("arg", 17),
|
14
|
+
AssignmentOperator.new("=", 21),
|
15
|
+
Expression.new("1", 23, [
|
16
|
+
IntegerLiteral.new("1", 23)
|
17
|
+
])
|
18
|
+
])
|
19
|
+
])
|
20
|
+
])
|
21
|
+
])
|
22
|
+
bytecode = tree.compile
|
23
|
+
assert_equal [
|
24
|
+
PUSH_FUNCTION, 0,
|
25
|
+
|
26
|
+
SET_LOCAL, :arg,
|
27
|
+
|
28
|
+
PUSH_INT, 1,
|
29
|
+
SET_LOCAL, :arg,
|
30
|
+
|
31
|
+
RETURN,
|
32
|
+
END_FUNCTION, 0,
|
33
|
+
END_FUNCTION, 0
|
34
|
+
], bytecode
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class HashAccessorListTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile lvalue HashAccessorList to SET_KEY" do
|
8
|
+
tree = HashAssignment.new("test[1] = 1", 0, [
|
9
|
+
Identifier.new("test", 0),
|
10
|
+
HashAccessorList.new("[1]", 4, [
|
11
|
+
HashAccessor.new("[1]", 4, [
|
12
|
+
Expression.new("1", 5, [
|
13
|
+
IntegerLiteral.new("1", 5)
|
14
|
+
])
|
15
|
+
])
|
16
|
+
]),
|
17
|
+
AssignmentOperator.new("=", 8),
|
18
|
+
Expression.new("1", 10, [
|
19
|
+
IntegerLiteral.new("1", 10)
|
20
|
+
])
|
21
|
+
])
|
22
|
+
bytecode = tree.compile
|
23
|
+
assert_equal [
|
24
|
+
GET_LOCAL, :test,
|
25
|
+
PUSH_INT, 1,
|
26
|
+
PUSH_INT, 1,
|
27
|
+
SET_KEY,
|
28
|
+
POP
|
29
|
+
], bytecode
|
30
|
+
end
|
31
|
+
|
32
|
+
test "should compile lvalue HashAccessorList to GET_KEY, SET_KEY" do
|
33
|
+
tree = HashAssignment.new("test[1][1] = 1", 0, [
|
34
|
+
Identifier.new("test", 0),
|
35
|
+
HashAccessorList.new("[1][1]", 4, [
|
36
|
+
HashAccessor.new("[1]", 4, [
|
37
|
+
Expression.new("1", 5, [
|
38
|
+
IntegerLiteral.new("1", 5)
|
39
|
+
])
|
40
|
+
]),
|
41
|
+
HashAccessor.new("[1]", 7, [
|
42
|
+
Expression.new("1", 8, [
|
43
|
+
IntegerLiteral.new("1", 8)
|
44
|
+
])
|
45
|
+
])
|
46
|
+
]),
|
47
|
+
AssignmentOperator.new("=", 11),
|
48
|
+
Expression.new("1", 13, [
|
49
|
+
IntegerLiteral.new("1", 13)
|
50
|
+
])
|
51
|
+
])
|
52
|
+
bytecode = tree.compile
|
53
|
+
assert_equal [
|
54
|
+
GET_LOCAL, :test,
|
55
|
+
PUSH_INT, 1,
|
56
|
+
GET_KEY,
|
57
|
+
PUSH_INT, 1,
|
58
|
+
PUSH_INT, 1,
|
59
|
+
SET_KEY,
|
60
|
+
POP
|
61
|
+
], bytecode
|
62
|
+
end
|
63
|
+
|
64
|
+
test "should compile rvalue HashAccess to GET_KEY" do
|
65
|
+
tree = HashAccess.new("test[1]", 0, [
|
66
|
+
Identifier.new("test", 0),
|
67
|
+
HashAccessorList.new("[1]", 4, [
|
68
|
+
HashAccessor.new("[1]", 4, [
|
69
|
+
Expression.new("1", 5, [
|
70
|
+
IntegerLiteral.new("1", 5)
|
71
|
+
])
|
72
|
+
])
|
73
|
+
])
|
74
|
+
])
|
75
|
+
bytecode = tree.compile
|
76
|
+
assert_equal [
|
77
|
+
GET_LOCAL, :test,
|
78
|
+
PUSH_INT, 1,
|
79
|
+
GET_KEY
|
80
|
+
], bytecode
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class HashAccessorTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile HashAccessor to GET_KEY" do
|
8
|
+
tree = HashAccessor.new("[1]", 0, [
|
9
|
+
Expression.new("1", 1, [
|
10
|
+
IntegerLiteral.new("1", 1)
|
11
|
+
])
|
12
|
+
])
|
13
|
+
bytecode = tree.compile_get
|
14
|
+
assert_equal [
|
15
|
+
PUSH_INT, 1,
|
16
|
+
GET_KEY
|
17
|
+
], bytecode
|
18
|
+
end
|
19
|
+
|
20
|
+
test "should compile HashAccessor to SET_KEY" do
|
21
|
+
tree = HashAccessor.new("[1]", 0, [
|
22
|
+
Expression.new("1", 1, [
|
23
|
+
IntegerLiteral.new("1", 1)
|
24
|
+
])
|
25
|
+
])
|
26
|
+
bytecode = tree.compile_set
|
27
|
+
assert_equal [
|
28
|
+
PUSH_INT, 1,
|
29
|
+
SET_KEY
|
30
|
+
], bytecode
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class HashLiteralTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile HashLiteral" do
|
8
|
+
tree = HashLiteral.new("{1 => 2}", 0, [
|
9
|
+
KeyValueList.new("1 => 2", 1, [
|
10
|
+
KeyValue.new("1 => 2", 1, [
|
11
|
+
Expression.new("1", 1, [
|
12
|
+
IntegerLiteral.new("1", 1)
|
13
|
+
]),
|
14
|
+
Expression.new("2", 6, [
|
15
|
+
IntegerLiteral.new("2", 6)
|
16
|
+
])
|
17
|
+
])
|
18
|
+
])
|
19
|
+
])
|
20
|
+
bytecode = tree.compile
|
21
|
+
assert_equal [
|
22
|
+
PUSH_HASH,
|
23
|
+
PUSH_INT, 1,
|
24
|
+
PUSH_INT, 2,
|
25
|
+
SET_KEY
|
26
|
+
], bytecode
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class KeyValueListTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile KeyValueList" do
|
8
|
+
tree = KeyValueList.new("1 => 2, 2 => 3", 0, [
|
9
|
+
KeyValue.new("1 => 2", 0, [
|
10
|
+
Expression.new("1", 0, [
|
11
|
+
IntegerLiteral.new("1", 0)
|
12
|
+
]),
|
13
|
+
Expression.new("2", 5, [
|
14
|
+
IntegerLiteral.new("2", 5)
|
15
|
+
])
|
16
|
+
]),
|
17
|
+
KeyValue.new("2 => 3", 8, [
|
18
|
+
Expression.new("2", 8, [
|
19
|
+
IntegerLiteral.new("2", 8)
|
20
|
+
]),
|
21
|
+
Expression.new("3", 13, [
|
22
|
+
IntegerLiteral.new("3", 13)
|
23
|
+
])
|
24
|
+
])
|
25
|
+
])
|
26
|
+
bytecode = tree.compile
|
27
|
+
assert_equal [
|
28
|
+
PUSH_INT, 1,
|
29
|
+
PUSH_INT, 2,
|
30
|
+
SET_KEY,
|
31
|
+
PUSH_INT, 2,
|
32
|
+
PUSH_INT, 3,
|
33
|
+
SET_KEY
|
34
|
+
], bytecode
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class KeyValueTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile KeyValue" do
|
8
|
+
tree = KeyValue.new("1 => 2", 0...6, [
|
9
|
+
Expression.new("1", 0...1, [
|
10
|
+
IntegerLiteral.new("1", 0...1)
|
11
|
+
]),
|
12
|
+
Expression.new("2", 5...6, [
|
13
|
+
IntegerLiteral.new("2", 5...6)
|
14
|
+
])
|
15
|
+
])
|
16
|
+
bytecode = tree.compile
|
17
|
+
assert_equal [
|
18
|
+
PUSH_INT, 1,
|
19
|
+
PUSH_INT, 2,
|
20
|
+
SET_KEY
|
21
|
+
], bytecode
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class IdentifierTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile identifier with Assignment as parent to SET_LOCAL" do
|
8
|
+
tree = Assignment.new("test = 2", 0, [
|
9
|
+
Identifier.new('test', 0)
|
10
|
+
])
|
11
|
+
bytecode = tree.elements.first.compile
|
12
|
+
assert_equal [SET_LOCAL, :test], bytecode
|
13
|
+
end
|
14
|
+
|
15
|
+
test "should compile identifier with FunctionDefinition as parent to SET_LOCAL" do
|
16
|
+
tree = FunctionDefinition.new("test = 2", 0, [
|
17
|
+
Identifier.new('test', 0)
|
18
|
+
])
|
19
|
+
bytecode = tree.elements.first.compile
|
20
|
+
assert_equal [SET_LOCAL, :test], bytecode
|
21
|
+
end
|
22
|
+
|
23
|
+
test "should compile identifier with Expression as parent to GET_LOCAL" do
|
24
|
+
tree = Expression.new("test = 2", 0, [
|
25
|
+
Identifier.new('test', 0)
|
26
|
+
])
|
27
|
+
bytecode = tree.elements.first.compile
|
28
|
+
assert_equal [GET_LOCAL, :test], bytecode
|
29
|
+
end
|
30
|
+
|
31
|
+
test "should compile identifier with MultitiveExpression as parent to GET_LOCAL" do
|
32
|
+
tree = MultitiveExpression.new("test = 2", 0, [
|
33
|
+
Identifier.new('test', 0)
|
34
|
+
])
|
35
|
+
bytecode = tree.elements.first.compile
|
36
|
+
assert_equal [GET_LOCAL, :test], bytecode
|
37
|
+
end
|
38
|
+
|
39
|
+
test "should compile identifier with AdditiveExpression as parent to GET_LOCAL" do
|
40
|
+
tree = AdditiveExpression.new("test = 2", 0, [
|
41
|
+
Identifier.new('test', 0)
|
42
|
+
])
|
43
|
+
bytecode = tree.elements.first.compile
|
44
|
+
assert_equal [GET_LOCAL, :test], bytecode
|
45
|
+
end
|
46
|
+
|
47
|
+
test "should compile identifier with ComparativeExpression as parent to GET_LOCAL" do
|
48
|
+
tree = ComparativeExpression.new("test = 2", 0, [
|
49
|
+
Identifier.new('test', 0)
|
50
|
+
])
|
51
|
+
bytecode = tree.elements.first.compile
|
52
|
+
assert_equal [GET_LOCAL, :test], bytecode
|
53
|
+
end
|
54
|
+
|
55
|
+
test "should compile identifier with Assignment as parent to SET_GLOBAL" do
|
56
|
+
tree = Assignment.new("$test = 2", 0, [
|
57
|
+
Identifier.new('$test', 0)
|
58
|
+
])
|
59
|
+
bytecode = tree.elements.first.compile
|
60
|
+
assert_equal [SET_GLOBAL, :$test], bytecode
|
61
|
+
end
|
62
|
+
|
63
|
+
test "should compile identifier with FunctionDefinition as parent to SET_GLOBAL" do
|
64
|
+
tree = FunctionDefinition.new("$test = 2", 0, [
|
65
|
+
Identifier.new('$test', 0)
|
66
|
+
])
|
67
|
+
bytecode = tree.elements.first.compile
|
68
|
+
assert_equal [SET_GLOBAL, :$test], bytecode
|
69
|
+
end
|
70
|
+
|
71
|
+
test "should compile identifier with Expression as parent to GET_GLOBAL" do
|
72
|
+
tree = Expression.new("$test = 2", 0, [
|
73
|
+
Identifier.new('$test', 0)
|
74
|
+
])
|
75
|
+
bytecode = tree.elements.first.compile
|
76
|
+
assert_equal [GET_GLOBAL, :$test], bytecode
|
77
|
+
end
|
78
|
+
|
79
|
+
test "should compile identifier with MultitiveExpression as parent to GET_GLOBAL" do
|
80
|
+
tree = MultitiveExpression.new("$test = 2", 0, [
|
81
|
+
Identifier.new('$test', 0)
|
82
|
+
])
|
83
|
+
bytecode = tree.elements.first.compile
|
84
|
+
assert_equal [GET_GLOBAL, :$test], bytecode
|
85
|
+
end
|
86
|
+
|
87
|
+
test "should compile identifier with AdditiveExpression as parent to GET_GLOBAL" do
|
88
|
+
tree = AdditiveExpression.new("$test = 2", 0, [
|
89
|
+
Identifier.new('$test', 0)
|
90
|
+
])
|
91
|
+
bytecode = tree.elements.first.compile
|
92
|
+
assert_equal [GET_GLOBAL, :$test], bytecode
|
93
|
+
end
|
94
|
+
|
95
|
+
test "should compile identifier with ComarativeExpression as parent to GET_GLOBAL" do
|
96
|
+
tree = ComparativeExpression.new("$test = 2", 0, [
|
97
|
+
Identifier.new('$test', 0)
|
98
|
+
])
|
99
|
+
bytecode = tree.elements.first.compile
|
100
|
+
assert_equal [GET_GLOBAL, :$test], bytecode
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class FalseLiteralTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile FalseLiteral" do
|
8
|
+
tree = FalseLiteral.new("false", 0)
|
9
|
+
bytecode = tree.compile
|
10
|
+
assert_equal [PUSH_BOOL, false], bytecode
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class IntegerLiteralTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile FloatLiteral" do
|
8
|
+
tree = FloatLiteral.new("99.00019", 0)
|
9
|
+
bytecode = tree.compile
|
10
|
+
assert_equal [PUSH_FLOAT, 99.00019], bytecode
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class IntegerLiteralTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile IntegerLiteral" do
|
8
|
+
tree = IntegerLiteral.new("99", 0)
|
9
|
+
bytecode = tree.compile
|
10
|
+
assert_equal [PUSH_INT, 99], bytecode
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class NilLiteralTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile NilLiteral" do
|
8
|
+
tree = NilLiteral.new("nil", 0)
|
9
|
+
bytecode = tree.compile
|
10
|
+
assert_equal [PUSH_NIL], bytecode
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class StringLiteralTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile StringLiteral" do
|
8
|
+
tree = StringLiteral.new('"test"', 0)
|
9
|
+
bytecode = tree.compile
|
10
|
+
assert_equal [PUSH_STRING, 'test'], bytecode
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class TrueLiteralTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceCompiler
|
6
|
+
|
7
|
+
test "should compile TrueLiteral" do
|
8
|
+
tree = TrueLiteral.new("true", 0)
|
9
|
+
bytecode = tree.compile
|
10
|
+
assert_equal [PUSH_BOOL, true], bytecode
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|