diff --git a/basis/windows/com/com-tests.factor b/basis/windows/com/com-tests.factor index f0b4eadb9f..fdc48adfbe 100644 --- a/basis/windows/com/com-tests.factor +++ b/basis/windows/com/com-tests.factor @@ -16,6 +16,9 @@ COM-INTERFACE: IUnrelated IUnknown {b06ac3f4-30e4-406b-a7cd-c29cead4552c} int xPlus ( int y ) int xMulAdd ( int mul, int add ) ; +COM-INTERFACE: ISelfReferential IUnknown {d4f45bf8-f720-4701-a09d-e8e341981121} + ISelfReferential* selfReference ( ) ; + { GUID: {216fb341-0eb2-44b1-8edb-60b76e353abc} } [ ISimple-iid ] unit-test { GUID: {9620ecec-8438-423b-bb14-86f835aa40dd} } [ IInherited-iid ] unit-test { GUID: {00000000-0000-0000-C000-000000000046} } [ IUnknown-iid ] unit-test diff --git a/basis/windows/com/syntax/syntax.factor b/basis/windows/com/syntax/syntax.factor index 7e93a6e9f8..5230d9497e 100644 --- a/basis/windows/com/syntax/syntax.factor +++ b/basis/windows/com/syntax/syntax.factor @@ -3,6 +3,7 @@ effects kernel windows.ole32 parser lexer splitting grouping sequences namespaces assocs quotations generalizations accessors words macros alien.syntax fry arrays layouts math classes.struct windows.kernel32 ; +FROM: alien.parser.private => return-type-name ; IN: windows.com.syntax > 1array ] if ] bi* + [ dup void? [ drop { } ] [ return-type-name 1array ] if ] bi* ; : (define-word-for-function) ( function interface n -- ) @@ -83,17 +84,16 @@ ERROR: no-com-interface interface ; : define-words-for-com-interface ( definition -- ) [ [ (iid-word) ] [ iid>> 1quotation ] bi (( -- iid )) define-declared ] - [ word>> void* swap typedef ] [ dup family-tree-functions [ (define-word-for-function) ] with each-index - ] - tri ; + ] bi ; PRIVATE> SYNTAX: COM-INTERFACE: CREATE-C-TYPE + void* over typedef scan-object find-com-interface-definition scan string>guid parse-com-functions