rsense-core 0.5.0

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.
Files changed (137) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +1 -0
  5. data/README.md +35 -0
  6. data/Rakefile +84 -0
  7. data/TypeAnnotation.tokens +41 -0
  8. data/build.xml +84 -0
  9. data/build_lib/antlr-3.2.jar +0 -0
  10. data/lib/jars/ant-1.7.0.jar +0 -0
  11. data/lib/jars/ant-launcher-1.7.0.jar +0 -0
  12. data/lib/jars/antlr-runtime-3.2.jar +0 -0
  13. data/lib/jars/bsf-2.3.0.jar +0 -0
  14. data/lib/rsense-core.rb +28 -0
  15. data/lib/rsense.jar +0 -0
  16. data/lib/rsense/core.rb +5 -0
  17. data/lib/rsense/core/version.rb +5 -0
  18. data/lib/rsense/parser.rb +6 -0
  19. data/lib/rsense/ruby.rb +19 -0
  20. data/lib/rsense/typing.rb +13 -0
  21. data/lib/rsense/typing/annotation.rb +20 -0
  22. data/lib/rsense/typing/runtime.rb +23 -0
  23. data/lib/rsense/typing/vertex.rb +15 -0
  24. data/lib/rsense/util.rb +9 -0
  25. data/rsense-core.gemspec +30 -0
  26. data/src/org/cx4a/rsense/CodeAssist.java +744 -0
  27. data/src/org/cx4a/rsense/CodeAssistError.java +31 -0
  28. data/src/org/cx4a/rsense/CodeAssistResult.java +42 -0
  29. data/src/org/cx4a/rsense/CodeCompletionResult.java +65 -0
  30. data/src/org/cx4a/rsense/FindDefinitionResult.java +24 -0
  31. data/src/org/cx4a/rsense/LoadResult.java +19 -0
  32. data/src/org/cx4a/rsense/Main.java +916 -0
  33. data/src/org/cx4a/rsense/Options.java +353 -0
  34. data/src/org/cx4a/rsense/Project.java +103 -0
  35. data/src/org/cx4a/rsense/TypeInferenceResult.java +25 -0
  36. data/src/org/cx4a/rsense/WhereResult.java +19 -0
  37. data/src/org/cx4a/rsense/parser/TypeAnnotation.g +221 -0
  38. data/src/org/cx4a/rsense/parser/TypeAnnotationLexer.java +1759 -0
  39. data/src/org/cx4a/rsense/parser/TypeAnnotationParser.java +2025 -0
  40. data/src/org/cx4a/rsense/ruby/Block.java +10 -0
  41. data/src/org/cx4a/rsense/ruby/Context.java +75 -0
  42. data/src/org/cx4a/rsense/ruby/DynamicMethod.java +10 -0
  43. data/src/org/cx4a/rsense/ruby/DynamicScope.java +51 -0
  44. data/src/org/cx4a/rsense/ruby/Frame.java +95 -0
  45. data/src/org/cx4a/rsense/ruby/IRubyObject.java +17 -0
  46. data/src/org/cx4a/rsense/ruby/LocalScope.java +43 -0
  47. data/src/org/cx4a/rsense/ruby/MetaClass.java +50 -0
  48. data/src/org/cx4a/rsense/ruby/Ruby.java +242 -0
  49. data/src/org/cx4a/rsense/ruby/RubyClass.java +146 -0
  50. data/src/org/cx4a/rsense/ruby/RubyModule.java +255 -0
  51. data/src/org/cx4a/rsense/ruby/RubyObject.java +94 -0
  52. data/src/org/cx4a/rsense/ruby/Scope.java +7 -0
  53. data/src/org/cx4a/rsense/ruby/SpecialObject.java +15 -0
  54. data/src/org/cx4a/rsense/ruby/Visibility.java +17 -0
  55. data/src/org/cx4a/rsense/typing/Graph.java +1690 -0
  56. data/src/org/cx4a/rsense/typing/Propagation.java +73 -0
  57. data/src/org/cx4a/rsense/typing/Template.java +84 -0
  58. data/src/org/cx4a/rsense/typing/TemplateAttribute.java +158 -0
  59. data/src/org/cx4a/rsense/typing/TypeSet.java +48 -0
  60. data/src/org/cx4a/rsense/typing/annotation/ClassType.java +57 -0
  61. data/src/org/cx4a/rsense/typing/annotation/MethodType.java +79 -0
  62. data/src/org/cx4a/rsense/typing/annotation/TypeAnnotation.java +4 -0
  63. data/src/org/cx4a/rsense/typing/annotation/TypeAny.java +7 -0
  64. data/src/org/cx4a/rsense/typing/annotation/TypeApplication.java +37 -0
  65. data/src/org/cx4a/rsense/typing/annotation/TypeConstraint.java +29 -0
  66. data/src/org/cx4a/rsense/typing/annotation/TypeExpression.java +11 -0
  67. data/src/org/cx4a/rsense/typing/annotation/TypeIdentity.java +59 -0
  68. data/src/org/cx4a/rsense/typing/annotation/TypeOptional.java +22 -0
  69. data/src/org/cx4a/rsense/typing/annotation/TypePragma.java +22 -0
  70. data/src/org/cx4a/rsense/typing/annotation/TypeSplat.java +22 -0
  71. data/src/org/cx4a/rsense/typing/annotation/TypeTuple.java +35 -0
  72. data/src/org/cx4a/rsense/typing/annotation/TypeUnion.java +23 -0
  73. data/src/org/cx4a/rsense/typing/annotation/TypeVariable.java +44 -0
  74. data/src/org/cx4a/rsense/typing/runtime/AliasMethod.java +94 -0
  75. data/src/org/cx4a/rsense/typing/runtime/AnnotationHelper.java +69 -0
  76. data/src/org/cx4a/rsense/typing/runtime/AnnotationResolver.java +523 -0
  77. data/src/org/cx4a/rsense/typing/runtime/Array.java +84 -0
  78. data/src/org/cx4a/rsense/typing/runtime/ClassTag.java +27 -0
  79. data/src/org/cx4a/rsense/typing/runtime/DefaultMethod.java +115 -0
  80. data/src/org/cx4a/rsense/typing/runtime/Hash.java +131 -0
  81. data/src/org/cx4a/rsense/typing/runtime/LoopTag.java +21 -0
  82. data/src/org/cx4a/rsense/typing/runtime/Method.java +32 -0
  83. data/src/org/cx4a/rsense/typing/runtime/MonomorphicObject.java +77 -0
  84. data/src/org/cx4a/rsense/typing/runtime/ObjectAllocator.java +40 -0
  85. data/src/org/cx4a/rsense/typing/runtime/PolymorphicObject.java +90 -0
  86. data/src/org/cx4a/rsense/typing/runtime/Proc.java +100 -0
  87. data/src/org/cx4a/rsense/typing/runtime/RuntimeHelper.java +1339 -0
  88. data/src/org/cx4a/rsense/typing/runtime/SpecialMethod.java +119 -0
  89. data/src/org/cx4a/rsense/typing/runtime/TypeVarMap.java +112 -0
  90. data/src/org/cx4a/rsense/typing/runtime/VertexHolder.java +48 -0
  91. data/src/org/cx4a/rsense/typing/vertex/CallVertex.java +122 -0
  92. data/src/org/cx4a/rsense/typing/vertex/MultipleAsgnVertex.java +23 -0
  93. data/src/org/cx4a/rsense/typing/vertex/PassThroughVertex.java +20 -0
  94. data/src/org/cx4a/rsense/typing/vertex/SValueVertex.java +24 -0
  95. data/src/org/cx4a/rsense/typing/vertex/SplatVertex.java +24 -0
  96. data/src/org/cx4a/rsense/typing/vertex/ToAryVertex.java +24 -0
  97. data/src/org/cx4a/rsense/typing/vertex/TypeVarVertex.java +22 -0
  98. data/src/org/cx4a/rsense/typing/vertex/Vertex.java +221 -0
  99. data/src/org/cx4a/rsense/typing/vertex/YieldVertex.java +70 -0
  100. data/src/org/cx4a/rsense/util/HereDocReader.java +48 -0
  101. data/src/org/cx4a/rsense/util/Logger.java +111 -0
  102. data/src/org/cx4a/rsense/util/NodeUtil.java +198 -0
  103. data/src/org/cx4a/rsense/util/SourceLocation.java +70 -0
  104. data/src/org/cx4a/rsense/util/StringUtil.java +63 -0
  105. data/src/resources/org/cx4a/rsense/rsense.properties +1 -0
  106. data/stubs/1.8/_builtin.rb +3006 -0
  107. data/stubs/1.8/bigdecimal.rb +131 -0
  108. data/stubs/1.8/cgi.rb +257 -0
  109. data/stubs/1.8/date.rb +147 -0
  110. data/stubs/1.8/optparse.rb +113 -0
  111. data/stubs/1.8/rational.rb +47 -0
  112. data/stubs/1.8/set.rb +94 -0
  113. data/stubs/1.8/socket.rb +461 -0
  114. data/stubs/1.8/stringio.rb +129 -0
  115. data/test/data/a file.rb +1 -0
  116. data/test/data/benchmark.rb +12 -0
  117. data/test/data/crlf.rb +5 -0
  118. data/test/data/test.rb +19 -0
  119. data/test/script/all.rsense +2 -0
  120. data/test/script/array_dynamic.rsense +25 -0
  121. data/test/script/block_nested.rsense +7 -0
  122. data/test/script/builtin.rsense +785 -0
  123. data/test/script/class_method_partial_update.rsense +52 -0
  124. data/test/script/class_partial_update.rsense +17 -0
  125. data/test/script/find-definition.rsense +72 -0
  126. data/test/script/method_arg_onearg.rsense +6 -0
  127. data/test/script/method_arg_optional.rsense +7 -0
  128. data/test/script/method_partial_update.rsense +14 -0
  129. data/test/script/method_yield_arrayarg.rsense +8 -0
  130. data/test/script/method_yield_arrayarg_expand.rsense +8 -0
  131. data/test/script/method_yield_arrayarg_splat.rsense +17 -0
  132. data/test/script/misc.rsense +2 -0
  133. data/test/script/proc_higher_order.rsense +22 -0
  134. data/test/script/regression.rsense +95 -0
  135. data/test/script/stdlib.rsense +66 -0
  136. data/test/script/where.rsense +41 -0
  137. metadata +315 -0
