typeprof 0.7.0 → 0.8.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.
- 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