twostroke 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/twostroke/ast/array.rb +8 -0
- data/lib/twostroke/ast/assignment.rb +7 -0
- data/lib/twostroke/ast/binary_operators.rb +7 -0
- data/lib/twostroke/ast/body.rb +6 -0
- data/lib/twostroke/ast/break.rb +4 -0
- data/lib/twostroke/ast/call.rb +7 -0
- data/lib/twostroke/ast/case.rb +9 -1
- data/lib/twostroke/ast/continue.rb +11 -0
- data/lib/twostroke/ast/declaration.rb +4 -0
- data/lib/twostroke/ast/delete.rb +6 -0
- data/lib/twostroke/ast/do_while.rb +7 -0
- data/lib/twostroke/ast/false.rb +11 -0
- data/lib/twostroke/ast/for_in.rb +8 -0
- data/lib/twostroke/ast/for_loop.rb +10 -1
- data/lib/twostroke/ast/function.rb +6 -0
- data/lib/twostroke/ast/if.rb +8 -0
- data/lib/twostroke/ast/index.rb +7 -0
- data/lib/twostroke/ast/member_access.rb +6 -0
- data/lib/twostroke/ast/multi_expression.rb +7 -0
- data/lib/twostroke/ast/new.rb +7 -0
- data/lib/twostroke/ast/null.rb +4 -0
- data/lib/twostroke/ast/number.rb +4 -0
- data/lib/twostroke/ast/object_literal.rb +6 -0
- data/lib/twostroke/ast/regexp.rb +4 -0
- data/lib/twostroke/ast/return.rb +6 -0
- data/lib/twostroke/ast/string.rb +4 -0
- data/lib/twostroke/ast/switch.rb +7 -0
- data/lib/twostroke/ast/ternary.rb +8 -0
- data/lib/twostroke/ast/this.rb +4 -0
- data/lib/twostroke/ast/throw.rb +6 -0
- data/lib/twostroke/ast/true.rb +11 -0
- data/lib/twostroke/ast/try.rb +8 -0
- data/lib/twostroke/ast/unary_operators.rb +7 -1
- data/lib/twostroke/ast/variable.rb +4 -0
- data/lib/twostroke/ast/while.rb +8 -1
- data/lib/twostroke/ast/with.rb +16 -0
- data/lib/twostroke/compiler/javascript.rb +396 -0
- data/lib/twostroke/compiler/tsasm.rb +595 -0
- data/lib/twostroke/compiler.rb +8 -0
- data/lib/twostroke/parser.rb +47 -9
- data/lib/twostroke/runtime/lib/array.js +144 -0
- data/lib/twostroke/runtime/lib/array.rb +71 -0
- data/lib/twostroke/runtime/lib/boolean.rb +23 -0
- data/lib/twostroke/runtime/lib/console.rb +13 -0
- data/lib/twostroke/runtime/lib/date.rb +65 -0
- data/lib/twostroke/runtime/lib/error.rb +36 -0
- data/lib/twostroke/runtime/lib/function.js +0 -0
- data/lib/twostroke/runtime/lib/function.rb +45 -0
- data/lib/twostroke/runtime/lib/math.rb +36 -0
- data/lib/twostroke/runtime/lib/number.rb +65 -0
- data/lib/twostroke/runtime/lib/object.js +0 -0
- data/lib/twostroke/runtime/lib/object.rb +55 -0
- data/lib/twostroke/runtime/lib/regexp.rb +28 -0
- data/lib/twostroke/runtime/lib/string.rb +86 -0
- data/lib/twostroke/runtime/lib/undefined.rb +7 -0
- data/lib/twostroke/runtime/lib.rb +42 -0
- data/lib/twostroke/runtime/scope.rb +120 -0
- data/lib/twostroke/runtime/types/array.rb +79 -0
- data/lib/twostroke/runtime/types/boolean.rb +23 -0
- data/lib/twostroke/runtime/types/boolean_object.rb +25 -0
- data/lib/twostroke/runtime/types/function.rb +83 -0
- data/lib/twostroke/runtime/types/null.rb +11 -3
- data/lib/twostroke/runtime/types/number.rb +31 -0
- data/lib/twostroke/runtime/types/number_object.rb +25 -0
- data/lib/twostroke/runtime/types/object.rb +169 -20
- data/lib/twostroke/runtime/types/regexp.rb +31 -0
- data/lib/twostroke/runtime/types/string.rb +16 -0
- data/lib/twostroke/runtime/types/string_object.rb +52 -0
- data/lib/twostroke/runtime/types/undefined.rb +11 -3
- data/lib/twostroke/runtime/types/value.rb +14 -0
- data/lib/twostroke/runtime/types.rb +133 -4
- data/lib/twostroke/runtime/vm.rb +25 -0
- data/lib/twostroke/runtime/vm_frame.rb +459 -0
- data/lib/twostroke/runtime.rb +6 -5
- data/lib/twostroke/tokens.rb +20 -8
- data/lib/twostroke.rb +3 -1
- metadata +41 -7
- data/lib/twostroke/runtime/context.rb +0 -33
- data/lib/twostroke/runtime/environment.rb +0 -13
- data/lib/twostroke/runtime/types/basic_type.rb +0 -5
data/lib/twostroke/ast/array.rb
CHANGED
@@ -16,6 +16,13 @@ module Twostroke::AST
|
|
16
16
|
def collapse
|
17
17
|
self.class.new left: left.collapse, right: right.collapse, assign_result_left: assign_result_left
|
18
18
|
end
|
19
|
+
|
20
|
+
def walk(&bk)
|
21
|
+
if yield self
|
22
|
+
left.walk &bk
|
23
|
+
right.walk &bk
|
24
|
+
end
|
25
|
+
end
|
19
26
|
end
|
20
27
|
const_set op, klass
|
21
28
|
end
|
data/lib/twostroke/ast/body.rb
CHANGED
data/lib/twostroke/ast/break.rb
CHANGED
data/lib/twostroke/ast/call.rb
CHANGED
data/lib/twostroke/ast/case.rb
CHANGED
@@ -3,10 +3,18 @@ module Twostroke::AST
|
|
3
3
|
attr_accessor :expression, :statements
|
4
4
|
def initialize(*args)
|
5
5
|
@statements = []
|
6
|
+
@is_default = false
|
6
7
|
super *args
|
7
8
|
end
|
8
9
|
def collapse
|
9
|
-
self.class.new expression: expression.collapse, statements: statements.collect(&:collapse)
|
10
|
+
self.class.new expression: expression && expression.collapse, statements: statements.collect(&:collapse)
|
11
|
+
end
|
12
|
+
|
13
|
+
def walk(&bk)
|
14
|
+
if yield self
|
15
|
+
expression.walk &bk
|
16
|
+
statements.each { |s| s.walk &bk }
|
17
|
+
end
|
10
18
|
end
|
11
19
|
end
|
12
20
|
end
|
data/lib/twostroke/ast/delete.rb
CHANGED
data/lib/twostroke/ast/for_in.rb
CHANGED
@@ -6,7 +6,16 @@ module Twostroke::AST
|
|
6
6
|
self.class.new initializer: initializer && initializer.collapse,
|
7
7
|
condition: condition && condition.collapse,
|
8
8
|
increment: increment && increment.collapse,
|
9
|
-
body: body.collapse
|
9
|
+
body: body && body.collapse
|
10
|
+
end
|
11
|
+
|
12
|
+
def walk(&bk)
|
13
|
+
if yield self
|
14
|
+
initializer.walk(&bk) if initializer
|
15
|
+
condition.walk(&bk) if condition
|
16
|
+
increment.walk(&bk) if increment
|
17
|
+
body.walk &bk if body
|
18
|
+
end
|
10
19
|
end
|
11
20
|
end
|
12
21
|
end
|
data/lib/twostroke/ast/if.rb
CHANGED
@@ -5,5 +5,13 @@ module Twostroke::AST
|
|
5
5
|
def collapse
|
6
6
|
self.class.new condition: condition.collapse, then: @then.collapse, else: @else && @else.collapse
|
7
7
|
end
|
8
|
+
|
9
|
+
def walk(&bk)
|
10
|
+
if yield self
|
11
|
+
condition.walk &bk
|
12
|
+
@then.walk &bk
|
13
|
+
@else.walk &bk if @else
|
14
|
+
end
|
15
|
+
end
|
8
16
|
end
|
9
17
|
end
|
data/lib/twostroke/ast/index.rb
CHANGED
data/lib/twostroke/ast/new.rb
CHANGED
data/lib/twostroke/ast/null.rb
CHANGED
data/lib/twostroke/ast/number.rb
CHANGED
data/lib/twostroke/ast/regexp.rb
CHANGED
data/lib/twostroke/ast/return.rb
CHANGED
data/lib/twostroke/ast/string.rb
CHANGED
data/lib/twostroke/ast/switch.rb
CHANGED
@@ -5,5 +5,13 @@ module Twostroke::AST
|
|
5
5
|
def collapse
|
6
6
|
self.class.new condition: condition.collapse, if_true: if_true.collapse, if_false: if_false.collapse
|
7
7
|
end
|
8
|
+
|
9
|
+
def walk(&bk)
|
10
|
+
if yield self
|
11
|
+
condition.walk &bk
|
12
|
+
if_true.walk &bk
|
13
|
+
if_false.walk &bk
|
14
|
+
end
|
15
|
+
end
|
8
16
|
end
|
9
17
|
end
|
data/lib/twostroke/ast/this.rb
CHANGED
data/lib/twostroke/ast/throw.rb
CHANGED
data/lib/twostroke/ast/try.rb
CHANGED
@@ -7,5 +7,13 @@ module Twostroke::AST
|
|
7
7
|
catch_statements: (catch_statements && catch_statements.map(&:collapse)),
|
8
8
|
finally_statements: (finally_statements && finally_statements.map(&:collapse))
|
9
9
|
end
|
10
|
+
|
11
|
+
def walk(&bk)
|
12
|
+
if yield self
|
13
|
+
try_statements.each { |s| s.walk &bk }
|
14
|
+
catch_statements.each { |s| s.walk &bk } if catch_statements
|
15
|
+
finally_statements.each { |s| s.walk &bk } if finally_statements
|
16
|
+
end
|
17
|
+
end
|
10
18
|
end
|
11
19
|
end
|
@@ -1,12 +1,18 @@
|
|
1
1
|
module Twostroke::AST
|
2
2
|
[ :PostIncrement, :PreIncrement, :PostDecrement, :PreDecrement,
|
3
|
-
:BinaryNot, :UnaryPlus, :Negation, :TypeOf, :Not, :Void ].each do |op|
|
3
|
+
:BinaryNot, :UnaryPlus, :Negation, :TypeOf, :Not, :Void, :BracketedExpression ].each do |op|
|
4
4
|
klass = Class.new Base do
|
5
5
|
attr_accessor :value
|
6
6
|
|
7
7
|
def collapse
|
8
8
|
self.class.new value: value.collapse
|
9
9
|
end
|
10
|
+
|
11
|
+
def walk(&bk)
|
12
|
+
if yield self
|
13
|
+
value.walk &bk
|
14
|
+
end
|
15
|
+
end
|
10
16
|
end
|
11
17
|
const_set op, klass
|
12
18
|
end
|
data/lib/twostroke/ast/while.rb
CHANGED
@@ -3,7 +3,14 @@ module Twostroke::AST
|
|
3
3
|
attr_accessor :condition, :body
|
4
4
|
|
5
5
|
def collapse
|
6
|
-
self.class.new condition: condition.collapse, body: body.collapse
|
6
|
+
self.class.new condition: condition.collapse, body: body && body.collapse
|
7
|
+
end
|
8
|
+
|
9
|
+
def walk(&bk)
|
10
|
+
if yield self
|
11
|
+
condition.walk &bk
|
12
|
+
body.walk &bk if body
|
13
|
+
end
|
7
14
|
end
|
8
15
|
end
|
9
16
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Twostroke::AST
|
2
|
+
class With < Base
|
3
|
+
attr_accessor :object, :statement
|
4
|
+
|
5
|
+
def collapse
|
6
|
+
self.class.new object: object.collapse, statement: statement && statement.collapse
|
7
|
+
end
|
8
|
+
|
9
|
+
def walk(&bk)
|
10
|
+
if yield self
|
11
|
+
object.walk &bk
|
12
|
+
statement.walk &bk
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|