Opened 10 years ago

Closed 9 years ago

Last modified 9 years ago

#205 closed defect (fixed)

JSS logic for resolving methods a little wonky (could use better diagnostics on why resolution has failed)

Reported by: Mark Evenson Owned by: Mark Evenson
Priority: major Milestone: 1.1.0
Component: libraries Version: 1.0.1
Keywords: jss method-resolution Cc:
Parent Tickets:

Description

Jonathan P. Bona is working with Alan Ruttenberg to port LSW from JSS 1 to JSS 3:

I'm working with Alan Ruttenberg to port LSW from the old version of
JSS to the JSS that is now part of abcl-contrib.

We've run into the following bug when using with-constant-signature:

; these first two work fine:
(#"substring" "some string" 2 4)  ; "me"
(#"substring" "some string" 2)     ; "me string"

; and so does this
(with-constant-signature ((substring "substring")) (substring "some
string" 2 4))   ; "me"

; but this breaks:
(with-constant-signature ((substring "substring")) (substring "some string" 2))
; Wrong number of arguments for public java.lang.String
java.lang.String.substring(int,int): expected 2, got 1
;   [Condition of type PROGRAM-ERROR]


A problem seems to be in jss::invoke-find-method, which is finding the
two argument version of java.lang.String.substring no matter how many
arguments its given:

(jss::invoke-find-method "substring" "this is a string" '(1))  ;
should return the java.lang.String.substring method with one int arg
; #<method public java.lang.String java.lang.String.substring(int,int)>

(jss::invoke-find-method "substring" "this is a string" '(1 2) )
; #<method public java.lang.String java.lang.String.substring(int,int)>

(jss::invoke-find-method "substring" "this is a string" '(1 2 3 4 5 6
7 8) )  ; should be an error
; #<method public java.lang.String java.lang.String.substring(int,int)

Change History (2)

comment:1 Changed 9 years ago by Mark Evenson

Resolution: fixed
Status: newclosed

comment:2 Changed 9 years ago by Mark Evenson

See r13937.

Note: See TracTickets for help on using tickets.