compiler: fix an interface bug

pull/3866/head
yuyi 2020-02-27 23:31:06 +08:00 committed by GitHub
parent 1c915c3bd1
commit b580a497fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 4 deletions

View File

@ -1117,9 +1117,18 @@ fn (p mut Parser) fn_call_args(f mut Fn, generic_param_types []string) {
if t.cat == .interface_ { if t.cat == .interface_ {
// perform((Speaker) { ._object = &dog, // perform((Speaker) { ._object = &dog,
// _interface_idx = _Speaker_Dog_index }) // _interface_idx = _Speaker_Dog_index })
$if windows {
if !f.is_method {
concrete_type_name := typ.replace('*', '_ptr') concrete_type_name := typ.replace('*', '_ptr')
p.cgen.set_placeholder(ph, '($arg.typ) { ._object = &') p.cgen.set_placeholder(ph, '($arg.typ) { ._object = &')
p.gen(', /*OLD*/ ._interface_idx = _${arg.typ}_${concrete_type_name}_index} /* i. arg*/') p.gen(', /*OLD*/ ._interface_idx = _${arg.typ}_${concrete_type_name}_index} /* i. arg*/')
}
}
$else {
concrete_type_name := typ.replace('*', '_ptr')
p.cgen.set_placeholder(ph, '($arg.typ) { ._object = &')
p.gen(', /*OLD*/ ._interface_idx = _${arg.typ}_${concrete_type_name}_index} /* i. arg*/')
}
p.table.add_gen_type(arg.typ, typ) p.table.add_gen_type(arg.typ, typ)
} }
} }
@ -1706,4 +1715,3 @@ pub fn (f &Fn) str_for_error() string {
} }
return s + ')' return s + ')'
} }