finished the initial variadic arguments handling work

This commit is contained in:
hyunghwan.chung
2016-12-14 07:18:01 +00:00
parent bcaf4e5e1e
commit 45694df56b
8 changed files with 134 additions and 51 deletions

View File

@ -88,19 +88,29 @@ block context...
^self.method
}
#method varArgCount
#method vargCount
{
^self basicSize - self class specNumInstVars - self.ntmprs
}
#method vargAt: index
{
^self basicAt: (index + self class specNumInstVars + self.ntmprs)
}
}
#class(#pointer) BlockContext(Context)
{
#dcl nargs source home origin.
#method varArgCount
#method vargCount
{
^self.home varArgCount
^self.home vargCount
}
#method vargAt: index
{
^self.home vargAt: index
}
#method fork

View File

@ -146,10 +146,36 @@ procecure call is treated as if it is a unary message...
'Beautiful life' dump.
].
thisContext varArgCount dump.
thisContext varArgCount (10, 20) dump.
self varg_test (10, 20, 30, 40, 50) dump.
self varg_test2 (10, 20, 30, 40, 50) dump.
self varg_test3 (10, 20, 30, 40, 50) dump.
thisContext vargCount dump.
thisContext vargCount dump.
}
#method(#class) varg_test()
{
0 to: (thisContext vargCount - 1) do: [:k |
(thisContext vargAt: k) dump.
].
^999
}
#method(#class) varg_test2(a,b,c)
{
0 to: (thisContext vargCount - 1) do: [:k |
(thisContext vargAt: k) dump.
].
^a
}
#method(#class) varg_test3(a,b,c,d,e,f)
{
0 to: (thisContext vargCount - 1) do: [:k |
(thisContext vargAt: k) dump.
].
## ^b * 100
^f
}
}
#extend MyObject