typeprof 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -3
- data/lib/typeprof/analyzer.rb +35 -23
- data/lib/typeprof/builtin.rb +37 -3
- data/lib/typeprof/config.rb +2 -2
- data/lib/typeprof/export.rb +9 -3
- data/lib/typeprof/import.rb +4 -11
- data/lib/typeprof/method.rb +7 -4
- data/lib/typeprof/type.rb +3 -3
- data/lib/typeprof/version.rb +1 -1
- data/smoke/alias.rb +1 -0
- data/smoke/any1.rb +1 -0
- data/smoke/any2.rb +1 -0
- data/smoke/arguments.rb +1 -0
- data/smoke/arguments2.rb +1 -0
- data/smoke/array-each.rb +1 -0
- data/smoke/array-each2.rb +1 -0
- data/smoke/array-each3.rb +1 -0
- data/smoke/array-ltlt.rb +1 -0
- data/smoke/array-ltlt2.rb +1 -0
- data/smoke/array-map.rb +1 -0
- data/smoke/array-map2.rb +1 -0
- data/smoke/array-map3.rb +1 -0
- data/smoke/array-mul.rb +1 -0
- data/smoke/array-plus1.rb +1 -0
- data/smoke/array-pop.rb +1 -0
- data/smoke/array-range-aref.rb +1 -0
- data/smoke/array-replace.rb +1 -0
- data/smoke/array-s-aref.rb +1 -0
- data/smoke/array1.rb +1 -0
- data/smoke/array10.rb +1 -0
- data/smoke/array11.rb +1 -0
- data/smoke/array12.rb +1 -0
- data/smoke/array13.rb +1 -0
- data/smoke/array14.rb +1 -0
- data/smoke/array2.rb +1 -0
- data/smoke/array4.rb +1 -0
- data/smoke/array5.rb +1 -0
- data/smoke/array6.rb +1 -0
- data/smoke/array7.rb +1 -0
- data/smoke/array9.rb +1 -0
- data/smoke/autoload.rb +1 -0
- data/smoke/backtrace.rb +1 -0
- data/smoke/block-ambiguous.rb +1 -0
- data/smoke/block-args1-rest.rb +1 -0
- data/smoke/block-args1.rb +1 -0
- data/smoke/block-args2-rest.rb +1 -0
- data/smoke/block-args2.rb +1 -0
- data/smoke/block-args3-rest.rb +1 -0
- data/smoke/block-args3.rb +1 -0
- data/smoke/block-blockarg.rb +1 -0
- data/smoke/block-kwarg.rb +1 -0
- data/smoke/block1.rb +1 -0
- data/smoke/block10.rb +1 -0
- data/smoke/block11.rb +1 -0
- data/smoke/block12.rb +1 -0
- data/smoke/block14.rb +1 -0
- data/smoke/block2.rb +1 -0
- data/smoke/block4.rb +1 -0
- data/smoke/block5.rb +1 -0
- data/smoke/block6.rb +1 -0
- data/smoke/block7.rb +1 -0
- data/smoke/block8.rb +1 -0
- data/smoke/block9.rb +1 -0
- data/smoke/blown.rb +1 -0
- data/smoke/break1.rb +1 -0
- data/smoke/break2.rb +1 -0
- data/smoke/case.rb +1 -0
- data/smoke/case2.rb +1 -0
- data/smoke/class_method3.rb +2 -0
- data/smoke/constant2.rb +1 -0
- data/smoke/constant3.rb +1 -0
- data/smoke/constant4.rb +1 -0
- data/smoke/context-sensitive1.rb +1 -0
- data/smoke/cvar.rb +1 -0
- data/smoke/demo.rb +1 -0
- data/smoke/demo1.rb +1 -0
- data/smoke/demo10.rb +1 -0
- data/smoke/demo11.rb +1 -0
- data/smoke/demo2.rb +1 -0
- data/smoke/demo3.rb +1 -0
- data/smoke/demo7.rb +1 -0
- data/smoke/demo8.rb +1 -0
- data/smoke/demo9.rb +1 -0
- data/smoke/dummy-execution1.rb +1 -0
- data/smoke/ensure1.rb +1 -0
- data/smoke/enumerator.rb +1 -0
- data/smoke/expandarray1.rb +1 -0
- data/smoke/expandarray2.rb +1 -0
- data/smoke/flow1.rb +1 -0
- data/smoke/flow2.rb +1 -0
- data/smoke/flow3.rb +1 -0
- data/smoke/flow5.rb +1 -0
- data/smoke/flow6.rb +1 -0
- data/smoke/flow7.rb +1 -0
- data/smoke/flow8.rb +1 -0
- data/smoke/freeze.rb +1 -0
- data/smoke/function.rb +1 -0
- data/smoke/gvar.rb +1 -0
- data/smoke/gvar2.rb +1 -0
- data/smoke/hash-fetch.rb +1 -0
- data/smoke/hash-merge-bang.rb +1 -0
- data/smoke/hash1.rb +1 -0
- data/smoke/hash2.rb +1 -0
- data/smoke/hash3.rb +1 -0
- data/smoke/hash4.rb +1 -0
- data/smoke/initialize.rb +1 -0
- data/smoke/int_times.rb +1 -0
- data/smoke/integer.rb +1 -0
- data/smoke/ivar.rb +1 -0
- data/smoke/kernel-class.rb +1 -0
- data/smoke/keyword1.rb +1 -0
- data/smoke/keyword2.rb +1 -0
- data/smoke/keyword3.rb +1 -0
- data/smoke/keyword4.rb +1 -0
- data/smoke/keyword5.rb +1 -0
- data/smoke/kwsplat1.rb +1 -0
- data/smoke/kwsplat2.rb +1 -0
- data/smoke/manual-rbs.rb +1 -0
- data/smoke/manual-rbs2.rb +1 -0
- data/smoke/masgn1.rb +1 -0
- data/smoke/masgn2.rb +1 -0
- data/smoke/masgn3.rb +1 -0
- data/smoke/method_in_branch.rb +1 -0
- data/smoke/next1.rb +1 -0
- data/smoke/next2.rb +1 -0
- data/smoke/object-send1.rb +1 -0
- data/smoke/once.rb +1 -0
- data/smoke/optional1.rb +1 -0
- data/smoke/optional2.rb +1 -0
- data/smoke/optional3.rb +1 -0
- data/smoke/parameterizedd-self.rb +1 -0
- data/smoke/pathname1.rb +1 -0
- data/smoke/pathname2.rb +1 -0
- data/smoke/pattern-match1.rb +1 -0
- data/smoke/pattern-match2.rb +1 -0
- data/smoke/proc.rb +1 -0
- data/smoke/proc2.rb +1 -0
- data/smoke/proc3.rb +1 -0
- data/smoke/proc4.rb +1 -0
- data/smoke/range.rb +1 -0
- data/smoke/rbs-alias.rb +1 -0
- data/smoke/rbs-attr.rb +1 -0
- data/smoke/rbs-extend.rb +1 -0
- data/smoke/rbs-interface.rb +1 -0
- data/smoke/rbs-proc1.rb +1 -0
- data/smoke/rbs-proc2.rb +1 -0
- data/smoke/rbs-proc3.rb +1 -0
- data/smoke/rbs-record.rb +1 -0
- data/smoke/rbs-tyvar.rb +1 -0
- data/smoke/rbs-tyvar2.rb +1 -0
- data/smoke/rbs-tyvar3.rb +1 -0
- data/smoke/rbs-tyvar5.rb +1 -0
- data/smoke/rbs-tyvar6.rb +1 -0
- data/smoke/rbs-tyvar7.rb +1 -0
- data/smoke/rbs-vars.rb +1 -0
- data/smoke/redo1.rb +1 -0
- data/smoke/redo2.rb +1 -0
- data/smoke/req-keyword.rb +1 -0
- data/smoke/rescue1.rb +1 -0
- data/smoke/rescue2.rb +1 -0
- data/smoke/respond_to.rb +1 -0
- data/smoke/rest-farg.rb +1 -0
- data/smoke/rest1.rb +1 -0
- data/smoke/rest2.rb +1 -0
- data/smoke/rest3.rb +1 -0
- data/smoke/rest4.rb +1 -0
- data/smoke/rest5.rb +1 -0
- data/smoke/rest6.rb +1 -0
- data/smoke/retry1.rb +1 -0
- data/smoke/return.rb +1 -0
- data/smoke/step.rb +1 -0
- data/smoke/string-split.rb +1 -0
- data/smoke/struct2.rb +1 -0
- data/smoke/super1.rb +1 -0
- data/smoke/svar1.rb +1 -0
- data/smoke/symbol-proc.rb +1 -0
- data/smoke/tap1.rb +1 -0
- data/smoke/toplevel.rb +1 -0
- data/smoke/two-map.rb +1 -0
- data/smoke/type_var.rb +1 -0
- data/smoke/typed_method.rb +1 -0
- data/smoke/uninitialize-var.rb +1 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd38b5e501a5d4fbe4db1ad43015c44ab39dbfefc3f7638516faeb5bcafd21a9
|
4
|
+
data.tar.gz: 000f140ab750e4ddd57863851c21a830bfe470c0eb7be9e38442ca535f4ef041
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '00924963d5f91c4609224615507fcfb240a140c8119bf76f24aa28973342e6b61c528fc579781690f9f0392bf0d125c8bdb70499525791603c111ed9251da931'
|
7
|
+
data.tar.gz: ee07e0636cd3e26271c468e1927e676a1b320ddefe13dc2412c254cac9aaeac7ca5db1936a26ccc477c2494473fde1d2bdde7a28bd1fa384c6995d7ae4d085ea
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
typeprof (0.
|
4
|
+
typeprof (0.8.0)
|
5
5
|
rbs (>= 0.17.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -11,11 +11,13 @@ GEM
|
|
11
11
|
docile (1.3.2)
|
12
12
|
power_assert (1.2.0)
|
13
13
|
rake (13.0.1)
|
14
|
-
rbs (0.
|
15
|
-
simplecov (0.
|
14
|
+
rbs (0.18.1)
|
15
|
+
simplecov (0.20.0)
|
16
16
|
docile (~> 1.1)
|
17
17
|
simplecov-html (~> 0.11)
|
18
|
+
simplecov_json_formatter (~> 0.1)
|
18
19
|
simplecov-html (0.12.3)
|
20
|
+
simplecov_json_formatter (0.1.2)
|
19
21
|
stackprof (0.2.16)
|
20
22
|
test-unit (3.3.7)
|
21
23
|
power_assert
|
data/lib/typeprof/analyzer.rb
CHANGED
@@ -83,10 +83,11 @@ module TypeProf
|
|
83
83
|
class StaticEnv
|
84
84
|
include Utils::StructuralEquality
|
85
85
|
|
86
|
-
def initialize(recv_ty, blk_ty, mod_func)
|
86
|
+
def initialize(recv_ty, blk_ty, mod_func, pub_meth)
|
87
87
|
@recv_ty = recv_ty
|
88
88
|
@blk_ty = blk_ty
|
89
89
|
@mod_func = mod_func
|
90
|
+
@pub_meth = pub_meth
|
90
91
|
|
91
92
|
return if recv_ty == :top #OK
|
92
93
|
recv_ty.each_child_global do |ty|
|
@@ -94,13 +95,14 @@ module TypeProf
|
|
94
95
|
end
|
95
96
|
end
|
96
97
|
|
97
|
-
attr_reader :recv_ty, :blk_ty, :mod_func
|
98
|
+
attr_reader :recv_ty, :blk_ty, :mod_func, :pub_meth
|
98
99
|
|
99
100
|
def merge(other)
|
100
101
|
recv_ty = @recv_ty.union(other.recv_ty)
|
101
102
|
blk_ty = @blk_ty.union(other.blk_ty)
|
102
103
|
mod_func = @mod_func & other.mod_func # ??
|
103
|
-
|
104
|
+
pub_meth = @pub_meth & other.pub_meth # ??
|
105
|
+
StaticEnv.new(recv_ty, blk_ty, mod_func, pub_meth)
|
104
106
|
end
|
105
107
|
end
|
106
108
|
|
@@ -195,12 +197,17 @@ module TypeProf
|
|
195
197
|
end
|
196
198
|
|
197
199
|
def enable_module_function
|
198
|
-
senv = StaticEnv.new(@static_env.recv_ty, @static_env.blk_ty, true)
|
200
|
+
senv = StaticEnv.new(@static_env.recv_ty, @static_env.blk_ty, true, @static_env.pub_meth)
|
201
|
+
Env.new(senv, @locals, @stack, @type_params)
|
202
|
+
end
|
203
|
+
|
204
|
+
def method_public_set(flag)
|
205
|
+
senv = StaticEnv.new(@static_env.recv_ty, @static_env.blk_ty, @static_env.mod_func, flag)
|
199
206
|
Env.new(senv, @locals, @stack, @type_params)
|
200
207
|
end
|
201
208
|
|
202
209
|
def replace_recv_ty(ty)
|
203
|
-
senv = StaticEnv.new(ty, @static_env.blk_ty, @static_env.mod_func)
|
210
|
+
senv = StaticEnv.new(ty, @static_env.blk_ty, @static_env.mod_func, @static_env.pub_meth)
|
204
211
|
Env.new(senv, @locals, @stack, @type_params)
|
205
212
|
end
|
206
213
|
|
@@ -380,12 +387,12 @@ module TypeProf
|
|
380
387
|
cbase && cbase.idx != 1 ? @class_defs[cbase.idx].name : []
|
381
388
|
end
|
382
389
|
|
383
|
-
def new_class(cbase, name, type_params, superclass,
|
390
|
+
def new_class(cbase, name, type_params, superclass, absolute_path)
|
384
391
|
show_name = cbase_path(cbase) + [name]
|
385
392
|
idx = @class_defs.size
|
386
393
|
if superclass
|
387
394
|
@class_defs[idx] = ClassDef.new(:class, show_name, absolute_path)
|
388
|
-
klass = Type::Class.new(:class, idx, type_params, superclass,
|
395
|
+
klass = Type::Class.new(:class, idx, type_params, superclass, show_name)
|
389
396
|
@class_defs[idx].klass_obj = klass
|
390
397
|
cbase ||= klass # for bootstrap
|
391
398
|
add_constant(cbase, name, klass, absolute_path)
|
@@ -393,13 +400,17 @@ module TypeProf
|
|
393
400
|
else
|
394
401
|
# module
|
395
402
|
@class_defs[idx] = ClassDef.new(:module, show_name, absolute_path)
|
396
|
-
mod = Type::Class.new(:module, idx, type_params, nil,
|
403
|
+
mod = Type::Class.new(:module, idx, type_params, nil, show_name)
|
397
404
|
@class_defs[idx].klass_obj = mod
|
398
405
|
add_constant(cbase, name, mod, absolute_path)
|
399
406
|
return mod
|
400
407
|
end
|
401
408
|
end
|
402
409
|
|
410
|
+
def add_superclass_type_args!(klass, tyargs)
|
411
|
+
klass.superclass_type_args = tyargs
|
412
|
+
end
|
413
|
+
|
403
414
|
def new_struct(ep)
|
404
415
|
return @struct_defs[ep] if @struct_defs[ep]
|
405
416
|
|
@@ -407,7 +418,8 @@ module TypeProf
|
|
407
418
|
superclass = Type::Builtin[:struct]
|
408
419
|
name = "AnonymousStruct_generated_#{ @anonymous_struct_gen_id += 1 }"
|
409
420
|
@class_defs[idx] = ClassDef.new(:class, [name], ep.ctx.iseq.absolute_path)
|
410
|
-
klass = Type::Class.new(:class, idx, [], superclass,
|
421
|
+
klass = Type::Class.new(:class, idx, [], superclass, name)
|
422
|
+
add_superclass_type_args!(klass, [Type.any])
|
411
423
|
@class_defs[idx].klass_obj = klass
|
412
424
|
|
413
425
|
@struct_defs[ep] = klass
|
@@ -563,12 +575,12 @@ module TypeProf
|
|
563
575
|
end
|
564
576
|
end
|
565
577
|
|
566
|
-
def add_iseq_method(klass, mid, iseq, cref, outer_ep)
|
567
|
-
add_method(klass, mid, false, ISeqMethodDef.new(iseq, cref, outer_ep))
|
578
|
+
def add_iseq_method(klass, mid, iseq, cref, outer_ep, pub_meth)
|
579
|
+
add_method(klass, mid, false, ISeqMethodDef.new(iseq, cref, outer_ep, pub_meth))
|
568
580
|
end
|
569
581
|
|
570
|
-
def add_singleton_iseq_method(klass, mid, iseq, cref, outer_ep)
|
571
|
-
add_method(klass, mid, true, ISeqMethodDef.new(iseq, cref, outer_ep))
|
582
|
+
def add_singleton_iseq_method(klass, mid, iseq, cref, outer_ep, pub_meth)
|
583
|
+
add_method(klass, mid, true, ISeqMethodDef.new(iseq, cref, outer_ep, pub_meth))
|
572
584
|
end
|
573
585
|
|
574
586
|
def set_custom_method(klass, mid, impl)
|
@@ -953,7 +965,7 @@ module TypeProf
|
|
953
965
|
locals[kwrest_index] = Type.any if kwrest_index
|
954
966
|
locals[block_index] = Type.nil if block_index
|
955
967
|
|
956
|
-
env = Env.new(StaticEnv.new(recv, Type.nil, false), locals, [], Utils::HashWrapper.new({}))
|
968
|
+
env = Env.new(StaticEnv.new(recv, Type.nil, false, true), locals, [], Utils::HashWrapper.new({}))
|
957
969
|
|
958
970
|
if !@pending_execution[iseq] || @pending_execution[iseq][0] == :block
|
959
971
|
@pending_execution[iseq] = [:method, [meth, ep, env]]
|
@@ -1148,7 +1160,7 @@ module TypeProf
|
|
1148
1160
|
cref = ep.ctx.cref
|
1149
1161
|
recv.each_child do |recv|
|
1150
1162
|
if recv.is_a?(Type::Class)
|
1151
|
-
meth = add_singleton_iseq_method(recv, mid, iseq, cref, nil)
|
1163
|
+
meth = add_singleton_iseq_method(recv, mid, iseq, cref, nil, env.static_env.pub_meth)
|
1152
1164
|
pend_method_execution(iseq, meth, recv, mid, ep.ctx.cref, nil)
|
1153
1165
|
else
|
1154
1166
|
recv = Type.any # XXX: what to do?
|
@@ -1188,8 +1200,8 @@ module TypeProf
|
|
1188
1200
|
if cbase == Type.any
|
1189
1201
|
klass = Type.any
|
1190
1202
|
else
|
1191
|
-
|
1192
|
-
klass
|
1203
|
+
klass = new_class(cbase, id, [], superclass, ep.ctx.iseq.absolute_path)
|
1204
|
+
add_superclass_type_args!(klass, superclass.type_params.map { Type.any }) if superclass
|
1193
1205
|
end
|
1194
1206
|
end
|
1195
1207
|
singleton = false
|
@@ -1211,7 +1223,7 @@ module TypeProf
|
|
1211
1223
|
nctx = Context.new(iseq, ncref, nil)
|
1212
1224
|
nep = ExecutionPoint.new(nctx, 0, nil)
|
1213
1225
|
locals = [Type.nil] * iseq.locals.size
|
1214
|
-
nenv = Env.new(StaticEnv.new(recv, blk, false), locals, [], Utils::HashWrapper.new({}))
|
1226
|
+
nenv = Env.new(StaticEnv.new(recv, blk, false, true), locals, [], Utils::HashWrapper.new({}))
|
1215
1227
|
merge_env(nep, nenv)
|
1216
1228
|
add_callsite!(nep.ctx, ep, env) do |ret_ty, ep, env|
|
1217
1229
|
nenv, ret_ty = localize_type(ret_ty, env, ep)
|
@@ -1940,7 +1952,7 @@ module TypeProf
|
|
1940
1952
|
nctx = Context.new(blk_iseq, ep.ctx.cref, ep.ctx.mid)
|
1941
1953
|
nep = ExecutionPoint.new(nctx, 0, ep)
|
1942
1954
|
nlocals = [Type.any] * blk_iseq.locals.size
|
1943
|
-
nsenv = StaticEnv.new(env.static_env.recv_ty, Type.any, env.static_env.mod_func)
|
1955
|
+
nsenv = StaticEnv.new(env.static_env.recv_ty, Type.any, env.static_env.mod_func, env.static_env.pub_meth)
|
1944
1956
|
nenv = Env.new(nsenv, nlocals, [], nil)
|
1945
1957
|
pend_block_dummy_execution(blk_ty, blk_iseq, nep, nenv)
|
1946
1958
|
merge_return_env(ep) {|tenv| tenv ? tenv.merge(env) : env }
|
@@ -1996,17 +2008,17 @@ module TypeProf
|
|
1996
2008
|
typed_mdef = check_typed_method(cref.klass, mid, ep.ctx.cref.singleton)
|
1997
2009
|
recv = Type::Instance.new(recv) if recv.is_a?(Type::Class)
|
1998
2010
|
if typed_mdef
|
1999
|
-
mdef = ISeqMethodDef.new(iseq, cref, outer_ep)
|
2011
|
+
mdef = ISeqMethodDef.new(iseq, cref, outer_ep, env.static_env.pub_meth)
|
2000
2012
|
typed_mdef.each do |typed_mdef|
|
2001
2013
|
typed_mdef.do_match_iseq_mdef(mdef, recv, mid, env, ep, self)
|
2002
2014
|
end
|
2003
2015
|
else
|
2004
2016
|
if ep.ctx.cref.singleton
|
2005
|
-
meth = add_singleton_iseq_method(cref.klass, mid, iseq, cref, outer_ep)
|
2017
|
+
meth = add_singleton_iseq_method(cref.klass, mid, iseq, cref, outer_ep, true)
|
2006
2018
|
else
|
2007
|
-
meth = add_iseq_method(cref.klass, mid, iseq, cref, outer_ep)
|
2019
|
+
meth = add_iseq_method(cref.klass, mid, iseq, cref, outer_ep, env.static_env.pub_meth)
|
2008
2020
|
if env.static_env.mod_func
|
2009
|
-
add_singleton_iseq_method(cref.klass, mid, iseq, cref, outer_ep)
|
2021
|
+
add_singleton_iseq_method(cref.klass, mid, iseq, cref, outer_ep, true)
|
2010
2022
|
end
|
2011
2023
|
end
|
2012
2024
|
|
data/lib/typeprof/builtin.rb
CHANGED
@@ -198,6 +198,38 @@ module TypeProf
|
|
198
198
|
end
|
199
199
|
end
|
200
200
|
|
201
|
+
def module_public(recv, mid, aargs, ep, env, scratch, &ctn)
|
202
|
+
if aargs.lead_tys.empty?
|
203
|
+
ctn[recv, ep, env.method_public_set(true)]
|
204
|
+
else
|
205
|
+
aargs.lead_tys.each do |aarg|
|
206
|
+
sym = get_sym("public", aarg, ep, scratch) or next
|
207
|
+
meths = scratch.get_method(recv, false, sym)
|
208
|
+
next unless meths
|
209
|
+
meths.each do |mdef|
|
210
|
+
mdef.pub_meth = true
|
211
|
+
end
|
212
|
+
end
|
213
|
+
ctn[recv, ep, env]
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
def module_private(recv, mid, aargs, ep, env, scratch, &ctn)
|
218
|
+
if aargs.lead_tys.empty?
|
219
|
+
ctn[recv, ep, env.method_public_set(false)]
|
220
|
+
else
|
221
|
+
aargs.lead_tys.each do |aarg|
|
222
|
+
sym = get_sym("private", aarg, ep, scratch) or next
|
223
|
+
meths = scratch.get_method(recv, false, sym)
|
224
|
+
next unless meths
|
225
|
+
meths.each do |mdef|
|
226
|
+
mdef.pub_meth = false
|
227
|
+
end
|
228
|
+
end
|
229
|
+
ctn[recv, ep, env]
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
201
233
|
def module_define_method(recv, mid, aargs, ep, env, scratch, &ctn)
|
202
234
|
if aargs.lead_tys.size != 1
|
203
235
|
scratch.warn(ep, "Module#define with #{ aargs.lead_tys.size } argument is ignored")
|
@@ -551,8 +583,8 @@ module TypeProf
|
|
551
583
|
end
|
552
584
|
|
553
585
|
def self.setup_initial_global_env(scratch)
|
554
|
-
klass_basic_obj = scratch.new_class(nil, :BasicObject, [], :__root__, nil
|
555
|
-
klass_obj = scratch.new_class(nil, :Object, [], klass_basic_obj,
|
586
|
+
klass_basic_obj = scratch.new_class(nil, :BasicObject, [], :__root__, nil) # cbase, name, superclass
|
587
|
+
klass_obj = scratch.new_class(nil, :Object, [], klass_basic_obj, nil)
|
556
588
|
scratch.add_constant(klass_obj, :Object, klass_obj, nil)
|
557
589
|
scratch.add_constant(klass_obj, :BasicObject, klass_basic_obj, nil)
|
558
590
|
|
@@ -561,7 +593,7 @@ module TypeProf
|
|
561
593
|
|
562
594
|
Import.import_builtin(scratch)
|
563
595
|
|
564
|
-
Type::Builtin[:vmcore] = scratch.new_class(klass_obj, :VMCore, [], klass_obj,
|
596
|
+
Type::Builtin[:vmcore] = scratch.new_class(klass_obj, :VMCore, [], klass_obj, nil)
|
565
597
|
Type::Builtin[:int] = scratch.get_constant(klass_obj, :Integer)
|
566
598
|
Type::Builtin[:float] = scratch.get_constant(klass_obj, :Float)
|
567
599
|
Type::Builtin[:rational] = scratch.get_constant(klass_obj, :Rational)
|
@@ -606,6 +638,8 @@ module TypeProf
|
|
606
638
|
scratch.set_custom_method(klass_module, :include, Builtin.method(:module_include))
|
607
639
|
scratch.set_custom_method(klass_module, :extend, Builtin.method(:module_extend))
|
608
640
|
scratch.set_custom_method(klass_module, :module_function, Builtin.method(:module_module_function))
|
641
|
+
scratch.set_custom_method(klass_module, :public, Builtin.method(:module_public))
|
642
|
+
scratch.set_custom_method(klass_module, :private, Builtin.method(:module_private))
|
609
643
|
scratch.set_custom_method(klass_module, :define_method, Builtin.method(:module_define_method))
|
610
644
|
|
611
645
|
scratch.set_custom_method(klass_proc, :[], Builtin.method(:proc_call))
|
data/lib/typeprof/config.rb
CHANGED
@@ -69,7 +69,7 @@ module TypeProf
|
|
69
69
|
|
70
70
|
prologue_ctx = Context.new(nil, nil, nil)
|
71
71
|
prologue_ep = ExecutionPoint.new(prologue_ctx, -1, nil)
|
72
|
-
prologue_env = Env.new(StaticEnv.new(:top, Type.nil, false), [], [], Utils::HashWrapper.new({}))
|
72
|
+
prologue_env = Env.new(StaticEnv.new(:top, Type.nil, false, true), [], [], Utils::HashWrapper.new({}))
|
73
73
|
|
74
74
|
Config.rb_files.each do |rb|
|
75
75
|
if rb.is_a?(Array) # [String name, String content]
|
@@ -113,7 +113,7 @@ module TypeProf
|
|
113
113
|
ctx = Context.new(iseq, cref, nil)
|
114
114
|
ep = ExecutionPoint.new(ctx, 0, nil)
|
115
115
|
locals = [Type.nil] * iseq.locals.size
|
116
|
-
env = Env.new(StaticEnv.new(recv, Type.nil, false), locals, [], Utils::HashWrapper.new({}))
|
116
|
+
env = Env.new(StaticEnv.new(recv, Type.nil, false, false), locals, [], Utils::HashWrapper.new({}))
|
117
117
|
|
118
118
|
return ep, env
|
119
119
|
end
|
data/lib/typeprof/export.rb
CHANGED
@@ -135,8 +135,9 @@ module TypeProf
|
|
135
135
|
method_name = ctx.mid
|
136
136
|
method_name = "self.#{ method_name }" if singleton
|
137
137
|
|
138
|
-
iseq_methods[method_name] ||= []
|
139
|
-
iseq_methods[method_name]
|
138
|
+
iseq_methods[method_name] ||= [true, []]
|
139
|
+
iseq_methods[method_name][0] &&= mdef.pub_meth
|
140
|
+
iseq_methods[method_name][1] << @scratch.show_method_signature(ctx)
|
140
141
|
end
|
141
142
|
when AttrMethodDef
|
142
143
|
next if !mdef.absolute_path || Config.check_dir_filter(mdef.absolute_path) == :exclude
|
@@ -296,8 +297,13 @@ module TypeProf
|
|
296
297
|
output.puts indent + "# def #{ method_name } : #{ sigs }"
|
297
298
|
first = false
|
298
299
|
end
|
299
|
-
|
300
|
+
prev_pub_meth = true
|
301
|
+
class_data.iseq_methods.each do |method_name, (pub_meth, sigs)|
|
300
302
|
sigs = sigs.sort.join("\n" + indent + " " * (method_name.size + 7) + "| ")
|
303
|
+
if prev_pub_meth != pub_meth
|
304
|
+
output.puts indent + " #{ pub_meth ? "public" : "private" }"
|
305
|
+
prev_pub_meth = pub_meth
|
306
|
+
end
|
301
307
|
output.puts indent + " def #{ method_name } : #{ sigs }"
|
302
308
|
first = false
|
303
309
|
end
|
data/lib/typeprof/import.rb
CHANGED
@@ -62,7 +62,6 @@ module TypeProf
|
|
62
62
|
class RBS2JSON
|
63
63
|
def initialize(all_env, cur_env)
|
64
64
|
@all_env, @cur_env = all_env, cur_env
|
65
|
-
@env_walker = RBS::EnvironmentWalker.new(env: @cur_env) # Currently, only each_type_name is used
|
66
65
|
end
|
67
66
|
|
68
67
|
def dump_json
|
@@ -259,12 +258,6 @@ module TypeProf
|
|
259
258
|
yield decl.name
|
260
259
|
if decl.super_class
|
261
260
|
name = decl.super_class.name
|
262
|
-
args = decl.super_class.args
|
263
|
-
if args
|
264
|
-
args.each do |ty|
|
265
|
-
@env_walker.each_type_name(ty, &blk)
|
266
|
-
end
|
267
|
-
end
|
268
261
|
else
|
269
262
|
name = RBS::BuiltinNames::Object.name
|
270
263
|
end
|
@@ -476,8 +469,7 @@ module TypeProf
|
|
476
469
|
|
477
470
|
klass = @scratch.get_constant(base_klass, name)
|
478
471
|
if klass.is_a?(Type::Any)
|
479
|
-
|
480
|
-
klass = @scratch.new_class(base_klass, name, type_params, superclass, superclass_type_args, nil)
|
472
|
+
klass = @scratch.new_class(base_klass, name, type_params, superclass, nil)
|
481
473
|
|
482
474
|
# There builtin classes are needed to interpret RBS declarations
|
483
475
|
case classpath
|
@@ -493,10 +485,11 @@ module TypeProf
|
|
493
485
|
end
|
494
486
|
end
|
495
487
|
|
496
|
-
[klass, members]
|
488
|
+
[klass, superclass_type_args, members]
|
497
489
|
end
|
498
490
|
|
499
|
-
classes.each do |klass, members|
|
491
|
+
classes.each do |klass, superclass_type_args, members|
|
492
|
+
@scratch.add_superclass_type_args!(klass, superclass_type_args&.map {|ty| conv_type(ty) })
|
500
493
|
included_modules = members[:included_modules]
|
501
494
|
extended_modules = members[:extended_modules]
|
502
495
|
methods = members[:methods]
|
data/lib/typeprof/method.rb
CHANGED
@@ -4,13 +4,16 @@ module TypeProf
|
|
4
4
|
end
|
5
5
|
|
6
6
|
class ISeqMethodDef < MethodDef
|
7
|
-
def initialize(iseq, cref, outer_ep)
|
7
|
+
def initialize(iseq, cref, outer_ep, pub_meth)
|
8
8
|
@iseq = iseq
|
9
9
|
raise if iseq.nil?
|
10
10
|
@cref = cref
|
11
11
|
@outer_ep = outer_ep
|
12
|
+
@pub_meth = pub_meth
|
12
13
|
end
|
13
14
|
|
15
|
+
attr_accessor :pub_meth
|
16
|
+
|
14
17
|
def do_send(recv, mid, aargs, caller_ep, caller_env, scratch, &ctn)
|
15
18
|
recv = recv.base_type while recv.respond_to?(:base_type)
|
16
19
|
recv = scratch.globalize_type(recv, caller_env, caller_ep)
|
@@ -27,7 +30,7 @@ module TypeProf
|
|
27
30
|
|
28
31
|
nctx = Context.new(@iseq, @cref, mid)
|
29
32
|
callee_ep = ExecutionPoint.new(nctx, 0, @outer_ep)
|
30
|
-
nenv = Env.new(StaticEnv.new(recv, blk_ty, false), locals, [], Utils::HashWrapper.new({}))
|
33
|
+
nenv = Env.new(StaticEnv.new(recv, blk_ty, false, true), locals, [], Utils::HashWrapper.new({}))
|
31
34
|
alloc_site = AllocationSite.new(callee_ep)
|
32
35
|
locals.each_with_index do |ty, i|
|
33
36
|
alloc_site2 = alloc_site.add_id(i)
|
@@ -87,7 +90,7 @@ module TypeProf
|
|
87
90
|
callee_ep = ExecutionPoint.new(ctx, 0, nil)
|
88
91
|
|
89
92
|
locals = [Type.nil] * @iseq.locals.size
|
90
|
-
nenv = Env.new(StaticEnv.new(recv, msig.blk_ty, false), locals, [], Utils::HashWrapper.new({}))
|
93
|
+
nenv = Env.new(StaticEnv.new(recv, msig.blk_ty, false, true), locals, [], Utils::HashWrapper.new({}))
|
91
94
|
alloc_site = AllocationSite.new(callee_ep)
|
92
95
|
idx = 0
|
93
96
|
msig.lead_tys.each_with_index do |ty, i|
|
@@ -224,7 +227,7 @@ module TypeProf
|
|
224
227
|
dummy_ep = ExecutionPoint.new(dummy_ctx, -1, caller_ep)
|
225
228
|
s_recv = recv
|
226
229
|
s_recv = s_recv.base_type while s_recv.respond_to?(:base_type)
|
227
|
-
dummy_env = Env.new(StaticEnv.new(s_recv, msig.blk_ty, false), [], [], Utils::HashWrapper.new({}))
|
230
|
+
dummy_env = Env.new(StaticEnv.new(s_recv, msig.blk_ty, false, true), [], [], Utils::HashWrapper.new({}))
|
228
231
|
if msig.blk_ty.is_a?(Type::Proc)
|
229
232
|
scratch.add_callsite!(dummy_ctx, caller_ep, ncaller_env, &ctn)
|
230
233
|
bsig = msig.blk_ty.block_body.msig
|
data/lib/typeprof/type.rb
CHANGED
@@ -435,17 +435,17 @@ module TypeProf
|
|
435
435
|
end
|
436
436
|
|
437
437
|
class Class < Type # or Module
|
438
|
-
def initialize(kind, idx, type_params, superclass,
|
438
|
+
def initialize(kind, idx, type_params, superclass, name)
|
439
439
|
@kind = kind # :class | :module
|
440
440
|
@idx = idx
|
441
441
|
@type_params = type_params
|
442
442
|
@superclass = superclass
|
443
443
|
raise if @kind == :class && !@superclass
|
444
|
-
@superclass_type_args = superclass_type_args
|
445
444
|
@_name = name
|
446
445
|
end
|
447
446
|
|
448
|
-
attr_reader :kind, :idx, :type_params, :superclass
|
447
|
+
attr_reader :kind, :idx, :type_params, :superclass
|
448
|
+
attr_accessor :superclass_type_args
|
449
449
|
|
450
450
|
def inspect
|
451
451
|
if @_name
|
data/lib/typeprof/version.rb
CHANGED