Wiki

Ticket #332: ref-expando.patch

File ref-expando.patch, 24.6 KB (added by hopscc, 5 years ago)
  • Source/BackEndClr/ScanClrType.cobra

     
    2424            throw LoadReferenceException('FileNotFound', fnfe.fileName, fnfe.message) 
    2525        catch fle as System.IO.FileLoadException 
    2626            throw LoadReferenceException('FileLoadException', fle.fileName ? reference, fle.message) 
    27  
     27             
    2828    def _clrLoadReference(reference as String) as String? 
    2929        """ 
    3030        uses compiler .referenceVerbosity, _willReadDependencies 
     
    4040            rv = .referenceVerbosity 
    4141            assert not (reference.startsWith('-r') and '-r' in reference[2:]) 
    4242            couldNotFindMsg = 'Could not find file.' 
    43             if File.exists(reference) 
    44                 # try current directory 
    45                 if rv, print '"[reference]" found as file. Will _loadAssemblyFileNamed().' 
    46                 referredAss = _loadAssemblyFileNamed(reference) 
    47                 if rv, print '_loadAssemblyFileNamed() returned: [CobraCore.toTechString(referredAss)]' 
    48             else 
    49                 # TODO: the problem with -lib: in both Cobra and C# is that it has no effect on runtime, 
    50                 # you must still register the DLLs in the GAC or copy them into the same dir as the .exe 
    51                 # because the -lib: paths are not passed into executable. 
    52                 # So should Cobra copy the .dll's into the target directory (if their paths are not in MONO_PATH)? 
    53                 if rv, print 'File does not exist.' 
    54                 searchPaths = .options.getDefault('library-directory', List<of String>()) to List<of String> 
    55                 found = false 
    56                 for searchPath in searchPaths 
    57                     if rv, print 'Checking lib path: "[searchPath]"' 
    58                     combinedPath = Path.combine(searchPath, reference) 
    59                     if File.exists(combinedPath) 
    60                         if rv, print '"[reference]" found as file. Will _loadAssemblyFileNamed().' 
    61                         referredAss = _loadAssemblyFileNamed(combinedPath) 
    62                         if rv, print '_loadAssemblyFileNamed() returned: [CobraCore.toTechString(referredAss)]' 
    63                         found = true 
    64                         break 
    65                 if rv 
    66                     if searchPaths.count 
    67                         if not found, print 'Did not find "[reference]" in lib paths' 
    68                     else 
    69                         print 'No lib paths to search.' 
    70                 if not found and not reference.hasSlash 
    71                     # try system wide (GAC) 
    72                     if reference.endsWith('.dll'), reference = reference[:-4] 
    73                     if rv, print 'Will load with partial name "[reference]"' 
    74                     referredAss = _loadAssemblyWithSimpleName(reference) 
    75                     if rv, print 'Load with partial name returned: [CobraCore.toTechString(referredAss)]' 
    76                     if referredAss is nil, return couldNotFindMsg 
    77                     reference += if(referredAss.location.endsWith('.exe'), '.exe', '.dll') 
    78             if referredAss 
    79                 if _willReadDependencies # wired false in Compiler.cobra 
    80                     for dependency in referredAss.getReferencedAssemblies 
    81                         if rv 
    82                             print '>> Loading dependency: [dependency]' 
    83                             .indentPrint 
    84                             try 
    85                                 _loadAssemblyNamed(dependency) 
    86                             finally 
    87                                 .outdentPrint 
    88                                 print '<< Loading dependency: [dependency]' 
    89                         else 
    90                             _loadAssemblyNamed(dependency) 
    91                 if rv, print 'Will read assembly: [referredAss]' 
    92                 try 
    93                     _readAssembly(referredAss, reference <> 'Cobra.Core.dll') 
    94                 catch readExc as Exception 
    95                     if rv, print 'Caught exception during read assembly: [readExc]' 
    96                     throw 
    97                 if rv, print 'Did read assembly: [referredAss]' 
    98                 # reassert the preconditions. there have been bugs in the past 
    99                 assert reference.endsWith('.dll') or reference.endsWith('.exe') 
    100                 assert reference not in ['.dll', '.exe'] 
    101                 .loadedReferences.add(reference) 
    102                 if rv, print 'Returning nil (=okay) for __dotNetLoadReference("[reference]").' 
    103                 return nil 
    104             else 
     43         
     44            if .options.isSpecified('library-directory') and not .options.boolValue('_Xpanded-searchPath') 
     45                _expandSearchPaths 
     46            reference = __expandRefPath(reference) 
     47            if rv, print 'Expanded reference [reference]' 
     48                 
     49            referredAss = _searchForRef(reference, rv) 
     50            if referredAss is nil 
    10551                if rv, print 'Returning "[couldNotFindMsg]" for __dotNetLoadReference("[reference]").' 
    10652                return couldNotFindMsg 
     53                 
     54            assert referredAss 
     55            if _willReadDependencies # wired false in Compiler.cobra 
     56                for dependency in referredAss.getReferencedAssemblies 
     57                    if rv 
     58                        print '>> Loading dependency: [dependency]' 
     59                        .indentPrint 
     60                        try 
     61                            _loadAssemblyNamed(dependency) 
     62                        finally 
     63                            .outdentPrint 
     64                            print '<< Loading dependency: [dependency]' 
     65                    else 
     66                        _loadAssemblyNamed(dependency) 
     67            if rv, print 'Will read assembly: [referredAss]' 
     68            try 
     69                _readAssembly(referredAss to !, reference <> 'Cobra.Core.dll') 
     70            catch readExc as Exception 
     71                if rv, print 'Caught exception during read assembly: [readExc]' 
     72                throw 
     73            if rv, print 'Did read assembly: [referredAss]' 
     74            # reassert the preconditions. there have been bugs in the past 
     75            assert reference.endsWith('.dll') or reference.endsWith('.exe') 
     76            assert reference not in ['.dll', '.exe'] 
     77             
     78            .loadedReferences.add(reference) 
     79            if rv, print 'Returning nil (=okay) for __dotNetLoadReference("[reference]").' 
     80            return nil 
     81                 
     82             
     83    def _searchForRef(reference as String, rv as int) as Assembly? 
     84        """ 
     85        Look for assembly references ( as file or path) in 'standard' places. 
     86            1) as a file in cwd or as absolute pathname 
     87            2) as a file made from path combined with entries from library-directory settings.  
     88            3) if not a pathname, look in GAC 
     89            4) In current Framework path (framework runtime dir). 
     90        """ 
     91        #try absolute path or in cwd  
     92        referredAss = __tryLoadAssemblyFile(reference, rv) 
     93        if referredAss, return referredAss 
     94                 
     95        #try search paths 
     96        # TODO: the problem with -lib: in both Cobra and C# is that it has no effect on runtime, 
     97        # you must still register the DLLs in the GAC or copy them into the same dir as the .exe 
     98        # because the -lib: paths are not passed into executable. 
     99        # So should Cobra copy the .dll's into the target directory (if their paths are not in MONO_PATH)? 
     100        if rv, print 'File does not exist in cwd.' 
     101        searchPaths = .options.getDefault('library-directory', List<of String>()) to List<of String> 
     102        for searchPath in searchPaths 
     103            if rv, print 'Checking lib path: "[searchPath]"' 
     104            combinedPath = Path.combine(searchPath, reference) 
     105            referredAss = __tryLoadAssemblyFile(combinedPath, rv) 
     106            if referredAss, break 
     107        if rv 
     108            if searchPaths.count == 0, print 'No lib paths to search.' 
     109            else if not referredAss, print 'Did not find "[reference]" in lib paths' 
     110        if referredAss  
     111            return referredAss 
    107112 
     113        if not reference.hasSlash # no path in reference 
     114            # try system wide (GAC) 
     115            if reference.endsWith('.dll'), reference = reference[:-4] 
     116            if rv, print 'Will load with partial name "[reference]"' 
     117            referredAss = _loadAssemblyWithSimpleName(reference) 
     118            if rv, print 'Load with partial name returned: [CobraCore.toTechString(referredAss)]' 
     119            if referredAss 
     120                reference += if(referredAss.location.endsWith('.exe'), '.exe', '.dll') 
     121                return referredAss 
     122 
     123        # try in current Framework path 
     124        fmwkPath = System.Runtime.InteropServices.RuntimeEnvironment.getRuntimeDirectory 
     125        combinedPath = Path.combine(fmwkPath, reference) 
     126        if rv, print 'Checking framework path: "[combinedPath]"' 
     127        referredAss = __tryLoadAssemblyFile(combinedPath, rv) 
     128 
     129        return referredAss   
     130     
     131    def _expandSearchPaths 
     132        searchPaths = .options.getDefault('library-directory', List<of String>()) to List<of String> 
     133        expanded = List<of String>() 
     134        changed = false 
     135        for searchPath in searchPaths 
     136            esp =  __expandRefPath(searchPath) 
     137            changed = not ( esp == searchPath) 
     138            expanded.add(esp) 
     139        if changed, .options['library-directory'] = expanded 
     140        .options['_Xpanded-searchPath'] = true #so dont redo 
     141             
     142    def __expandRefPath(reference as String) as String 
     143        """Expand patterns in reference to Framework<wordWidth> and full Framework pathname.""" 
     144        ptn =  '{_FW}'   # expand to 'Framework' or 'Framework64' as in C:\Windows\Microsoft.NET\{_FW}\v4.0.30319\FileName 
     145        ptn1 = '{_FWP}'  # as in {_FWP}/FileName expands to C:\Windows\Microsoft.NET\Framework[64]\v4.0.30319/FileName 
     146        fmwkPath = System.Runtime.InteropServices.RuntimeEnvironment.getRuntimeDirectory[0:-1] # drop trailing '\' 
     147        if reference.contains(ptn) 
     148            fmwkExpand = if(fmwkPath.contains('Framework64'), 'Framework64', 'Framework') 
     149            reference = reference.before(ptn) + fmwkExpand + reference.after(ptn) 
     150        if reference.startsWith(ptn1) 
     151            reference = fmwkPath + reference.after(ptn1) 
     152        return reference     
     153         
     154    def __tryLoadAssemblyFile(path as String, rv as int) as Assembly? 
     155        if File.exists(path) 
     156            if rv, print '"[path]" found as file. Will _loadAssemblyFileNamed().' 
     157            referredAss = _loadAssemblyFileNamed(path) 
     158            if rv, print '_loadAssemblyFileNamed() returned: [CobraCore.toTechString(referredAss)]' 
     159            return referredAss 
     160        return nil 
     161         
    108162    def _loadAssemblyNamed(assName as AssemblyName) 
    109163        # to-do: retire this? 
    110164        throw Exception('not expecting this to be called') 
  • Tests/720-libraries/050-refs/032-ref-expand.cobra

     
     1# .require. dotnet 
     2# .compile-only. 
     3 
     4# testing refs and libs expansions - this is a compile test 
     5# Mods for ref usage:  
     6#    ref - 'Framework' path portion expansion for 32/64 ('Framework' or 'Framework64' 
     7# '{_FW}' expands to 'Framework' or 'Framework64' depending on current Framework platform word size 
     8 
     9@ref 'C:\Windows\Microsoft.NET\{_FW}\v4.0.30319\WPF\PresentationFramework' 
     10@ref 'C:\Windows\Microsoft.NET\{_FW}\v4.0.30319\WPF\PresentationCore' 
     11@ref 'C:\Windows\Microsoft.NET\{_FW}\v4.0.30319\WPF\WindowsBase' 
     12@ref 'System.Xaml' 
     13 
     14use System.Windows 
     15use System.Windows.Controls 
     16use System.Windows.Controls.Primitives 
     17use System.Windows.Media 
     18use System.Windows.Threading 
     19 
     20 
     21class MainWindow inherits Window 
     22 
     23    cue init 
     24        base.init 
     25        .title = 'Ref Test using WPF' 
     26        panel = StackPanel() 
     27        .content = panel 
     28        button = Button(content='Click me.', tag='KLIK!') 
     29        listen button.click, ref .buttonClicked 
     30        panel.children.add(button) 
     31 
     32    def buttonClicked(sender, ev as RoutedEventArgs ) 
     33        sender.content = '(Clicked)' 
     34 
     35 
     36class Program 
     37 
     38    def main has STAThread 
     39        Program().run 
     40     
     41    def run 
     42        app = Application() 
     43        listen app.dispatcherUnhandledException, ref .dispatcherUnhandledException 
     44        # change/remove test to see/interact with GUI 
     45        if false 
     46            app.run(MainWindow()) 
     47 
     48    def dispatcherUnhandledException(sender, args as DispatcherUnhandledExceptionEventArgs) 
     49        msg = 'Exception: ' + args.exception.message 
     50        MessageBox.show(msg, 'Unhandled Exception', MessageBoxButton.OK) 
     51        args.handled = true 
  • Tests/720-libraries/050-refs/034-ref-expand.cobra

     
     1# .require. dotnet 
     2# .compile-only. 
     3 
     4# testing refs and libs expansions - this is a compile test 
     5# Mods for ref usage:  
     6#    ref - 'Framework' path portion expansion for 32/64 ('Framework' or 'Framework64' 
     7# '{_FWP}' expands to full (current) absolute Framework path 
     8# '{_FW}' expands to 'Framework' or 'Framework64' depending on current Framework platform word size 
     9# mixed combos 
     10 
     11@ref '{_FWP}\WPF\PresentationFramework' 
     12@ref '{_FWP}\WPF\PresentationCore' 
     13@ref 'C:\Windows\Microsoft.NET\{_FW}\v4.0.30319\WPF\WindowsBase' 
     14@ref 'System.Xaml' 
     15 
     16use System.Windows 
     17use System.Windows.Controls 
     18use System.Windows.Controls.Primitives 
     19use System.Windows.Media 
     20use System.Windows.Threading 
     21 
     22 
     23class MainWindow inherits Window 
     24 
     25    cue init 
     26        base.init 
     27        .title = 'Ref Test using WPF' 
     28        panel = StackPanel() 
     29        .content = panel 
     30        button = Button(content='Click me.', tag='KLIK!') 
     31        listen button.click, ref .buttonClicked 
     32        panel.children.add(button) 
     33 
     34    def buttonClicked(sender, ev as RoutedEventArgs ) 
     35        sender.content = '(Clicked)' 
     36 
     37 
     38class Program 
     39 
     40    def main has STAThread 
     41        Program().run 
     42     
     43    def run 
     44        app = Application() 
     45        listen app.dispatcherUnhandledException, ref .dispatcherUnhandledException 
     46        # change/remove test to see/interact with GUI 
     47        if false 
     48            app.run(MainWindow()) 
     49 
     50    def dispatcherUnhandledException(sender, args as DispatcherUnhandledExceptionEventArgs) 
     51        msg = 'Exception: ' + args.exception.message 
     52        MessageBox.show(msg, 'Unhandled Exception', MessageBoxButton.OK) 
     53        args.handled = true 
  • Tests/720-libraries/050-refs/036-ref-expand.cobra

     
     1# .require. dotnet 
     2# .compile-only. 
     3 
     4# testing refs and libs expansions - this is a compile test 
     5# Mods for ref usage:  
     6#    ref - 'Framework' path portion expansion for 32/64 ('Framework' or 'Framework64' 
     7# '{_FWP}' expands to full (current) absolute Framework path 
     8# '{_FW}' expands to 'Framework' or 'Framework64' depending on current Framework platform word size 
     9# mixed combos refs and libs 
     10 
     11@args -lib:'{_FWP}\WPF' 
     12 
     13@ref 'PresentationFramework' 
     14@ref '{_FWP}\WPF\PresentationCore' 
     15@ref 'C:\Windows\Microsoft.NET\{_FW}\v4.0.30319\WPF\WindowsBase' 
     16@ref 'System.Xaml' 
     17 
     18use System.Windows 
     19use System.Windows.Controls 
     20use System.Windows.Controls.Primitives 
     21use System.Windows.Media 
     22use System.Windows.Threading 
     23 
     24 
     25class MainWindow inherits Window 
     26 
     27    cue init 
     28        base.init 
     29        .title = 'Ref Test using WPF' 
     30        panel = StackPanel() 
     31        .content = panel 
     32        button = Button(content='Click me.', tag='KLIK!') 
     33        listen button.click, ref .buttonClicked 
     34        panel.children.add(button) 
     35 
     36    def buttonClicked(sender, ev as RoutedEventArgs ) 
     37        sender.content = '(Clicked)' 
     38 
     39 
     40class Program 
     41 
     42    def main has STAThread 
     43        Program().run 
     44     
     45    def run 
     46        app = Application() 
     47        listen app.dispatcherUnhandledException, ref .dispatcherUnhandledException 
     48        # change/remove test to see/interact with GUI 
     49        if false 
     50            app.run(MainWindow()) 
     51 
     52    def dispatcherUnhandledException(sender, args as DispatcherUnhandledExceptionEventArgs) 
     53        msg = 'Exception: ' + args.exception.message 
     54        MessageBox.show(msg, 'Unhandled Exception', MessageBoxButton.OK) 
     55        args.handled = true 
  • Tests/720-libraries/050-refs/038-ref-expand.cobra

     
     1# .require. dotnet 
     2# .compile-only. 
     3 
     4# testing refs and libs expansions - this is a compile test 
     5# Mods for ref usage:  
     6#    ref - 'Framework' path portion expansion for 32/64 ('Framework' or 'Framework64' 
     7# '{_FWP}' expands to full (current) absolute Framework path 
     8# '{_FW}' expands to 'Framework' or 'Framework64' depending on current Framework platform word size 
     9# mixed combos refs and libs 
     10 
     11@args -lib:'C:\Windows\Microsoft.NET\{_FW}\v4.0.30319\WPF' 
     12 
     13@ref 'PresentationFramework' 
     14@ref 'C:\Windows\Microsoft.NET\{_FW}\v4.0.30319\WPF\PresentationCore' 
     15@ref '{_FWP}\WPF\WindowsBase' 
     16@ref 'System.Xaml' 
     17 
     18use System.Windows 
     19use System.Windows.Controls 
     20use System.Windows.Controls.Primitives 
     21use System.Windows.Media 
     22use System.Windows.Threading 
     23 
     24 
     25class MainWindow inherits Window 
     26 
     27    cue init 
     28        base.init 
     29        .title = 'Ref Test using WPF' 
     30        panel = StackPanel() 
     31        .content = panel 
     32        button = Button(content='Click me.', tag='KLIK!') 
     33        listen button.click, ref .buttonClicked 
     34        panel.children.add(button) 
     35 
     36    def buttonClicked(sender, ev as RoutedEventArgs ) 
     37        sender.content = '(Clicked)' 
     38 
     39 
     40class Program 
     41 
     42    def main has STAThread 
     43        Program().run 
     44     
     45    def run 
     46        app = Application() 
     47        listen app.dispatcherUnhandledException, ref .dispatcherUnhandledException 
     48        # change/remove test to see/interact with GUI 
     49        if false 
     50            app.run(MainWindow()) 
     51 
     52    def dispatcherUnhandledException(sender, args as DispatcherUnhandledExceptionEventArgs) 
     53        msg = 'Exception: ' + args.exception.message 
     54        MessageBox.show(msg, 'Unhandled Exception', MessageBoxButton.OK) 
     55        args.handled = true 
  • Tests/720-libraries/050-refs/020-lib-expand.cobra

     
     1# .require. dotnet 
     2# .compile-only. 
     3 
     4# testing refs and libs expansions - this is a compile test 
     5# Mods for ref usage:  
     6#    lib - full current FrameWorkPath expansion 
     7# '{_FWP}' expands to full (current) absolute Framework path 
     8 
     9@args -lib:'{_FWP}\WPF' 
     10 
     11@ref 'PresentationFramework' 
     12@ref 'PresentationCore' 
     13@ref 'WindowsBase' 
     14@ref 'System.Xaml' 
     15 
     16use System.Windows 
     17use System.Windows.Controls 
     18use System.Windows.Controls.Primitives 
     19use System.Windows.Media 
     20use System.Windows.Threading 
     21 
     22 
     23class MainWindow inherits Window 
     24 
     25    cue init 
     26        base.init 
     27        .title = 'Ref Test using WPF' 
     28        panel = StackPanel() 
     29        .content = panel 
     30        button = Button(content='Click me.', tag='KLIK!') 
     31        listen button.click, ref .buttonClicked 
     32        panel.children.add(button) 
     33 
     34    def buttonClicked(sender, ev as RoutedEventArgs ) 
     35        sender.content = '(Clicked)' 
     36 
     37 
     38class Program 
     39 
     40    def main has STAThread 
     41        Program().run 
     42     
     43    def run 
     44        app = Application() 
     45        listen app.dispatcherUnhandledException, ref .dispatcherUnhandledException 
     46        # change/remove test to see/interact with GUI 
     47        if false 
     48            app.run(MainWindow()) 
     49 
     50    def dispatcherUnhandledException(sender, args as DispatcherUnhandledExceptionEventArgs) 
     51        msg = 'Exception: ' + args.exception.message 
     52        MessageBox.show(msg, 'Unhandled Exception', MessageBoxButton.OK) 
     53        args.handled = true 
  • Tests/720-libraries/050-refs/010-fmwk-insert.cobra

     
     1# .require. dotnet 
     2# .compile-only. 
     3 
     4# testing refs and libs expansions - this is a compile test 
     5# Mods for ref usage:  
     6#    add current framework path to places to look in for assemblies 
     7 
     8 
     9@ref 'WPF\PresentationFramework' 
     10@ref 'WPF\PresentationCore' 
     11@ref 'WPF\WindowsBase' 
     12@ref 'System.Xaml' 
     13 
     14use System.Windows 
     15use System.Windows.Controls 
     16use System.Windows.Controls.Primitives 
     17use System.Windows.Media 
     18use System.Windows.Threading 
     19 
     20 
     21class MainWindow inherits Window 
     22 
     23    cue init 
     24        base.init 
     25        .title = 'Ref Test using WPF' 
     26        panel = StackPanel() 
     27        .content = panel 
     28        button = Button(content='Click me.', tag='KLIK!') 
     29        listen button.click, ref .buttonClicked 
     30        panel.children.add(button) 
     31 
     32    def buttonClicked(sender, ev as RoutedEventArgs ) 
     33        sender.content = '(Clicked)' 
     34 
     35 
     36class Program 
     37 
     38    def main has STAThread 
     39        Program().run 
     40     
     41    def run 
     42        app = Application() 
     43        listen app.dispatcherUnhandledException, ref .dispatcherUnhandledException 
     44        # change/remove test to see/interact with GUI 
     45        if false 
     46            app.run(MainWindow()) 
     47 
     48    def dispatcherUnhandledException(sender, args as DispatcherUnhandledExceptionEventArgs) 
     49        msg = 'Exception: ' + args.exception.message 
     50        MessageBox.show(msg, 'Unhandled Exception', MessageBoxButton.OK) 
     51        args.handled = true 
  • Tests/720-libraries/050-refs/022-lib-expand.cobra

     
     1# .require. dotnet 
     2# .compile-only. 
     3 
     4# testing refs and libs expansions - this is a compile test 
     5# Mods for ref usage:  
     6#    lib - 'Framework' path portion expansion for 32/64 ('Framework' or 'Framework64' 
     7# '{_FW}' expands to 'Framework' or 'Framework64' depending on current Framework platform word size 
     8 
     9@args -lib:'C:\Windows\Microsoft.NET\{_FW}\v4.0.30319\WPF' 
     10 
     11@ref 'PresentationFramework' 
     12@ref 'PresentationCore' 
     13@ref 'WindowsBase' 
     14@ref 'System.Xaml' 
     15 
     16use System.Windows 
     17use System.Windows.Controls 
     18use System.Windows.Controls.Primitives 
     19use System.Windows.Media 
     20use System.Windows.Threading 
     21 
     22 
     23class MainWindow inherits Window 
     24 
     25    cue init 
     26        base.init 
     27        .title = 'Ref Test using WPF' 
     28        panel = StackPanel() 
     29        .content = panel 
     30        button = Button(content='Click me.', tag='KLIK!') 
     31        listen button.click, ref .buttonClicked 
     32        panel.children.add(button) 
     33 
     34    def buttonClicked(sender, ev as RoutedEventArgs ) 
     35        sender.content = '(Clicked)' 
     36 
     37 
     38class Program 
     39 
     40    def main has STAThread 
     41        Program().run 
     42     
     43    def run 
     44        app = Application() 
     45        listen app.dispatcherUnhandledException, ref .dispatcherUnhandledException 
     46        # change/remove test to see/interact with GUI 
     47        if false 
     48            app.run(MainWindow()) 
     49 
     50    def dispatcherUnhandledException(sender, args as DispatcherUnhandledExceptionEventArgs) 
     51        msg = 'Exception: ' + args.exception.message 
     52        MessageBox.show(msg, 'Unhandled Exception', MessageBoxButton.OK) 
     53        args.handled = true 
  • Tests/720-libraries/050-refs/030-ref-expand.cobra

     
     1# .require. dotnet 
     2# .compile-only. 
     3 
     4# testing refs and libs expansions - this is a compile test 
     5# Mods for ref usage:  
     6#    ref - full current FrameWorkPath expansion 
     7# '{_FWP}' expands to full (current) absolute Framework path 
     8 
     9 
     10@ref '{_FWP}\WPF\PresentationFramework' 
     11@ref '{_FWP}\WPF\PresentationCore' 
     12@ref '{_FWP}\WPF\WindowsBase' 
     13@ref 'System.Xaml' 
     14 
     15use System.Windows 
     16use System.Windows.Controls 
     17use System.Windows.Controls.Primitives 
     18use System.Windows.Media 
     19use System.Windows.Threading 
     20 
     21 
     22class MainWindow inherits Window 
     23 
     24    cue init 
     25        base.init 
     26        .title = 'Ref Test using WPF' 
     27        panel = StackPanel() 
     28        .content = panel 
     29        button = Button(content='Click me.', tag='KLIK!') 
     30        listen button.click, ref .buttonClicked 
     31        panel.children.add(button) 
     32 
     33    def buttonClicked(sender, ev as RoutedEventArgs ) 
     34        sender.content = '(Clicked)' 
     35 
     36 
     37class Program 
     38 
     39    def main has STAThread 
     40        Program().run 
     41     
     42    def run 
     43        app = Application() 
     44        listen app.dispatcherUnhandledException, ref .dispatcherUnhandledException 
     45        # change/remove test to see/interact with GUI 
     46        if false 
     47            app.run(MainWindow()) 
     48 
     49    def dispatcherUnhandledException(sender, args as DispatcherUnhandledExceptionEventArgs) 
     50        msg = 'Exception: ' + args.exception.message 
     51        MessageBox.show(msg, 'Unhandled Exception', MessageBoxButton.OK) 
     52        args.handled = true 
  • Tests/720-libraries/100-microsoft/200-wpf.cobra

     
    11# .require. dotnet 
    22# .compile-only. 
    33 
    4 @ref 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll' 
    5 @ref 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationCore.dll' 
    6 @ref 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\WindowsBase.dll' 
     4#@ref 'C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.dll' 
     5#@ref 'C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll' 
     6#@ref 'C:\\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll' 
     7 
     8#@ref '{_FWP}\WPF\PresentationFramework.dll' 
     9#@ref '{_FWP}\WPF\PresentationCore.dll' 
     10#@ref '{_FWP}\WPF\WindowsBase.dll' 
    711@ref 'System.Xaml' 
    812 
    913use System.Windows 
  • HowTo/382-WPF.cobra

     
    
     
    66See also: Samples/Notepad.cobra which uses WPF. 
    77""" 
    88 
    9 @args -lib:'C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF' 
     9@args -lib:'C:\Windows\Microsoft.NET\{_FW}\v4.0.30319\WPF' 
    1010 
    1111@ref 'PresentationFramework' 
    1212@ref 'PresentationCore'