rbelly 0.2.1 → 2.0.3
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/Manifest.txt +3 -0
- data/lib/parser.y +21 -1
- data/lib/rbelly/bellejs/class.rb +36 -0
- data/lib/rbelly/bellejs.rb +2 -0
- data/lib/rbelly/constants.rb +1 -1
- data/lib/rbelly/generated_parser.rb +1694 -1588
- data/lib/rbelly/nodes/bellejs/class_node.rb +11 -0
- data/lib/rbelly/nodes/node.rb +1 -1
- data/lib/rbelly/nodes.rb +1 -0
- data/lib/rbelly/tokenizer.rb +1 -1
- data/lib/rbelly/visitors/dot_visitor.rb +10 -1
- data/lib/rbelly/visitors/ecma_visitor.rb +10 -0
- data/lib/rbelly/visitors/evaluation_visitor.rb +8 -0
- data/lib/rbelly/visitors/function_visitor.rb +7 -1
- data/lib/rbelly/visitors/sexp_visitor.rb +8 -0
- data/lib/rbelly/visitors/visitor.rb +12 -2
- data/test/test_bellejs.rb +34 -0
- metadata +8 -2
data/Manifest.txt
CHANGED
@@ -7,6 +7,8 @@ lib/rbelly.rb
|
|
7
7
|
lib/rbelly/constants.rb
|
8
8
|
lib/rbelly/generated_parser.rb
|
9
9
|
lib/rbelly/js.rb
|
10
|
+
lib/rbelly/bellejs.rb
|
11
|
+
lib/rbelly/bellejs/class.rb
|
10
12
|
lib/rbelly/js/array.rb
|
11
13
|
lib/rbelly/js/base.rb
|
12
14
|
lib/rbelly/js/boolean.rb
|
@@ -48,6 +50,7 @@ lib/rbelly/nodes/strict_equal_node.rb
|
|
48
50
|
lib/rbelly/nodes/try_node.rb
|
49
51
|
lib/rbelly/nodes/var_decl_node.rb
|
50
52
|
lib/rbelly/nodes/bellejs/import_node.rb
|
53
|
+
lib/rbelly/nodes/bellejs/class_node.rb
|
51
54
|
lib/rbelly/parser.rb
|
52
55
|
lib/rbelly/runtime.rb
|
53
56
|
lib/rbelly/runtime/ruby_function.rb
|
data/lib/parser.y
CHANGED
@@ -11,7 +11,7 @@ token FINALLY FOR FUNCTION IF IN INSTANCEOF NEW RETURN SWITCH THIS THROW TRY
|
|
11
11
|
token TYPEOF VAR VOID WHILE WITH
|
12
12
|
|
13
13
|
/* Bellejs Keywords */
|
14
|
-
token IMPORT
|
14
|
+
token IMPORT CLASS
|
15
15
|
|
16
16
|
/* punctuators */
|
17
17
|
token EQEQ NE /* == and != */
|
@@ -56,6 +56,11 @@ rule
|
|
56
56
|
| Statement
|
57
57
|
;
|
58
58
|
|
59
|
+
SourceElement:
|
60
|
+
ClassDeclaration
|
61
|
+
| Statement
|
62
|
+
;
|
63
|
+
|
59
64
|
Statement:
|
60
65
|
Block
|
61
66
|
| VariableStatement
|
@@ -101,6 +106,11 @@ rule
|
|
101
106
|
yyabort unless klass
|
102
107
|
result = klass.new(val[1], FunctionExprNode.new(nil, val[6], val[3]))
|
103
108
|
}
|
109
|
+
| IDENT IDENT '{' ClassBody '}' {
|
110
|
+
klass = property_class_for(val.first)
|
111
|
+
yyabort unless klass
|
112
|
+
result = klass.new(val[1], ClassNode.new(nil, val[3]))
|
113
|
+
}
|
104
114
|
;
|
105
115
|
|
106
116
|
PropertyList:
|
@@ -813,6 +823,12 @@ rule
|
|
813
823
|
}
|
814
824
|
;
|
815
825
|
|
826
|
+
ClassDeclaration:
|
827
|
+
CLASS IDENT '{' ClassBody '}' {
|
828
|
+
result = ClassNode.new(val[1], val[3])
|
829
|
+
debug(val[3])
|
830
|
+
}
|
831
|
+
|
816
832
|
FunctionDeclaration:
|
817
833
|
FUNCTION IDENT '(' ')' '{' FunctionBody '}' {
|
818
834
|
result = FunctionDeclNode.new(val[1], val[5])
|
@@ -850,6 +866,10 @@ rule
|
|
850
866
|
}
|
851
867
|
;
|
852
868
|
|
869
|
+
ClassBody:
|
870
|
+
SourceElements { result = ClassBodyNode.new(val[0]) }
|
871
|
+
;
|
872
|
+
|
853
873
|
FunctionBody:
|
854
874
|
SourceElements { result = FunctionBodyNode.new(val[0]) }
|
855
875
|
;
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module RBelly
|
2
|
+
module BELLEJS
|
3
|
+
class Class < Base
|
4
|
+
class << self
|
5
|
+
def create(*args)
|
6
|
+
if args.length > 0
|
7
|
+
parser = RBelly::Parser.new
|
8
|
+
body = args.pop
|
9
|
+
tree = parser.parse("class { #{body} }")
|
10
|
+
klass = tree.value.first
|
11
|
+
self.new(klass.class_body)
|
12
|
+
else
|
13
|
+
self.new
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
attr_reader :body
|
19
|
+
def initialize(body = nil)
|
20
|
+
super()
|
21
|
+
@body = body
|
22
|
+
self['toString'] = :undefined
|
23
|
+
end
|
24
|
+
|
25
|
+
#def js_call(scope_chain, *params)
|
26
|
+
# arguments.each_with_index { |name, i|
|
27
|
+
# scope_chain[name.value] = params[i] || RBelly::Runtime::UNDEFINED
|
28
|
+
# }
|
29
|
+
# function_visitor = RBelly::Visitors::FunctionVisitor.new(scope_chain)
|
30
|
+
# eval_visitor = RBelly::Visitors::EvaluationVisitor.new(scope_chain)
|
31
|
+
# body.accept(function_visitor) if body
|
32
|
+
# body.accept(eval_visitor) if body
|
33
|
+
#end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/rbelly/constants.rb
CHANGED