@@ -0,0 +1,10 @@
1
+ package org.cx4a.rsense.ruby;
2
+
3
+ import org.jrubyparser.ast.Node;
4
+
5
+ public interface Block {
6
+ public Node getVarNode();
7
+ public Node getBodyNode();
8
+ public Frame getFrame();
9
+ public Scope getScope();
10
+ }
@@ -0,0 +1,75 @@
1
+ package org.cx4a.rsense.ruby;
2
+
3
+ import java.util.Stack;
4
+
5
+ public class Context {
6
+ private Ruby runtime;
7
+ private Stack<Scope> scopes;
8
+ private Frame frame;
9
+
10
+ public Context(Ruby runtime) {
11
+ this.runtime = runtime;
12
+ this.scopes = new Stack<Scope>();
13
+ }
14
+
15
+ public void pushScope(Scope scope) {
16
+ scopes.push(scope);
17
+ }
18
+
19
+ public void popScope() {
20
+ scopes.pop();
21
+ }
22
+
23
+ public void setFrame(Frame frame) {
24
+ this.frame = frame;
25
+ }
26
+
27
+ public Frame pushFrame(RubyModule cbase, String name, IRubyObject self, Block block, Visibility visibility) {
28
+ this.frame = new Frame(cbase, name, self, block, visibility, this.frame);
29
+ return this.frame;
30
+ }
31
+
32
+ public Frame popFrame() {
33
+ Frame frame = this.frame;
34
+ this.frame = frame.getPrevious();
35
+ return frame;
36
+ }
37
+
38
+ public void pushMain() {
39
+ pushScope(new LocalScope(runtime.getObject()));
40
+ pushFrame(runtime.getObject(), "main", runtime.getTopSelf(), null, Visibility.PRIVATE);
41
+ }
42
+
43
+ public void popMain() {
44
+ popFrame();
45
+ popScope();
46
+ }
47
+
48
+ public Scope getCurrentScope() {
49
+ return scopes.peek();
50
+ }
51
+
52
+ public IRubyObject getConstant(String name) {
53
+ return getCurrentScope().getModule().getConstant(name);
54
+ }
55
+
56
+ public Frame getCurrentFrame() {
57
+ return frame;
58
+ }
59
+
60
+ public IRubyObject getFrameSelf() {
61
+ return getCurrentFrame().getSelf();
62
+ }
63
+
64
+ public RubyModule getFrameModule() {
65
+ return getCurrentFrame().getModule();
66
+ }
67
+
68
+ public Block getFrameBlock() {
69
+ return getCurrentFrame().getBlock();
70
+ }
71
+
72
+ public Visibility getFrameVisibility() {
73
+ return getCurrentFrame().getVisibility();
74
+ }
75
+ }
@@ -0,0 +1,10 @@
1
+ package org.cx4a.rsense.ruby;
2
+
3
+ import org.cx4a.rsense.util.SourceLocation;
4
+
5
+ public interface DynamicMethod {
6
+ public RubyModule getModule();
7
+ public Visibility getVisibility();
8
+ public void setVisibility(Visibility visibility);
9
+ public SourceLocation getLocation();
10
+ }
@@ -0,0 +1,51 @@
1
+ package org.cx4a.rsense.ruby;
2
+
3
+ public class DynamicScope extends LocalScope {
4
+ private Scope scope;
5
+ private int snapshot;
6
+
7
+ public DynamicScope(RubyModule cref, Scope scope) {
8
+ super(cref);
9
+ this.scope = scope;
10
+ this.snapshot = scope.hashCode();
11
+ }
12
+
13
+ @Override
14
+ public IRubyObject getValue(String name) {
15
+ IRubyObject value = super.getValue(name);
16
+ return value != null ? value : scope.getValue(name);
17
+ }
18
+
19
+ @Override
20
+ public void setValue(String name, IRubyObject value) {
21
+ if (scope.getValue(name) != null) {
22
+ scope.setValue(name, value);
23
+ } else {
24
+ super.setValue(name, value);
25
+ }
26
+ }
27
+
28
+ @Override
29
+ public int hashCode() {
30
+ return snapshot;
31
+ }
32
+
33
+ @Override
34
+ public boolean equals(Object other) {
35
+ if (this == other) {
36
+ return true;
37
+ }
38
+
39
+ if (!(other instanceof DynamicScope)) {
40
+ return false;
41
+ }
42
+
43
+ DynamicScope o = (DynamicScope) other;
44
+ return snapshot == o.snapshot;
45
+ }
46
+
47
+ @Override
48
+ public String toString() {
49
+ return "<DynScope: " + scope.toString() + ">";
50
+ }
51
+ }
@@ -0,0 +1,95 @@
1
+ package org.cx4a.rsense.ruby;
2
+
3
+ public class Frame {
4
+ private RubyModule cbase;
5
+ private String name;
6
+ private IRubyObject self;
7
+ private Block block;
8
+ private Visibility visibility;
9
+ private Frame prev;
10
+ private Object tag;
11
+
12
+ public Frame(RubyModule cbase, String name, IRubyObject self, Block block, Visibility visibility, Frame prev) {
13
+ this.cbase = cbase;
14
+ this.name = name;
15
+ this.self = self;
16
+ this.block = block;
17
+ this.visibility = visibility;
18
+ this.prev = prev;
19
+ }
20
+
21
+ public RubyModule getModule() {
22
+ return cbase;
23
+ }
24
+
25
+ public void setModule(RubyModule cbase) {
26
+ this.cbase = cbase;
27
+ }
28
+
29
+ public String getName() {
30
+ return name;
31
+ }
32
+
33
+ public IRubyObject getSelf() {
34
+ return self;
35
+ }
36
+
37
+ public Block getBlock() {
38
+ return block;
39
+ }
40
+
41
+ public Visibility getVisibility() {
42
+ return visibility;
43
+ }
44
+
45
+ public void setVisibility(Visibility visibility) {
46
+ this.visibility = visibility;
47
+ }
48
+
49
+ public Frame getPrevious() {
50
+ return prev;
51
+ }
52
+
53
+ public Object getTag() {
54
+ return tag;
55
+ }
56
+
57
+ public void setTag(Object tag) {
58
+ this.tag = tag;
59
+ }
60
+
61
+ @Override
62
+ public String toString() {
63
+ String s = "[" + name + " " + cbase + "]";
64
+ if (prev != null) {
65
+ s += " < " + prev.toString();
66
+ }
67
+ return s;
68
+ }
69
+
70
+ @Override
71
+ public int hashCode() {
72
+ int code = 0;
73
+ code ^= name.hashCode();
74
+ code ^= cbase.hashCode();
75
+ code ^= self.hashCode();
76
+ return code;
77
+ }
78
+
79
+ @Override
80
+ public boolean equals(Object other) {
81
+ if (this == other) {
82
+ return true;
83
+ }
84
+
85
+ if (!(other instanceof Frame)) {
86
+ return false;
87
+ }
88
+
89
+ Frame o = (Frame) other;
90
+
91
+ return name.equals(o.name)
92
+ && cbase.equals(o.cbase)
93
+ && self.equals(o.self);
94
+ }
95
+ }
@@ -0,0 +1,17 @@
1
+ package org.cx4a.rsense.ruby;
2
+
3
+ public interface IRubyObject {
4
+ public Ruby getRuntime();
5
+ public RubyClass getMetaClass();
6
+ public void setMetaClass(RubyClass metaClass);
7
+ public RubyClass getSingletonClass();
8
+ public RubyClass makeMetaClass(RubyClass superClass);
9
+ public IRubyObject getInstVar(String name);
10
+ public void setInstVar(String name, IRubyObject value);
11
+ public boolean isNil();
12
+ public boolean isInstanceOf(RubyModule klass);
13
+ public boolean isKindOf(RubyModule klass);
14
+ public Object getTag();
15
+ public void setTag(Object tag);
16
+ public int hashCode(int depth);
17
+ }
@@ -0,0 +1,43 @@
1
+ package org.cx4a.rsense.ruby;
2
+
3
+ import java.util.Map;
4
+ import java.util.HashMap;
5
+
6
+ public class LocalScope implements Scope {
7
+ private RubyModule cref;
8
+ private Map<String, IRubyObject> localVars;
9
+
10
+ public LocalScope(RubyModule cref) {
11
+ this.cref = cref;
12
+ this.localVars = new HashMap<String, IRubyObject>();
13
+ }
14
+
15
+ public RubyModule getModule() {
16
+ return cref;
17
+ }
18
+
19
+ public IRubyObject getValue(String name) {
20
+ return localVars.get(name);
21
+ }
22
+
23
+ public void setValue(String name, IRubyObject value) {
24
+ localVars.put(name, value);
25
+ }
26
+
27
+ @Override
28
+ public int hashCode() {
29
+ int code = 0;
30
+ code = cref.hashCode();
31
+ for (Map.Entry<String, IRubyObject> entry : localVars.entrySet()) {
32
+ code ^= entry.getKey().hashCode();
33
+ code <<= 4;
34
+ code ^= entry.getValue().hashCode();
35
+ }
36
+ return code;
37
+ }
38
+
39
+ @Override
40
+ public String toString() {
41
+ return "<LocalScope: " + cref.toString() + " " + localVars.toString() + ">";
42
+ }
43
+ }
@@ -0,0 +1,50 @@
1
+ package org.cx4a.rsense.ruby;
2
+
3
+ public class MetaClass extends RubyClass {
4
+ private IRubyObject attached;
5
+
6
+ public MetaClass(Ruby runtime, RubyClass superClass) {
7
+ super(runtime, superClass);
8
+ }
9
+
10
+ @Override
11
+ public boolean isSingleton() {
12
+ return true;
13
+ }
14
+
15
+ @Override
16
+ public RubyClass getRealClass() {
17
+ return superClass.getRealClass();
18
+ }
19
+
20
+ @Override
21
+ public RubyClass makeMetaClass(RubyClass superClass) {
22
+ RubyClass klass = super.makeMetaClass(superClass);
23
+ klass.setSuperClass(getSuperClass().getRealClass().getMetaClass());
24
+ return klass;
25
+ }
26
+
27
+ public IRubyObject getAttached() {
28
+ return attached;
29
+ }
30
+
31
+ public void setAttached(IRubyObject attached) {
32
+ this.attached = attached;
33
+ }
34
+
35
+ @Override
36
+ public String getMethodPath(String name) {
37
+ String path = attached.toString();
38
+ if (name != null)
39
+ path += "." + name;
40
+ return path;
41
+ }
42
+
43
+ @Override
44
+ public String toString() {
45
+ if (attached instanceof RubyModule)
46
+ return "<" + attached.toString() + ">";
47
+ else
48
+ return super.toString();
49
+ }
50
+ }
@@ -0,0 +1,242 @@
1
+ package org.cx4a.rsense.ruby;
2
+
3
+ import java.util.Map;
4
+ import java.util.HashMap;
5
+
6
+ public class Ruby {
7
+ public static interface ObjectAllocator {
8
+ public IRubyObject allocate(Ruby runtime, RubyClass klass);
9
+ }
10
+
11
+ public static class DefaultObjectAllocator implements ObjectAllocator {
12
+ public IRubyObject allocate(Ruby runtime, RubyClass klass) {
13
+ return new RubyObject(runtime, klass);
14
+ }
15
+ }
16
+
17
+ private Context context;
18
+ private ObjectAllocator allocator;
19
+ private RubyModule kernelModule;
20
+ private RubyClass objectClass, moduleClass, classClass,
21
+ numericClass, integerClass, fixnumClass, bignumClass,
22
+ floatClass, stringClass, symbolClass,
23
+ booleanClass, trueClass, falseClass, nilClass,
24
+ arrayClass, hashClass, rangeClass,
25
+ regexpClass, matchDataClass,
26
+ exceptionClass, fatalClass,
27
+ procClass;
28
+ private IRubyObject nilObject, trueObject, falseObject;
29
+ private IRubyObject topSelf;
30
+ private Map<String, IRubyObject> globalVars;
31
+
32
+ public Ruby() {
33
+ allocator = new DefaultObjectAllocator();
34
+
35
+ objectClass = RubyClass.newBootClass(this, "Object", null);
36
+ moduleClass = RubyClass.newBootClass(this, "Module", objectClass);
37
+ classClass = RubyClass.newBootClass(this, "Class", moduleClass);
38
+
39
+ objectClass.setMetaClass(classClass);
40
+ moduleClass.setMetaClass(classClass);
41
+ classClass.setMetaClass(classClass);
42
+
43
+ RubyClass metaClass;
44
+ metaClass = objectClass.makeMetaClass(classClass);
45
+ metaClass = moduleClass.makeMetaClass(metaClass);
46
+ metaClass = classClass.makeMetaClass(metaClass);
47
+
48
+ kernelModule = RubyModule.newModule(this, "Kernel", null);
49
+ objectClass.includeModule(kernelModule);
50
+ numericClass = RubyClass.newClass(this, "Numeric", objectClass);
51
+ integerClass = RubyClass.newClass(this, "Integer", numericClass);
52
+ fixnumClass = RubyClass.newClass(this, "Fixnum", integerClass);
53
+ bignumClass = RubyClass.newClass(this, "Bignum", integerClass);
54
+ floatClass = RubyClass.newClass(this, "Float", numericClass);
55
+ stringClass = RubyClass.newClass(this, "String", objectClass);
56
+ symbolClass = RubyClass.newClass(this, "Symbol", objectClass);
57
+ nilClass = RubyClass.newClass(this, "NilClass", objectClass);
58
+ booleanClass = RubyClass.newClass(this, "Boolean", objectClass);
59
+ trueClass = RubyClass.newClass(this, "TrueClass", booleanClass);
60
+ falseClass = RubyClass.newClass(this, "FalseClass", booleanClass);
61
+ arrayClass = RubyClass.newClass(this, "Array", objectClass);
62
+ hashClass = RubyClass.newClass(this, "Hash", objectClass);
63
+ rangeClass = RubyClass.newClass(this, "Range", objectClass);
64
+ regexpClass = RubyClass.newClass(this, "Regexp", objectClass);
65
+ matchDataClass = RubyClass.newClass(this, "MatchData", objectClass);
66
+ exceptionClass = RubyClass.newClass(this, "Exception", objectClass);
67
+ procClass = RubyClass.newClass(this, "Proc", objectClass);
68
+ fatalClass = RubyClass.newClass(this, "fatal", exceptionClass);
69
+
70
+ objectClass.setConstant("Kernel", kernelModule);
71
+ objectClass.setConstant("Object", objectClass);
72
+ objectClass.setConstant("Module", moduleClass);
73
+ objectClass.setConstant("Class", classClass);
74
+ objectClass.setConstant("Numeric", numericClass);
75
+ objectClass.setConstant("Integer", integerClass);
76
+ objectClass.setConstant("Fixnum", fixnumClass);
77
+ objectClass.setConstant("Bignum", bignumClass);
78
+ objectClass.setConstant("Float", floatClass);
79
+ objectClass.setConstant("String", stringClass);
80
+ objectClass.setConstant("Symbol", symbolClass);
81
+ objectClass.setConstant("NilClass", nilClass);
82
+ objectClass.setConstant("Boolean", booleanClass);
83
+ objectClass.setConstant("TrueClass", trueClass);
84
+ objectClass.setConstant("FalseClass", falseClass);
85
+ objectClass.setConstant("Array", arrayClass);
86
+ objectClass.setConstant("Hash", hashClass);
87
+ objectClass.setConstant("Range", rangeClass);
88
+ objectClass.setConstant("Regexp", regexpClass);
89
+ objectClass.setConstant("MatchData", matchDataClass);
90
+ objectClass.setConstant("Exception", exceptionClass);
91
+ objectClass.setConstant("Proc", procClass);
92
+ objectClass.setConstant("fatal", fatalClass);
93
+
94
+ nilObject = new SpecialObject(this, nilClass, "nil");
95
+ trueObject = new SpecialObject(this, trueClass, "true");
96
+ falseObject = new SpecialObject(this, falseClass, "false");
97
+
98
+ topSelf = new RubyObject(this, objectClass);
99
+
100
+ globalVars = new HashMap<String, IRubyObject>();
101
+ context = new Context(this);
102
+ }
103
+
104
+ public Context getContext() {
105
+ return context;
106
+ }
107
+
108
+ public void setObjectAllocator(ObjectAllocator allocator) {
109
+ this.allocator = allocator;
110
+ }
111
+
112
+ public IRubyObject getGlobalVar(String name) {
113
+ return globalVars.get(name);
114
+ }
115
+
116
+ public void setGlobalVar(String name, IRubyObject value) {
117
+ globalVars.put(name, value);
118
+ }
119
+
120
+ public IRubyObject newInstance(RubyClass klass) {
121
+ return allocator.allocate(this, klass);
122
+ }
123
+
124
+ public boolean isInstanceOf(IRubyObject object, RubyModule klass) {
125
+ return object.getMetaClass() == klass;
126
+ }
127
+
128
+ public boolean isKindOf(IRubyObject object, RubyModule klass) {
129
+ // FIXME speedup
130
+ RubyClass oclass = object.getMetaClass();
131
+ while (oclass != null) {
132
+ if (oclass == klass) {
133
+ return true;
134
+ }
135
+ oclass = oclass.getSuperClass();
136
+ }
137
+ if (object.getMetaClass().getIncludes(true).contains(klass)) {
138
+ return true;
139
+ }
140
+ return false;
141
+ }
142
+
143
+ public RubyModule getKernel() {
144
+ return kernelModule;
145
+ }
146
+
147
+ public RubyClass getObject() {
148
+ return objectClass;
149
+ }
150
+
151
+ public RubyClass getModule() {
152
+ return moduleClass;
153
+ }
154
+
155
+ public RubyClass getClassClass() {
156
+ return classClass;
157
+ }
158
+
159
+ public RubyClass getNumeric() {
160
+ return numericClass;
161
+ }
162
+
163
+ public RubyClass getInteger() {
164
+ return integerClass;
165
+ }
166
+
167
+ public RubyClass getFixnum() {
168
+ return fixnumClass;
169
+ }
170
+
171
+ public RubyClass getBignum() {
172
+ return bignumClass;
173
+ }
174
+
175
+ public RubyClass getFloat() {
176
+ return floatClass;
177
+ }
178
+
179
+ public RubyClass getString() {
180
+ return stringClass;
181
+ }
182
+
183
+ public RubyClass getSymbol() {
184
+ return symbolClass;
185
+ }
186
+
187
+ public RubyClass getArray() {
188
+ return arrayClass;
189
+ }
190
+
191
+ public RubyClass getHash() {
192
+ return hashClass;
193
+ }
194
+
195
+ public RubyClass getRange() {
196
+ return rangeClass;
197
+ }
198
+
199
+ public RubyClass getRegexp() {
200
+ return regexpClass;
201
+ }
202
+
203
+ public RubyClass getMatchData() {
204
+ return matchDataClass;
205
+ }
206
+
207
+ public RubyClass getNilClass() {
208
+ return nilClass;
209
+ }
210
+
211
+ public RubyClass getBoolean() {
212
+ return booleanClass;
213
+ }
214
+
215
+ public RubyClass getTrueClass() {
216
+ return trueClass;
217
+ }
218
+
219
+ public RubyClass getFalseClass() {
220
+ return falseClass;
221
+ }
222
+
223
+ public RubyClass getProc() {
224
+ return procClass;
225
+ }
226
+
227
+ public IRubyObject getNil() {
228
+ return nilObject;
229
+ }
230
+
231
+ public IRubyObject getTrue() {
232
+ return trueObject;
233
+ }
234
+
235
+ public IRubyObject getFalse() {
236
+ return falseObject;
237
+ }
238
+
239
+ public IRubyObject getTopSelf() {
240
+ return topSelf;
241
+ }
242
+ }