Merge: Basic Memory Profiler
authorJean Privat <jean@pryen.org>
Fri, 24 Jun 2016 19:19:04 +0000 (15:19 -0400)
committerJean Privat <jean@pryen.org>
Fri, 24 Jun 2016 19:19:04 +0000 (15:19 -0400)
Here a proof of concept of a basic memory profiler for Nit.
The approach is an option `--trace-memory` that generate a logger with the rest of the code.
Each allocation event produce a line in an time-stamped log file.

When compiling nitc with nitc, the generated log is 300MB. Quite big but manageable.
There is not a lot of optimizations, we let the libc cache the writing of the log.
So there is an overhead.

without `--trace-memory`:
* real 0m5.721s
* user 0m7.216s

with it
* real  0m8.730s (+52%, beause IO I think)
* user 0m9.600s (+33%)

To process the log file, a autonomous tool `memplot` is provided that is made of a nit converter to csv and a R plot script.
There is not a lot of usability, configuration is done by hacking the source code :)

Here a result for the nitc compilation

![memory](https://cloud.githubusercontent.com/assets/135828/16327063/245d273c-399a-11e6-82d3-950db85f7326.png)

The PR is divided into 3 parts:

* preparation of the infrastructure in the compiler (agnostic)
* extension of nitc that refines methods to add the logger
* the quick and dirty memplot tool

Pull-Request: #2200
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>

92 files changed:
contrib/benitlux/src/client/base.nit
contrib/benitlux/src/client/features/checkins.nit
contrib/benitlux/src/client/features/debug.nit
contrib/benitlux/src/client/features/push.nit
contrib/benitlux/src/client/ios.nit
contrib/benitlux/src/client/views/beer_views.nit
contrib/benitlux/src/client/views/home_views.nit
contrib/benitlux/src/client/views/social_views.nit
contrib/benitlux/src/client/views/user_views.nit
contrib/nitcc/src/autom.nit
contrib/nitcc/src/nitcc.sablecc
contrib/nitcc/src/nitcc_parser_gen.nit
contrib/nitcc/src/re2nfa.nit
contrib/nitcc/tests/lexer-prefixes.sablecc [new file with mode: 0644]
contrib/nitcc/tests/sav/lexer-prefixes.input.res [new file with mode: 0644]
contrib/opportunity/src/opportunity_controller.nit
contrib/opportunity/src/opportunity_model.nit
contrib/tnitter/src/tnitter_app.nit
examples/calculator/src/calculator.nit
examples/calculator/src/scientific_calculator.nit
lib/android/dalvik.nit
lib/android/wifi.nit
lib/app/README.md
lib/app/examples/.gitignore [new file with mode: 0644]
lib/app/examples/Makefile [new file with mode: 0644]
lib/app/examples/http_request_example.nit [new file with mode: 0644]
lib/app/http_request.nit
lib/app/ui.nit
lib/dot/dot.nit [new file with mode: 0644]
lib/dot/exemples/clusters.nit [new file with mode: 0644]
lib/dot/exemples/hello.nit [new file with mode: 0644]
lib/dot/exemples/undirected_clusters.nit [new file with mode: 0644]
lib/dot/package.ini [new file with mode: 0644]
lib/java/collections.nit
lib/java/ffi_support.nit [moved from lib/java/base.nit with 94% similarity]
lib/java/io.nit
lib/java/java.nit
lib/jvm.nit
lib/libevent.nit
share/nitweb/directives/entity/namespace.html [new file with mode: 0644]
share/nitweb/index.html
share/nitweb/javascripts/docdown.js [new file with mode: 0644]
share/nitweb/javascripts/entities.js
share/nitweb/javascripts/model.js
share/nitweb/javascripts/nitweb.js
share/nitweb/stylesheets/nitweb.css
share/nitweb/views/class.html
share/nitweb/views/classdef.html
share/nitweb/views/doc.html [new file with mode: 0644]
share/nitweb/views/docdown.html [new file with mode: 0644]
share/nitweb/views/group.html
share/nitweb/views/module.html
share/nitweb/views/package.html
share/nitweb/views/propdef.html
share/nitweb/views/property.html
src/doc/doc_commands.nit
src/doc/html_templates/html_model.nit
src/doc/html_templates/model_html.nit [moved from src/web/model_html.nit with 100% similarity]
src/examples/nitlight_as_a_service.nit
src/examples/test_loader.nit [new file with mode: 0644]
src/highlight.nit
src/loader.nit
src/model/model.nit
src/model/model_collect.nit
src/nitlight.nit
src/nitweb.nit
src/test_highlight.nit
src/web/api_docdown.nit [new file with mode: 0644]
src/web/api_graph.nit [new file with mode: 0644]
src/web/model_api.nit
src/web/web.nit
src/web/web_actions.nit [deleted file]
src/web/web_base.nit
src/web/web_views.nit [deleted file]
tests/sav/nitlight_args1.res
tests/sav/test_highlight_args1.res
tests/sav/test_loader.res [new file with mode: 0644]
tests/sav/test_loader_args1.res [new file with mode: 0644]
tests/sav/test_loader_args2.res [new file with mode: 0644]
tests/sav/test_loader_args3.res [new file with mode: 0644]
tests/sav/test_loader_args4.res [new file with mode: 0644]
tests/sav/test_loader_args5.res [new file with mode: 0644]
tests/sav/test_loader_args6.res [new file with mode: 0644]
tests/sav/test_loader_args7.res [new file with mode: 0644]
tests/sav/test_loader_args8.res [new file with mode: 0644]
tests/sav/test_loader_args9.res [new file with mode: 0644]
tests/sublib/bar/bar.nit [new file with mode: 0644]
tests/sublib/bar/foo.nit [new file with mode: 0644]
tests/sublib/foo.nit [new file with mode: 0644]
tests/sublib/packages.ini [new file with mode: 0644]
tests/test_jvm.nit
tests/test_loader.args [new file with mode: 0644]

index 438a125..7cfde72 100644 (file)
@@ -90,9 +90,9 @@ end
 class BenitluxHttpRequest
        super AsyncHttpRequest
 
-       redef fun rest_server_uri do return benitlux_rest_server_uri
+       redef fun uri_root do return benitlux_rest_server_uri
 
-       redef var rest_action
+       redef var uri_tail
 
        redef fun on_fail(error)
        do
@@ -104,7 +104,7 @@ class BenitluxHttpRequest
                        # This could be a deserialization error,
                        # it may be related to an outdated client.
                        # Report to user.
-                       print_error "Request Error: {rest_server_uri / rest_action} with {error}"
+                       print_error "Request Error: {uri} with {error}"
                        app.feedback "Request Error: {error}"
                end
        end
@@ -134,7 +134,7 @@ end
 class WindowHttpRequest
        super BenitluxHttpRequest
 
-       autoinit window, rest_action
+       autoinit window, uri_tail
 
        # Type of the related `window`
        type W: Window
index 3be087e..6131d98 100644 (file)
@@ -109,7 +109,7 @@ end
 class MenuHttpRequest
        super BenitluxHttpRequest
 
-       redef fun on_load(data)
+       redef fun on_load(data, status)
        do
                if not data isa Array[BeerAndRatings] then
                        on_fail new Error("Server sent unexpected data {data or else "null"}")
index ae7be3c..e34fcc2 100644 (file)
@@ -24,7 +24,7 @@ redef class UserWindow
        private var layout_debug = new VerticalLayout(parent=layout)
 
        private var lbl_debug_title = new Label(parent=layout_debug,
-               text="Debug options".t)
+               text="Debug options".t, size=1.5)
 
        private var but_test_notif = new Button(parent=layout_debug,
                text="Test notifications".t)
@@ -38,15 +38,6 @@ redef class UserWindow
        private var but_test_menu = new Button(parent=layout_debug,
                text="Test menu diff".t)
 
-       init
-       do
-               lbl_debug_title.size = 1.5
-
-               for c in [but_test_notif, but_test_checkin, but_test_checkout, but_test_menu] do
-                       c.observers.add self
-               end
-       end
-
        redef fun on_event(event)
        do
                super
index 3006616..62b8fc2 100644 (file)
@@ -68,7 +68,7 @@ class PushHttpRequest
                t.start
        end
 
-       redef fun on_load(data)
+       redef fun on_load(data, status)
        do
                if app.user == null then return
 
@@ -180,7 +180,7 @@ redef class UserWindow
        private var layout_push_options = new VerticalLayout(parent=layout)
 
        private var lbl_push_options_title = new Label(parent=layout_push_options,
-               text="Notifications options".t)
+               text="Notifications options".t, size=1.5)
 
        private var chk_notify_on_new_beers = new CheckBox(parent=layout_push_options,
                text="Notify when there are new beers".t)
@@ -194,14 +194,9 @@ redef class UserWindow
 
        init
        do
-               lbl_push_options_title.size = 1.5
                chk_notify_on_new_beers.is_checked = app.notify_on_new_beers
                chk_notify_menu_daily.is_checked = app.notify_menu_daily
                chk_notify_on_checkins.is_checked = app.notify_on_checkins
-
-               for c in [chk_notify_menu_daily, chk_notify_on_new_beers, chk_notify_on_checkins] do
-                       c.observers.add self
-               end
        end
 
        redef fun on_event(event)
index 9601202..f8d99a2 100644 (file)
@@ -27,7 +27,6 @@ redef class HomeWindow
        do
                title = "Benitlux"
                update_checkin_text
-               checkin_button.observers.add self
        end
 
        # TODO hide when not logged in
index 54ad9e9..59ae555 100644 (file)
@@ -63,7 +63,6 @@ class BeerView
                for i in [1..5] do
                        var but = new StarButton(beer_info.beer, i, i <= rating, parent=l_stars)
                        but.size = 1.5
-                       but.observers.add self
                        star_buttons.add but
                end
        end
@@ -219,7 +218,7 @@ end
 class ReviewAction
        super WindowHttpRequest
 
-       redef fun on_load(res)
+       redef fun on_load(res, status)
        do
                if intercept_error(res) then return
        end
@@ -231,7 +230,7 @@ class ListBeersAction
 
        redef type W: BeersWindow
 
-       redef fun on_load(beers)
+       redef fun on_load(beers, status)
        do
                window.layout.remove window.list_beers
                window.list_beers = new ListLayout(parent=window.layout)
index c991f3c..d9f2483 100644 (file)
@@ -79,13 +79,6 @@ class HomeWindow
        #private var news_button = new Button(parent=news_header, text="Open website") # TODO
        private var news_label = new Label(parent=layout_news, text="Bière en cask le jeudi!")
 
-       init
-       do
-               for c in [but_login, but_preferences, beer_button, social_button] do
-                       c.observers.add self
-               end
-       end
-
        redef fun on_resume do refresh
 
        # Refresh content of this page
@@ -150,7 +143,7 @@ class ListDiffAction
 
        redef type W: HomeWindow
 
-       redef fun on_load(beers)
+       redef fun on_load(beers, status)
        do
                window.layout_beers.remove window.beer_list
                window.beer_list = new VerticalLayout(parent=window.layout_beers)
@@ -181,7 +174,7 @@ class HomeListPeopleAction
 
        redef type W: HomeWindow
 
-       redef fun on_load(users)
+       redef fun on_load(users, status)
        do
                window.layout_social.remove window.social_list
                window.social_list = new VerticalLayout(parent=window.layout_social)
@@ -200,7 +193,7 @@ class CheckTokenAction
 
        redef type W: HomeWindow
 
-       redef fun on_load(res) do intercept_error(res)
+       redef fun on_load(res, status) do intercept_error(res)
 end
 
 # Today's date as a `String`
index 35cb6bd..f9d5b5f 100644 (file)
@@ -36,10 +36,6 @@ class SocialWindow
 
        init
        do
-               for c in [but_search, but_followed, but_followers] do
-                       c.observers.add self
-               end
-
                # Load friends and suggestions
                (new ListUsersAction(self, "rest/friends?token={app.token}&n=16")).start
        end
@@ -108,7 +104,6 @@ class PeopleView
                        # Show unfollow button if not on the home screen
                        if not home_window_mode or not user_and_following.following then
                                var but = new FollowButton(user.id, user_and_following.following, user_and_following.followed, parent=layout_top_line)
-                               but.observers.add self
                        end
                end
 
@@ -160,7 +155,7 @@ class ListUsersAction
 
        init do affected_views.add_all([window.but_search, window.but_followed, window.but_followers])
 
-       redef fun on_load(users)
+       redef fun on_load(users, status)
        do
                window.layout.remove window.list_search
                window.list_search = new ListLayout(parent=window.layout)
@@ -179,7 +174,7 @@ class FollowAction
        private var button: FollowButton
        init do affected_views.add(button)
 
-       redef fun on_load(res)
+       redef fun on_load(res, status)
        do
                if intercept_error(res) then return
        end
index b69b1db..e485d4b 100644 (file)
@@ -60,11 +60,7 @@ class UserWindow
                but_logout.enabled = app.user != null
        end
 
-       init
-       do
-               but_logout.observers.add self
-               refresh
-       end
+       init do refresh
 
        redef fun on_event(event)
        do
@@ -128,13 +124,6 @@ class SignupWindow
 
        private var but_signup = new Button(parent=layout_register, text="Signup".t)
 
-       init
-       do
-               for c in [but_login, but_signup] do
-                       c.observers.add self
-               end
-       end
-
        redef fun on_event(event)
        do
                if debug then print "BenitluxWindow::on_event {event}"
@@ -194,7 +183,7 @@ class LoginOrSignupAction
 
        init do affected_views.add_all([window.but_login, window.but_signup])
 
-       redef fun on_load(res)
+       redef fun on_load(res, status)
        do
                if intercept_error(res) then return
 
index 6971e7c..ac69b3b 100644 (file)
@@ -360,8 +360,8 @@ class Automaton
 
                # Remove their transitions
                for s in bads do
-                       for t in s.ins do t.delete
-                       for t in s.outs do t.delete
+                       for t in s.ins.to_a do t.delete
+                       for t in s.outs.to_a do t.delete
                end
 
                # Keep only the good stuff
@@ -373,14 +373,18 @@ class Automaton
        # REQUIRE: self is a DFA
        fun to_minimal_dfa: Automaton
        do
+               assert_valid
+
                trim
 
+               # Graph of known distinct states.
                var distincts = new HashMap[State, Set[State]]
                for s in states do
                        distincts[s] = new HashSet[State]
                end
 
-               # split accept states
+               # split accept states.
+               # An accept state is distinct with a non accept state.
                for s1 in states do
                        for s2 in states do
                                if distincts[s1].has(s2) then continue
@@ -390,7 +394,7 @@ class Automaton
                                        distincts[s2].add(s1)
                                        continue
                                end
-                               if tags[s1] != tags[s2] then
+                               if tags.get_or_null(s1) != tags.get_or_null(s2) then
                                        distincts[s1].add(s2)
                                        distincts[s2].add(s1)
                                        continue
@@ -398,24 +402,36 @@ class Automaton
                        end
                end
 
+               # Fixed point algorithm.
+               # * Get 2 states s1 and s2 not yet distinguished.
+               # * Get a symbol w.
+               # * If s1.trans(w) and s2.trans(w) are distinguished, then
+               #   distinguish s1 and s2.
                var changed = true
-               var ints = new Array[Int]
+               var ints = new Array[Int] # List of symbols to check
                while changed do
                        changed = false
                        for s1 in states do for s2 in states do
                                if distincts[s1].has(s2) then continue
+
+                               # The transitions use intervals. Therefore, for the states s1 and s2,
+                               # we need to check only the meaningful symbols. They are the `first`
+                               # symbol of each interval and the first one after the interval (`last+1`).
                                ints.clear
+                               # Check only `s1`; `s2` will be checked later when s1 and s2 are switched.
                                for t in s1.outs do
                                        var sym = t.symbol
                                        assert sym != null
                                        ints.add sym.first
                                        var l = sym.last
-                                       if l != null then ints.add l
+                                       if l != null then ints.add l + 1
                                end
+
+                               # Check each symbol
                                for i in ints do
                                        var ds1 = s1.trans(i)
                                        var ds2 = s2.trans(i)
-                                       if ds1 == null and ds2 == null then continue
+                                       if ds1 == ds2 then continue
                                        if ds1 != null and ds2 != null and not distincts[ds1].has(ds2) then continue
                                        distincts[s1].add(s2)
                                        distincts[s2].add(s1)
@@ -425,6 +441,8 @@ class Automaton
                        end
                end
 
+               # We need to unify not-distinguished states.
+               # Just add an epsilon-transition and DFAize the automaton.
                for s1 in states do for s2 in states do
                        if distincts[s1].has(s2) then continue
                        s1.add_trans(s2, null)
@@ -433,6 +451,21 @@ class Automaton
                return to_dfa
        end
 
+       # Assert that `self` is a valid automaton or abort
+       fun assert_valid
+       do
+               assert states.has(start)
+               assert states.has_all(accept)
+               for s in states do
+                       for t in s.outs do assert states.has(t.to)
+                       for t in s.ins do assert states.has(t.from)
+               end
+               assert states.has_all(tags.keys)
+               for t, ss in retrotags do
+                       assert states.has_all(ss)
+               end
+       end
+
        # Produce a graphvis file for the automaton
        fun to_dot(filepath: String)
        do
@@ -498,6 +531,8 @@ class Automaton
        # note: the DFA is not minimized.
        fun to_dfa: Automaton
        do
+               assert_valid
+
                trim
 
                var dfa = new Automaton.empty
index 18d52cc..d435c77 100644 (file)
@@ -64,6 +64,7 @@ re3 {-> re} =
        {plus:} re3 '+' |
        {shortest:} 'Shortest' '(' re ')' |
        {longest:} 'Longest' '(' re ')' |
+       {prefixes:} 'Prefixes' '(' re ')' |
        {id:} id |
        {par:} '(' re ')' |
        {class:} text '.' '.' text |
index bf3d57b..bfbdbb5 100644 (file)
@@ -85,6 +85,7 @@ var t_and = new Token("and")
 var t_except = new Token("except")
 var t_shortest = new Token("shortest")
 var t_longest = new Token("longest")
+var t_prefixes = new Token("prefixes")
 var t_ch_dec = new Token("ch_dec")
 var t_ch_hex = new Token("ch_hex")
 g.tokens.add_all([t_opar,
@@ -111,6 +112,7 @@ g.tokens.add_all([t_opar,
        t_except,
        t_shortest,
        t_longest,
+       t_prefixes,
        t_ch_dec,
        t_ch_hex])
 
@@ -139,6 +141,7 @@ p_re3.new_alt("re_ques", p_re3, t_ques)
 p_re3.new_alt("re_plus", p_re3, t_plus)
 p_re3.new_alt("re_shortest", t_shortest, t_opar, p_re, t_cpar)
 p_re3.new_alt("re_longest", t_longest, t_opar, p_re, t_cpar)
+p_re3.new_alt("re_prefixes", t_prefixes, t_opar, p_re, t_cpar)
 p_re3.new_alt("re_par", t_opar, p_re, t_cpar)
 p_re3.new_alt("re_class", p_text, t_dot, t_dot, p_text)
 p_re3.new_alt("re_openclass", p_text, t_dot, t_dot, t_dot)
index d523e51..12cd600 100644 (file)
@@ -173,6 +173,16 @@ redef class Nre_longest
        end
 end
 
+redef class Nre_prefixes
+       redef fun make_rfa
+       do
+               var a = children[2].make_rfa
+               a.trim
+               a.accept.add_all a.states
+               return a
+       end
+end
+
 redef class Nre_conc
        redef fun make_rfa
        do
diff --git a/contrib/nitcc/tests/lexer-prefixes.sablecc b/contrib/nitcc/tests/lexer-prefixes.sablecc
new file mode 100644 (file)
index 0000000..9e38697
--- /dev/null
@@ -0,0 +1,13 @@
+Grammar x;
+
+Lexer
+    m = 'abcd' | 'x'* 'y'+ 'z'?;
+    pm = Prefixes(m) Except '';
+    err = ('a'..'z') Except pm;
+
+blank = #10 | #13 | #32;
+Parser
+Ignored blank;
+
+    s = p+;
+    p = pm | err;
diff --git a/contrib/nitcc/tests/sav/lexer-prefixes.input.res b/contrib/nitcc/tests/sav/lexer-prefixes.input.res
new file mode 100644 (file)
index 0000000..108c10a
--- /dev/null
@@ -0,0 +1,52 @@
+Start
+  s
+    Nodes[Np]
+      p_0
+        pm@(1:1-1:2)='a'
+      p_1
+        err@(1:3-1:4)='b'
+      p_0
+        pm@(1:5-1:7)='ab'
+      p_0
+        pm@(1:8-1:11)='abc'
+      p_0
+        pm@(1:12-1:16)='abcd'
+      p_0
+        pm@(1:17-1:21)='abcd'
+      p_1
+        err@(1:21-1:22)='e'
+      p_0
+        pm@(1:23-1:24)='a'
+      p_0
+        pm@(1:24-1:26)='ab'
+      p_1
+        err@(1:26-1:27)='b'
+      p_1
+        err@(1:27-1:28)='c'
+      p_1
+        err@(1:28-1:29)='c'
+      p_1
+        err@(1:29-1:30)='d'
+      p_1
+        err@(1:30-1:31)='d'
+      p_0
+        pm@(2:1-2:2)='x'
+      p_0
+        pm@(2:3-2:4)='y'
+      p_1
+        err@(2:5-2:6)='z'
+      p_0
+        pm@(2:7-2:10)='xyz'
+      p_0
+        pm@(2:11-2:12)='x'
+      p_1
+        err@(2:12-2:13)='z'
+      p_0
+        pm@(2:14-2:16)='xy'
+      p_0
+        pm@(2:17-2:19)='yz'
+      p_0
+        pm@(2:20-2:25)='xxyyz'
+      p_1
+        err@(2:25-2:26)='z'
+  Eof@(3:1-3:1)=''
index 26a4ef6..214c843 100644 (file)
@@ -41,7 +41,6 @@ class OpportunityWelcome
        super OpportunityAction
 
        redef fun answer(request, url) do
-               print "Received request for {url}"
                var get = request.get_args
                var rq = url.split("/")
                if rq.has("meetup_create") then
@@ -89,18 +88,22 @@ class OpportunityWelcome
                                rsp.body = meetpage.write_to_string
                                return rsp
                        end
-                       if not meet.commit(db) then
+
+                       var success = meet.commit(db)
+                       if not success then
                                db.close
-                               var rsp = new HttpResponse(200)
+                               var rsp = new HttpResponse(500)
                                var meetpage = new MeetupCreationPage
                                meetpage.meet = meet
                                meetpage.ans = ansset
-                               meetpage.error = """<p>Could not create Meetup.</p>
-                               <p>Hmm, that's embarassing, the database indicates that your meetup already exists.</p>
-                               <p>If this is not a duplicated submission, please contact the mainainers of the website, you might have found a bug !</p>"""
+                               meetpage.error = """
+<p>Failed to create event</p>
+<p>This is a server side error, it has been logged.
+   You may still want to contact the maintainers of this website.</p>"""
                                rsp.body = meetpage.write_to_string
                                return rsp
                        end
+
                        for v in ansset do
                                var ans = new Answer(v)
                                ans.meetup = meet
@@ -134,7 +137,6 @@ class OpportunityRESTAction
        super OpportunityAction
 
        redef fun answer(request, uri) do
-               print "Received REST request from {uri}"
                var req = uri.split("/")
                if req.has("people") then
                        return (new OpportunityPeopleREST).answer(request, uri)
index cc72f23..b6f8f4b 100644 (file)
@@ -32,25 +32,25 @@ class OpportunityDB
        # Creates the tables and triggers for Opportunity (SQLite3 DB)
        fun create_db do
                assert create_table("IF NOT EXISTS meetups (id CHAR(40) PRIMARY KEY, name TEXT, date TEXT, place TEXT, answer_mode INTEGER DEFAULT 0);") else
-                       print error or else "?"
+                       print_error error or else "?"
                end
                assert create_table("IF NOT EXISTS people(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, surname TEXT);") else
-                       print error or else "?"
+                       print_error error or else "?"
                end
                assert create_table("IF NOT EXISTS answers(id INTEGER PRIMARY KEY AUTOINCREMENT, meetup_id CHAR(40), name TEXT, FOREIGN KEY(meetup_id) REFERENCES meetups(id));") else
-                       print error or else "?"
+                       print_error error or else "?"
                end
                assert create_table("IF NOT EXISTS part_answers(id_part INTEGER, id_ans INTEGER, value INTEGER, FOREIGN KEY(id_part) REFERENCES people(id), FOREIGN KEY(id_ans) REFERENCES answers(id));") else
-                       print error or else "?"
+                       print_error error or else "?"
                end
                #NOTE: The following triggers could be replaced by ON DELETE CASCADE clauses
                # Thing is, SQLite does not seem to support those operations (well, not by default, it seems
                # we must re-compile the lib to support it. So, well, let's just create triggers heh.
                assert execute("CREATE TRIGGER IF NOT EXISTS answers_clean AFTER DELETE ON meetups BEGIN DELETE FROM answers WHERE answers.meetup_id=OLD.id;END;") else
-                       print error or else "?"
+                       print_error error or else "?"
                end
                assert execute("CREATE TRIGGER IF NOT EXISTS ans_clean AFTER DELETE ON answers BEGIN DELETE FROM part_answers WHERE OLD.id=part_answers.id_ans;END;") else
-                       print error or else "?"
+                       print_error error or else "?"
                end
                assert execute("CREATE TRIGGER IF NOT EXISTS ppl_clean AFTER DELETE ON people BEGIN DELETE FROM part_answers WHERE OLD.id=part_answers.id_part;END;")
        end
@@ -88,12 +88,12 @@ class OpportunityDB
        fun change_answer(pid: Int, ansid: Int, resp: Int): Bool do
                var p = find_people_by_id(pid)
                if p == null then
-                       print "Error while updating answer {ansid}:{pid}"
+                       print_error "Opportunity error while updating answer {ansid}:{pid}"
                        return false
                end
                var a = find_answer_by_id(ansid)
                if a == null then
-                       print "Error while updating answer {ansid}:{pid}"
+                       print_error "Opportunity error while updating answer {ansid}:{pid}"
                        return false
                end
                p.answers[a] = resp
@@ -107,8 +107,8 @@ class OpportunityDB
        fun remove_people_by_id(id: Int): Bool do
                var rq = execute("DELETE FROM people WHERE id = {id};")
                if not rq then
-                       print "Cannot delete people {id}"
-                       print error or else "Unknown error"
+                       print_error "Opportunity error deleting people {id}"
+                       print_error error or else "Unknown error"
                        return false
                end
                return true
@@ -166,15 +166,15 @@ class People
        redef fun commit(db) do
                if id == -1 then
                        if not db.execute("INSERT INTO people (name,surname) VALUES ({name.html_escape.to_sql_string}, {surname.html_escape.to_sql_string});") then
-                               print "Error while adding people {self}"
-                               print db.error or else "Unknown error"
+                               print_error "Opportunity error while adding people {self}"
+                               print_error db.error or else "Unknown error"
                                return false
                        end
                        id = db.last_insert_rowid
                else
                        if not db.execute("UPDATE people SET name={name.html_escape.to_sql_string}, surname={surname.html_escape.to_sql_string} WHERE ID={id};") then
-                               print "Error while updating people {self}"
-                               print db.error or else "Unknown error"
+                               print_error "Opportunity error while updating people {self}"
+                               print_error db.error or else "Unknown error"
                                return false
                        end
                end
@@ -184,15 +184,15 @@ class People
                        var s = db.select("* FROM part_answers WHERE id_part={id} AND id_ans={i.id}")
                        if s != null and s.iterator.is_ok then
                                if not db.execute("UPDATE part_answers SET value={j} WHERE id_part={id} AND id_ans={i.id};") then
-                                       print "Error while updating part_answers {id}|{i.id} = {j}"
-                                       print db.error or else "Unknown error"
+                                       print_error "Opportunity error while updating part_answers {id}|{i.id} = {j}"
+                                       print_error db.error or else "Unknown error"
                                        return false
                                end
                                continue
                        end
                        if not db.execute("INSERT INTO part_answers(id_part, id_ans, value) VALUES ({id},{i.id},{val});") then
-                               print("Error while adding part_answers {id}|{i.id}|{j}")
-                               print db.error or else "Unknown error"
+                               print_error "Opportunity error while adding part_answers {id}|{i.id}|{j}"
+                               print_error db.error or else "Unknown error"
                                return false
                        end
                end
@@ -249,8 +249,8 @@ class Meetup
                        var time = get_time
                        var tmpid = (name + date + place + time.to_s).sha1.hexdigest
                        if not db.execute("INSERT INTO meetups (id, name, date, place, answer_mode) VALUES({tmpid.to_sql_string}, {name.html_escape.to_sql_string}, {date.html_escape.to_sql_string}, {place.html_escape.to_sql_string}, {answer_mode});") then
-                               print "Error recording entry Meetup {self}"
-                               print db.error or else "Null error"
+                               print_error "Opportunity error recording entry Meetup {self}"
+                               print_error db.error or else "Unknown error"
                                return false
                        end
                        id = tmpid
@@ -260,9 +260,7 @@ class Meetup
                end
        end
 
-       redef fun to_s do
-               return "Event : {name}\nWhen : {date}\nWhere : {place}"
-       end
+       redef fun to_s do return "Event: {name}, date: {date}, place: {place}"
 end
 
 # An answer linked to a Meetup in the database
@@ -332,21 +330,21 @@ class Answer
                if m == null then return false
                if m.id == "" then
                        if not m.commit(db) then
-                               print "Error when creating meetup {m}"
+                               print_error "Opportunity error when creating meetup {m}"
                                return false
                        end
                end
                if id == -1 then
                        if not db.execute("INSERT INTO answers (name, meetup_id) VALUES({name.html_escape.to_sql_string}, {m.id.to_sql_string});") then
-                               print "Cannot create {self} in database"
-                               print db.error or else "Unknown error"
+                               print_error "Opportunity error creating {self} in database"
+                               print_error db.error or else "Unknown error"
                                return false
                        end
                        id = db.last_insert_rowid
                else
                        if not db.execute("UPDATE answers SET name=({name.html_escape.to_sql_string}) WHERE meetup_id={m.id.to_sql_string};") then
-                               print "Error updating {self} in database"
-                               print db.error or else "Unknown error"
+                               print_error "Opportunity error updating {self} in database"
+                               print_error db.error or else "Unknown error"
                                return false
                        end
                end
index 7a47218..cf1d162 100644 (file)
@@ -100,9 +100,9 @@ abstract class AsyncTnitterRequest
 
        private var window: TnitterWindow
 
-       redef fun rest_server_uri do return tnitter_server_uri
+       redef fun uri_root do return tnitter_server_uri
 
-       redef var rest_action
+       redef var uri_tail
 
        # Should this request be delayed by `request_delay_on_error` seconds?
        fun after_error(value: Bool) is autoinit do if value then delay = request_delay_on_error
@@ -120,11 +120,11 @@ end
 class ListPostRequest
        super AsyncTnitterRequest
 
-       redef fun on_load(posts)
+       redef fun on_load(posts, status)
        do
                # Deal with server-side errors
                if posts isa Error then
-                       print_error "Server Error: '{posts.message}' from '{rest_server_uri / rest_action}'"
+                       print_error "Server Error: '{posts.message}' from '{uri}'"
                        return
                end
 
@@ -141,7 +141,7 @@ class ListPostRequest
 
        redef fun on_fail(error)
        do
-               print "Warning: Request {rest_server_uri/rest_action} failed with {error}"
+               print "Warning: Request {uri} failed with {error}"
                window.request_full_list_on_error
        end
 end
index c9db316..3b89ec7 100644 (file)
@@ -14,7 +14,7 @@
 
 # Portable calculator UI
 module calculator is
-app_name "app.nit Calc."
+       app_name "app.nit Calc."
        app_version(0, 1, git_revision)
        app_namespace "org.nitlanguage.calculator"
 
@@ -75,7 +75,6 @@ class CalculatorWindow
 
                        for op in row do
                                var but = new Button(parent=row_layout, text=op)
-                               but.observers.add self
                                buttons[op] = but
                        end
                end
index c22e44e..b050aa3 100644 (file)
@@ -30,7 +30,6 @@ redef class CalculatorWindow
 
                        for op in row do
                                var but = new Button(parent=row_layout, text=op)
-                               but.observers.add self
                                buttons[op] = but
                        end
                end
index 486d140..b1dae81 100644 (file)
@@ -29,11 +29,8 @@ redef class App
        fun native_context: NativeContext do return native_activity
 end
 
-extern class JavaClassLoader in "Java" `{java.lang.ClassLoader`}
-       super JavaObject
-end
-
 redef class Sys
+
        # We cannot create a JVM on Android
        #
        # This method is not reachable on this platform anyway.
@@ -43,7 +40,9 @@ redef class Sys
        redef fun jni_env do return jvm.attach_current_thread
 
        private var class_loader: nullable JavaObject = null
+
        private var class_loader_method: nullable JMethodID = null
+
        redef fun load_jclass(name)
        do
                var class_loader = self.class_loader
index 1cc68bb..19ef541 100644 (file)
@@ -146,13 +146,13 @@ extern class NativeScanResult in "Java" `{ android.net.wifi.ScanResult `}
 end
 
 # Java list of `NativeScanResult`
-extern class NativeListOfScanResult in "Java" `{ java.util.List `}
+extern class NativeListOfScanResult in "Java" `{ java.util.List<android.net.wifi.ScanResult> `}
 
        # Number of elements in this list
        fun length: Int in "Java" `{ return self.size();`}
 
        # Element at `index`
        fun [](index: Int): NativeScanResult in "Java" `{
-               return ((java.util.List<android.net.wifi.ScanResult>)self).get((int)index);
+               return self.get((int)index);
        `}
 end
index 0d2d24c..d48d0b5 100644 (file)
@@ -128,7 +128,8 @@ end
 The module `app::http_request` provides services to execute asynchronous HTTP request.
 The class `AsyncHttpRequest` hides the complex parallel logic and
 lets the user implement methods acting only on the UI thread.
-See the documentation of `AsyncHttpRequest` for more information.
+See the documentation of `AsyncHttpRequest` for more information and
+the full example at `examples/http_request_example.nit`.
 
 # Metadata annotations
 
diff --git a/lib/app/examples/.gitignore b/lib/app/examples/.gitignore
new file mode 100644 (file)
index 0000000..7f0a15f
--- /dev/null
@@ -0,0 +1,3 @@
+http_request_example
+http_request_example.apk
+http_request_example.app
diff --git a/lib/app/examples/Makefile b/lib/app/examples/Makefile
new file mode 100644 (file)
index 0000000..f516f0d
--- /dev/null
@@ -0,0 +1,10 @@
+all: http_request_example
+
+http_request_example: $(shell nitls -M http_request_example.nit linux)
+       nitc http_request_example.nit -m linux
+
+http_request_example.apk: $(shell nitls -M http_request_example.nit android)
+       nitc http_request_example.nit -m android
+
+http_request_example.app: $(shell nitls -M http_request_example.nit ios)
+       nitc http_request_example.nit -m ios
diff --git a/lib/app/examples/http_request_example.nit b/lib/app/examples/http_request_example.nit
new file mode 100644 (file)
index 0000000..65c3db8
--- /dev/null
@@ -0,0 +1,86 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Example for the `app::http_request` main service `AsyncHttpRequest`
+module http_request_example
+
+import app::ui
+import app::http_request
+
+# Simple asynchronous HTTP request to http://example.com/ displaying feedback to the window
+class MyHttpRequest
+       super AsyncHttpRequest
+
+       # Back reference to the window to show feedback to the user
+       var win: HttpRequestClientWindow
+
+       # ---
+       # Config the request
+
+       redef fun uri do return "http://example.com/"
+       redef fun deserialize_json do return false
+
+       # ---
+       # Customize callbacks
+
+       redef fun before
+       do
+               win.label_response.text = "Sending request..."
+
+               # Disable button to prevent double requests
+               win.button_request.enabled = false
+       end
+
+       redef fun on_load(data, status)
+       do win.label_response.text = "Received response code {status} with {data.as(Text).byte_length} bytes"
+
+       redef fun on_fail(error)
+       do win.label_response.text = "Connection error: {error}"
+
+       redef fun after do win.button_request.enabled = true
+end
+
+# Simpe window with a label and a button
+class HttpRequestClientWindow
+       super Window
+
+       # Root layout
+       var layout = new VerticalLayout(parent=self)
+
+       # Button to send request
+       var button_request = new Button(parent=layout, text="Press to send HTTP request")
+
+       # Label displaying feedback to user
+       var label_response = new Label(parent=layout, text="No response yet.")
+
+       init do button_request.observers.add self
+
+       redef fun on_event(event)
+       do
+               if event isa ButtonPressEvent and event.sender == button_request then
+                       # Prepare and send request
+                       var request = new MyHttpRequest(self)
+                       request.start
+               end
+       end
+end
+
+redef class App
+       redef fun on_create
+       do
+               # Create the main window
+               push_window new HttpRequestClientWindow
+               super
+       end
+end
index 694ba33..3fc48c6 100644 (file)
@@ -30,11 +30,12 @@ end
 
 # Thread executing an HTTP request asynchronously
 #
-# The request is sent to `rest_server_uri / rest_action`.
+# The request is sent to `uri`.
+# Either `uri`, or `uri_root` and `uri_tail`, must be set in subclasses.
 #
 # If `deserialize_json`, the default behavior, the response is deserialized from JSON
 #
-# If `delay > 0.0`, sending the reqest is delayed by the given `delay` in seconds.
+# If `delay > 0.0`, sending the request is delayed by the given `delay` in seconds.
 # It can be used to delay resending a request on error.
 #
 # Four callback methods act on the main/UI thread,
@@ -43,14 +44,19 @@ end
 # * `on_load`
 # * `on_fail`
 # * `after`
-class AsyncHttpRequest
+#
+# See full example at `examples/http_request_example.nit`.
+abstract class AsyncHttpRequest
        super Thread
 
-       # Root URI of the remote server
-       fun rest_server_uri: String is abstract
+       # URI target of this request, by default it is composed of `uri_root / uri_tail`
+       fun uri: Text do return uri_root / uri_tail
+
+       # Root URI of the remote server, usually the scheme and remote host
+       fun uri_root: String is abstract
 
-       # Action, or path, for this request within the `rest_server_uri`
-       fun rest_action: String is abstract
+       # Right part of the URI, after `uri_root`, often the resource path and the query
+       fun uri_tail: String do return ""
 
        # Should the response content be deserialized from JSON?
        var deserialize_json = true is writable
@@ -69,7 +75,7 @@ class AsyncHttpRequest
                var delay = delay
                if delay > 0.0 then delay.sleep
 
-               var uri = rest_server_uri / rest_action
+               var uri = uri
 
                # Execute REST request
                var rep = uri.http_get
@@ -78,19 +84,23 @@ class AsyncHttpRequest
                        return null
                end
 
-               if not deserialize_json then
-                       app.run_on_ui_thread new RestRunnableOnLoad(self, rep)
+               if deserialize_json then
+                       # Deserialize
+                       var deserializer = new JsonDeserializer(rep.value)
+                       var res = deserializer.deserialize
+                       if deserializer.errors.not_empty then
+                               app.run_on_ui_thread new RestRunnableOnFail(self, deserializer.errors.first)
+                       else
+                               app.run_on_ui_thread new RestRunnableOnLoad(self, res, rep.code)
+                       end
+               else
+                       # Return text data
+                       app.run_on_ui_thread new RestRunnableOnLoad(self, rep.value, rep.code)
                        return null
                end
 
-               # Deserialize
-               var deserializer = new JsonDeserializer(rep.value)
-               var res = deserializer.deserialize
-               if deserializer.errors.not_empty then
-                       app.run_on_ui_thread new RestRunnableOnFail(self, deserializer.errors.first)
-               end
+               app.run_on_ui_thread new RestRunnableJoin(self)
 
-               app.run_on_ui_thread new RestRunnableOnLoad(self, res)
                return null
        end
 
@@ -103,15 +113,32 @@ class AsyncHttpRequest
        # In this case, `result` may be any deserialized object.
        #
        # Otherwise, if `not deserialize_json`, `result` contains the content of the response as a `String`.
-       fun on_load(result: nullable Object) do end
+       fun on_load(result: nullable Object, http_status_code: Int) do end
 
        # Invoked when the HTTP request has failed and no data was received or deserialization failed
-       fun on_fail(error: Error) do print_error "REST request '{rest_action}' failed with: {error}"
+       fun on_fail(error: Error) do print_error "HTTP request '{uri}' failed with: {error}"
 
        # Complete this request whether it was a success or not
        fun after do end
 end
 
+# Minimal implementation of `AsyncHttpRequest` where `uri` is an attribute
+#
+# Prints on communication errors and when the server returns an HTTP status code not in the 200s.
+#
+# ~~~
+# var request = new SimpleAsyncHttpRequest("http://example.com")
+# request.start
+# ~~~
+class SimpleAsyncHttpRequest
+       super AsyncHttpRequest
+
+       redef var uri
+
+       redef fun on_load(data, status) do if status < 200 or status >= 299
+       then print_error "HTTP request '{uri}' received HTTP status code: {status}"
+end
+
 redef class Text
        # Execute an HTTP GET request synchronously at the URI `self`
        #
@@ -139,6 +166,7 @@ class HttpRequestResult
        var maybe_code: nullable Int
 
        # The status code
+       #
        # Require: `not is_error`
        fun code: Int do return maybe_code.as(not null)
 end
@@ -155,9 +183,11 @@ private class RestRunnableOnLoad
 
        var res: nullable Object
 
+       var code: Int
+
        redef fun main
        do
-               sender_thread.on_load(res)
+               sender_thread.on_load(res, code)
                sender_thread.after
        end
 end
@@ -173,3 +203,9 @@ private class RestRunnableOnFail
                sender_thread.after
        end
 end
+
+private class RestRunnableJoin
+       super HttpRequestTask
+
+       redef fun main do sender_thread.join
+end
index 0afe7aa..996629f 100644 (file)
@@ -107,11 +107,17 @@ class Control
 
        # Direct parent `Control` in the control tree
        #
+       # The parents (direct and indirect) receive all events from `self`,
+       # like the `observers`.
+       #
        # If `null` then `self` is at the root of the tree, or not yet attached.
        var parent: nullable CompositeControl = null is private writable(set_parent)
 
        # Direct parent `Control` in the control tree
        #
+       # The parents (direct and indirect) receive all events from `self`,
+       # like the `observers`.
+       #
        # Setting `parent` calls `remove` on the old parent and `add` on the new one.
        fun parent=(parent: nullable CompositeControl)
        is autoinit     do
@@ -124,12 +130,25 @@ class Control
 
                set_parent parent
        end
+
+       # Also notify the parents (both direct and indirect)
+       redef fun notify_observers(event)
+       do
+               super
+
+               var p = parent
+               while p != null do
+                       p.on_event event
+                       p = p.parent
+               end
+       end
 end
 
 # A `Control` grouping other controls
 class CompositeControl
        super Control
 
+       # Child controls composing this control
        protected var items = new Array[Control]
 
        # Add `item` as a child of `self`
@@ -211,7 +230,7 @@ abstract class TextView
        # depending on the customization options of each platform.
        # For consistent results, it is recommended to use only on instances
        # of `Label` and `size` should be either 0.0, 0.5 or 1.0.
-       fun align=(center: nullable Float) is autoinit do end
+       fun align=(align: nullable Float) is autoinit do end
 end
 
 # A control for the user to enter custom `text`
diff --git a/lib/dot/dot.nit b/lib/dot/dot.nit
new file mode 100644 (file)
index 0000000..5f70ed3
--- /dev/null
@@ -0,0 +1,242 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Dot rendering library
+#
+# Example:
+# ~~~
+# import dot
+#
+# var graph = new DotGraph("G", "digraph")
+#
+# var hello = graph.add_node("hello")
+# var world = graph.add_node("world")
+#
+# graph.add_edge(hello, world)
+#
+# print graph.to_dot
+# ~~~
+module dot
+
+# Something that can be rendered in dot format.
+abstract class DotElement
+
+       # Element ID
+       var id: String
+
+       # Element attributes
+       var attrs = new AttributeMap
+
+       # Get attribute value for `key`
+       fun [](key: String): Object do return attrs[key]
+
+       # Set attribute `value` for `key`
+       fun []=(key: String, value: Object) do attrs[key] = value
+
+       # Render `self` to dot format
+       fun to_dot: Text do
+               var res = new Buffer
+               res.append "\"{escape_id}\" "
+               if attrs.not_empty then res.append "[{attrs.to_dot(",")}]"
+               return res.write_to_string
+       end
+
+       # Return `id.escape_to_dot`
+       fun escape_id: String do return id.escape_to_dot
+end
+
+# Map of graph/node/edge attribute that can be rendered to dot.
+class AttributeMap
+       super HashMap[String, Object]
+
+       # Render `self` to dot.
+       #
+       # Use `;` for graph attributes `separator` or `,` for node and edge attributes.
+       fun to_dot(separator: String): Text do
+               var dot = new Buffer
+               for key, value in self do
+                       dot.append "{key}=\"{value.to_s}\"{separator}"
+               end
+               return dot
+       end
+end
+
+# A Graph representation suited for dot format.
+#
+# Creating a new graph
+# ~~~
+# var graph = new DotGraph("G", "digraph")
+# graph["rankdir"] = "BT"
+# graph["ranksep"] = 0.3
+# graph["nodesep"] = 0.3
+# graph.nodes_attrs["fontname"] = "helvetica"
+# graph.edges_attrs["color"] = "gray"
+# ~~~
+#
+# Creating subgraphs
+# ~~~
+# var sub = new DotGraph("cluster_sub", "subgraph")
+# sub["label"] = "process #1"
+#
+# var a0 = sub.add_node("a0")
+# var a1 = sub.add_node("a1")
+# sub.add_edge(a0, a1)
+#
+# graph.add sub
+# ~~~
+class DotGraph
+       super DotElement
+
+       # Graph kind like `graph`, `digraph`, `subgraph`...
+       var kind: String is writable
+
+       # Nodes attributes
+       var nodes_attrs = new AttributeMap
+
+       # Edges attributes
+       var edges_attrs = new AttributeMap
+
+       # Node list by id
+       var nodes = new HashMap[String, DotElement]
+
+       # Add a node to the graph
+       #
+       # If the graph already contains a node with that ID, it will be replaced.
+       fun add(element: DotElement) do
+               nodes[element.id] = element
+       end
+
+       # Edge list
+       #
+       # There can be multiple edges between the same couple of nodes.
+       var edges = new Array[DotEdge]
+
+       # Add a new node to the graph
+       fun add_node(id: String): DotNode do
+               var node = new DotNode(id)
+               add node
+               return node
+       end
+
+       # Add an edge to the graph
+       fun add_edge(from, to: DotElement): DotEdge do
+               var edge = new DotEdge(from, to)
+               add edge
+               return edge
+       end
+
+       redef fun to_dot do
+               var dot = new Buffer
+               dot.append "{kind} \"{id}\" \{\n"
+               if attrs.not_empty then dot.append attrs.to_dot(";\n")
+               if nodes_attrs.not_empty then dot.append "node[{nodes_attrs.to_dot(",")}];\n"
+               if edges_attrs.not_empty then dot.append "edge[{edges_attrs.to_dot(",")}];\n"
+               for id, node in nodes do
+                       dot.append "{node.to_dot};\n"
+               end
+               for edge in edges do
+                       dot.append("{edge.to_dot};\n")
+               end
+               dot.append("\}")
+               return dot
+       end
+
+       # Render `self` as an SVG image
+       fun to_svg: Text do
+               var proc = new ProcessDuplex("dot", "-Tsvg")
+               var svg = proc.write_and_read(to_dot)
+               proc.close
+               proc.wait
+               return svg
+       end
+
+       # Show dot in graphviz (blocking)
+       fun show do
+               var f = new ProcessWriter("dot", "-Txlib")
+               f.write to_dot
+               f.close
+               f.wait
+       end
+end
+
+# A dot node
+#
+# Nodes can be created from scratch
+# ~~~
+# var node = new DotNode("id")
+# node["label"] = "ID"
+# ~~~
+# Then added to a graph
+# ~~~
+# var graph = new DotGraph("G", "digraph")
+# graph.add node
+# ~~~
+# Or can be created directly from an existing graph
+# ~~~
+# var node2 = graph.add_node("id2")
+# node2["label"] = "ID2"
+# ~~~
+class DotNode
+       super DotElement
+end
+
+# A dot edge that links two nodes
+#
+# Edges can be created from scratch
+# ~~~
+# var a1 = new DotNode("a1")
+# var b1 = new DotNode("b1")
+# var edge = new DotEdge(a1, b1)
+# edge["color"] = "blue"
+# ~~~
+# Then added to a graph
+# ~~~
+# var graph = new DotGraph("G", "digraph")
+# graph.add edge
+# ~~~
+# Or can be created directly from an existing graph
+# ~~~
+# var a2 = graph.add_node("a2")
+# var b2 = graph.add_node("b2")
+# var edge2 = graph.add_edge(a2, b2)
+# edge2["color"] = "red"
+# ~~~
+class DotEdge
+       super DotElement
+       autoinit from, to
+
+       # Node this edge is from
+       var from: DotElement
+
+       # Node this edge goes to
+       var to: DotElement
+
+       # Is this edge directed?
+       var directed = true is writable
+
+       redef fun id do return "{from.id}--{to.id}"
+
+       redef fun to_dot do
+               var res = new Buffer
+               res.append "\"{from.escape_id}\" "
+               if directed then
+                       res.append "->"
+               else
+                       res.append "--"
+               end
+               res.append " \"{to.escape_id}\" "
+               if attrs.not_empty then res.append "[{attrs.to_dot(",")}]"
+               return res.write_to_string
+       end
+end
diff --git a/lib/dot/exemples/clusters.nit b/lib/dot/exemples/clusters.nit
new file mode 100644 (file)
index 0000000..993d3ca
--- /dev/null
@@ -0,0 +1,72 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Example from http://www.graphviz.org/content/cluster
+
+import dot
+
+var graph = new DotGraph("G", "digraph")
+
+var cl0 = new DotGraph("cluster_0", "subgraph")
+cl0["label"] = "process #1"
+cl0["style"] = "filled"
+cl0["color"] = "lightgrey"
+cl0.nodes_attrs["style"] = "filled"
+cl0.nodes_attrs["color"] = "white"
+
+var a0 = cl0.add_node("a0")
+var a1 = cl0.add_node("a1")
+var a2 = cl0.add_node("a2")
+var a3 = cl0.add_node("a3")
+cl0.add_edge(a0, a1)
+cl0.add_edge(a1, a2)
+cl0.add_edge(a2, a3)
+
+graph.add cl0
+
+var cl1 = new DotGraph("cluster_1", "subgraph")
+cl1["label"] = "process #2"
+cl1["color"] = "blue"
+cl1.nodes_attrs["style"] = "filled"
+
+var b0 = cl1.add_node("b0")
+var b1 = cl1.add_node("b1")
+var b2 = cl1.add_node("b2")
+var b3 = cl1.add_node("b3")
+cl1.add_edge(b0, b1)
+cl1.add_edge(b1, b2)
+cl1.add_edge(b2, b3)
+
+graph.add cl1
+
+var start = graph.add_node("start")
+start["shape"] = "Mdiamond"
+
+var nend = graph.add_node("end")
+nend["shape"] = "Msquare"
+
+graph.add_edge(start, a0)
+graph.add_edge(start, b0)
+graph.add_edge(a1, b3)
+graph.add_edge(b2, a3)
+graph.add_edge(a3, a0)
+graph.add_edge(a3, nend)
+graph.add_edge(b3, nend)
+
+if args.is_empty then
+       print graph.to_dot
+       graph.show
+else
+       graph.to_dot.write_to_file args.first
+end
diff --git a/lib/dot/exemples/hello.nit b/lib/dot/exemples/hello.nit
new file mode 100644 (file)
index 0000000..645620e
--- /dev/null
@@ -0,0 +1,29 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Example from http://www.graphviz.org/content/hello
+
+import dot
+
+var graph = new DotGraph("G", "digraph")
+
+var hello = graph.add_node("hello")
+var world = graph.add_node("world")
+graph.add_edge(hello, world)
+
+if args.is_empty then
+       print graph.to_dot
+else
+       graph.to_dot.write_to_file args.first
+end
diff --git a/lib/dot/exemples/undirected_clusters.nit b/lib/dot/exemples/undirected_clusters.nit
new file mode 100644 (file)
index 0000000..4b42567
--- /dev/null
@@ -0,0 +1,48 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Example from http://www.graphviz.org/Gallery/undirected/fdpclust.html
+
+import dot
+
+var graph = new DotGraph("G", "graph")
+
+var a = new DotNode("a")
+var b = new DotNode("b")
+var c = new DotNode("c")
+var d = new DotNode("d")
+var e = new DotNode("e")
+var f = new DotNode("f")
+var g = new DotNode("g")
+
+var clA = new DotGraph("clusterA", "subgraph")
+clA.add_edge(a, b).directed = false
+graph.add clA
+
+var clB = new DotGraph("clusterB", "subgraph")
+clB.add_edge(c, d).directed = false
+clA.add clB
+
+var clC = new DotGraph("clusterC", "subgraph")
+clC.add_edge(e, g).directed = false
+graph.add clC
+
+graph.add_edge(e, d).directed = false
+graph.add_edge(f, g).directed = false
+
+if args.is_empty then
+       print graph.to_dot
+else
+       graph.to_dot.write_to_file args.first
+end
diff --git a/lib/dot/package.ini b/lib/dot/package.ini
new file mode 100644 (file)
index 0000000..6824bd6
--- /dev/null
@@ -0,0 +1,11 @@
+[package]
+name=dot
+tags=dot,graphviz,visualization,graph
+maintainer=Alexandre Terrasa <alexandre@moz-code.org>
+license=Apache-2.0
+[upstream]
+browse=https://github.com/nitlang/nit/tree/master/lib/dot/
+git=https://github.com/nitlang/nit.git
+git.directory=lib/dot/
+homepage=http://nitlanguage.org
+issues=https://github.com/nitlang/nit/issues
index 097158f..bd46a42 100644 (file)
@@ -28,7 +28,7 @@
 # ~~~
 module collections
 
-import base
+import ffi_support
 
 # Java primitive array
 #
similarity index 94%
rename from lib/java/base.nit
rename to lib/java/ffi_support.nit
index 10950a2..0a1e4bf 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Supporting services for the FFI with Java
+# Core supporting services for the FFI with Java
 #
-# This modules relies on `Sys::jvm`, `Sys::jni_env` and
-# `Sys::create_default_jvm` to get a handle on a JVM. You can adapt the
-# behavior of the FFI and services in this module by redefing
-# `Sys::create_default_jvm` and supply your own JVM object. You can manage
-# multiple java thread by switching the current environment in a redef
-# of `Sys::jni_env`, and multiple JVM using `Sys::jvm`.
-module base is
+# This module *must* be imported by modules using the Java FFI.
+# Some might prefer to import the whole `java` package as it provides
+# other useful services.
+module ffi_support is
        cflags "-I $(JAVA_HOME)/include/ -I $(JAVA_HOME)/include/linux/"
        ldflags "-L $(JNI_LIB_PATH) -ljvm"
        new_annotation extra_java_files
@@ -66,7 +63,9 @@ redef class Sys
                assert jvm != null else print "JVM creation failed"
 
                self.jvm = jvm
-               self.jni_env = builder.jni_env.as(not null)
+               assert not jvm.address_is_null
+               self.jni_env = jvm.env
+               assert not jni_env.address_is_null
        end
 
        # Get a Java class by its name from the current `jni_env`
index c13abe0..3299a9e 100644 (file)
@@ -19,7 +19,7 @@
 # This module is used by `android::assets_and_resources` and `android::audio`.
 module io
 
-import base
+import ffi_support
 
 in "Java" `{
        import java.io.File;
index 116f40d..0714c3c 100644 (file)
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Supporting services for the FFI with Java
+# Supporting services for the FFI with Java and to access Java libraries
 #
 # This modules relies on `Sys::jvm`, `Sys::jni_env` and
 # `Sys::create_default_jvm` to get a handle on a JVM. You can adapt the
 # multiple java thread by switching the current environment in a redef
 # of `Sys::jni_env`, and multiple JVM using `Sys::jvm`.
 #
-# The module `jvm` gives more control over the JVM instances and wraps
-# most of JNI functions. You can use it to further customize the behavior
-# of your code.
+# See also, the module `jvm` to control the JVM instances and access JNI functions.
+# You can use it to further customize the behavior of your code.
 module java
 
-import base
+import ffi_support
 import collections
index 379e6ec..874510c 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Java Virtual Machine services
+# Java Virtual Machine invocation API and others services from the JNI C API
+#
+# Users of this module and the Java FFI, on desktop computers, must define three environment variables:
+# * `JAVA_HOME` points to the installation folder of the target Java VM.
+#   This folder should contain the JNI header file `include/jni.h`.
+#   e.g. `/usr/lib/jvm/default-java` on Debian Jessie.
+# * `JNI_LIB_PATH` points to the folder with `libjvm.so`.
+#   e.g. `/usr/lib/jvm/default-java/jre/lib/amd64/server/` on Debian Jessie.
+# * `LD_LIBRARY_PATH` has the path to the folder with `libjvm.so`.
+#   It's the same value as `JNI_LIB_PATH` but `LD_LIBRARY_PATH` is a colon separated list
+#   which may contain other paths.
 #
 # See: http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/jniTOC.html
 module jvm is
@@ -38,17 +48,16 @@ in "C Header" `{
 # var env = builder.jni_env
 # ~~~~
 class JavaVMBuilder
-       super JniEnvRef
 
        # Version code of the JVM requested by `create_jvm`
        #
-       # Default at 0x00010002
+       # Default at 0x00010002 for `JNI_VERSION_1_2`.
        var version = 0x00010002 is writable
 
        # Additional option strings
        var options = new Array[String]
 
-       # Create the JVM and return it on success
+       # Create a JVM instance, or return `null` on error
        fun create_jvm: nullable JavaVM
        do
                var args = new JavaVMInitArgs
@@ -65,7 +74,7 @@ class JavaVMBuilder
 
                args.options = c_options
 
-               var jvm = new JavaVM(args, self)
+               var jvm = new JavaVM(args)
 
                args.free
                c_options.free
@@ -122,11 +131,12 @@ end
 
 # Represents a jni JavaVM
 extern class JavaVM `{JavaVM *`}
-       # Create the JVM, returns its handle and store the a pointer to JniEnv in `env_ref`
+       # Create the JVM
        #
-       # Unavailable on Android, where you cannot instanciate a new JVM.
-       private new(args: JavaVMInitArgs, env_ref: JniEnvRef)
-       import jni_error, JniEnvRef.jni_env=, JniEnv.as nullable `{
+       # The corresponding `JniEnv` can be obtained by calling `env`.
+       #
+       # Unavailable on some platforms, including Android where you cannot instanciate a new JVM.
+       private new(args: JavaVMInitArgs) import jni_error `{
 
        #ifdef ANDROID
                JavaVM_jni_error(NULL, "JVM creation not supported on Android", 0);
@@ -139,14 +149,12 @@ extern class JavaVM `{JavaVM *`}
 
                res = JNI_CreateJavaVM(&jvm, (void**)&env, args);
 
-               if (res != 0) {
+               if (res != JNI_OK) {
                        JavaVM_jni_error(NULL, "Could not create Java VM", res);
                        return NULL;
                }
-               else {
-                       JniEnvRef_jni_env__assign(env_ref, JniEnv_as_nullable_JniEnv(env));
-                       return jvm;
-               }
+
+               return jvm;
        `}
 
        private fun jni_error(msg: NativeString, v: Int)
@@ -155,20 +163,29 @@ extern class JavaVM `{JavaVM *`}
                abort
        end
 
+       # Unload the Java VM when the calling thread is the only remaining non-daemon attached user thread
        fun destroy `{
                (*self)->DestroyJavaVM(self);
        `}
 
+       # `JniEnv` attached to the calling thread
+       #
+       # A null pointer is returned if the calling thread is not attached to the JVM.
        fun env: JniEnv import jni_error `{
                JNIEnv *env;
                int res = (*self)->GetEnv(self, (void **)&env, JNI_VERSION_1_6);
-               if (res != JNI_OK) {
+               if (res == JNI_EDETACHED) {
+                       JavaVM_jni_error(NULL, "Requesting JNIEnv from an unattached thread", res);
+                       return NULL;
+               }
+               else if (res != JNI_OK) {
                        JavaVM_jni_error(NULL, "Could not get JNIEnv from Java VM", res);
                        return NULL;
                }
                return env;
        `}
 
+       # Attach the calling thread to the JVM and return its `JniEnv`
        fun attach_current_thread: JniEnv import jni_error `{
                JNIEnv *env;
        #ifdef ANDROID
@@ -410,11 +427,6 @@ extern class JniEnv `{JNIEnv *`}
        `}
 end
 
-# used to initialize a JavaVM
-class JniEnvRef
-       var jni_env: nullable JniEnv = null
-end
-
 # Represents a jni jclass
 extern class JClass `{jclass`}
 end
index 614f3d9..8c65323 100644 (file)
@@ -116,9 +116,23 @@ class Connection
        redef fun close
        do
                if closed then return
-               var success = native_buffer_event.destroy
-               close_requested = true
-               closed = success
+
+               var i = native_buffer_event.input_buffer
+               var o = native_buffer_event.output_buffer
+               if i.length > 0 or o.length > 0 then
+                       close_requested = true
+               else
+                       force_close
+               end
+       end
+
+       # Force closing this connection and freeing `native_buffer_event`
+       fun force_close
+       do
+               if closed then return
+
+               native_buffer_event.free
+               closed = true
        end
 
        # Callback method on a write event
@@ -149,8 +163,18 @@ class Connection
        fun event_callback(events: Int): Bool
        do
                if events & bev_event_error != 0 or events & bev_event_eof != 0 then
-                       if events & bev_event_error != 0 then print_error "Error from bufferevent"
-                       close
+                       if events & bev_event_error != 0 then
+                               var sock_err = evutil_socket_error
+                               # Ignore some normal errors and print the others for debugging
+                               if sock_err == 110 then
+                                       # Connection timed out (ETIMEDOUT)
+                               else if sock_err == 104 then
+                                       # Connection reset by peer (ECONNRESET)
+                               else
+                                       print_error "libevent error event: {evutil_socket_error_to_string(sock_err)} ({sock_err})"
+                               end
+                       end
+                       force_close
                        return true
                end
 
@@ -228,6 +252,18 @@ fun bev_event_timeout: Int `{ return BEV_EVENT_TIMEOUT; `}
 # connect operation finished.
 fun bev_event_connected: Int `{ return BEV_EVENT_CONNECTED; `}
 
+# Global error code for the last socket operation on the calling thread
+#
+# Not idempotent on all platforms.
+fun evutil_socket_error: Int `{
+       return EVUTIL_SOCKET_ERROR();
+`}
+
+# Convert an error code from `evutil_socket_error` to a string
+fun evutil_socket_error_to_string(error_code: Int): NativeString `{
+       return evutil_socket_error_to_string(error_code);
+`}
+
 # ---
 # Options that can be specified when creating a `NativeBufferEvent`
 
@@ -288,18 +324,7 @@ extern class NativeBufferEvent `{ struct bufferevent * `}
                return bufferevent_write(self, &byt, 1);
        `}
 
-       # Check if we have anything left in our buffers. If so, we set our connection to be closed
-       # on a callback. Otherwise we close it and free it right away.
-       fun destroy: Bool `{
-               struct evbuffer* out = bufferevent_get_output(self);
-               struct evbuffer* in = bufferevent_get_input(self);
-               if(evbuffer_get_length(in) > 0 || evbuffer_get_length(out) > 0) {
-                       return 0;
-               } else {
-                       bufferevent_free(self);
-                       return 1;
-               }
-       `}
+       redef fun free `{ bufferevent_free(self); `}
 
        # The output buffer associated to `self`
        fun output_buffer: OutputNativeEvBuffer `{ return bufferevent_get_output(self); `}
@@ -381,16 +406,9 @@ extern class ConnectionListener `{ struct evconnlistener * `}
 
        # Callback method on listening error
        fun error_callback do
-               var cstr = socket_error
-               sys.stderr.write "libevent error: '{cstr}'"
+               var cstr = evutil_socket_error_to_string(evutil_socket_error)
+               print_error "libevent error: '{cstr}'"
        end
-
-       # Error with sockets
-       fun socket_error: NativeString `{
-               // TODO move to Nit and maybe NativeEventBase
-               int err = EVUTIL_SOCKET_ERROR();
-               return evutil_socket_error_to_string(err);
-       `}
 end
 
 # Factory to listen on sockets and create new `Connection`
diff --git a/share/nitweb/directives/entity/namespace.html b/share/nitweb/directives/entity/namespace.html
new file mode 100644 (file)
index 0000000..6e39abf
--- /dev/null
@@ -0,0 +1,13 @@
+<span ng-if='mentity.mpackage'>
+       <entity-link mentity='mentity.mpackage' /> ::
+</span>
+<span ng-if='mentity.mmodule'>
+       <entity-link mentity='mentity.mmodule' /> ::
+</span>
+<span ng-if='mentity.intro_mclassdef'>
+       <entity-link mentity='mentity.intro_mclassdef' /> ::
+</span>
+<span ng-if='mentity.mclassdef'>
+       <entity-link mentity='mentity.mclassdef' /> ::
+</span>
+{{mentity.name}}
index 1b99a81..c615d41 100644 (file)
                        integrity='sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7'
                        crossorigin='anonymous' rel='stylesheet'>
 
+               <link href='//cdnjs.cloudflare.com/ajax/libs/angular-loading-bar/0.9.0/loading-bar.min.css'
+                       type='text/css' rel='stylesheet' media='all'>
+
+
                <link href='/stylesheets/nitweb_bootstrap.css' rel='stylesheet'>
                <link href='/stylesheets/nitweb.css' rel='stylesheet'>
        </head>
        <body>
                <nav class='navbar navbar-default navbar-fixed-top'>
                        <div class='container-fluid'>
-                               <div class='col-xs-3 navbar-header'>
-                                       <a class='navbar-brand' ng-href='/'>Nitdoc</a>
+                               <div class='col-xs-3'>
+                                       <div class='navbar-header'>
+                                               <a class='navbar-brand' ng-href='/'>Nitdoc</a>
+                                       </div>
+                                       <ul class="nav navbar-nav">
+                                               <li><a href="/docdown?edit=true">DocDown</a></li>
+                                       </ul>
                                </div>
                                <div class='col-xs-7'>
                                        <form ng-controller='SearchCtrl as searchCtrl' >
                </script>
                <script src='https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.5/angular-sanitize.js'>
                </script>
+               <script type='text/javascript'
+                       src='//cdnjs.cloudflare.com/ajax/libs/angular-loading-bar/0.9.0/loading-bar.min.js'>
+               </script>
 
                <script src='/javascripts/nitweb.js'></script>
                <script src='/javascripts/model.js'></script>
                <script src='/javascripts/entities.js'></script>
                <script src='/javascripts/ui.js'></script>
                <script src='/javascripts/index.js'></script>
+               <script src='/javascripts/docdown.js'></script>
        </body>
 </html>
diff --git a/share/nitweb/javascripts/docdown.js b/share/nitweb/javascripts/docdown.js
new file mode 100644 (file)
index 0000000..365b8c9
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2016 Alexandre Terrasa <alexandre@moz-code.org>.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+(function() {
+       angular
+               .module('docdown', ['model', 'ngSanitize'])
+
+               .controller('DocdownCtrl', ['$routeParams', '$sce', '$scope', '$location', 'DocDown', function($routeParams, $sce, $scope, $location, DocDown) {
+
+                       this.updateSnippet = function() {
+                               this.updateLink();
+                               this.updateHtml();
+                       }
+
+                       this.updateLink = function() {
+                               $scope.link = $location.protocol()+ '://' + $location.host() + ':' +
+                                       $location.port() + $location.path() + '?snippet=' +
+                                       encodeURIComponent(btoa($scope.markdown));
+                       }
+
+                       this.updateHtml = function() {
+                               DocDown.postMarkdown($scope.markdown,
+                                       function(data) {
+                                               $scope.html = $sce.trustAsHtml(data);
+                                       }, function(err) {
+                                               $scope.error = err;
+                                       });
+                       };
+
+                       this.editMode = function(isEdit) {
+                               $scope.edit = isEdit;
+                       }
+
+                       $scope.markdown = 'Type some markdown...';
+                       if($location.search().snippet) {
+                               $scope.markdown = atob($location.search().snippet);
+                       }
+                       $scope.edit = false;
+                       if($location.search().edit) {
+                               $scope.edit = Boolean($location.search().edit);
+                       }
+
+                       this.updateSnippet();
+               }])
+})();
index 9eefc9f..9333050 100644 (file)
 
 (function() {
        angular
-               .module('entities', ['ui', 'model'])
+               .module('entities', ['ngSanitize', 'ui', 'model'])
+
+               .controller('EntityCtrl', ['Model', '$routeParams', '$scope', '$sce', function(Model, $routeParams, $scope, $sce) {
+                       $scope.entityId = $routeParams.id;
 
-               .controller('EntityCtrl', ['Model', '$routeParams', '$scope', function(Model, $routeParams, $scope) {
                        this.loadEntityLinearization = function() {
                                Model.loadEntityLinearization($routeParams.id,
                                        function(data) {
                                        });
                        };
 
+                       this.loadEntityGraph = function(e) {
+                               Model.loadEntityGraph($routeParams.id,
+                                       function(data) {
+                                               $scope.graph = $sce.trustAsHtml(data);
+                                       }, function(err) {
+                                               $scope.error = err;
+                                       });
+                       };
+
                        Model.loadEntity($routeParams.id,
                                function(data) {
                                        $scope.mentity = data;
-                               }, function(err) {
-                                       $scope.error = err;
+                               }, function(message, status) {
+                                       $scope.error = {message: message, status: status};
                                });
                }])
 
                        };
                })
 
+               .directive('entityNamespace', function() {
+                       return {
+                               restrict: 'E',
+                               scope: {
+                                       mentity: '='
+                               },
+                               templateUrl: '/directives/entity/namespace.html'
+                       };
+               })
+
                .directive('entityTag', function() {
                        return {
                                restrict: 'E',
index 2144983..3accab2 100644 (file)
                                                .error(cbErr);
                                },
 
+                               loadEntityGraph: function(id, cb, cbErr) {
+                                       $http.get(apiUrl + '/graph/inheritance/' + id + '?cdepth=3')
+                                               .success(cb)
+                                               .error(cbErr);
+                               },
+
                                search: function(q, n, cb, cbErr) {
                                        $http.get(apiUrl + '/search?q=' + q + '&n=' + n)
                                                .success(cb)
                                },
                        }
                }])
+
+               .factory('DocDown', [ '$http', function($http) {
+                       return {
+                               postMarkdown: function(md, cb, cbErr) {
+                                       $http.post(apiUrl + '/docdown', md)
+                                               .success(cb)
+                                               .error(cbErr);
+                               }
+                       }
+               }])
 })();
index 93b7c3a..7fa1142 100644 (file)
  */
 
 (function() {
-       angular.module('nitweb', ['ngRoute', 'ngSanitize', 'entities', 'index'])
-
+       angular.module('nitweb', ['ngRoute', 'ngSanitize', 'angular-loading-bar', 'entities', 'docdown', 'index'])
+       .config(['cfpLoadingBarProvider', function(cfpLoadingBarProvider) {
+               cfpLoadingBarProvider.includeSpinner = false;
+       }])
        .config(function($routeProvider, $locationProvider) {
                $routeProvider
                        .when('/', {
                                controller: 'IndexCtrl',
                                controllerAs: 'indexCtrl'
                        })
-                       .when('/package/:id', {
-                               templateUrl: 'views/package.html',
-                               controller: 'EntityCtrl',
-                               controllerAs: 'entityCtrl'
-                       })
-                       .when('/group/:id', {
-                               templateUrl: 'views/group.html',
-                               controller: 'EntityCtrl',
-                               controllerAs: 'entityCtrl'
-                       })
-                       .when('/module/:id', {
-                               templateUrl: 'views/module.html',
-                               controller: 'EntityCtrl',
-                               controllerAs: 'entityCtrl'
-                       })
-                       .when('/class/:id', {
-                               templateUrl: 'views/class.html',
-                               controller: 'EntityCtrl',
-                               controllerAs: 'entityCtrl'
-                       })
-                       .when('/classdef/:id', {
-                               templateUrl: 'views/classdef.html',
-                               controller: 'EntityCtrl',
-                               controllerAs: 'entityCtrl'
-                       })
-                       .when('/property/:id', {
-                               templateUrl: 'views/property.html',
-                               controller: 'EntityCtrl',
-                               controllerAs: 'entityCtrl'
+                       .when('/docdown', {
+                               templateUrl: 'views/docdown.html',
+                               controller: 'DocdownCtrl',
+                               controllerAs: 'docdownCtrl'
                        })
-                       .when('/propdef/:id', {
-                               templateUrl: 'views/propdef.html',
+                       .when('/doc/:id', {
+                               templateUrl: 'views/doc.html',
                                controller: 'EntityCtrl',
                                controllerAs: 'entityCtrl'
                        })
index 941b5a4..9471a5d 100644 (file)
@@ -164,6 +164,12 @@ entity-list:hover .btn-filter {
        border-color: #eee;
 }
 
+/* loading bar */
+
+#loading-bar .bar {
+       background: #FF8100;
+}
+
 /* navs */
 
 .nav-tabs li { cursor: pointer; }
index 4950546..54da8af 100644 (file)
@@ -1,56 +1,61 @@
-<div class='container-fluid'>
-       <div class='page-header'>
-               <h2><entity-signature mentity='mentity.intro'/></h2>
-               <entity-link mentity='mentity.mpackage' /> :: {{mentity.name}}
-       </div>
-
-       <ul class='nav nav-tabs'>
-               <li role='presentation' class='active'>
-                       <a data-toggle='tab' data-target='#doc'>
-                               <span class='glyphicon glyphicon-book'/> Doc
-                       </a>
-               </li>
-               <li role='presentation'>
-                       <a data-toggle='tab' data-target='#all_props'>
-                               <span class='glyphicon glyphicon-tags'/> All properties
-                       </a>
-               </li>
-               <li role='presentation'>
-                       <a data-toggle='tab' role='tab' data-target='#linearization' aria-controls='linearization' ng-click='entityCtrl.loadEntityLinearization()'>
-                               <span class='glyphicon glyphicon-arrow-down'/> Linearization
-                       </a>
-               </li>
-       </ul>
+<ul class='nav nav-tabs'>
+       <li role='presentation' class='active'>
+               <a data-toggle='tab' data-target='#doc'>
+                       <span class='glyphicon glyphicon-book'/> Doc
+               </a>
+       </li>
+       <li role='presentation'>
+               <a data-toggle='tab' data-target='#graph' ng-click="entityCtrl.loadEntityGraph()">
+                       <span class='glyphicon glyphicon-object-align-vertical'/> Inheritance
+               </a>
+       </li>
+       <li role='presentation'>
+               <a data-toggle='tab' data-target='#all_props'>
+                       <span class='glyphicon glyphicon-tags'/> All properties
+               </a>
+       </li>
+       <li role='presentation'>
+               <a data-toggle='tab' role='tab' data-target='#linearization' aria-controls='linearization' ng-click='entityCtrl.loadEntityLinearization()'>
+                       <span class='glyphicon glyphicon-arrow-down'/> Linearization
+               </a>
+       </li>
+</ul>
 
-       <div class='tab-content'>
-               <div role='tabpanel' class='tab-pane fade in active' id='doc'>
-                       <entity-doc mentity='mentity.intro'/>
+<div class='tab-content'>
+       <div role='tabpanel' class='tab-pane fade in active' id='doc'>
+               <entity-doc mentity='mentity.intro'/>
 
-                       <entity-list list-title='Parents'
-                               list-entities='mentity.parents'
-                               list-object-filter='{}' />
+               <entity-list list-title='Parents'
+                       list-entities='mentity.parents'
+                       list-object-filter='{}' />
 
-                       <entity-list list-title='Constructors'
-                               list-entities='mentity.all_mproperties'
-                               list-object-filter='{is_init: true}' />
+               <entity-list list-title='Constructors'
+                       list-entities='mentity.all_mproperties'
+                       list-object-filter='{is_init: true}' />
 
-                       <entity-list list-title='Introduced properties'
-                               list-entities='mentity.intro_mproperties'
-                               list-object-filter='{is_init: "!true"}' />
+               <entity-list list-title='Introduced properties'
+                       list-entities='mentity.intro_mproperties'
+                       list-object-filter='{is_init: "!true"}' />
 
-                       <entity-list list-title='Redefined properties'
-                               list-entities='mentity.redef_mproperties'
-                               list-object-filter='{is_init: "!true"}' />
-               </div>
-               <div role='tabpanel' class='tab-pane fade' id='all_props'>
-                       <entity-list list-title='All properties' list-entities='mentity.all_mproperties'
-                               list-object-filter='{}' />
-               </div>
-               <div role='tabpanel' class='tab-pane fade' id='linearization'>
-                       <entity-linearization
-                               list-title='Class definitions'
-                               list-entities='linearization'
-                               list-focus='mentity.intro' />
+               <entity-list list-title='Redefined properties'
+                       list-entities='mentity.redef_mproperties'
+                       list-object-filter='{is_init: "!true"}' />
+       </div>
+       <div role='tabpanel' class='tab-pane fade' id='all_props'>
+               <entity-list list-title='All properties' list-entities='mentity.all_mproperties'
+                       list-object-filter='{}' />
+       </div>
+       <div role='tabpanel' class='tab-pane fade' id='linearization'>
+               <entity-linearization
+                       list-title='Class definitions'
+                       list-entities='linearization'
+                       list-focus='mentity.intro' />
+       </div>
+       <div role='tabpanel' class='tab-pane fade' id='graph'>
+               <div class='card'>
+                       <div class='card-body text-center'>
+                               <div class='graph' ng-bind-html='graph'></div>
+                       </div>
                </div>
        </div>
 </div>
index 6c5354b..f44478f 100644 (file)
@@ -1,42 +1,33 @@
-<div class='container-fluid' ng-init='entityCtrl.loadEntityLinearization()'>
-       <div class='page-header'>
-               <h2><entity-signature mentity='mentity'/></h2>
-               <entity-link mentity='mentity.mpackage' />
-               :: <entity-link mentity='mentity.mmodule' />
-               :: {{mentity.name}}
-       </div>
-
-       <ul class='nav nav-tabs' role='tablist'>
-               <li role='presentation' class='warning'>
-                       <a ng-href='{{mentity.mclass.web_url}}'>
-                               <span class='glyphicon glyphicon-chevron-left'/> Go to class
-                       </a>
-               </li>
-               <li role='presentation' class='active'>
-                       <a data-toggle='tab' role='tab' data-target='#linearization' aria-controls='linearization'>
-                               <span class='glyphicon glyphicon-arrow-down'/> Linearization
-                       </a>
-               </li>
-               <li role='presentation'>
-                       <a data-toggle='tab' data-target='#code' ng-click="entityCtrl.loadEntityCode()">
-                               <span class='glyphicon glyphicon-console'/> Code
-                       </a>
-               </li>
-       </ul>
+<ul class='nav nav-tabs' role='tablist'>
+       <li role='presentation' class='warning'>
+               <a ng-href='{{mentity.mclass.web_url}}'>
+                       <span class='glyphicon glyphicon-chevron-left'/> Go to class
+               </a>
+       </li>
+       <li role='presentation' class='active'>
+               <a data-toggle='tab' role='tab' data-target='#linearization' aria-controls='linearization'>
+                       <span class='glyphicon glyphicon-arrow-down'/> Linearization
+               </a>
+       </li>
+       <li role='presentation'>
+               <a data-toggle='tab' data-target='#code' ng-click="entityCtrl.loadEntityCode()">
+                       <span class='glyphicon glyphicon-console'/> Code
+               </a>
+       </li>
+</ul>
 
-       <div class='tab-content'>
-               <div role='tabpanel' class='tab-pane fade in active' id='linearization'>
-                       <entity-linearization
-                               list-title='Class definitions'
-                               list-entities='linearization'
-                               list-focus='mentity' />
-               </div>
-               <div role='tabpanel' class='tab-pane fade' id='code'>
-                       <div class='card'>
-                               <div class='card-body'>
-                                       <pre ng-bind-html='code' />
-                                       <entity-location mentity='mentity' />
-                               </div>
+<div class='tab-content'>
+       <div role='tabpanel' class='tab-pane fade in active' id='linearization'>
+               <entity-linearization
+                       list-title='Class definitions'
+                       list-entities='linearization'
+                       list-focus='mentity' />
+       </div>
+       <div role='tabpanel' class='tab-pane fade' id='code'>
+               <div class='card'>
+                       <div class='card-body'>
+                               <pre ng-bind-html='code' />
+                               <entity-location mentity='mentity' />
                        </div>
                </div>
        </div>
diff --git a/share/nitweb/views/doc.html b/share/nitweb/views/doc.html
new file mode 100644 (file)
index 0000000..53f8a2a
--- /dev/null
@@ -0,0 +1,39 @@
+<div class='container-fluid'>
+
+       <div ng-if='error' class='alert alert-danger' role='alert'>
+               <span class='glyphicon glyphicon-exclamation-sign' aria-hidden='true'></span>
+               <span class='sr-only'>Error:</span>
+               <span ng-switch='error.status'>
+                       <span ng-switch-when='404'>Entity <code>{{entityId}}</code> not found!</span>
+                       <span ng-switch-default>An error occured<br/>{{error.status}}: {{error.message}}</span>
+               </span>
+       </div>
+
+       <div class='page-header'>
+               <h2><entity-signature mentity='mentity' /></h2>
+               <entity-namespace mentity='mentity' />
+       </div>
+       <div ng-switch='mentity.class_name'>
+               <div ng-switch-when='MPackage'>
+                       <div ng-include src='"/views/package.html"' />
+               </div>
+               <div ng-switch-when='MGroup'>
+                       <div ng-include src='"/views/group.html"' />
+               </div>
+               <div ng-switch-when='MModule'>
+                       <div ng-include src='"/views/module.html"' />
+               </div>
+               <div ng-switch-when='MClass'>
+                       <div ng-include src='"/views/class.html"' />
+               </div>
+               <div ng-switch-when='MClassDef'>
+                       <div ng-include src='"/views/classdef.html"' />
+               </div>
+               <div ng-switch-when='MMethod' ng-switch-when='MAttribute' ng-switch-when='MVirtualTypeProp'>
+                       <div ng-include src='"/views/property.html"' />
+               </div>
+               <div ng-switch-when='MMethodDef' ng-switch-when='MAttributeDef' ng-switch-when='MVirtualTypeDef'>
+                       <div ng-include src='"/views/propdef.html"' />
+               </div>
+       </div>
+</div>
diff --git a/share/nitweb/views/docdown.html b/share/nitweb/views/docdown.html
new file mode 100644 (file)
index 0000000..75fe6df
--- /dev/null
@@ -0,0 +1,33 @@
+<div class='container-fluid'>
+       <div class='page-header'>
+               <h2>Docdown snippets</h2>
+               <p class='text-muted'>Sharable documentation snippets.</p>
+               <div class="input-group">
+                       <span ng-if='edit' class="input-group-btn">
+                               <button class='btn btn-success' ng-click='docdownCtrl.editMode(false)'>
+                                       <span class='glyphicon glyphicon-link' /> View
+                               </button>
+                       </span>
+                       <span ng-if='!edit' class="input-group-btn">
+                               <button class='btn btn-success' ng-click='docdownCtrl.editMode(true)'>
+                                       <span class='glyphicon glyphicon-edit' /> Edit
+                               </button>
+                       </span>
+                       <input class='form-control' type='text' ng-model='link' />
+               </div>
+       </div>
+       <div class='row'>
+               <div ng-show='edit' class='col-xs-6'>
+                       <div class='card'>
+                               <textarea ng-model='markdown' ng-model-options='{ debounce: 100 }' ng-change='docdownCtrl.updateSnippet()' class='form-control' rows='20'></textarea>
+                       </div>
+               </div>
+               <div ng-class='edit ? "col-xs-6" : "col-xs-12"'>
+                       <div class='card'>
+                               <div class='card-body nitdoc'>
+                                       <div ng-bind-html='html' />
+                               </div>
+                       </div>
+               </div>
+       </div>
+</div>
index ca19974..0b58963 100644 (file)
@@ -1,29 +1,33 @@
-<div class='container-fluid'>
-               <div class='page-header'>
-                       <h2><entity-signature mentity='mentity' /></h2>
-                       <entity-link mentity='mentity.mpackage' /> :: {{mentity.name}}
-               </div>
-
-               <ul class='nav nav-tabs'>
-                       <li class='active'>
-                               <a data-toggle='tab' data-target='#doc'>
-                                       <span class='glyphicon glyphicon-book'/> Doc
-                               </a>
-                       </li>
-               </ul>
+<ul class='nav nav-tabs'>
+       <li class='active'>
+               <a data-toggle='tab' data-target='#doc'>
+                       <span class='glyphicon glyphicon-book'/> Doc
+               </a>
+       </li>
+       <li role='presentation'>
+               <a data-toggle='tab' data-target='#graph' ng-click="entityCtrl.loadEntityGraph()">
+                       <span class='glyphicon glyphicon-object-align-vertical'/> Imports
+               </a>
+       </li>
+</ul>
 
-               <div class='tab-content'>
-                       <div class='tab-pane fade in active' id='doc'>
-                               <entity-doc mentity='mentity'/>
+<div class='tab-content'>
+       <div role='tabpanel' class='tab-pane fade in active' id='doc'>
+               <entity-doc mentity='mentity'/>
 
-                               <entity-list list-title='Parent group' list-entities='[mentity.parent]'
-                                       list-object-filter='{}' ng-if='mentity.parent' />
+               <entity-list list-title='Parent group' list-entities='[mentity.parent]'
+                       list-object-filter='{}' ng-if='mentity.parent' />
 
-                               <entity-list list-title='Subgroups' list-entities='mentity.mgroups'
-                                       list-object-filter='{}' />
+               <entity-list list-title='Subgroups' list-entities='mentity.mgroups'
+                       list-object-filter='{}' />
 
-                               <entity-list list-title='Modules' list-entities='mentity.mmodules'
-                                       list-object-filter='{}' />
+               <entity-list list-title='Modules' list-entities='mentity.mmodules'
+                       list-object-filter='{}' />
+       </div>
+       <div role='tabpanel' class='tab-pane fade' id='graph'>
+               <div class='card'>
+                       <div class='card-body text-center'>
+                               <div class='graph' ng-bind-html='graph'></div>
                        </div>
                </div>
        </div>
index 9a15c76..e80f9cf 100644 (file)
@@ -1,52 +1,57 @@
-<div class='container-fluid'>
-       <div class='page-header'>
-               <h2><entity-signature mentity='mentity'/></h2>
-               <entity-link mentity='mentity.mpackage' /> :: {{mentity.name}}
-       </div>
-
-       <ul class='nav nav-tabs'>
-               <li role='presentation' class='active'>
-                       <a data-toggle='tab' data-target='#doc'>
-                               <span class='glyphicon glyphicon-book'/> Doc
-                       </a>
-               </li>
-               <li role='presentation'>
-                       <a data-toggle='tab' data-target='#code' ng-click="entityCtrl.loadEntityCode()">
-                               <span class='glyphicon glyphicon-console'/> Code
-                       </a>
-               </li>
-               <li role='presentation'>
-                       <a data-toggle='tab' data-target='#defs' ng-click="entityCtrl.loadEntityDefs()">
-                               <span class='glyphicon glyphicon-asterisk'/> Class definitions
-                       </a>
-               </li>
-       </ul>
+<ul class='nav nav-tabs'>
+       <li role='presentation' class='active'>
+               <a data-toggle='tab' data-target='#doc'>
+                       <span class='glyphicon glyphicon-book'/> Doc
+               </a>
+       </li>
+       <li role='presentation'>
+               <a data-toggle='tab' data-target='#graph' ng-click="entityCtrl.loadEntityGraph()">
+                       <span class='glyphicon glyphicon-object-align-vertical'/> Imports
+               </a>
+       </li>
+       <li role='presentation'>
+               <a data-toggle='tab' data-target='#code' ng-click="entityCtrl.loadEntityCode()">
+                       <span class='glyphicon glyphicon-console'/> Code
+               </a>
+       </li>
+       <li role='presentation'>
+               <a data-toggle='tab' data-target='#defs' ng-click="entityCtrl.loadEntityDefs()">
+                       <span class='glyphicon glyphicon-asterisk'/> Class definitions
+               </a>
+       </li>
+</ul>
 
-       <div class='tab-content'>
-               <div role='tabpanel' class='tab-pane fade in active' id='doc'>
-                       <entity-doc mentity='mentity'/>
+<div class='tab-content'>
+       <div role='tabpanel' class='tab-pane fade in active' id='doc'>
+               <entity-doc mentity='mentity'/>
 
-                       <entity-list list-title='Imported modules' list-entities='mentity.imports'
-                               list-object-filter='{}' />
+               <entity-list list-title='Imported modules' list-entities='mentity.imports'
+                       list-object-filter='{}' />
 
-                       <entity-list list-title='Introduced classes' list-entities='mentity.intro_mclasses'
-                               list-object-filter='{}' />
+               <entity-list list-title='Introduced classes' list-entities='mentity.intro_mclasses'
+                       list-object-filter='{}' />
 
-                       <entity-list list-title='Class redefinitions' list-entities='mentity.redef_mclassdefs'
-                               list-object-filter='{}' />
+               <entity-list list-title='Class redefinitions' list-entities='mentity.redef_mclassdefs'
+                       list-object-filter='{}' />
 
-               </div>
-               <div class='tab-pane fade' id='code'>
-                       <div class='card'>
-                               <div class='card-body'>
-                                       <pre ng-bind-html='code' />
-                                       <entity-location mentity='mentity' />
-                               </div>
+       </div>
+       <div role='tabpanel' class='tab-pane fade' id='code'>
+               <div class='card'>
+                       <div class='card-body'>
+                               <pre ng-bind-html='code' />
+                               <entity-location mentity='mentity' />
                        </div>
                </div>
-               <div role='tabpanel' class='tab-pane fade' id='defs'>
-                       <entity-list list-title='Class definitions' list-entities='defs'
-                               list-object-filter='{}' />
+       </div>
+       <div role='tabpanel' class='tab-pane fade' id='defs'>
+               <entity-list list-title='Class definitions' list-entities='defs'
+                       list-object-filter='{}' />
+       </div>
+       <div class='tab-pane fade' id='graph'>
+               <div class='card'>
+                       <div class='card-body text-center'>
+                               <div class='graph' ng-bind-html='graph'></div>
+                       </div>
                </div>
        </div>
 </div>
index ee19aa5..32d9a2f 100644 (file)
@@ -1,22 +1,28 @@
-<div class='container-fluid'>
-       <div class='page-header'>
-               <h2><entity-signature mentity='mentity'/></h2>
-       </div>
-
-       <ul class='nav nav-tabs' role='tablist'>
-               <li role='presentation' class='active'>
-                       <a data-toggle='tab' role='tab' data-target='#doc' aria-controls="doc">
-                               <span class='glyphicon glyphicon-book'/> Doc
-                       </a>
-               </li>
-       </ul>
+<ul class='nav nav-tabs' role='tablist'>
+       <li role='presentation' class='active'>
+               <a data-toggle='tab' role='tab' data-target='#doc' aria-controls="doc">
+                       <span class='glyphicon glyphicon-book'/> Doc
+               </a>
+       </li>
+       <li role='presentation'>
+               <a data-toggle='tab' data-target='#graph' ng-click="entityCtrl.loadEntityGraph()">
+                       <span class='glyphicon glyphicon-object-align-vertical'/> Dependencies
+               </a>
+       </li>
+</ul>
 
-       <div class='tab-content'>
-               <div role='tabpanel' class='tab-pane fade in active' id='doc'>
-                       <entity-doc mentity='mentity'/>
+<div class='tab-content'>
+       <div role='tabpanel' class='tab-pane fade in active' id='doc'>
+               <entity-doc mentity='mentity'/>
 
-                       <entity-list list-title='Groups' list-entities='mentity.mgroups'
-                               list-object-filter='{}' />
+               <entity-list list-title='Groups' list-entities='mentity.mgroups'
+                       list-object-filter='{}' />
+       </div>
+       <div role='tabpanel' class='tab-pane fade' id='graph'>
+               <div class='card'>
+                       <div class='card-body text-center'>
+                               <div class='graph' ng-bind-html='graph'></div>
+                       </div>
                </div>
        </div>
 </div>
index 87b0ff3..014e820 100644 (file)
@@ -1,43 +1,33 @@
-<div class='container-fluid' ng-init='entityCtrl.loadEntityLinearization()'>
-       <div class='page-header'>
-               <h2><entity-signature mentity='mentity'/></h2>
-               <entity-link mentity='mentity.mpackage' />
-               :: <entity-link mentity='mentity.mmodule' />
-               :: <entity-link mentity='mentity.mclassdef' />
-               :: {{mentity.name}}
-       </div>
-
-       <ul class='nav nav-tabs'>
-               <li role='presentation' class='warning'>
-                       <a href='{{mentity.mproperty.web_url}}'>
-                               <span class='glyphicon glyphicon-chevron-left'/> Go to property
-                       </a>
-               </li>
-               <li role='presentation' class='active'>
-                       <a data-toggle='tab' role='tab' data-target='#linearization' aria-controls='linearization'>
-                               <span class='glyphicon glyphicon-arrow-down'/> Linearization
-                       </a>
-               </li>
-               <li role='presentation'>
-                       <a data-toggle='tab' data-target='#code' ng-click="entityCtrl.loadEntityCode()">
-                               <span class='glyphicon glyphicon-console'/> Code
-                       </a>
-               </li>
-       </ul>
+<ul class='nav nav-tabs'>
+       <li role='presentation' class='warning'>
+               <a href='{{mentity.mproperty.web_url}}'>
+                       <span class='glyphicon glyphicon-chevron-left'/> Go to property
+               </a>
+       </li>
+       <li role='presentation' class='active'>
+               <a data-toggle='tab' role='tab' data-target='#linearization' aria-controls='linearization'>
+                       <span class='glyphicon glyphicon-arrow-down'/> Linearization
+               </a>
+       </li>
+       <li role='presentation'>
+               <a data-toggle='tab' data-target='#code' ng-click="entityCtrl.loadEntityCode()">
+                       <span class='glyphicon glyphicon-console'/> Code
+               </a>
+       </li>
+</ul>
 
-       <div class='tab-content'>
-               <div role='tabpanel' class='tab-pane fade in active' id='linearization'>
-                       <entity-linearization
-                               list-title='Class definitions'
-                               list-entities='linearization'
-                               list-focus='mentity' />
-               </div>
-               <div role='tabpanel' class='tab-pane fade' id='code'>
-                       <div class='card'>
-                               <div class='card-body'>
-                                       <pre ng-bind-html='code' />
-                                       <entity-location mentity='mentity' />
-                               </div>
+<div class='tab-content'>
+       <div role='tabpanel' class='tab-pane fade in active' id='linearization'>
+               <entity-linearization
+                       list-title='Class definitions'
+                       list-entities='linearization'
+                       list-focus='mentity' />
+       </div>
+       <div role='tabpanel' class='tab-pane fade' id='code'>
+               <div class='card'>
+                       <div class='card-body'>
+                               <pre ng-bind-html='code' />
+                               <entity-location mentity='mentity' />
                        </div>
                </div>
        </div>
index fea0da7..44e439e 100644 (file)
@@ -1,34 +1,24 @@
-<div class='container-fluid'>
+<ul class='nav nav-tabs'>
+       <li role='presentation' class='active'>
+               <a data-toggle='tab' data-target='#doc'>
+                       <span class='glyphicon glyphicon-book'/> Doc
+               </a>
+       </li>
+       <li role='presentation'>
+               <a data-toggle='tab' role='tab' data-target='#linearization' aria-controls='linearization' ng-click='entityCtrl.loadEntityLinearization()'>
+                       <span class='glyphicon glyphicon-arrow-down'/> Linearization
+               </a>
+       </li>
+</ul>
 
-       <div class='page-header'>
-               <h2><entity-signature mentity='mentity.intro'/></h2>
-               <entity-link mentity='mentity.mpackage' />
-               :: <entity-link mentity='mentity.intro_mclassdef' />
-               :: {{mentity.name}}
+<div class='tab-content'>
+       <div role='tabpanel' class='tab-pane fade in active' id='doc'>
+               <entity-doc mentity='mentity.intro'/>
        </div>
-
-       <ul class='nav nav-tabs'>
-               <li role='presentation' class='active'>
-                       <a data-toggle='tab' data-target='#doc'>
-                               <span class='glyphicon glyphicon-book'/> Doc
-                       </a>
-               </li>
-               <li role='presentation'>
-                       <a data-toggle='tab' role='tab' data-target='#linearization' aria-controls='linearization' ng-click='entityCtrl.loadEntityLinearization()'>
-                               <span class='glyphicon glyphicon-arrow-down'/> Linearization
-                       </a>
-               </li>
-       </ul>
-
-       <div class='tab-content'>
-               <div role='tabpanel' class='tab-pane fade in active' id='doc'>
-                       <entity-doc mentity='mentity.intro'/>
-               </div>
-               <div role='tabpanel' class='tab-pane fade' id='linearization'>
-                       <entity-linearization
-                               list-title='Class definitions'
-                               list-entities='linearization'
-                               list-focus='mentity.intro' />
-               </div>
+       <div role='tabpanel' class='tab-pane fade' id='linearization'>
+               <entity-linearization
+                       list-title='Class definitions'
+                       list-entities='linearization'
+                       list-focus='mentity.intro' />
        </div>
 </div>
index e69bb38..1537704 100644 (file)
@@ -19,8 +19,6 @@
 # * `nitdoc` wikilinks like `[[doc: MEntity::name]]`
 module doc_commands
 
-import doc_base
-
 # A command aimed at a documentation tool like `nitdoc` or `nitx`.
 #
 # `DocCommand` are generally of the form `command: args`.
@@ -57,6 +55,8 @@ interface DocCommand
                        return new CallCommand(command_string)
                else if command_string.has_prefix("code:") then
                        return new CodeCommand(command_string)
+               else if command_string.has_prefix("graph:") then
+                       return new GraphCommand(command_string)
                end
                return new UnknownCommand(command_string)
        end
@@ -153,3 +153,11 @@ end
 class CodeCommand
        super AbstractDocCommand
 end
+
+# A `DocCommand` that display an graph for a `MEntity`.
+#
+# Syntax:
+# * `graph: MEntity::name`
+class GraphCommand
+       super AbstractDocCommand
+end
index 7623c40..b8107ee 100644 (file)
@@ -18,7 +18,7 @@ module html_model
 import doc_base
 import html_components
 import ordered_tree
-import web::model_html
+import model_html
 
 redef class MEntity
        # URL of this entity’s Nitdoc page.
index 08d6980..e117268 100644 (file)
@@ -21,9 +21,10 @@ import frontend
 import highlight
 import nitcorn
 import nitcorn::log
+import template
 
 # Fully process a content as a nit source file.
-fun hightlightcode(hl: HighlightVisitor, content: String): SourceFile
+fun hightlightcode(hl: HighlightVisitor, content: String): HLCode
 do
        # Prepare a stand-alone tool context
        var tc = new ToolContext
@@ -39,17 +40,19 @@ do
        var mb = new ModelBuilder(model, tc)
 
        # Parse the code
-       var source = new SourceFile.from_string("", content)
+       var source = new SourceFile.from_string("", content + "\n")
        var lexer = new Lexer(source)
        var parser = new Parser(lexer)
        var tree = parser.parse
 
+       var hlcode = new HLCode(hl, content, source)
+
        # Check syntax error
        var eof = tree.n_eof
        if eof isa AError then
                mb.error(eof, eof.message)
                hl.hightlight_source(source)
-               return source
+               return hlcode
        end
        var amodule = tree.n_base.as(not null)
 
@@ -60,7 +63,45 @@ do
 
        # Highlight the processed module
        hl.enter_visit(amodule)
-       return source
+       return hlcode
+end
+
+# A standalone highlighted piece of code
+class HLCode
+       # The highlighter used
+       var hl: HighlightVisitor
+
+       # The raw code source
+       var content: String
+
+       # The pseudo source-file
+       var source: SourceFile
+
+       # JavaScript code to update an existing codemirror editor.
+       fun code_mirror_update: Template
+       do
+
+               var res = new Template
+               res.add """
+       function nitmessage() {
+               editor.operation(function(){
+                       for (var i = 0; i < widgets.length; ++i)
+                             editor.removeLineWidget(widgets[i]);
+                       widgets.length = 0;
+"""
+
+               for m in source.messages do
+                       res.add """
+                       var l = document.createElement("div");
+                       l.className = "lint-error"
+                       l.innerHTML = "<span class='glyphicon glyphicon-warning-sign lint-error-icon'></span> {{{m.text.html_escape}}}";
+                       var w = editor.addLineWidget({{{m.location.line_start-1}}}, l);
+                       widgets.push(w);
+"""
+               end
+               res.add """});}"""
+               return res
+       end
 end
 
 # Nitcorn service to hightlight code
@@ -71,37 +112,100 @@ class HighlightAction
 
        redef fun answer(http_request, turi)
        do
+               var hl = new HighlightVisitor
+               var page = new Template
+
+               # There is code? Process it
                var code = http_request.post_args.get_or_null("code")
+               var hlcode = null
+               if code != null then hlcode = hightlightcode(hl, code)
+
+               if http_request.post_args.get_or_null("ajax") == "true" and hlcode != null then
+                       page.add hlcode.code_mirror_update
+                       page.add """
+                       document.getElementById("lightcode").innerHTML = "{{{hl.html.write_to_string.escape_to_c}}}";
+                       nitmessage();
+                       """
+
+                       var response = new HttpResponse(200)
+                       response.header["Content-Type"] = "application/javascript"
+                       response.body = page.write_to_string
+                       return response
+               end
 
-               var hl = new HighlightVisitor
-               var page = "<doctype html><html><head>{hl.head_content}<style>{hl.css_content} textarea \{width:100%;\}</style></head><body>"
+               page.add """
+               <!doctype html><html><head>{{{hl.head_content}}}
+               <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.16.0/codemirror.css">
+               <style>
+                       {{{hl.css_content}}}
+                       textarea {width:100%;}
+                       .lint-error {font-family: arial; font-size: 70%; background: #ffa; color: #a00; padding: 2px 5px 3px; }
+                       .lint-error-icon {color: red; padding: 0 3px; margin-right: 7px;}
+               </style></head><body>
+               """
                # Add the form+textarea
-               page += """
-               <form action="#light" method=post><textarea name=code rows=10>{{{code or else ""}}}</textarea><br><input type=submit></form>
+               page.add """
+               <form action="#light" method=post><textarea id=code name=code rows=10>{{{code or else ""}}}</textarea><br><input type=submit></form>
                """
 
-               if code != null then
-                       # There is code? Process it
-                       var source = hightlightcode(hl, code)
-
+               if hlcode != null then
                        # Inject highlight
-                       page += "<pre id=light><code>"
-                       page += hl.html.write_to_string
-                       page += "</code></pre><hr>"
-                       page += "<ul>"
+                       page.add "<pre id=light><code id=lightcode>"
+                       page.add hl.html.write_to_string
+                       page.add "</code></pre><hr>"
+                       page.add "<ul>"
 
                        # List messages
-                       for m in source.messages do
-                               page += "<li>{m.location.as(not null)}: {m.text}</li>"
+                       for m in hlcode.source.messages do
+                               page.add "<li>{m.location.as(not null)}: {m.text}</li>"
                        end
-                       page += "</ul>"
+                       page.add "</ul>"
+               else
+                       page.add "<pre id=light><code id=lightcode></code></pre>"
                end
 
-               page += hl.foot_content
+               page.add hl.foot_content
+
+               # Call codemirror
+               page.add """
+               <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.16.0/codemirror.min.js"></script>
+               <script>
+               var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
+                       lineNumbers: true
+               });
+               """
+
+               # Callback to update codemirror messages
+               if hlcode != null then
+                       page.add hlcode.code_mirror_update
+               else
+                       page.add "function nitmessage()\{\}"
+               end
+               page.add """
+               var widgets = [];
+               nitmessage();
+
+               function updatePage() {
+               $.post("", { ajax: true, code: editor.getValue()}, function(data) {
+                       eval(data);
+                       $(".popupable").popover({html:true, placement:'top'});
+               });
+               }
+
+               var waiting;
+               editor.on("change", function() {
+                       clearTimeout(waiting);
+                       waiting = setTimeout(updatePage, 500);
+               });
+               waiting = setTimeout(updatePage, 500);
+
+               </script>
+               </body></html>
+               """
 
                var response = new HttpResponse(200)
                response.header["Content-Type"] = "text/html"
-               response.body = page
+               response.body = page.write_to_string
                return response
        end
 end
diff --git a/src/examples/test_loader.nit b/src/examples/test_loader.nit
new file mode 100644 (file)
index 0000000..e81a0af
--- /dev/null
@@ -0,0 +1,90 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Sample program that scan and load things.
+#
+# It shows the difference betwenn the various services of the `loader`.
+module test_loader
+
+import loader
+
+# Display current loaded/known things.
+fun stats(mb: ModelBuilder)
+do
+       var m = mb.model
+       print "  model: mpackages={m.mpackages.length} mmodules={m.mmodules.length}"
+       print "  mb: identified modules={mb.identified_modules.length}; parsed modules={mb.parsed_modules.length}"
+end
+
+
+# Create a tool context to handle options and paths
+var toolcontext = new ToolContext
+toolcontext.keep_going = true
+
+# We do not add other options, so process them now!
+toolcontext.process_options(args)
+var arguments = toolcontext.option_context.rest
+
+# We need a model to collect stuff
+var model = new Model
+# And a model builder to parse files
+var modelbuilder = new ModelBuilder(model, toolcontext)
+
+# Identify each argument independently
+for a in arguments do
+       var x
+
+       print "{a}: module?"
+       x = modelbuilder.identify_module(a)
+       if x != null then
+               print "\tmodule {x.full_name} at {x.filepath or else "?"}"
+       else
+               var le = modelbuilder.last_loader_error
+               if le != null then
+                       print "\t{le}"
+               else
+                       print "\tnothing"
+               end
+       end
+
+       print "{a}: group?"
+       x = modelbuilder.identify_group(a)
+       if x != null then
+               print "\tgroup {x.full_name} at {x.filepath or else "?"}"
+       else
+               var le = modelbuilder.last_loader_error
+               if le != null then
+                       print "\t{le}"
+               else
+                       print "\tnothing"
+               end
+       end
+       toolcontext.check_errors
+       stats(modelbuilder)
+end
+
+# Scan everything (including subdirectories)
+var mm = modelbuilder.scan_full(arguments)
+print "scan_full found {mm.length} modules"
+stats(modelbuilder)
+
+# Parse specific modules only
+mm = modelbuilder.parse(arguments)
+print "parse found {mm.length} modules"
+stats(modelbuilder)
+
+# Parse everything (including modules in subdirectories)
+mm = modelbuilder.parse_full(arguments)
+print "parse_full found {mm.length} modules"
+stats(modelbuilder)
index d11b6f7..8dd1637 100644 (file)
@@ -55,6 +55,15 @@ class HighlightVisitor
        # default: true
        var show_infobox = true is writable
 
+       # A reference to an entity used in generated `<a>` elements.
+       #
+       # It is used to refer to some specific entities when generating links.
+       # If `null` is returned, then no link are generated and `<a>` elements become `<span>`.
+       #
+       # By default, `null` is returned.
+       # Clients are therefore encouraged to redefine the method in a subclass to control where entities should link to.
+       fun hrefto(entitiy: MEntity): nullable String do return null
+
        init
        do
                html.add_class("nitcode")
@@ -160,7 +169,7 @@ class HighlightVisitor
                var stack = new Array[Prod]
                var line = 0
                var c: nullable Token = first_token
-               var hv = new HighlightVisitor
+               var hv = self
                while c != null do
                        var starting
 
@@ -372,9 +381,6 @@ end
 interface HInfoBoxable
        # An new infobox documenting the entity
        fun infobox(v: HighlightVisitor): HInfoBox is abstract
-
-       # A human-readable hyper-text for the entity
-       fun linkto: HTMLTag is abstract
 end
 
 redef class MDoc
@@ -395,56 +401,69 @@ end
 
 redef class MEntity
        super HInfoBoxable
+
+       # A HTML version of `to_s` with hyper-links.
+       #
+       # By default, `linkto_text(v, to_s)` is used, c.f. see `linkto_text`.
+       #
+       # For some complex entities, like generic types, multiple `<a>` and `<span>` elements can be generated.
+       # E.g. `Array[Int]` might become `<a>Array</a>[<a>Int</a>]` with the correct `href` attributes
+       # provided  by `v.hrefto`.
+       fun linkto(v: HighlightVisitor): HTMLTag do return linkto_text(v, to_s)
+
+       # Link to the `self` with a specific text.
+       #
+       # The whole text is linked with a single `<a>` element.
+       #
+       # The `href` used is provided by `v.hrefto`.
+       # If `href` is null then a `<span>` element is used instead of `<a>`.
+       fun linkto_text(v: HighlightVisitor, text: String): HTMLTag
+       do
+               var href = v.hrefto(self)
+               if href == null then
+                       return (new HTMLTag("span")).text(text)
+               end
+               return (new HTMLTag("a")).attr("href", href).text(text)
+       end
 end
 
 redef class MModule
        redef fun infobox(v)
        do
                var res = new HInfoBox(v, "module {name}")
-               res.href = href
-               res.new_field("module").add(linkto)
+               res.href = v.hrefto(self)
+               res.new_field("module").add(linkto(v))
                var mdoc = self.mdoc
                if mdoc != null then mdoc.fill_infobox(res)
                if in_importation.greaters.length > 1 then
                        var c = res.new_dropdown("imports", "{in_importation.greaters.length-1} modules")
                        for x in in_importation.greaters do
                                if x == self then continue
-                               c.open("li").add x.linkto
+                               c.open("li").add x.linkto(v)
                        end
                end
                return res
        end
 
-       # The module HTML page
-       fun href: String
-       do
-               return c_name + ".html"
-       end
-
-       redef fun linkto do return linkto_text(name)
-
-       # Link to the entitiy with a specific text
-       fun linkto_text(text: String): HTMLTag
-       do
-               return (new HTMLTag("a")).attr("href", href).text(text)
-       end
+       redef fun linkto(v) do return linkto_text(v, name)
 end
 
 redef class MClassDef
        redef fun infobox(v)
        do
                var res = new HInfoBox(v, "class {mclass.name}")
-               res.href = href
+               res.href = v.hrefto(self)
                if is_intro then
                        res.new_field("class").text(mclass.name)
                else
                        res.new_field("redef class").text(mclass.name)
-                       res.new_field("intro").add mclass.intro.linkto_text("in {mclass.intro_mmodule.to_s}")
+                       res.new_field("intro").add mclass.intro.linkto_text(v, "in {mclass.intro_mmodule.to_s}")
                end
                var mdoc = self.mdoc
                if mdoc == null then mdoc = mclass.intro.mdoc
                if mdoc != null then mdoc.fill_infobox(res)
 
+               var in_hierarchy = self.in_hierarchy
                if in_hierarchy == null then return res
 
                if in_hierarchy.greaters.length > 1 then
@@ -452,7 +471,7 @@ redef class MClassDef
                        for x in in_hierarchy.greaters do
                                if x == self then continue
                                if not x.is_intro then continue
-                               c.open("li").add x.linkto
+                               c.open("li").add x.linkto(v)
                        end
                end
                if in_hierarchy.smallers.length > 1 then
@@ -460,52 +479,41 @@ redef class MClassDef
                        for x in in_hierarchy.smallers do
                                if x == self then continue
                                if not x.is_intro then continue
-                               c.open("li").add x.linkto
+                               c.open("li").add x.linkto(v)
                        end
                end
                if mclass.mclassdefs.length > 1 then
                        var c = res.new_dropdown("redefs", "refinements")
                        for x in mclass.mclassdefs do
                                if x == self then continue
-                               c.open("li").add x.linkto_text("in {x.mmodule}")
+                               c.open("li").add x.linkto_text(v, "in {x.mmodule}")
                        end
                end
                return res
        end
-
-       # The class HTML page (an anchor in the module page)
-       fun href: String
-       do
-               return mmodule.href + "#" + to_s
-       end
-
-       redef fun linkto do return linkto_text(mclass.name)
-
-       # Link to the entitiy with a specific text
-       fun linkto_text(text: String): HTMLTag
-       do
-               return (new HTMLTag("a")).attr("href", href).text(text)
-       end
 end
 
 redef class MPropDef
        redef fun infobox(v)
        do
                var res = new HInfoBox(v, to_s)
-               res.href = href
+               res.href = v.hrefto(self)
                if self isa MMethodDef then
-                       if msignature != null then res.new_field("fun").append(mproperty.name).add msignature.linkto
+                       var msignature = self.msignature
+                       if msignature != null then res.new_field("fun").append(mproperty.name).add msignature.linkto(v)
                else if self isa MAttributeDef then
-                       if static_mtype != null then res.new_field("fun").append(mproperty.name).add static_mtype.linkto
+                       var static_mtype = self.static_mtype
+                       if static_mtype != null then res.new_field("fun").append(mproperty.name).add static_mtype.linkto(v)
                else if self isa MVirtualTypeDef then
-                       if bound != null then res.new_field("add").append(mproperty.name).add bound.linkto
+                       var bound = self.bound
+                       if bound != null then res.new_field("add").append(mproperty.name).add bound.linkto(v)
                else
                        res.new_field("wat?").append(mproperty.name)
                end
 
                if is_intro then
                else
-                       res.new_field("intro").add mproperty.intro.linkto_text("in {mproperty.intro.mclassdef}")
+                       res.new_field("intro").add mproperty.intro.linkto_text(v, "in {mproperty.intro.mclassdef}")
                end
                var mdoc = self.mdoc
                if mdoc == null then mdoc = mproperty.intro.mdoc
@@ -513,72 +521,54 @@ redef class MPropDef
                if mproperty.mpropdefs.length > 1 then
                        var c = res.new_dropdown("redef", "redefinitions")
                        for x in mproperty.mpropdefs do
-                               c.open("li").add x.linkto_text("in {x.mclassdef}")
+                               c.open("li").add x.linkto_text(v, "in {x.mclassdef}")
                        end
                end
 
                return res
        end
-
-       # The property HTML page (an anchor in the module page)
-       fun href: String
-       do
-               return self.mclassdef.mmodule.href + "#" + self.to_s
-       end
-
-       redef fun linkto do return linkto_text(mproperty.name)
-
-       # Link to the entitiy with a specific text
-       fun linkto_text(text: String): HTMLTag
-       do
-               return (new HTMLTag("a")).attr("href", href).text(text)
-       end
 end
 
 redef class MClassType
        redef fun infobox(v)
        do
                var res = new HInfoBox(v, to_s)
-               res.href = mclass.intro.href
-               res.new_field("class").add mclass.intro.linkto
+               res.href = v.hrefto(self)
+               res.new_field("class").add mclass.intro.linkto(v)
                var mdoc = mclass.mdoc
                if mdoc == null then mdoc = mclass.intro.mdoc
                if mdoc != null then mdoc.fill_infobox(res)
                return res
        end
-       redef fun linkto
+       redef fun linkto(v)
        do
-               return mclass.intro.linkto
+               return mclass.intro.linkto(v)
        end
 end
 redef class MVirtualType
        redef fun infobox(v)
        do
                var res = new HInfoBox(v, to_s)
-               res.href = mproperty.intro.href
+               res.href = v.hrefto(mproperty)
                var p = mproperty
                var pd = p.intro
-               res.new_field("virtual type").add pd.linkto
+               res.new_field("virtual type").add pd.linkto(v)
                var mdoc = pd.mdoc
                if mdoc != null then mdoc.fill_infobox(res)
                return res
        end
-       redef fun linkto
+       redef fun linkto(v)
        do
-               return mproperty.intro.linkto
+               return mproperty.intro.linkto(v)
        end
 end
 redef class MParameterType
        redef fun infobox(v)
        do
                var res = new HInfoBox(v, to_s)
-               res.new_field("parameter type").append("{name} from class ").add mclass.intro.linkto
+               res.new_field("parameter type").append("{name} from class ").add mclass.intro.linkto(v)
                return res
        end
-       redef fun linkto
-       do
-               return (new HTMLTag("span")).text(name)
-       end
 end
 
 redef class MNullableType
@@ -586,10 +576,10 @@ redef class MNullableType
        do
                return mtype.infobox(v)
        end
-       redef fun linkto
+       redef fun linkto(v)
        do
                var res = new HTMLTag("span")
-               res.append("nullable ").add(mtype.linkto)
+               res.append("nullable ").add(mtype.linkto(v))
                return res
        end
 end
@@ -599,10 +589,10 @@ redef class MNotNullType
        do
                return mtype.infobox(v)
        end
-       redef fun linkto
+       redef fun linkto(v)
        do
                var res = new HTMLTag("span")
-               res.append("not null ").add(mtype.linkto)
+               res.append("not null ").add(mtype.linkto(v))
                return res
        end
 end
@@ -613,7 +603,7 @@ redef class MNullType
                var res = new HInfoBox(v, to_s)
                return res
        end
-       redef fun linkto
+       redef fun linkto(v)
        do
                var res = new HTMLTag("span")
                res.append("null")
@@ -622,7 +612,7 @@ redef class MNullType
 end
 
 redef class MSignature
-       redef fun linkto
+       redef fun linkto(v)
        do
                var res = new HTMLTag("span")
                var first = true
@@ -636,14 +626,14 @@ redef class MSignature
                                end
                                res.append p.name
                                res.append ": "
-                               res.add p.mtype.linkto
+                               res.add p.mtype.linkto(v)
                        end
                        res.append ")"
                end
                var ret = return_mtype
                if ret != null then
                        res.append ": "
-                       res.add ret.linkto
+                       res.add ret.linkto(v)
                end
                return res
        end
@@ -653,11 +643,11 @@ redef class CallSite
        redef fun infobox(v)
        do
                var res = new HInfoBox(v, "call {mpropdef}")
-               res.href = mpropdef.href
-               res.new_field("call").add(mpropdef.linkto).add(msignature.linkto)
+               res.href = v.hrefto(mpropdef)
+               res.new_field("call").add(mpropdef.linkto(v)).add(msignature.linkto(v))
                if mpropdef.is_intro then
                else
-                       res.new_field("intro").add mproperty.intro.linkto_text("in {mproperty.intro.mclassdef}")
+                       res.new_field("intro").add mproperty.intro.linkto_text(v, "in {mproperty.intro.mclassdef}")
                end
                var mdoc = mpropdef.mdoc
                if mdoc == null then mdoc = mproperty.intro.mdoc
@@ -665,9 +655,9 @@ redef class CallSite
 
                return res
        end
-       redef fun linkto
+       redef fun linkto(v)
        do
-               return mpropdef.linkto
+               return mpropdef.linkto(v)
        end
 end
 
@@ -682,13 +672,9 @@ redef class Variable
                        return res
                end
                var res = new HInfoBox(v, "{name}: {declared_type}")
-               res.new_field("local var").append("{name}:").add(declared_type.linkto)
+               res.new_field("local var").append("{name}:").add(declared_type.linkto(v))
                return res
        end
-       redef fun linkto
-       do
-               return (new HTMLTag("span")).text(name)
-       end
 end
 
 
@@ -714,6 +700,8 @@ redef class AQclassid
        redef fun decorate_tag(v, res, token)
        do
                if token != n_id then return null
+               var parent = self.parent
+               if parent == null then return null
                return parent.decorate_tag(v, res, token)
        end
 end
@@ -722,6 +710,8 @@ redef class AQid
        redef fun decorate_tag(v, res, token)
        do
                if token != n_id then return null
+               var parent = self.parent
+               if parent == null then return null
                return parent.decorate_tag(v, res, token)
        end
 end
@@ -776,7 +766,7 @@ end
 redef class Token
        # Produce an HTMLTag with the correct contents and CSS classes
        # Subclasses can redefine it to decorate the tag
-       redef fun make_tag(v: HighlightVisitor): HTMLTag
+       redef fun make_tag(v): HTMLTag
        do
                var res = new HTMLTag("span")
                res.text(text)
@@ -870,6 +860,7 @@ end
 redef class ASendExpr
        redef fun decorate_tag(v, res, token)
        do
+               var callsite = self.callsite
                if callsite == null then return null
                return callsite.infobox(v)
        end
@@ -878,6 +869,7 @@ end
 redef class ANewExpr
        redef fun decorate_tag(v, res, token)
        do
+               var callsite = self.callsite
                if callsite == null then return null
                return callsite.infobox(v)
        end
@@ -898,7 +890,9 @@ end
 redef class AModuleName
        redef fun decorate_tag(v, res, token)
        do
-               return parent.decorate_tag(v, res, token)
+               var p = parent
+               if p == null then return null
+               return p.decorate_tag(v, res, token)
        end
 end
 
@@ -1011,6 +1005,7 @@ redef class AFormaldef
        do
                if not token isa TClassid then return null
                res.add_class("nc_vt")
+               var mtype = self.mtype
                if mtype == null then return null
                return mtype.infobox(v)
        end
index 8ac6ef5..ac07e71 100644 (file)
@@ -154,7 +154,10 @@ redef class ModelBuilder
 
                        var mmodule = identify_module(a)
                        if mmodule == null then
-                               if a.file_exists then
+                               var le = last_loader_error
+                               if le != null then
+                                       toolcontext.error(null, le)
+                               else if a.file_exists then
                                        toolcontext.error(null, "Error: `{a}` is not a Nit source file.")
                                else
                                        toolcontext.error(null, "Error: cannot find module `{a}`.")
@@ -324,6 +327,14 @@ redef class ModelBuilder
        # A parsed module exists in the model but might be not yet analysed (no importation).
        var parsed_modules = new Array[MModule]
 
+       # Some `loader` services are silent and return `null` on error.
+       #
+       # Those services can set `last_loader_error` to precise an specific error message.
+       # if `last_loader_error == null` then a generic error message can be used.
+       #
+       # See `identified_modules` and `identify_group` for details.
+       var last_loader_error: nullable String = null
+
        # Identify a source file and load the associated package and groups if required.
        #
        # This method does what the user expects when giving an argument to a Nit tool.
@@ -336,13 +347,16 @@ redef class ModelBuilder
        #   then the main module of the package `digraph` is searched in `paths` and returned.
        #
        # Silently return `null` if `path` does not exists or cannot be identified.
+       # If `null` is returned, `last_loader_error` can be set to a specific error message.
        #
        # On success, it returns a module that is possibly not yet parsed (no AST), or not yet analysed (no importation).
        # If the module was already identified, or loaded, it is returned.
        fun identify_module(path: String): nullable MModule
        do
+               last_loader_error = null
+
                # special case for not a nit file
-               if not path.has_suffix(".nit") then
+               if not path.has_suffix(".nit") then do
                        # search dirless files in known -I paths
                        if not path.chars.has('/') then
                                var res = search_module_in_paths(null, path, self.paths)
@@ -350,19 +364,66 @@ redef class ModelBuilder
                        end
 
                        # Found nothing? maybe it is a group...
-                       var candidate = null
                        if path.file_exists then
                                var mgroup = identify_group(path)
                                if mgroup != null then
                                        var owner_path = mgroup.filepath.join_path(mgroup.name + ".nit")
-                                       if owner_path.file_exists then candidate = owner_path
+                                       if owner_path.file_exists then
+                                               path = owner_path
+                                               break
+                                       end
                                end
                        end
 
-                       if candidate == null then
-                               return null
+                       # Found nothing? maybe it is a qualified name
+                       if path.chars.has(':') then
+                               var ids = path.split("::")
+                               var g = identify_group(ids.first)
+                               if g != null then
+                                       scan_group(g)
+                                       var ms = g.mmodules_by_name(ids.last)
+
+                                       # Return exact match
+                                       for m in ms do
+                                               if m.full_name == path then
+                                                       return m
+                                               end
+                                       end
+
+                                       # Where there is only one or two names `foo::bar`
+                                       # then accept module that matches `foo::*::bar`
+                                       if ids.length <= 2 then
+                                               if ms.length == 1 then return ms.first
+                                               if ms.length > 1 then
+                                                       var l = new Array[String]
+                                                       for m in ms do
+                                                               var fp = m.filepath
+                                                               if fp != null then fp = " ({fp})" else fp = ""
+                                                               l.add "`{m.full_name}`{fp}"
+                                                       end
+                                                       last_loader_error = "Error: conflicting module for `{path}`: {l.join(", ")} "
+                                                       return null
+                                               end
+                                       end
+
+                                       var bests = new BestDistance[String](path.length / 2)
+                                       # We found nothing. But propose something in the package?
+                                       for sg in g.mpackage.mgroups do
+                                               for m in sg.mmodules do
+                                                       var d = path.levenshtein_distance(m.full_name)
+                                                       bests.update(d, m.full_name)
+                                               end
+                                       end
+                                       var last_loader_error = "Error: cannot find module `{path}`."
+                                       if bests.best_items.not_empty then
+                                               last_loader_error += " Did you mean " + bests.best_items.join(", ", " or ") + "?"
+                                       end
+                                       self.last_loader_error = last_loader_error
+                                       return null
+                               end
                        end
-                       path = candidate
+
+                       return null
                end
 
                # Does the file exists?
@@ -419,12 +480,19 @@ redef class ModelBuilder
        # Return the mgroup associated to a directory path.
        # If the directory is not a group null is returned.
        #
+       # Silently return `null` if `dirpath` does not exists, is not a directory,
+       # cannot be identified or cannot be attached to a mpackage.
+       # If `null` is returned, `last_loader_error` can be set to a specific error message.
+       #
        # Note: `paths` is also used to look for mgroups
        fun identify_group(dirpath: String): nullable MGroup
        do
+               # Reset error
+               last_loader_error = null
+
                var stat = dirpath.file_stat
 
-               if stat == null then do
+               if stat == null or not stat.is_dir then do
                        # search dirless directories in known -I paths
                        if dirpath.chars.has('/') then return null
                        for p in paths do
@@ -440,6 +508,7 @@ redef class ModelBuilder
 
                # Filter out non-directories
                if not stat.is_dir then
+                       last_loader_error = "Error: `{dirpath}` is not a directory."
                        return null
                end
 
@@ -466,6 +535,7 @@ redef class ModelBuilder
                        # The root of the directory hierarchy in the file system.
                        if rdp == "/" then
                                mgroups[rdp] = null
+                               last_loader_error = "Error: `{dirpath}` is not a Nit package."
                                return null
                        end
 
@@ -473,6 +543,7 @@ redef class ModelBuilder
                        if (dirpath/"packages.ini").file_exists then
                                # dirpath cannot be a package since it is a package directory
                                mgroups[rdp] = null
+                               last_loader_error = "Error: `{dirpath}` is not a Nit package."
                                return null
                        end
 
@@ -492,6 +563,7 @@ redef class ModelBuilder
                                if parent == null then
                                        # Parent is not a group, thus we are not a group either
                                        mgroups[rdp] = null
+                                       last_loader_error = "Error: `{dirpath}` is not a Nit package."
                                        return null
                                end
                        end
@@ -653,7 +725,10 @@ redef class ModelBuilder
                # Look for the module
                var mmodule = identify_module(filename)
                if mmodule == null then
-                       if filename.file_exists then
+                       var le = last_loader_error
+                       if le != null then
+                               toolcontext.error(null, le)
+                       else if filename.file_exists then
                                toolcontext.error(null, "Error: `{filename}` is not a Nit source file.")
                        else
                                toolcontext.error(null, "Error: cannot find module `{filename}`.")
index e7c3b15..b148eef 100644 (file)
@@ -388,8 +388,9 @@ class MClass
        super MEntity
 
        # The module that introduce the class
+       #
        # While classes are not bound to a specific module,
-       # the introducing module is used for naming an visibility
+       # the introducing module is used for naming and visibility.
        var intro_mmodule: MModule
 
        # The short name of the class
index bd7d12c..a4f530c 100644 (file)
@@ -33,6 +33,9 @@ import model_views
 
 redef class MEntity
 
+       # FIXME used to bypass RTA limitation on type resolution.
+       type MENTITY: SELF
+
        # Collect modifier keywords like `redef`, `private` etc.
        fun collect_modifiers: Array[String] do
                return new Array[String]
@@ -42,6 +45,85 @@ redef class MEntity
        fun collect_linearization(mainmodule: MModule): nullable Array[MEntity] do
                return null
        end
+
+       # Collect `self` ancestors (direct and indirect).
+       #
+       # The concept of ancestor is abstract at this stage.
+       fun collect_ancestors(view: ModelView): Set[MENTITY] do
+               var done = new HashSet[MENTITY]
+               var todo = new Array[MENTITY]
+
+               todo.add_all collect_parents(view)
+               while todo.not_empty do
+                       var mentity = todo.pop
+                       if mentity == self or done.has(mentity) then continue
+                       print "{mentity} == {self}"
+                       done.add mentity
+                       todo.add_all mentity.collect_parents(view)
+               end
+               return done
+       end
+
+       # Collect `self` parents (direct ancestors).
+       #
+       # The concept of parent is abstract at this stage.
+       fun collect_parents(view: ModelView): Set[MENTITY] is abstract
+
+       # Collect `self` children (direct descendants).
+       #
+       # The concept of child is abstract at this stage.
+       fun collect_children(view: ModelView): Set[MENTITY] is abstract
+
+       # Collect `self` descendants (direct and direct).
+       #
+       # The concept of descendant is abstract at this stage.
+       fun collect_descendants(view: ModelView): Set[MENTITY] do
+               var done = new HashSet[MENTITY]
+               var todo = new Array[MENTITY]
+
+               todo.add_all collect_children(view)
+               while todo.not_empty do
+                       var mentity = todo.pop
+                       if mentity == self or done.has(mentity) then continue
+                       done.add mentity
+                       todo.add_all mentity.collect_children(view)
+               end
+               return done
+       end
+
+       # Build a poset representing `self` in it's own hierarchy.
+       #
+       # The notion of hierarchy depends on the type of MEntity.
+       #
+       # Here a recap:
+       # * MPackage: package dependencies
+       # * MGroup: group dependencies
+       # * MModule: modules imports
+       # * MClass: class inheritance (all classdefs flattened)
+       # * MClassDef: classdef inheritance
+       # * MProperty: property definitions graph (all propdefs flattened)
+       # * MPropDef: property definitions graph
+       fun hierarchy_poset(view: ModelView): POSet[MENTITY] do
+               var done = new HashSet[MENTITY]
+               var mentities = new Array[MENTITY]
+               mentities.add self
+               var poset = new POSet[MENTITY]
+               while mentities.not_empty do
+                       var mentity = mentities.pop
+                       if done.has(mentity) then continue
+                       done.add mentity
+                       poset.add_node mentity
+                       for parent in mentity.collect_parents(view) do
+                               poset.add_edge(mentity, parent)
+                               mentities.add parent
+                       end
+                       for child in mentity.collect_children(view) do
+                               poset.add_edge(child, mentity)
+                               mentities.add child
+                       end
+               end
+               return poset
+       end
 end
 
 redef class MPackage
@@ -50,6 +132,28 @@ redef class MPackage
                res.add "package"
                return res
        end
+
+       # `MPackage` parents are its direct dependencies.
+       redef fun collect_parents(view) do
+               var res = new HashSet[MENTITY]
+               for mgroup in mgroups do
+                       for parent in mgroup.collect_parents(view) do
+                               var mpackage = parent.mpackage
+                               if mpackage == self or not view.accept_mentity(mpackage) then continue
+                               res.add(mpackage)
+                       end
+               end
+               return res
+       end
+
+       # `MPackage` children are packages that directly depends on `self`.
+       redef fun collect_children(view) do
+               var res = new HashSet[MENTITY]
+               for mpackage in view.mpackages do
+                       if mpackage.collect_parents(view).has(self) then res.add mpackage
+               end
+               return res
+       end
 end
 
 redef class MGroup
@@ -58,6 +162,30 @@ redef class MGroup
                res.add "group"
                return res
        end
+
+       # `MGroup` parents are its direct dependencies.
+       redef fun collect_parents(view) do
+               var res = new HashSet[MENTITY]
+               for mmodule in mmodules do
+                       for parent in mmodule.collect_parents(view) do
+                               var mgroup = parent.mgroup
+                               if mgroup == null or mgroup == self then continue
+                               if not view.accept_mentity(mgroup) then continue
+                               res.add(mgroup)
+                       end
+               end
+               return res
+       end
+
+       # `MGroup` children are mgroups that directly depends on `self`.
+       redef fun collect_children(view) do
+               var res = new HashSet[MENTITY]
+               for mgroup in view.mgroups do
+                       if mgroup == self or not view.accept_mentity(mgroup) then continue
+                       if mgroup.collect_parents(view).has(self) then res.add mgroup
+               end
+               return res
+       end
 end
 
 redef class MModule
@@ -68,9 +196,9 @@ redef class MModule
                return res
        end
 
-       # Collect all transitive imports.
-       fun collect_ancestors(view: ModelView): Set[MModule] do
-               var res = new HashSet[MModule]
+       # `MModule` ancestors are all its transitive imports.
+       redef fun collect_ancestors(view) do
+               var res = new HashSet[MENTITY]
                for mentity in in_importation.greaters do
                        if mentity == self then continue
                        if not view.accept_mentity(mentity) then continue
@@ -79,9 +207,9 @@ redef class MModule
                return res
        end
 
-       # Collect direct imports.
-       fun collect_parents(view: ModelView): Set[MModule] do
-               var res = new HashSet[MModule]
+       # `MModule` parents are all its direct imports.
+       redef fun collect_parents(view) do
+               var res = new HashSet[MENTITY]
                for mentity in in_importation.direct_greaters do
                        if mentity == self then continue
                        if not view.accept_mentity(mentity) then continue
@@ -90,9 +218,9 @@ redef class MModule
                return res
        end
 
-       # Collect direct children (modules that directly import `self`).
-       fun collect_children(view: ModelView): Set[MModule] do
-               var res = new HashSet[MModule]
+       # `MModule` children are modules that directly import `self`.
+       redef fun collect_children(view) do
+               var res = new HashSet[MENTITY]
                for mentity in in_importation.direct_smallers do
                        if mentity == self then continue
                        if not view.accept_mentity(mentity) then continue
@@ -101,9 +229,9 @@ redef class MModule
                return res
        end
 
-       # Collect all transitive children.
-       fun collect_descendants(view: ModelView): Set[MModule] do
-               var res = new HashSet[MModule]
+       # `MModule` children are modules that transitively import `self`.
+       redef fun collect_descendants(view) do
+               var res = new HashSet[MENTITY]
                for mentity in in_importation.smallers do
                        if mentity == self then continue
                        if not view.accept_mentity(mentity) then continue
@@ -112,15 +240,6 @@ redef class MModule
                return res
        end
 
-       # Build the importation poset for `self`
-       fun importation_poset(view: ModelView): POSet[MModule] do
-               var mmodules = new HashSet[MModule]
-               mmodules.add self
-               mmodules.add_all collect_ancestors(view)
-               mmodules.add_all collect_descendants(view)
-               return view.mmodules_poset(mmodules)
-       end
-
        # Collect mclassdefs introduced in `self` with `visibility >= to min_visibility`.
        fun collect_intro_mclassdefs(view: ModelView): Set[MClassDef] do
                var res = new HashSet[MClassDef]
@@ -174,70 +293,48 @@ redef class MClass
                return mclassdefs
        end
 
-       # Collect direct parents of `self` with `visibility >= to min_visibility`.
-       fun collect_parents(view: ModelView): Set[MClass] do
-               var res = new HashSet[MClass]
+       # `MClass` parents are the direct parents of `self`.
+       #
+       # This method uses a flattened hierarchy containing all the mclassdefs.
+       redef fun collect_parents(view) do
+               var res = new HashSet[MENTITY]
                for mclassdef in mclassdefs do
-                       for mclasstype in mclassdef.supertypes do
-                               var mclass = mclasstype.mclass
-                               if not view.accept_mentity(mclass) then continue
-                               res.add(mclass)
+                       for parent in mclassdef.collect_parents(view) do
+                               var mclass = parent.mclass
+                               if mclass == self or not view.accept_mentity(parent) then continue
+                               res.add mclass
                        end
                end
                return res
        end
 
        # Collect all ancestors of `self` with `visibility >= to min_visibility`.
-       fun collect_ancestors(view: ModelView): Set[MClass] do
-               var res = new HashSet[MClass]
-               for mclassdef in self.mclassdefs do
-                       for super_mclassdef in mclassdef.in_hierarchy.greaters do
-                               if super_mclassdef == mclassdef then continue  # skip self
-                               var mclass = super_mclassdef.mclass
-                               if not view.accept_mentity(mclass) then continue
-                               res.add(mclass)
-                       end
-               end
-               return res
-       end
-
-       # Collect direct children of `self` with `visibility >= to min_visibility`.
-       fun collect_children(view: ModelView): Set[MClass] do
-               var res = new HashSet[MClass]
-               for mclassdef in self.mclassdefs do
-                       for sub_mclassdef in mclassdef.in_hierarchy.direct_smallers do
-                               if sub_mclassdef == mclassdef then continue  # skip self
-                               var mclass = sub_mclassdef.mclass
-                               if not view.accept_mentity(mclass) then continue
-                               res.add(mclass)
+       redef fun collect_ancestors(view) do
+               var res = new HashSet[MENTITY]
+               for mclassdef in mclassdefs do
+                       for parent in mclassdef.collect_parents(view) do
+                               if not view.accept_mentity(parent) then continue
+                               res.add parent.mclass
                        end
                end
                return res
        end
 
-       # Collect all descendants of `self` with `visibility >= to min_visibility`.
-       fun collect_descendants(view: ModelView): Set[MClass] do
-               var res = new HashSet[MClass]
-               for mclassdef in self.mclassdefs do
-                       for sub_mclassdef in mclassdef.in_hierarchy.smallers do
-                               if sub_mclassdef == mclassdef then continue  # skip self
-                               var mclass = sub_mclassdef.mclass
-                               if not view.accept_mentity(mclass) then continue
-                               res.add(mclass)
+       # `MClass` parents are the direct parents of `self`.
+       #
+       # This method uses a flattened hierarchy containing all the mclassdefs.
+       redef fun collect_children(view) do
+               var res = new HashSet[MENTITY]
+               for mclassdef in mclassdefs do
+                       for child in mclassdef.collect_children(view) do
+                               var mclass = child.mclass
+                               if mclass == self or not view.accept_mentity(child) then continue
+                               res.add mclass
                        end
                end
                return res
        end
 
-       # Build a class hierarchy poset for `self` based on its ancestors and descendants.
-       fun hierarchy_poset(mainmodule: MModule, view: ModelView): POSet[MClass] do
-               var mclasses = new HashSet[MClass]
-               mclasses.add self
-               mclasses.add_all collect_ancestors(view)
-               mclasses.add_all collect_descendants(view)
-               return view.mclasses_poset(mainmodule, mclasses)
-       end
-
        # Collect all mproperties introduced in 'self' with `visibility >= min_visibility`.
        fun collect_intro_mproperties(view: ModelView): Set[MProperty] do
                var set = new HashSet[MProperty]
@@ -431,6 +528,42 @@ redef class MClassDef
                return mclassdefs
        end
 
+       # `MClassDef` ancestors are its direct and transitive super classes.
+       redef fun collect_ancestors(view) do
+               var res = new HashSet[MENTITY]
+               var hierarchy = self.in_hierarchy
+               if hierarchy == null then return res
+               for parent in hierarchy.greaters do
+                       if parent == self or not view.accept_mentity(parent) then continue
+                       res.add parent
+               end
+               return res
+       end
+
+       # `MClassDef` parents are its direct super classes.
+       redef fun collect_parents(view) do
+               var res = new HashSet[MENTITY]
+               var hierarchy = self.in_hierarchy
+               if hierarchy == null then return res
+               for parent in hierarchy.direct_greaters do
+                       if parent == self or not view.accept_mentity(parent) then continue
+                       res.add parent
+               end
+               return res
+       end
+
+       # `MClassDef` children are its direct subclasses.
+       redef fun collect_children(view) do
+               var res = new HashSet[MENTITY]
+               var hierarchy = self.in_hierarchy
+               if hierarchy == null then return res
+               for child in hierarchy.direct_smallers do
+                       if child == self or not view.accept_mentity(child) then continue
+                       res.add child
+               end
+               return res
+       end
+
        # Collect mpropdefs in 'self' with `visibility >= min_visibility`.
        fun collect_mpropdefs(view: ModelView): Set[MPropDef] do
                var res = new HashSet[MPropDef]
@@ -483,6 +616,44 @@ redef class MProperty
                mainmodule.linearize_mpropdefs(mpropdefs)
                return mpropdefs
        end
+
+       # Collect mpropdefs in 'self' with `visibility >= min_visibility`.
+       fun collect_mpropdefs(view: ModelView): Set[MPropDef] do
+               var res = new HashSet[MPropDef]
+               for mpropdef in mpropdefs do
+                       if not view.accept_mentity(mpropdef) then continue
+                       res.add mpropdef
+               end
+               return res
+       end
+
+       # `MProperty` parents are all direct super definition of `self`.
+       #
+       # This method uses a flattened hierarchy containing all the mpropdefs.
+       redef fun collect_parents(view) do
+               var res = new HashSet[MENTITY]
+               for mpropdef in mpropdefs do
+                       for parent in mpropdef.collect_parents(view) do
+                               if not view.accept_mentity(parent) then continue
+                               res.add parent.mproperty
+                       end
+               end
+               return res
+       end
+
+       # `MProperty` parents are all direct sub definition of `self`.
+       #
+       # This method uses a flattened hierarchy containing all the mpropdefs.
+       redef fun collect_children(view) do
+               var res = new HashSet[MENTITY]
+               for mpropdef in mpropdefs do
+                       for child in mpropdef.collect_parents(view) do
+                               if not view.accept_mentity(child) then continue
+                               res.add child.mproperty
+                       end
+               end
+               return res
+       end
 end
 
 redef class MPropDef
@@ -524,4 +695,24 @@ redef class MPropDef
                mainmodule.linearize_mpropdefs(mpropdefs)
                return mpropdefs
        end
+
+       # `MPropDef` parents include only the next definition of `self`.
+       redef fun collect_parents(view) do
+               var res = new HashSet[MENTITY]
+               var mpropdef = self
+               while not mpropdef.is_intro do
+                       mpropdef = mpropdef.lookup_next_definition(mclassdef.mmodule, mclassdef.bound_mtype)
+                       res.add mpropdef
+               end
+               return res
+       end
+
+       # `MPropdef` children are definitions that directly depends on `self`.
+       redef fun collect_children(view) do
+               var res = new HashSet[MENTITY]
+               for mpropdef in mproperty.collect_mpropdefs(view) do
+                       if mpropdef.collect_parents(view).has(self) then res.add mpropdef
+               end
+               return res
+       end
 end
index 176ec5f..554bc00 100644 (file)
@@ -17,6 +17,71 @@ module nitlight
 
 import highlight
 
+class NitlightVisitor
+       super HighlightVisitor
+
+       # The current highlight module
+       #
+       # It is used to know when to use anchored local links
+       var current_module: MModule
+
+       # List of all highlighted modules
+       #
+       # It is used to have links that only targets highlighted entities
+       #
+       # Entities outside these modules will not be linked.
+       var mmodules: Collection[MModule]
+
+       redef fun hrefto(entitiy) do return entitiy.href(self)
+end
+
+redef class MEntity
+       private fun href(v: NitlightVisitor): nullable String do return null
+end
+
+redef class MModule
+       redef fun href(v)
+       do
+               if self == v.current_module then return ""
+               if not v.mmodules.has(self) then return null
+               return c_name + ".html"
+       end
+end
+
+redef class MClass
+       redef fun href(v)
+       do
+               # Because we only have code, just link to the introduction
+               return intro.href(v)
+       end
+end
+
+redef class MClassDef
+       redef fun href(v)
+       do
+               var m = mmodule.href(v)
+               if m == null then return null
+               return m + "#" + to_s
+       end
+end
+
+redef class MProperty
+       redef fun href(v)
+       do
+               # Because we only have code, just link to the introduction
+               return intro.href(v)
+       end
+end
+
+redef class MPropDef
+       redef fun href(v)
+       do
+               var m = mclassdef.mmodule.href(v)
+               if m == null then return null
+               return m + "#" + to_s
+       end
+end
+
 var toolcontext = new ToolContext
 
 # Try to colorize, even if programs are non valid
@@ -54,7 +119,7 @@ end
 for mm in mmodules do
        if dir != null then toolcontext.info("write {dir}/{mm.c_name}.html", 1)
 
-       var v = new HighlightVisitor
+       var v = new NitlightVisitor(mm, mmodules)
        var prefix = opt_line_id_prefix.value
        if prefix != null then
                v.line_id_prefix = prefix.trim
index a1a41a3..3897c5c 100644 (file)
@@ -68,7 +68,6 @@ private class NitwebPhase
 
                app.use_before("/*", new RequestClock)
                app.use("/api", new APIRouter(model, modelbuilder, mainmodule, catalog))
-               app.use("/doc/:namespace", new DocAction(model, mainmodule, modelbuilder))
                app.use("/*", new StaticHandler(toolcontext.share_dir / "nitweb", "index.html"))
                app.use_after("/*", new ConsoleLog)
 
@@ -102,6 +101,9 @@ class APIRouter
                use("/uml/:id", new APIEntityUML(model, mainmodule))
                use("/linearization/:id", new APIEntityLinearization(model, mainmodule))
                use("/defs/:id", new APIEntityDefs(model, mainmodule))
+               use("/inheritance/:id", new APIEntityInheritance(model, mainmodule))
+               use("/graph/", new APIGraphRouter(model, mainmodule))
+               use("/docdown/", new APIDocdown(model, mainmodule, modelbuilder))
        end
 end
 
index 96d0835..13384f6 100644 (file)
@@ -18,9 +18,16 @@ module test_highlight
 import highlight
 import test_phase
 
+class TestHighlightVisitor
+       super HighlightVisitor
+       redef fun hrefto(e) do
+               return "#" + e.c_name
+       end
+end
+
 redef fun do_work(mainmodule, mmodules, mb)
 do
-       var v = new HighlightVisitor
+       var v = new TestHighlightVisitor
        print """<head>
        <meta charset="utf-8">
        <style type="text/css">
@@ -33,9 +40,9 @@ do
        for mm in mmodules do for cd in mm.mclassdefs do for pd in cd.mpropdefs do
                var n = mb.mpropdef2node(pd)
                if not n isa APropdef then continue
-               var hl = new HighlightVisitor
+               var hl = new TestHighlightVisitor
                hl.enter_visit(n)
-               print "<h1>{pd.full_name}</h1>"
+               print "<h1 id=\"{pd.c_name}\">{pd.full_name}</h1>"
                printn "<pre><code>"
                hl.html.write_to(stdout)
                print "</code></pre>"
@@ -61,7 +68,7 @@ class THLVisitor
                if not seen.has(cn) then
                        seen.add cn
 
-                       var hl = new HighlightVisitor
+                       var hl = new TestHighlightVisitor
                        hl.enter_visit(n)
                        print "<h2>AST node: {cn} at {n.location}</h2>"
                        printn "<pre><code>"
diff --git a/src/web/api_docdown.nit b/src/web/api_docdown.nit
new file mode 100644 (file)
index 0000000..3510b64
--- /dev/null
@@ -0,0 +1,272 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Nitdoc specific Markdown format handling for Nitweb
+module api_docdown
+
+import api_graph
+intrude import doc_down
+intrude import markdown::wikilinks
+import doc_commands
+
+# Docdown handler accept docdown as POST data and render it as HTML
+class APIDocdown
+       super APIHandler
+
+       # Modelbuilder used by the commands
+       var modelbuilder: ModelBuilder
+
+       # Specific Markdown processor to use within Nitweb
+       var md_processor: MarkdownProcessor is lazy do
+               var proc = new MarkdownProcessor
+               proc.emitter.decorator = new NitwebDecorator(view, modelbuilder)
+               return proc
+       end
+
+       redef fun post(req, res) do
+               res.html md_processor.process(req.body)
+       end
+end
+
+# Specific Markdown decorator for Nitweb
+#
+# We reuse all the implementation of the NitdocDecorator and add the wikilinks handling.
+class NitwebDecorator
+       super NitdocDecorator
+
+       # View used by wikilink commands to find model entities
+       var view: ModelView
+
+       # Modelbuilder used to access code
+       var modelbuilder: ModelBuilder
+
+       redef fun add_wikilink(v, token) do
+               var link = token.link
+               if link == null then return
+               var cmd = new DocCommand(link.write_to_string)
+               cmd.render(v, token, view)
+       end
+end
+
+# Same as `InlineDecorator` but with wikilink commands handling
+class NitwebInlineDecorator
+       super InlineDecorator
+
+       # View used by wikilink commands to find model entities
+       var view: ModelView
+
+       # Modelbuilder used to access code
+       var modelbuilder: ModelBuilder
+
+       redef fun add_wikilink(v, token) do
+               var link = token.link
+               if link == null then return
+               var cmd = new DocCommand(link.write_to_string)
+               cmd.render(v, token, view)
+       end
+end
+
+redef interface DocCommand
+
+       # Emit the HTML related to the execution of this doc command
+       fun render(v: MarkdownEmitter, token: TokenWikiLink, model: ModelView) do
+               write_error(v, "Not yet implemented command `{token.link or else "null"}`")
+       end
+
+       # Find the MEntity ` with `full_name`.
+       fun find_mentity(model: ModelView, full_name: nullable String): nullable MEntity do
+               if full_name == null then return null
+               return model.mentity_by_full_name(full_name.from_percent_encoding)
+       end
+
+       # Write a warning in the output
+       fun write_warning(v: MarkdownEmitter, text: String) do
+               v.emit_text "<p class='text-warning'>Warning: {text}</p>"
+       end
+
+       # Write an error in the output
+       fun write_error(v: MarkdownEmitter, text: String) do
+               v.emit_text "<p class='text-danger'>Error: {text}</p>"
+       end
+
+       # Write a link to a mentity in the output
+       fun write_mentity_link(v: MarkdownEmitter, mentity: MEntity) do
+               var link = mentity.web_url
+               var name = mentity.name
+               var mdoc = mentity.mdoc_or_fallback
+               var comment = null
+               if mdoc != null then comment = mdoc.synopsis
+               v.decorator.add_link(v, link, name, comment)
+       end
+end
+
+redef class UnknownCommand
+       redef fun render(v, token, model) do
+               var link = token.link
+               if link == null then
+                       write_error(v, "Empty command")
+                       return
+               end
+               var full_name = link.write_to_string
+               var mentity = find_mentity(model, full_name)
+               if mentity == null then
+                       write_error(v, "Unknown command `{link}`")
+                       return
+               end
+               write_mentity_link(v, mentity)
+       end
+end
+
+redef class ArticleCommand
+       redef fun render(v, token, model) do
+               if args.is_empty then
+                       write_error(v, "Expected one arg: the MEntity name")
+                       return
+               end
+               var name = args.first
+               var mentity = find_mentity(model, name)
+               if mentity == null then
+                       write_error(v, "No MEntity found for name `{name}`")
+                       return
+               end
+               var mdoc = mentity.mdoc_or_fallback
+               if mdoc == null then
+                       write_warning(v, "No MDoc for mentity `{name}`")
+                       return
+               end
+               v.add "<h3>"
+               write_mentity_link(v, mentity)
+               v.add " - "
+               v.emit_text mdoc.synopsis
+               v.add "</h3>"
+               v.add v.processor.process(mdoc.comment).write_to_string
+       end
+end
+
+redef class CommentCommand
+       redef fun render(v, token, model) do
+               if args.is_empty then
+                       write_error(v, "Expected one arg: the MEntity name")
+                       return
+               end
+               var name = args.first
+               var mentity = find_mentity(model, name)
+               if mentity == null then
+                       write_error(v, "No MEntity found for name `{name}`")
+                       return
+               end
+               var mdoc = mentity.mdoc_or_fallback
+               if mdoc == null then
+                       write_warning(v, "No MDoc for mentity `{name}`")
+                       return
+               end
+               v.add v.processor.process(mdoc.comment).write_to_string
+       end
+end
+
+redef class ListCommand
+       redef fun render(v, token, model) do
+               if args.is_empty then
+                       write_error(v, "Expected one arg: the MEntity name")
+                       return
+               end
+               var name = args.first
+               var mentity = find_mentity(model, name)
+               if mentity isa MPackage then
+                       write_list(v, mentity.mgroups)
+               else if mentity isa MGroup then
+                       var res = new Array[MEntity]
+                       res.add_all mentity.in_nesting.smallers
+                       res.add_all mentity.mmodules
+                       write_list(v, res)
+               else if mentity isa MModule then
+                       write_list(v, mentity.mclassdefs)
+               else if mentity isa MClass then
+                       write_list(v, mentity.collect_intro_mproperties(model))
+               else if mentity isa MClassDef then
+                       write_list(v, mentity.mpropdefs)
+               else if mentity isa MProperty then
+                       write_list(v, mentity.mpropdefs)
+               else
+                       write_error(v, "No list found for name `{name}`")
+               end
+       end
+
+       # Write a mentity list in the output
+       fun write_list(v: MarkdownEmitter, mentities: Collection[MEntity]) do
+               v.add "<ul>"
+               for mentity in mentities do
+                       var mdoc = mentity.mdoc_or_fallback
+                       v.add "<li>"
+                       write_mentity_link(v, mentity)
+                       if mdoc != null then
+                               v.add " - "
+                               v.emit_text mdoc.synopsis
+                       end
+                       v.add "</li>"
+               end
+               v.add "</ul>"
+       end
+end
+
+redef class CodeCommand
+       redef fun render(v, token, model) do
+               if args.is_empty then
+                       write_error(v, "Expected one arg: the MEntity name")
+                       return
+               end
+               var name = args.first
+               var mentity = find_mentity(model, name)
+               if mentity == null then
+                       write_error(v, "No MEntity found for name `{name}`")
+                       return
+               end
+               if mentity isa MClass then mentity = mentity.intro
+               if mentity isa MProperty then mentity = mentity.intro
+               var source = render_source(mentity, v.decorator.as(NitwebDecorator).modelbuilder)
+               if source == null then
+                       write_error(v, "No source for MEntity `{name}`")
+                       return
+               end
+               v.add "<pre>"
+               v.add source
+               v.add "</pre>"
+       end
+
+       # Highlight `mentity` source code.
+       private fun render_source(mentity: MEntity, modelbuilder: ModelBuilder): nullable HTMLTag do
+               var node = modelbuilder.mentity2node(mentity)
+               if node == null then return null
+               var hl = new HighlightVisitor
+               hl.enter_visit node
+               return hl.html
+       end
+end
+
+redef class GraphCommand
+       redef fun render(v, token, model) do
+               if args.is_empty then
+                       write_error(v, "Expected one arg: the MEntity name")
+                       return
+               end
+               var name = args.first
+               var mentity = find_mentity(model, name)
+               if mentity == null then
+                       write_error(v, "No MEntity found for name `{name}`")
+                       return
+               end
+               var g = new InheritanceGraph(mentity, model)
+               v.add g.draw(3, 3).to_svg
+       end
+end
diff --git a/src/web/api_graph.nit b/src/web/api_graph.nit
new file mode 100644 (file)
index 0000000..67a32e2
--- /dev/null
@@ -0,0 +1,273 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Render various graph from a model.
+module api_graph
+
+import web_base
+import dot
+import uml
+
+# Group all api handlers in one router.
+class APIGraphRouter
+       super Router
+
+       # Model to pass to handlers.
+       var model: Model
+
+       # Mainmodule to pass to handlers.
+       var mainmodule: MModule
+
+       init do
+               use("/inheritance/:id", new APIInheritanceGraph(model, mainmodule))
+       end
+end
+
+# Render a hierarchy graph for `mentity` if any.
+class APIInheritanceGraph
+       super APIHandler
+
+       redef fun get(req, res) do
+               var pdepth = req.int_arg("pdepth")
+               var cdepth = req.int_arg("cdepth")
+               var mentity = mentity_from_uri(req, res)
+               if mentity == null then
+                       res.error 404
+                       return
+               end
+               var g = new InheritanceGraph(mentity, view)
+               res.send g.draw(pdepth, cdepth).to_svg
+       end
+end
+
+# Graph for mentity hierarchies
+#
+# Recursively build parents and children list from a `center`.
+class InheritanceGraph
+       super ModelVisitor
+
+       # MEntity at the center of this graph
+       var center: MEntity
+
+       # ModelView used to filter graph
+       var view: ModelView
+
+       # Graph generated
+       var graph: DotGraph is lazy do
+               var graph = new DotGraph("package_diagram", "digraph")
+
+               graph["compound"] = "true"
+               graph["rankdir"] = "BT"
+               graph["ranksep"] = 0.3
+               graph["nodesep"] = 0.3
+
+               graph.nodes_attrs["margin"] = 0.1
+               graph.nodes_attrs["width"] = 0
+               graph.nodes_attrs["height"] = 0
+               graph.nodes_attrs["fontsize"] = 10
+               graph.nodes_attrs["fontname"] = "helvetica"
+
+               graph.edges_attrs["dir"] = "none"
+               graph.edges_attrs["color"] = "gray"
+
+               return graph
+       end
+
+       # Build the graph
+       fun draw(parents_depth, children_depth: nullable Int): DotGraph do
+               draw_node center
+               draw_parents(center, parents_depth)
+               draw_children(center, children_depth)
+               return graph
+       end
+
+       private var nodes = new HashMap[MEntity, DotElement]
+       private var done_parents = new HashSet[MEntity]
+       private var done_children = new HashSet[MEntity]
+
+       # Recursively draw parents of mentity
+       fun draw_parents(mentity: MEntity, max_depth: nullable Int, current_depth: nullable Int) do
+               if done_parents.has(mentity) then return
+               done_parents.add mentity
+               current_depth = current_depth or else 0
+               if max_depth != null and current_depth >= max_depth then
+                       from_dotdotdot(mentity)
+                       return
+               end
+               var parents = mentity.collect_parents(view)
+               if parents.length > 10 then
+                       from_dotdotdot(mentity)
+                       return
+               end
+               for parent in parents do
+                       if parent isa MModule then
+                               var mgroup = parent.mgroup
+                               if mgroup != null and mgroup.default_mmodule == parent then parent = mgroup
+                       end
+                       if parent isa MGroup then
+                               if parent.mpackage.mgroups.first == parent then parent = parent.mpackage
+                       end
+                       draw_edge(mentity, parent)
+               end
+               for parent in parents do
+                       if parent isa MModule then
+                               var mgroup = parent.mgroup
+                               if mgroup != null and mgroup.default_mmodule == parent then parent = mgroup
+                       end
+                       if parent isa MGroup then
+                               if parent.mpackage.mgroups.first == parent then parent = parent.mpackage
+                       end
+                       draw_parents(parent, max_depth, current_depth + 1)
+               end
+       end
+
+       # Recursively draw children of mentity
+       fun draw_children(mentity: MEntity, max_depth: nullable Int, current_depth: nullable Int) do
+               if done_children.has(mentity) then return
+               done_children.add mentity
+               current_depth = current_depth or else 0
+               if max_depth != null and current_depth >= max_depth then
+                       to_dotdotdot(mentity)
+                       return
+               end
+               var children = mentity.collect_children(view)
+               if children.length > 10 then
+                       to_dotdotdot(mentity)
+                       return
+               end
+               for child in children do
+                       if child isa MGroup then
+                               if child.mpackage.mgroups.first == child then child = child.mpackage
+                       end
+                       draw_edge(child, mentity)
+               end
+               for child in children do
+                       if child isa MGroup then
+                               if child.mpackage.mgroups.first == child then child = child.mpackage
+                       end
+                       draw_children(child, max_depth, current_depth + 1)
+               end
+       end
+
+       # Draw a node from a `mentity`
+       fun draw_node(mentity: MEntity): DotElement do
+               if nodes.has_key(mentity) then return nodes[mentity]
+               var node: DotElement = mentity.to_dot_node
+               if mentity == center then node = highlight(node)
+               nodes[mentity] = node
+               graph.add node
+               return node
+       end
+
+       private var edges = new HashMap2[MEntity, MEntity, DotEdge]
+
+       # Draw a edges between two mentities
+       fun draw_edge(from, to: MEntity): DotEdge do
+               if edges.has(from, to) then return edges[from, to].as(not null)
+               if edges.has(to, from) then return edges[to, from].as(not null)
+               var nfrom = draw_node(from)
+               var nto = draw_node(to)
+               var edge = new DotEdge(nfrom, nto)
+               edges[from, to] = edge
+               graph.add edge
+               return edge
+       end
+
+       private var to_dots = new HashMap[MEntity, DotElement]
+
+       # Create a link from `mentity` to a `...` node
+       fun to_dotdotdot(mentity: MEntity): DotEdge do
+               var nto = draw_node(mentity)
+               var dots = to_dots.get_or_null(mentity)
+               if dots == null then
+                       dots = dotdotdot("{nto.id}...")
+                       to_dots[mentity] = dots
+               end
+               graph.add dots
+               var edge = new DotEdge(dots, nto)
+               graph.add edge
+               return edge
+       end
+
+       private var from_dots = new HashMap[MEntity, DotElement]
+
+       # Create a link from a `...` node to a `mentity`
+       fun from_dotdotdot(mentity: MEntity): DotEdge do
+               var nfrom = draw_node(mentity)
+               var dots = to_dots.get_or_null(mentity)
+               if dots == null then
+                       dots = dotdotdot("...{nfrom.id}")
+                       from_dots[mentity] = dots
+               end
+               graph.add dots
+               var edge = new DotEdge(dots, nfrom)
+               graph.add edge
+               return edge
+       end
+
+       # Change the border color of the node
+       fun highlight(dot: DotElement): DotElement do
+               dot["color"] = "#1E9431"
+               return dot
+       end
+
+       # Generate a `...` node
+       fun dotdotdot(id: String): DotNode do
+               var node = new DotNode(id)
+               node["label"] = "..."
+               node["shape"] = "none"
+               return node
+       end
+end
+
+redef class MEntity
+       private fun to_dot_node: DotNode do
+               var node = new DotNode(full_name)
+               node["URL"] = web_url
+               node["label"] = name
+               return node
+       end
+end
+
+redef class MPackage
+       redef fun to_dot_node do
+               var node = super
+               node["shape"] = "tab"
+               return node
+       end
+end
+
+redef class MGroup
+       redef fun to_dot_node do
+               var node = super
+               node["shape"] = "folder"
+               return node
+       end
+end
+
+redef class MModule
+       redef fun to_dot_node do
+               var node = super
+               node["shape"] = "note"
+               return node
+       end
+end
+
+redef class MClass
+       redef fun to_dot_node do
+               var node = super
+               node["shape"] = "box"
+               return node
+       end
+end
index 0d4c205..6a7d0a5 100644 (file)
@@ -120,6 +120,22 @@ class APIEntity
        end
 end
 
+# List ancestors, parents, child and descendants of MEntity
+#
+# Example: `GET /entity/core::Array/inheritance`
+class APIEntityInheritance
+       super APIHandler
+
+       redef fun get(req, res) do
+               var mentity = mentity_from_uri(req, res)
+               if mentity == null then
+                       res.error 404
+                       return
+               end
+               res.json mentity.hierarchy_poset(view)[mentity]
+       end
+end
+
 # Linearize super definitions of a MClassDef or a MPropDef if any.
 #
 # Example: `GET /entity/core::Array/linearization`
@@ -166,11 +182,24 @@ class APIEntityDefs
        end
 end
 
+abstract class SVGHandler
+       super APIHandler
+
+       # Render a `dot` string as a svg image.
+       fun render_dot(dot: Text): String do
+               var proc = new ProcessDuplex("dot", "-Tsvg")
+               var svg = proc.write_and_read(dot)
+               proc.close
+               proc.wait
+               return svg
+       end
+end
+
 # Return a UML representation of MEntity.
 #
 # Example: `GET /entity/core::Array/uml`
 class APIEntityUML
-       super APIHandler
+       super SVGHandler
 
        redef fun get(req, res) do
                var mentity = mentity_from_uri(req, res)
@@ -186,16 +215,7 @@ class APIEntityUML
                        res.error 404
                        return
                end
-               res.send render_svg(dot)
-       end
-
-       # Render a `dot` string as a svg image.
-       fun render_svg(dot: String): String do
-               var proc = new ProcessDuplex("dot", "-Tsvg")
-               var svg = proc.write_and_read(dot)
-               proc.close
-               proc.wait
-               return svg
+               res.send render_dot(dot)
        end
 end
 
index 2a22001..e82a0f5 100644 (file)
@@ -15,6 +15,7 @@
 # Components required to build a web server about the nit model.
 module web
 
-import web_actions
 import model_api
 import api_catalog
+import api_graph
+import api_docdown
diff --git a/src/web/web_actions.nit b/src/web/web_actions.nit
deleted file mode 100644 (file)
index cb193fd..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# This file is part of NIT ( http://www.nitlanguage.org ).
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Nitcorn actions used by the nitweb server.
-module web_actions
-
-import web_views
-import uml
-
-# Display the tree of all loaded mentities.
-class TreeAction
-       super ModelHandler
-
-       redef fun get(req, res) do
-               var model = init_model_view(req)
-               var view = new HtmlHomePage(model.to_tree)
-               res.send_view(view)
-       end
-end
-
-# Display the doc of a MEntity.
-class DocAction
-       super ModelHandler
-
-       # Modelbuilder used to access sources.
-       var modelbuilder: ModelBuilder
-
-       redef fun get(req, res) do
-               var namespace = req.param("namespace")
-               var model = init_model_view(req)
-               var mentity = find_mentity(model, namespace)
-               if mentity == null then
-                       res.error(404)
-                       return
-               end
-               var view = new HtmlDocPage(modelbuilder, mentity)
-               res.send_view(view)
-       end
-end
index fcaac53..20d0b05 100644 (file)
@@ -87,21 +87,10 @@ abstract class APIHandler
        end
 end
 
-# A NitView is rendered by an action.
-interface NitView
-       # Renders this view and returns something that can be written to a HTTP response.
-       fun render: Writable is abstract
-end
-
-redef class HttpResponse
-       # Render a NitView as response.
-       fun send_view(view: NitView, status: nullable Int) do send(view.render, status)
-end
-
 redef class MEntity
 
        # URL to `self` within the web interface.
-       fun web_url: String is abstract
+       fun web_url: String do return "/doc/" / full_name
 
        # URL to `self` within the JSON api.
        fun api_url: String do return "/api/entity/" / full_name
@@ -131,6 +120,16 @@ redef class MEntityRef
                        modifiers.add modifier
                end
                obj["modifiers"] = modifiers
+               var mentity = self.mentity
+               if mentity isa MMethod then
+                       obj["msignature"] = mentity.intro.msignature
+               else if mentity isa MMethodDef then
+                       obj["msignature"] = mentity.msignature
+               else if mentity isa MVirtualTypeProp then
+                       obj["bound"] = to_mentity_ref(mentity.intro.bound)
+               else if mentity isa MVirtualTypeDef then
+                       obj["bound"] = to_mentity_ref(mentity.bound)
+               end
                return obj
        end
 end
@@ -150,17 +149,7 @@ redef class MDoc
        end
 end
 
-redef class MPackage
-       redef var web_url = "/package/{full_name}" is lazy
-end
-
-redef class MGroup
-       redef var web_url = "/group/{full_name}" is lazy
-end
-
 redef class MModule
-       redef var web_url = "/module/{full_name}" is lazy
-
        redef fun api_json(handler) do
                var obj = super
                obj["intro_mclassdefs"] = to_mentity_refs(collect_intro_mclassdefs(private_view))
@@ -171,22 +160,17 @@ redef class MModule
 end
 
 redef class MClass
-       redef var web_url = "/class/{full_name}" is lazy
-
        redef fun api_json(handler) do
                var obj = super
                obj["all_mproperties"] = to_mentity_refs(collect_accessible_mproperties(private_view))
                obj["intro_mproperties"] = to_mentity_refs(collect_intro_mproperties(private_view))
                obj["redef_mproperties"] = to_mentity_refs(collect_redef_mproperties(private_view))
-               var poset = hierarchy_poset(handler.mainmodule, private_view)
-               obj["parents"] = to_mentity_refs(poset[self].direct_greaters)
+               obj["parents"] = to_mentity_refs(collect_parents(private_view))
                return obj
        end
 end
 
 redef class MClassDef
-       redef var web_url = "/classdef/{full_name}" is lazy
-
        redef fun json do
                var obj = super
                obj["intro"] = to_mentity_ref(mclass.intro)
@@ -203,8 +187,6 @@ redef class MClassDef
 end
 
 redef class MProperty
-       redef var web_url = "/property/{full_name}" is lazy
-
        redef fun json do
                var obj = super
                obj["intro_mclass"] = to_mentity_ref(intro_mclassdef.mclass)
@@ -214,8 +196,6 @@ redef class MProperty
 end
 
 redef class MPropDef
-       redef var web_url = "/propdef/{full_name}" is lazy
-
        redef fun json do
                var obj = super
                obj["intro"] = to_mentity_ref(mproperty.intro)
@@ -242,3 +222,20 @@ end
 redef class MVirtualType
        redef var web_url = mproperty.web_url is lazy
 end
+
+redef class POSetElement[E]
+       super Jsonable
+
+       # Return JSON representation of `self`.
+       fun json: JsonObject do
+               assert self isa POSetElement[MEntity]
+               var obj = new JsonObject
+               obj["greaters"] = to_mentity_refs(greaters)
+               obj["direct_greaters"] = to_mentity_refs(direct_greaters)
+               obj["direct_smallers"] = to_mentity_refs(direct_smallers)
+               obj["smallers"] = to_mentity_refs(smallers)
+               return obj
+       end
+
+       redef fun to_json do return json.to_json
+end
diff --git a/src/web/web_views.nit b/src/web/web_views.nit
deleted file mode 100644 (file)
index d8f8c9f..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# This file is part of NIT ( http://www.nitlanguage.org ).
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Nitcorn actions used by the nitweb server.
-module web_views
-
-import web_base
-import model_html
-import highlight
-import markdown
-
-# Html homepage for the `nitweb` server.
-class HtmlHomePage
-       super NitView
-
-       # Loaded model to display.
-       var tree: MEntityTree
-
-       redef fun render do
-               var tpl = new Template
-               tpl.add new Header(1, "Loaded model")
-               tpl.add tree.html_list
-               return tpl
-       end
-end
-
-# Display the source for each mentities
-class HtmlSourcePage
-       super NitView
-
-       # Modelbuilder used to access sources.
-       var modelbuilder: ModelBuilder
-
-       # MEntity to display
-       var mentity: MEntity
-
-       # HiglightVisitor used to hilight the source code
-       var hl = new HighlightVisitor
-
-       redef fun render do
-               var tpl = new Template
-               tpl.add new Header(1, "Source Code")
-               tpl.add render_source
-               return tpl
-       end
-
-       private fun render_source: Template do
-               var node = modelbuilder.mentity2node(mentity)
-               var tpl = new Template
-               tpl.add new Header(3, "Source code")
-               if node == null then
-                       tpl.add "<p>Source for {mentity.html_name} not found.<p>"
-               else
-                       hl.enter_visit node
-                       tpl.add "<pre><code>"
-                       tpl.add hl.html
-                       tpl.add "</code></pre>"
-               end
-               return tpl
-       end
-end
-
-# Display the mdoc of the mentities.
-class HtmlDocPage
-       super HtmlSourcePage
-
-       redef fun render do
-               var tpl = new Template
-               tpl.add new Header(1, mentity.html_name)
-               tpl.add "<p>"
-               tpl.add mentity.html_declaration
-               tpl.add "</p>"
-               tpl.add "<br>"
-               var mdoc = mentity.mdoc
-               if mdoc != null then
-                       tpl.add mdoc.content.join("\n").md_to_html
-               end
-               tpl.add "<br>"
-               tpl.add render_source
-               return tpl
-       end
-end
index acb6c8e..cf89e02 100644 (file)
 </span></span><span class="line" id="L16">
 </span><span class="line" id="L17"><span class="nc_k">import</span> <span class="nc_k">end</span>
 </span><span class="line" id="L18">
-</span><span class="nc_cdef foldable" id="base_simple3$Object"><span class="line" id="L19"><span class="nc_k">interface</span> <span class="nc_t nc_def popupable" title="class Object" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;class Object&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Object&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; sub-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Bool&#34;&gt;Bool&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys&#34;&gt;Sys&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Object</span>
+</span><span class="nc_cdef foldable" id="base_simple3$Object"><span class="line" id="L19"><span class="nc_k">interface</span> <span class="nc_t nc_def popupable" title="class Object" data-title="&lt;a href=&#34;#base_simple3$Object&#34;&gt;class Object&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Object&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; sub-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3$Bool&#34;&gt;base_simple3$Bool&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3$A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3$B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3$C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3$Sys&#34;&gt;base_simple3$Sys&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Object</span>
 </span><span class="line" id="L20"><span class="nc_k">end</span>
 </span></span><span class="line" id="L21">
-</span><span class="nc_cdef foldable" id="base_simple3$Bool"><span class="line" id="L22"><span class="nc_k">enum</span> <span class="nc_t nc_def popupable" title="class Bool" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Bool&#34;&gt;class Bool&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Bool&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Bool</span>
+</span><span class="nc_cdef foldable" id="base_simple3$Bool"><span class="line" id="L22"><span class="nc_k">enum</span> <span class="nc_t nc_def popupable" title="class Bool" data-title="&lt;a href=&#34;#base_simple3$Bool&#34;&gt;class Bool&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Bool&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3$Object&#34;&gt;base_simple3$Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Bool</span>
 </span><span class="line" id="L23"><span class="nc_k">end</span>
 </span></span><span class="line" id="L24">
-</span><span class="nc_cdef foldable" id="base_simple3$Int"><span class="line" id="L25"><span class="nc_k">enum</span> <span class="nc_t nc_def popupable" title="class Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;class Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Int&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span>
-</span><span class="nc_pdef foldable" id="base_simple3$Int$output"><span class="line" id="L26">        <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;output&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">output</span></span> <span class="nc_k">is</span> <span class="nc_i">intern</span>
+</span><span class="nc_cdef foldable" id="base_simple3$Int"><span class="line" id="L25"><span class="nc_k">enum</span> <span class="nc_t nc_def popupable" title="class Int" data-title="&lt;a href=&#34;#base_simple3$Int&#34;&gt;class Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Int&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3$Object&#34;&gt;base_simple3$Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span>
+</span><span class="nc_pdef foldable" id="base_simple3$Int$output"><span class="line" id="L26">        <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;output&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">output</span></span> <span class="nc_k">is</span> <span class="nc_i">intern</span>
 </span></span><span class="line" id="L27"><span class="nc_k">end</span>
 </span></span><span class="line" id="L28">
-</span><span class="nc_cdef foldable" id="base_simple3$A"><span class="line" id="L29"><span class="nc_k">class</span> <span class="nc_t nc_def popupable" title="class A" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;class A&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;A&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">A</span>
-</span><span class="nc_pdef foldable" id="base_simple3$A$init"><span class="line" id="L30">    <span class="nc_k">init</span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span></span><span class="nc_pdef foldable" id="base_simple3$A$run"><span class="line" id="L31">      <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$A$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;run&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">run</span></span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">6</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="nc_cdef foldable" id="base_simple3$A"><span class="line" id="L29"><span class="nc_k">class</span> <span class="nc_t nc_def popupable" title="class A" data-title="&lt;a href=&#34;#base_simple3$A&#34;&gt;class A&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;A&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3$Object&#34;&gt;base_simple3$Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">A</span>
+</span><span class="nc_pdef foldable" id="base_simple3$A$init"><span class="line" id="L30">    <span class="nc_k">init</span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span></span><span class="nc_pdef foldable" id="base_simple3$A$run"><span class="line" id="L31">      <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$A$run" data-title="&lt;a href=&#34;#base_simple3$A$run&#34;&gt;base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;run&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">run</span></span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">6</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
 </span></span><span class="line" id="L32"><span class="nc_k">end</span>
 </span></span><span class="line" id="L33">
-</span><span class="nc_cdef foldable" id="base_simple3$B"><span class="line" id="L34"><span class="nc_k">class</span> <span class="nc_t nc_def popupable" title="class B" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;class B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;B&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">B</span>
-</span><span class="nc_pdef foldable" id="base_simple3$B$_val"><a id="base_simple3$B$val"></a><a id="base_simple3$B$val="></a><span class="line" id="L35">     <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$B$val" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span>
-</span></span><span class="nc_pdef foldable" id="base_simple3$B$init"><span class="line" id="L36">     <span class="nc_k popupable" style="border-bottom: solid 2px red" title="Messages" data-content="&lt;div&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;1 message(s)&lt;&#47;b&gt; &lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;Warning: init with signature in base_simple3$B&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">init</span><span>(</span><span class="nc_i nc_v popupable" title="v: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;v:&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">v</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span><span>)</span>
+</span><span class="nc_cdef foldable" id="base_simple3$B"><span class="line" id="L34"><span class="nc_k">class</span> <span class="nc_t nc_def popupable" title="class B" data-title="&lt;a href=&#34;#base_simple3$B&#34;&gt;class B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;B&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3$Object&#34;&gt;base_simple3$Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">B</span>
+</span><span class="nc_pdef foldable" id="base_simple3$B$_val"><a id="base_simple3$B$val"></a><a id="base_simple3$B$val="></a><span class="line" id="L35">     <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$B$val" data-title="&lt;a href=&#34;#base_simple3$B$val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val&lt;span&gt;: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span>
+</span></span><span class="nc_pdef foldable" id="base_simple3$B$init"><span class="line" id="L36">     <span class="nc_k popupable" style="border-bottom: solid 2px red" title="Messages" data-content="&lt;div&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;1 message(s)&lt;&#47;b&gt; &lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;Warning: init with signature in base_simple3$B&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">init</span><span>(</span><span class="nc_i nc_v popupable" title="v: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;v:&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">v</span><span>:</span> <span class="nc_t popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span><span>)</span>
 </span><span class="line" id="L37">    <span class="nc_k">do</span>
-</span><span class="line" id="L38">            <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">7</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span><span class="line" id="L39">            <span class="nc_k popupable" title="B" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">self</span><span class="popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span> <span class="popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">=</span> <span class="nc_i nc_v popupable" title="v: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;v:&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">v</span>
+</span><span class="line" id="L38">            <span class="nc_l popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">7</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="line" id="L39">            <span class="nc_k popupable" title="B" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">self</span><span class="popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;#base_simple3$B$val=&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$B$val=&#34;&gt;base_simple3$B$val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;#base_simple3$B$val=&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$B$val=&#34;&gt;base_simple3$B$val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span> <span class="popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;#base_simple3$B$val=&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$B$val=&#34;&gt;base_simple3$B$val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">=</span> <span class="nc_i nc_v popupable" title="v: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;v:&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">v</span>
 </span><span class="line" id="L40">    <span class="nc_k">end</span>
-</span></span><span class="nc_pdef foldable" id="base_simple3$B$run"><span class="line" id="L41">      <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$B$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;run&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">run</span></span> <span class="nc_k">do</span> <span class="nc_i popupable" title="call base_simple3$B$val" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val&#34;&gt;call base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$val&#34;&gt;val&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span></span><span class="nc_pdef foldable" id="base_simple3$B$run"><span class="line" id="L41">      <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$B$run" data-title="&lt;a href=&#34;#base_simple3$B$run&#34;&gt;base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;run&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">run</span></span> <span class="nc_k">do</span> <span class="nc_i popupable" title="call base_simple3$B$val" data-title="&lt;a href=&#34;#base_simple3$B$val&#34;&gt;call base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$B$val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
 </span></span><span class="line" id="L42"><span class="nc_k">end</span>
 </span></span><span class="line" id="L43">
-</span><span class="nc_cdef foldable" id="base_simple3$C"><span class="line" id="L44"><span class="nc_k">class</span> <span class="nc_t nc_def popupable" title="class C" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;class C&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;C&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">C</span>
-</span><span class="nc_pdef foldable" id="base_simple3$C$_val1"><a id="base_simple3$C$val1"></a><a id="base_simple3$C$val1="></a><span class="line" id="L45">  <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val1" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val1&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span>
-</span></span><span class="nc_pdef foldable" id="base_simple3$C$_val2"><a id="base_simple3$C$val2"></a><a id="base_simple3$C$val2="></a><span class="line" id="L46">   <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val2" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val2&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">10</span>
+</span><span class="nc_cdef foldable" id="base_simple3$C"><span class="line" id="L44"><span class="nc_k">class</span> <span class="nc_t nc_def popupable" title="class C" data-title="&lt;a href=&#34;#base_simple3$C&#34;&gt;class C&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;C&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3$Object&#34;&gt;base_simple3$Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">C</span>
+</span><span class="nc_pdef foldable" id="base_simple3$C$_val1"><a id="base_simple3$C$val1"></a><a id="base_simple3$C$val1="></a><span class="line" id="L45">  <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val1" data-title="&lt;a href=&#34;#base_simple3$C$val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val1&lt;span&gt;: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span>
+</span></span><span class="nc_pdef foldable" id="base_simple3$C$_val2"><a id="base_simple3$C$val2"></a><a id="base_simple3$C$val2="></a><span class="line" id="L46">   <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val2" data-title="&lt;a href=&#34;#base_simple3$C$val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val2&lt;span&gt;: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">10</span>
 </span></span><span class="line" id="L47"><span class="nc_k">end</span>
 </span></span><span class="line" id="L48">
-</span><span class="nc_pdef foldable" id="base_simple3$Sys$foo"><span class="line" id="L49"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$foo" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$foo&#34;&gt;base_simple3$Sys$foo&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;foo&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">foo</span></span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">2</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span></span><span class="nc_pdef foldable" id="base_simple3$Sys$bar"><span class="line" id="L50"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$bar" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$bar&#34;&gt;base_simple3$Sys$bar&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;bar&lt;span&gt;(i: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">bar</span></span><span>(</span><span class="nc_i nc_v popupable" title="i: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;i:&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">i</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span><span>)</span> <span class="nc_k">do</span> <span class="nc_i nc_v popupable" title="i: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;i:&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">i</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span></span><span class="nc_pdef foldable" id="base_simple3$Sys$baz"><span class="line" id="L51"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$baz" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$baz&#34;&gt;base_simple3$Sys$baz&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;baz&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">baz</span></span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span class="nc_k">do</span> <span class="nc_k">return</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">4</span>
+</span><span class="nc_pdef foldable" id="base_simple3$Sys$foo"><span class="line" id="L49"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$foo" data-title="&lt;a href=&#34;#base_simple3$Sys$foo&#34;&gt;base_simple3$Sys$foo&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;foo&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">foo</span></span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">2</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span></span><span class="nc_pdef foldable" id="base_simple3$Sys$bar"><span class="line" id="L50"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$bar" data-title="&lt;a href=&#34;#base_simple3$Sys$bar&#34;&gt;base_simple3$Sys$bar&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;bar&lt;span&gt;(i: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">bar</span></span><span>(</span><span class="nc_i nc_v popupable" title="i: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;i:&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">i</span><span>:</span> <span class="nc_t popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span><span>)</span> <span class="nc_k">do</span> <span class="nc_i nc_v popupable" title="i: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;i:&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">i</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span></span><span class="nc_pdef foldable" id="base_simple3$Sys$baz"><span class="line" id="L51"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$baz" data-title="&lt;a href=&#34;#base_simple3$Sys$baz&#34;&gt;base_simple3$Sys$baz&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;baz&lt;span&gt;: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">baz</span></span><span>:</span> <span class="nc_t popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span class="nc_k">do</span> <span class="nc_k">return</span> <span class="nc_l popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">4</span>
 </span></span><span class="line" id="L52">
-</span><span class="nc_pdef foldable" id="base_simple3$Sys$main"><span class="line" id="L53"><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">1</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span><span class="line" id="L54"><span class="nc_i popupable" title="call base_simple3$Sys$foo" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$foo&#34;&gt;call base_simple3$Sys$foo&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys$foo&#34;&gt;foo&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">foo</span>
-</span><span class="line" id="L55"><span class="nc_i popupable" title="call base_simple3$Sys$bar" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$bar&#34;&gt;call base_simple3$Sys$bar&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys$bar&#34;&gt;bar&lt;&#47;a&gt;&lt;span&gt;(i: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">bar</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">3</span><span>)</span>
-</span><span class="line" id="L56"><span class="nc_i popupable" title="call base_simple3$Sys$baz" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$baz&#34;&gt;call base_simple3$Sys$baz&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys$baz&#34;&gt;baz&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">baz</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="nc_pdef foldable" id="base_simple3$Sys$main"><span class="line" id="L53"><span class="nc_l popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">1</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="line" id="L54"><span class="nc_i popupable" title="call base_simple3$Sys$foo" data-title="&lt;a href=&#34;#base_simple3$Sys$foo&#34;&gt;call base_simple3$Sys$foo&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Sys$foo&#34;&gt;base_simple3$Sys$foo&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">foo</span>
+</span><span class="line" id="L55"><span class="nc_i popupable" title="call base_simple3$Sys$bar" data-title="&lt;a href=&#34;#base_simple3$Sys$bar&#34;&gt;call base_simple3$Sys$bar&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Sys$bar&#34;&gt;base_simple3$Sys$bar&lt;&#47;a&gt;&lt;span&gt;(i: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">bar</span><span>(</span><span class="nc_l popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">3</span><span>)</span>
+</span><span class="line" id="L56"><span class="nc_i popupable" title="call base_simple3$Sys$baz" data-title="&lt;a href=&#34;#base_simple3$Sys$baz&#34;&gt;call base_simple3$Sys$baz&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Sys$baz&#34;&gt;base_simple3$Sys$baz&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">baz</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
 </span><span class="line" id="L57">
-</span><span class="line" id="L58"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="a: A" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;a:&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">a</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$A$init" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A$init&#34;&gt;call base_simple3$A$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A$init&#34;&gt;init&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;b&gt;intro&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object$init&#34;&gt;in base_simple3$Object&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="A" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">A</span>
-</span><span class="line" id="L59"><span class="nc_i nc_v popupable" title="a: A" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;a:&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">a</span><span class="popupable" title="call base_simple3$A$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;call base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$A$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;call base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">run</span>
+</span><span class="line" id="L58"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="a: A" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;a:&lt;a href=&#34;#base_simple3$A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">a</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$A$init" data-title="&lt;a href=&#34;#base_simple3$A$init&#34;&gt;call base_simple3$A$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$A$init&#34;&gt;base_simple3$A$init&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;b&gt;intro&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Object$init&#34;&gt;in base_simple3$Object&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="A" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">A</span>
+</span><span class="line" id="L59"><span class="nc_i nc_v popupable" title="a: A" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;a:&lt;a href=&#34;#base_simple3$A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">a</span><span class="popupable" title="call base_simple3$A$run" data-title="&lt;a href=&#34;#base_simple3$A$run&#34;&gt;call base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$A$run&#34;&gt;base_simple3$A$run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$A$run" data-title="&lt;a href=&#34;#base_simple3$A$run&#34;&gt;call base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$A$run&#34;&gt;base_simple3$A$run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">run</span>
 </span><span class="line" id="L60">
-</span><span class="line" id="L61"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="b: B" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;b:&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">b</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$B$init" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$init&#34;&gt;call base_simple3$B$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$init&#34;&gt;init&lt;&#47;a&gt;&lt;span&gt;(v: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="B" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">B</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">8</span><span>)</span>
-</span><span class="line" id="L62"><span class="nc_i nc_v popupable" title="b: B" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;b:&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">b</span><span class="popupable" title="call base_simple3$B$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;call base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;call base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">run</span>
+</span><span class="line" id="L61"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="b: B" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;b:&lt;a href=&#34;#base_simple3$B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">b</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$B$init" data-title="&lt;a href=&#34;#base_simple3$B$init&#34;&gt;call base_simple3$B$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$B$init&#34;&gt;base_simple3$B$init&lt;&#47;a&gt;&lt;span&gt;(v: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="B" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">B</span><span>(</span><span class="nc_l popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">8</span><span>)</span>
+</span><span class="line" id="L62"><span class="nc_i nc_v popupable" title="b: B" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;b:&lt;a href=&#34;#base_simple3$B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">b</span><span class="popupable" title="call base_simple3$B$run" data-title="&lt;a href=&#34;#base_simple3$B$run&#34;&gt;call base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$B$run&#34;&gt;base_simple3$B$run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$run" data-title="&lt;a href=&#34;#base_simple3$B$run&#34;&gt;call base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$B$run&#34;&gt;base_simple3$B$run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">run</span>
 </span><span class="line" id="L63">
-</span><span class="line" id="L64"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$C$init" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$init&#34;&gt;call base_simple3$C$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$init&#34;&gt;init&lt;&#47;a&gt;&lt;span&gt;(val1: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;b&gt;intro&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object$init&#34;&gt;in base_simple3$Object&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="C" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">C</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">9</span><span>)</span>
-</span><span class="line" id="L65"><span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val1" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;call base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;val1&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val1" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;call base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;val1&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span><span class="line" id="L66"><span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val2" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;call base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;val2&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val2" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;call base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;val2&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="line" id="L64"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;#base_simple3$C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$C$init" data-title="&lt;a href=&#34;#base_simple3$C$init&#34;&gt;call base_simple3$C$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$C$init&#34;&gt;base_simple3$C$init&lt;&#47;a&gt;&lt;span&gt;(val1: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;b&gt;intro&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Object$init&#34;&gt;in base_simple3$Object&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="C" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">C</span><span>(</span><span class="nc_l popupable" title="Int" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">9</span><span>)</span>
+</span><span class="line" id="L65"><span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;#base_simple3$C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val1" data-title="&lt;a href=&#34;#base_simple3$C$val1&#34;&gt;call base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$C$val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val1" data-title="&lt;a href=&#34;#base_simple3$C$val1&#34;&gt;call base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$C$val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="line" id="L66"><span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;#base_simple3$C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val2" data-title="&lt;a href=&#34;#base_simple3$C$val2&#34;&gt;call base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$C$val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val2" data-title="&lt;a href=&#34;#base_simple3$C$val2&#34;&gt;call base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$C$val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3$Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
 </span></span></span>
\ No newline at end of file
index b71ba7f..e6ac401 100644 (file)
 
        </head><body>
        
-<h1>base_simple3$Int$output</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$Int$output"><span class="line" id="L26">      <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;output&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">output</span></span> <span class="nc_k">is</span> <span class="nc_i">intern</span></span></span></span></code></pre>
-<h1>base_simple3$A$Object::init</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$A$init"><span class="line" id="L30">  <span class="nc_k">init</span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
-<h1>base_simple3$A$run</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$A$run"><span class="line" id="L31">   <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$A$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;run&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">run</span></span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">6</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
-<h1>base_simple3$B$_val</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$B$_val"><a id="base_simple3$B$val"></a><a id="base_simple3$B$val="></a><span class="line" id="L35">   <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$B$val" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span></span></span></span></code></pre>
-<h1>base_simple3$B$val</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$B$_val"><a id="base_simple3$B$val"></a><a id="base_simple3$B$val="></a><span class="line" id="L35">   <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$B$val" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span></span></span></span></code></pre>
-<h1>base_simple3$B$val=</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$B$_val"><a id="base_simple3$B$val"></a><a id="base_simple3$B$val="></a><span class="line" id="L35">   <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$B$val" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span></span></span></span></code></pre>
-<h1>base_simple3$B$init</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$B$init"><span class="line" id="L36">  <span class="nc_k popupable" style="border-bottom: solid 2px red" title="Messages" data-content="&lt;div&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;1 message(s)&lt;&#47;b&gt; &lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;Warning: init with signature in base_simple3$B&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">init</span><span>(</span><span class="nc_i nc_v popupable" title="v: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;v:&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">v</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span><span>)</span>
+<h1 id="base_simple3___base_simple3__Int___output">base_simple3$Int$output</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$Int$output"><span class="line" id="L26">      <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;output&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">output</span></span> <span class="nc_k">is</span> <span class="nc_i">intern</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__A___Object__init">base_simple3$A$Object::init</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$A$init"><span class="line" id="L30">  <span class="nc_k">init</span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__A___run">base_simple3$A$run</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$A$run"><span class="line" id="L31">   <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$A$run" data-title="&lt;a href=&#34;#base_simple3___base_simple3__A___run&#34;&gt;base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;run&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">run</span></span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">6</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__B____val">base_simple3$B$_val</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$B$_val"><a id="base_simple3$B$val"></a><a id="base_simple3$B$val="></a><span class="line" id="L35">   <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$B$val" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__B___val">base_simple3$B$val</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$B$_val"><a id="base_simple3$B$val"></a><a id="base_simple3$B$val="></a><span class="line" id="L35">   <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$B$val" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__B___val_61d">base_simple3$B$val=</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$B$_val"><a id="base_simple3$B$val"></a><a id="base_simple3$B$val="></a><span class="line" id="L35">   <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$B$val" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__B___init">base_simple3$B$init</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$B$init"><span class="line" id="L36">  <span class="nc_k popupable" style="border-bottom: solid 2px red" title="Messages" data-content="&lt;div&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;1 message(s)&lt;&#47;b&gt; &lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;Warning: init with signature in base_simple3$B&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">init</span><span>(</span><span class="nc_i nc_v popupable" title="v: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;v:&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">v</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span><span>)</span>
 </span><span class="line" id="L37">    <span class="nc_k">do</span>
-</span><span class="line" id="L38">            <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">7</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span><span class="line" id="L39">            <span class="nc_k popupable" title="B" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">self</span><span class="popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span> <span class="popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">=</span> <span class="nc_i nc_v popupable" title="v: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;v:&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">v</span>
+</span><span class="line" id="L38">            <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">7</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="line" id="L39">            <span class="nc_k popupable" title="B" data-title="&lt;a href=&#34;#base_simple3__B&#34;&gt;B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">self</span><span class="popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___val_61d&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___val_61d&#34;&gt;base_simple3$B$val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___val_61d&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___val_61d&#34;&gt;base_simple3$B$val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span> <span class="popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___val_61d&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___val_61d&#34;&gt;base_simple3$B$val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">=</span> <span class="nc_i nc_v popupable" title="v: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;v:&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">v</span>
 </span><span class="line" id="L40">    <span class="nc_k">end</span></span></span></span></code></pre>
-<h1>base_simple3$B$run</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$B$run"><span class="line" id="L41">   <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$B$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;run&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">run</span></span> <span class="nc_k">do</span> <span class="nc_i popupable" title="call base_simple3$B$val" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val&#34;&gt;call base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$val&#34;&gt;val&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
-<h1>base_simple3$C$_val1</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$C$_val1"><a id="base_simple3$C$val1"></a><a id="base_simple3$C$val1="></a><span class="line" id="L45">        <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val1" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val1&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span></span></span></span></code></pre>
-<h1>base_simple3$C$val1</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$C$_val1"><a id="base_simple3$C$val1"></a><a id="base_simple3$C$val1="></a><span class="line" id="L45">        <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val1" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val1&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span></span></span></span></code></pre>
-<h1>base_simple3$C$val1=</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$C$_val1"><a id="base_simple3$C$val1"></a><a id="base_simple3$C$val1="></a><span class="line" id="L45">        <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val1" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val1&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span></span></span></span></code></pre>
-<h1>base_simple3$C$_val2</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$C$_val2"><a id="base_simple3$C$val2"></a><a id="base_simple3$C$val2="></a><span class="line" id="L46">        <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val2" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val2&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">10</span></span></span></span></code></pre>
-<h1>base_simple3$C$val2</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$C$_val2"><a id="base_simple3$C$val2"></a><a id="base_simple3$C$val2="></a><span class="line" id="L46">        <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val2" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val2&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">10</span></span></span></span></code></pre>
-<h1>base_simple3$C$val2=</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$C$_val2"><a id="base_simple3$C$val2"></a><a id="base_simple3$C$val2="></a><span class="line" id="L46">        <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val2" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val2&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">10</span></span></span></span></code></pre>
-<h1>base_simple3$Sys$foo</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$Sys$foo"><span class="line" id="L49"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$foo" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$foo&#34;&gt;base_simple3$Sys$foo&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;foo&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">foo</span></span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">2</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
-<h1>base_simple3$Sys$bar</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$Sys$bar"><span class="line" id="L50"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$bar" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$bar&#34;&gt;base_simple3$Sys$bar&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;bar&lt;span&gt;(i: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">bar</span></span><span>(</span><span class="nc_i nc_v popupable" title="i: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;i:&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">i</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span><span>)</span> <span class="nc_k">do</span> <span class="nc_i nc_v popupable" title="i: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;i:&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">i</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
-<h1>base_simple3$Sys$baz</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$Sys$baz"><span class="line" id="L51"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$baz" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$baz&#34;&gt;base_simple3$Sys$baz&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;baz&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">baz</span></span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span class="nc_k">do</span> <span class="nc_k">return</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">4</span></span></span></span></code></pre>
-<h1>base_simple3$Sys$main</h1>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$Sys$main"><span class="line" id="L53"><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">1</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span><span class="line" id="L54"><span class="nc_i popupable" title="call base_simple3$Sys$foo" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$foo&#34;&gt;call base_simple3$Sys$foo&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys$foo&#34;&gt;foo&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">foo</span>
-</span><span class="line" id="L55"><span class="nc_i popupable" title="call base_simple3$Sys$bar" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$bar&#34;&gt;call base_simple3$Sys$bar&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys$bar&#34;&gt;bar&lt;&#47;a&gt;&lt;span&gt;(i: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">bar</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">3</span><span>)</span>
-</span><span class="line" id="L56"><span class="nc_i popupable" title="call base_simple3$Sys$baz" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$baz&#34;&gt;call base_simple3$Sys$baz&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys$baz&#34;&gt;baz&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">baz</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+<h1 id="base_simple3___base_simple3__B___run">base_simple3$B$run</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$B$run"><span class="line" id="L41">   <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$B$run" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___run&#34;&gt;base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;run&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">run</span></span> <span class="nc_k">do</span> <span class="nc_i popupable" title="call base_simple3$B$val" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___val&#34;&gt;call base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__C____val1">base_simple3$C$_val1</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$C$_val1"><a id="base_simple3$C$val1"></a><a id="base_simple3$C$val1="></a><span class="line" id="L45">        <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val1" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val1&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__C___val1">base_simple3$C$val1</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$C$_val1"><a id="base_simple3$C$val1"></a><a id="base_simple3$C$val1="></a><span class="line" id="L45">        <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val1" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val1&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__C___val1_61d">base_simple3$C$val1=</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$C$_val1"><a id="base_simple3$C$val1"></a><a id="base_simple3$C$val1="></a><span class="line" id="L45">        <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val1" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val1&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__C____val2">base_simple3$C$_val2</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$C$_val2"><a id="base_simple3$C$val2"></a><a id="base_simple3$C$val2="></a><span class="line" id="L46">        <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val2" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val2&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">10</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__C___val2">base_simple3$C$val2</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$C$_val2"><a id="base_simple3$C$val2"></a><a id="base_simple3$C$val2="></a><span class="line" id="L46">        <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val2" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val2&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">10</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__C___val2_61d">base_simple3$C$val2=</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$C$_val2"><a id="base_simple3$C$val2"></a><a id="base_simple3$C$val2="></a><span class="line" id="L46">        <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val2" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val2&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">10</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__Sys___foo">base_simple3$Sys$foo</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$Sys$foo"><span class="line" id="L49"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$foo" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Sys___foo&#34;&gt;base_simple3$Sys$foo&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;foo&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">foo</span></span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">2</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__Sys___bar">base_simple3$Sys$bar</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$Sys$bar"><span class="line" id="L50"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$bar" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Sys___bar&#34;&gt;base_simple3$Sys$bar&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;bar&lt;span&gt;(i: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">bar</span></span><span>(</span><span class="nc_i nc_v popupable" title="i: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;i:&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">i</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span><span>)</span> <span class="nc_k">do</span> <span class="nc_i nc_v popupable" title="i: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;i:&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">i</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__Sys___baz">base_simple3$Sys$baz</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$Sys$baz"><span class="line" id="L51"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$baz" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Sys___baz&#34;&gt;base_simple3$Sys$baz&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;baz&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">baz</span></span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span class="nc_k">do</span> <span class="nc_k">return</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">4</span></span></span></span></code></pre>
+<h1 id="base_simple3___base_simple3__Sys___main">base_simple3$Sys$main</h1>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$Sys$main"><span class="line" id="L53"><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">1</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="line" id="L54"><span class="nc_i popupable" title="call base_simple3$Sys$foo" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Sys___foo&#34;&gt;call base_simple3$Sys$foo&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Sys___foo&#34;&gt;base_simple3$Sys$foo&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">foo</span>
+</span><span class="line" id="L55"><span class="nc_i popupable" title="call base_simple3$Sys$bar" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Sys___bar&#34;&gt;call base_simple3$Sys$bar&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Sys___bar&#34;&gt;base_simple3$Sys$bar&lt;&#47;a&gt;&lt;span&gt;(i: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">bar</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">3</span><span>)</span>
+</span><span class="line" id="L56"><span class="nc_i popupable" title="call base_simple3$Sys$baz" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Sys___baz&#34;&gt;call base_simple3$Sys$baz&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Sys___baz&#34;&gt;base_simple3$Sys$baz&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">baz</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
 </span><span class="line" id="L57">
-</span><span class="line" id="L58"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="a: A" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;a:&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">a</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$A$init" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A$init&#34;&gt;call base_simple3$A$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A$init&#34;&gt;init&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;b&gt;intro&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object$init&#34;&gt;in base_simple3$Object&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="A" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">A</span>
-</span><span class="line" id="L59"><span class="nc_i nc_v popupable" title="a: A" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;a:&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">a</span><span class="popupable" title="call base_simple3$A$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;call base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$A$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;call base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">run</span>
+</span><span class="line" id="L58"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="a: A" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;a:&lt;a href=&#34;#base_simple3___base_simple3__A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">a</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$A$init" data-title="&lt;a href=&#34;#base_simple3___base_simple3__A___Object__init&#34;&gt;call base_simple3$A$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__A___Object__init&#34;&gt;base_simple3$A$init&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;b&gt;intro&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Object___init&#34;&gt;in base_simple3$Object&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="A" data-title="&lt;a href=&#34;#base_simple3__A&#34;&gt;A&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">A</span>
+</span><span class="line" id="L59"><span class="nc_i nc_v popupable" title="a: A" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;a:&lt;a href=&#34;#base_simple3___base_simple3__A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">a</span><span class="popupable" title="call base_simple3$A$run" data-title="&lt;a href=&#34;#base_simple3___base_simple3__A___run&#34;&gt;call base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__A___run&#34;&gt;base_simple3$A$run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$A$run" data-title="&lt;a href=&#34;#base_simple3___base_simple3__A___run&#34;&gt;call base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__A___run&#34;&gt;base_simple3$A$run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">run</span>
 </span><span class="line" id="L60">
-</span><span class="line" id="L61"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="b: B" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;b:&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">b</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$B$init" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$init&#34;&gt;call base_simple3$B$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$init&#34;&gt;init&lt;&#47;a&gt;&lt;span&gt;(v: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="B" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">B</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">8</span><span>)</span>
-</span><span class="line" id="L62"><span class="nc_i nc_v popupable" title="b: B" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;b:&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">b</span><span class="popupable" title="call base_simple3$B$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;call base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;call base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">run</span>
+</span><span class="line" id="L61"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="b: B" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;b:&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">b</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$B$init" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___init&#34;&gt;call base_simple3$B$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___init&#34;&gt;base_simple3$B$init&lt;&#47;a&gt;&lt;span&gt;(v: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="B" data-title="&lt;a href=&#34;#base_simple3__B&#34;&gt;B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">B</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">8</span><span>)</span>
+</span><span class="line" id="L62"><span class="nc_i nc_v popupable" title="b: B" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;b:&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">b</span><span class="popupable" title="call base_simple3$B$run" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___run&#34;&gt;call base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___run&#34;&gt;base_simple3$B$run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$run" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___run&#34;&gt;call base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___run&#34;&gt;base_simple3$B$run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">run</span>
 </span><span class="line" id="L63">
-</span><span class="line" id="L64"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$C$init" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$init&#34;&gt;call base_simple3$C$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$init&#34;&gt;init&lt;&#47;a&gt;&lt;span&gt;(val1: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;b&gt;intro&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object$init&#34;&gt;in base_simple3$Object&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="C" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">C</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">9</span><span>)</span>
-</span><span class="line" id="L65"><span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val1" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;call base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;val1&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val1" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;call base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;val1&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span><span class="line" id="L66"><span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val2" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;call base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;val2&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val2" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;call base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;val2&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
+</span><span class="line" id="L64"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$C$init" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___Object__init&#34;&gt;call base_simple3$C$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__C___Object__init&#34;&gt;base_simple3$C$init&lt;&#47;a&gt;&lt;span&gt;(val1: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;b&gt;intro&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Object___init&#34;&gt;in base_simple3$Object&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="C" data-title="&lt;a href=&#34;#base_simple3__C&#34;&gt;C&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">C</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">9</span><span>)</span>
+</span><span class="line" id="L65"><span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val1" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val1&#34;&gt;call base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__C___val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val1" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val1&#34;&gt;call base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__C___val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="line" id="L66"><span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val2" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val2&#34;&gt;call base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__C___val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val2" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val2&#34;&gt;call base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__C___val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
 <h2>AST node: AModule at base_simple3.nit:17,1--66,13</h2>
 <pre><code><span class="nitcode"><span class="line" id="L17"><span class="nc_k">import</span> <span class="nc_k">end</span>
 </span><span class="line" id="L18">
-</span><span class="nc_cdef foldable" id="base_simple3$Object"><span class="line" id="L19"><span class="nc_k">interface</span> <span class="nc_t nc_def popupable" title="class Object" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;class Object&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Object&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; sub-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Bool&#34;&gt;Bool&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys&#34;&gt;Sys&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Object</span>
+</span><span class="nc_cdef foldable" id="base_simple3$Object"><span class="line" id="L19"><span class="nc_k">interface</span> <span class="nc_t nc_def popupable" title="class Object" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Object&#34;&gt;class Object&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Object&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; sub-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Bool&#34;&gt;base_simple3$Bool&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Sys&#34;&gt;base_simple3$Sys&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Object</span>
 </span><span class="line" id="L20"><span class="nc_k">end</span>
 </span></span><span class="line" id="L21">
-</span><span class="nc_cdef foldable" id="base_simple3$Bool"><span class="line" id="L22"><span class="nc_k">enum</span> <span class="nc_t nc_def popupable" title="class Bool" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Bool&#34;&gt;class Bool&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Bool&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Bool</span>
+</span><span class="nc_cdef foldable" id="base_simple3$Bool"><span class="line" id="L22"><span class="nc_k">enum</span> <span class="nc_t nc_def popupable" title="class Bool" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Bool&#34;&gt;class Bool&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Bool&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Object&#34;&gt;base_simple3$Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Bool</span>
 </span><span class="line" id="L23"><span class="nc_k">end</span>
 </span></span><span class="line" id="L24">
-</span><span class="nc_cdef foldable" id="base_simple3$Int"><span class="line" id="L25"><span class="nc_k">enum</span> <span class="nc_t nc_def popupable" title="class Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;class Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Int&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span>
-</span><span class="nc_pdef foldable" id="base_simple3$Int$output"><span class="line" id="L26">        <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;output&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">output</span></span> <span class="nc_k">is</span> <span class="nc_i">intern</span>
+</span><span class="nc_cdef foldable" id="base_simple3$Int"><span class="line" id="L25"><span class="nc_k">enum</span> <span class="nc_t nc_def popupable" title="class Int" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;class Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Int&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Object&#34;&gt;base_simple3$Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span>
+</span><span class="nc_pdef foldable" id="base_simple3$Int$output"><span class="line" id="L26">        <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;output&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">output</span></span> <span class="nc_k">is</span> <span class="nc_i">intern</span>
 </span></span><span class="line" id="L27"><span class="nc_k">end</span>
 </span></span><span class="line" id="L28">
-</span><span class="nc_cdef foldable" id="base_simple3$A"><span class="line" id="L29"><span class="nc_k">class</span> <span class="nc_t nc_def popupable" title="class A" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;class A&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;A&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">A</span>
-</span><span class="nc_pdef foldable" id="base_simple3$A$init"><span class="line" id="L30">    <span class="nc_k">init</span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span></span><span class="nc_pdef foldable" id="base_simple3$A$run"><span class="line" id="L31">      <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$A$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;run&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">run</span></span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">6</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="nc_cdef foldable" id="base_simple3$A"><span class="line" id="L29"><span class="nc_k">class</span> <span class="nc_t nc_def popupable" title="class A" data-title="&lt;a href=&#34;#base_simple3___base_simple3__A&#34;&gt;class A&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;A&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Object&#34;&gt;base_simple3$Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">A</span>
+</span><span class="nc_pdef foldable" id="base_simple3$A$init"><span class="line" id="L30">    <span class="nc_k">init</span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span></span><span class="nc_pdef foldable" id="base_simple3$A$run"><span class="line" id="L31">      <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$A$run" data-title="&lt;a href=&#34;#base_simple3___base_simple3__A___run&#34;&gt;base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;run&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">run</span></span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">6</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
 </span></span><span class="line" id="L32"><span class="nc_k">end</span>
 </span></span><span class="line" id="L33">
-</span><span class="nc_cdef foldable" id="base_simple3$B"><span class="line" id="L34"><span class="nc_k">class</span> <span class="nc_t nc_def popupable" title="class B" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;class B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;B&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">B</span>
-</span><span class="nc_pdef foldable" id="base_simple3$B$_val"><a id="base_simple3$B$val"></a><a id="base_simple3$B$val="></a><span class="line" id="L35">     <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$B$val" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span>
-</span></span><span class="nc_pdef foldable" id="base_simple3$B$init"><span class="line" id="L36">     <span class="nc_k popupable" style="border-bottom: solid 2px red" title="Messages" data-content="&lt;div&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;1 message(s)&lt;&#47;b&gt; &lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;Warning: init with signature in base_simple3$B&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">init</span><span>(</span><span class="nc_i nc_v popupable" title="v: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;v:&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">v</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span><span>)</span>
+</span><span class="nc_cdef foldable" id="base_simple3$B"><span class="line" id="L34"><span class="nc_k">class</span> <span class="nc_t nc_def popupable" title="class B" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;class B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;B&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Object&#34;&gt;base_simple3$Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">B</span>
+</span><span class="nc_pdef foldable" id="base_simple3$B$_val"><a id="base_simple3$B$val"></a><a id="base_simple3$B$val="></a><span class="line" id="L35">     <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$B$val" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span>
+</span></span><span class="nc_pdef foldable" id="base_simple3$B$init"><span class="line" id="L36">     <span class="nc_k popupable" style="border-bottom: solid 2px red" title="Messages" data-content="&lt;div&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;1 message(s)&lt;&#47;b&gt; &lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;Warning: init with signature in base_simple3$B&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">init</span><span>(</span><span class="nc_i nc_v popupable" title="v: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;v:&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">v</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span><span>)</span>
 </span><span class="line" id="L37">    <span class="nc_k">do</span>
-</span><span class="line" id="L38">            <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">7</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span><span class="line" id="L39">            <span class="nc_k popupable" title="B" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">self</span><span class="popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span> <span class="popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$val=&#34;&gt;val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">=</span> <span class="nc_i nc_v popupable" title="v: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;v:&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">v</span>
+</span><span class="line" id="L38">            <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">7</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="line" id="L39">            <span class="nc_k popupable" title="B" data-title="&lt;a href=&#34;#base_simple3__B&#34;&gt;B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">self</span><span class="popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___val_61d&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___val_61d&#34;&gt;base_simple3$B$val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___val_61d&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___val_61d&#34;&gt;base_simple3$B$val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span> <span class="popupable" title="call base_simple3$B$val=" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___val_61d&#34;&gt;call base_simple3$B$val=&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___val_61d&#34;&gt;base_simple3$B$val=&lt;&#47;a&gt;&lt;span&gt;(val: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">=</span> <span class="nc_i nc_v popupable" title="v: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;v:&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">v</span>
 </span><span class="line" id="L40">    <span class="nc_k">end</span>
-</span></span><span class="nc_pdef foldable" id="base_simple3$B$run"><span class="line" id="L41">      <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$B$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;run&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">run</span></span> <span class="nc_k">do</span> <span class="nc_i popupable" title="call base_simple3$B$val" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$val&#34;&gt;call base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$val&#34;&gt;val&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span></span><span class="nc_pdef foldable" id="base_simple3$B$run"><span class="line" id="L41">      <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$B$run" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___run&#34;&gt;base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;run&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">run</span></span> <span class="nc_k">do</span> <span class="nc_i popupable" title="call base_simple3$B$val" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___val&#34;&gt;call base_simple3$B$val&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___val&#34;&gt;base_simple3$B$val&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
 </span></span><span class="line" id="L42"><span class="nc_k">end</span>
 </span></span><span class="line" id="L43">
-</span><span class="nc_cdef foldable" id="base_simple3$C"><span class="line" id="L44"><span class="nc_k">class</span> <span class="nc_t nc_def popupable" title="class C" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;class C&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;C&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">C</span>
-</span><span class="nc_pdef foldable" id="base_simple3$C$_val1"><a id="base_simple3$C$val1"></a><a id="base_simple3$C$val1="></a><span class="line" id="L45">  <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val1" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val1&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span>
-</span></span><span class="nc_pdef foldable" id="base_simple3$C$_val2"><a id="base_simple3$C$val2"></a><a id="base_simple3$C$val2="></a><span class="line" id="L46">   <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val2" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val2&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">10</span>
+</span><span class="nc_cdef foldable" id="base_simple3$C"><span class="line" id="L44"><span class="nc_k">class</span> <span class="nc_t nc_def popupable" title="class C" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;class C&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;C&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; super-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Object&#34;&gt;base_simple3$Object&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">C</span>
+</span><span class="nc_pdef foldable" id="base_simple3$C$_val1"><a id="base_simple3$C$val1"></a><a id="base_simple3$C$val1="></a><span class="line" id="L45">  <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val1" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val1&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span>
+</span></span><span class="nc_pdef foldable" id="base_simple3$C$_val2"><a id="base_simple3$C$val2"></a><a id="base_simple3$C$val2="></a><span class="line" id="L46">   <span class="nc_k">var</span> <span class="nc_i nc_def popupable" title="base_simple3$C$val2" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;val2&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">10</span>
 </span></span><span class="line" id="L47"><span class="nc_k">end</span>
 </span></span><span class="line" id="L48">
-</span><span class="nc_pdef foldable" id="base_simple3$Sys$foo"><span class="line" id="L49"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$foo" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$foo&#34;&gt;base_simple3$Sys$foo&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;foo&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">foo</span></span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">2</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span></span><span class="nc_pdef foldable" id="base_simple3$Sys$bar"><span class="line" id="L50"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$bar" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$bar&#34;&gt;base_simple3$Sys$bar&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;bar&lt;span&gt;(i: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">bar</span></span><span>(</span><span class="nc_i nc_v popupable" title="i: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;i:&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">i</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span><span>)</span> <span class="nc_k">do</span> <span class="nc_i nc_v popupable" title="i: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;i:&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">i</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span></span><span class="nc_pdef foldable" id="base_simple3$Sys$baz"><span class="line" id="L51"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$baz" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$baz&#34;&gt;base_simple3$Sys$baz&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;baz&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">baz</span></span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span class="nc_k">do</span> <span class="nc_k">return</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">4</span>
+</span><span class="nc_pdef foldable" id="base_simple3$Sys$foo"><span class="line" id="L49"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$foo" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Sys___foo&#34;&gt;base_simple3$Sys$foo&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;foo&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">foo</span></span> <span class="nc_k">do</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">2</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span></span><span class="nc_pdef foldable" id="base_simple3$Sys$bar"><span class="line" id="L50"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$bar" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Sys___bar&#34;&gt;base_simple3$Sys$bar&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;bar&lt;span&gt;(i: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">bar</span></span><span>(</span><span class="nc_i nc_v popupable" title="i: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;i:&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">i</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span><span>)</span> <span class="nc_k">do</span> <span class="nc_i nc_v popupable" title="i: Int" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;i:&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">i</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span></span><span class="nc_pdef foldable" id="base_simple3$Sys$baz"><span class="line" id="L51"><span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Sys$baz" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Sys___baz&#34;&gt;base_simple3$Sys$baz&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;baz&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">baz</span></span><span>:</span> <span class="nc_t popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">Int</span> <span class="nc_k">do</span> <span class="nc_k">return</span> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">4</span>
 </span></span><span class="line" id="L52">
-</span><span class="nc_pdef foldable" id="base_simple3$Sys$main"><span class="line" id="L53"><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">1</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span><span class="line" id="L54"><span class="nc_i popupable" title="call base_simple3$Sys$foo" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$foo&#34;&gt;call base_simple3$Sys$foo&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys$foo&#34;&gt;foo&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">foo</span>
-</span><span class="line" id="L55"><span class="nc_i popupable" title="call base_simple3$Sys$bar" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$bar&#34;&gt;call base_simple3$Sys$bar&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys$bar&#34;&gt;bar&lt;&#47;a&gt;&lt;span&gt;(i: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">bar</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">3</span><span>)</span>
-</span><span class="line" id="L56"><span class="nc_i popupable" title="call base_simple3$Sys$baz" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Sys$baz&#34;&gt;call base_simple3$Sys$baz&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys$baz&#34;&gt;baz&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">baz</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="nc_pdef foldable" id="base_simple3$Sys$main"><span class="line" id="L53"><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">1</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="line" id="L54"><span class="nc_i popupable" title="call base_simple3$Sys$foo" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Sys___foo&#34;&gt;call base_simple3$Sys$foo&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Sys___foo&#34;&gt;base_simple3$Sys$foo&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">foo</span>
+</span><span class="line" id="L55"><span class="nc_i popupable" title="call base_simple3$Sys$bar" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Sys___bar&#34;&gt;call base_simple3$Sys$bar&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Sys___bar&#34;&gt;base_simple3$Sys$bar&lt;&#47;a&gt;&lt;span&gt;(i: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">bar</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">3</span><span>)</span>
+</span><span class="line" id="L56"><span class="nc_i popupable" title="call base_simple3$Sys$baz" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Sys___baz&#34;&gt;call base_simple3$Sys$baz&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Sys___baz&#34;&gt;base_simple3$Sys$baz&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">baz</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
 </span><span class="line" id="L57">
-</span><span class="line" id="L58"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="a: A" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;a:&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">a</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$A$init" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A$init&#34;&gt;call base_simple3$A$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A$init&#34;&gt;init&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;b&gt;intro&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object$init&#34;&gt;in base_simple3$Object&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="A" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">A</span>
-</span><span class="line" id="L59"><span class="nc_i nc_v popupable" title="a: A" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;a:&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">a</span><span class="popupable" title="call base_simple3$A$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;call base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$A$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;call base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A$run&#34;&gt;run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">run</span>
+</span><span class="line" id="L58"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="a: A" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;a:&lt;a href=&#34;#base_simple3___base_simple3__A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">a</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$A$init" data-title="&lt;a href=&#34;#base_simple3___base_simple3__A___Object__init&#34;&gt;call base_simple3$A$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__A___Object__init&#34;&gt;base_simple3$A$init&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;b&gt;intro&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Object___init&#34;&gt;in base_simple3$Object&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="A" data-title="&lt;a href=&#34;#base_simple3__A&#34;&gt;A&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">A</span>
+</span><span class="line" id="L59"><span class="nc_i nc_v popupable" title="a: A" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;a:&lt;a href=&#34;#base_simple3___base_simple3__A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">a</span><span class="popupable" title="call base_simple3$A$run" data-title="&lt;a href=&#34;#base_simple3___base_simple3__A___run&#34;&gt;call base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__A___run&#34;&gt;base_simple3$A$run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$A$run" data-title="&lt;a href=&#34;#base_simple3___base_simple3__A___run&#34;&gt;call base_simple3$A$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__A___run&#34;&gt;base_simple3$A$run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">run</span>
 </span><span class="line" id="L60">
-</span><span class="line" id="L61"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="b: B" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;b:&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">b</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$B$init" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$init&#34;&gt;call base_simple3$B$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$init&#34;&gt;init&lt;&#47;a&gt;&lt;span&gt;(v: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="B" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">B</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">8</span><span>)</span>
-</span><span class="line" id="L62"><span class="nc_i nc_v popupable" title="b: B" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;b:&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">b</span><span class="popupable" title="call base_simple3$B$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;call base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$run" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;call base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B$run&#34;&gt;run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">run</span>
+</span><span class="line" id="L61"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="b: B" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;b:&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">b</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$B$init" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___init&#34;&gt;call base_simple3$B$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___init&#34;&gt;base_simple3$B$init&lt;&#47;a&gt;&lt;span&gt;(v: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="B" data-title="&lt;a href=&#34;#base_simple3__B&#34;&gt;B&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">B</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">8</span><span>)</span>
+</span><span class="line" id="L62"><span class="nc_i nc_v popupable" title="b: B" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;b:&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">b</span><span class="popupable" title="call base_simple3$B$run" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___run&#34;&gt;call base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___run&#34;&gt;base_simple3$B$run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$run" data-title="&lt;a href=&#34;#base_simple3___base_simple3__B___run&#34;&gt;call base_simple3$B$run&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__B___run&#34;&gt;base_simple3$B$run&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">run</span>
 </span><span class="line" id="L63">
-</span><span class="line" id="L64"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$C$init" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$init&#34;&gt;call base_simple3$C$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$init&#34;&gt;init&lt;&#47;a&gt;&lt;span&gt;(val1: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;b&gt;intro&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Object$init&#34;&gt;in base_simple3$Object&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="C" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">C</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">9</span><span>)</span>
-</span><span class="line" id="L65"><span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val1" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;call base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;val1&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val1" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;call base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$val1&#34;&gt;val1&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
-</span><span class="line" id="L66"><span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val2" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;call base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;val2&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val2" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;call base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C$val2&#34;&gt;val2&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
+</span><span class="line" id="L64"><span class="nc_k">var</span> <span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$C$init" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___Object__init&#34;&gt;call base_simple3$C$init&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__C___Object__init&#34;&gt;base_simple3$C$init&lt;&#47;a&gt;&lt;span&gt;(val1: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;)&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;b&gt;intro&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Object___init&#34;&gt;in base_simple3$Object&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">new</span> <span class="nc_t popupable" title="C" data-title="&lt;a href=&#34;#base_simple3__C&#34;&gt;C&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">C</span><span>(</span><span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;#base_simple3__Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">9</span><span>)</span>
+</span><span class="line" id="L65"><span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val1" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val1&#34;&gt;call base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__C___val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val1" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val1&#34;&gt;call base_simple3$C$val1&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__C___val1&#34;&gt;base_simple3$C$val1&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val1</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span>
+</span><span class="line" id="L66"><span class="nc_i nc_v popupable" title="c: C" data-content="&lt;div&gt;&lt;b&gt;local var&lt;&#47;b&gt; &lt;span&gt;c:&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val2" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val2&#34;&gt;call base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__C___val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val2" data-title="&lt;a href=&#34;#base_simple3___base_simple3__C___val2&#34;&gt;call base_simple3$C$val2&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__C___val2&#34;&gt;base_simple3$C$val2&lt;&#47;a&gt;&lt;span&gt;: &lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">val2</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></span></code></pre>
 <h2>AST node: ANoImport at base_simple3.nit:17,1--10</h2>
 <pre><code><span class="nitcode"><span class="line" id="L17"><span class="nc_k">import</span> <span class="nc_k">end</span></span></span></code></pre>
 <h2>AST node: APublicVisibility at base_simple3.nit:17,1</h2>
 <h2>AST node: TKwend at base_simple3.nit:17,8--10</h2>
 <pre><code><span class="nitcode"><span class="line" id="L17"> <span class="nc_k">end</span></span></span></code></pre>
 <h2>AST node: AStdClassdef at base_simple3.nit:19,1--20,3</h2>
-<pre><code><span class="nitcode"><span class="nc_cdef foldable" id="base_simple3$Object"><span class="line" id="L19"><span class="nc_k">interface</span> <span class="nc_t nc_def popupable" title="class Object" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;class Object&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Object&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; sub-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Bool&#34;&gt;Bool&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys&#34;&gt;Sys&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Object</span>
+<pre><code><span class="nitcode"><span class="nc_cdef foldable" id="base_simple3$Object"><span class="line" id="L19"><span class="nc_k">interface</span> <span class="nc_t nc_def popupable" title="class Object" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Object&#34;&gt;class Object&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Object&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; sub-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Bool&#34;&gt;base_simple3$Bool&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Sys&#34;&gt;base_simple3$Sys&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Object</span>
 </span><span class="line" id="L20"><span class="nc_k">end</span></span></span></span></code></pre>
 <h2>AST node: AInterfaceClasskind at base_simple3.nit:19,1--9</h2>
 <pre><code><span class="nitcode"><span class="line" id="L19"><span class="nc_k">interface</span></span></span></code></pre>
 <h2>AST node: TKwinterface at base_simple3.nit:19,1--9</h2>
 <pre><code><span class="nitcode"><span class="line" id="L19"><span class="nc_k">interface</span></span></span></code></pre>
 <h2>AST node: AQclassid at base_simple3.nit:19,11--16</h2>
-<pre><code><span class="nitcode"><span class="line" id="L19"> <span class="nc_t nc_def popupable" title="class Object" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;class Object&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Object&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; sub-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Bool&#34;&gt;Bool&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys&#34;&gt;Sys&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Object</span></span></span></code></pre>
+<pre><code><span class="nitcode"><span class="line" id="L19"> <span class="nc_t nc_def popupable" title="class Object" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Object&#34;&gt;class Object&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Object&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; sub-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Bool&#34;&gt;base_simple3$Bool&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Sys&#34;&gt;base_simple3$Sys&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Object</span></span></span></code></pre>
 <h2>AST node: TClassid at base_simple3.nit:19,11--16</h2>
-<pre><code><span class="nitcode"><span class="line" id="L19"> <span class="nc_t nc_def popupable" title="class Object" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Object&#34;&gt;class Object&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Object&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; sub-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Bool&#34;&gt;Bool&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$A&#34;&gt;A&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$B&#34;&gt;B&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$C&#34;&gt;C&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Sys&#34;&gt;Sys&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Object</span></span></span></code></pre>
+<pre><code><span class="nitcode"><span class="line" id="L19"> <span class="nc_t nc_def popupable" title="class Object" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Object&#34;&gt;class Object&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;Object&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;div class=&#34;dropdown&#34;&gt; &lt;a data-toggle=&#34;dropdown&#34; href=&#34;#&#34;&gt;&lt;b&gt;hier&lt;&#47;b&gt; sub-classes&lt;span class=&#34;caret&#34;&gt;&lt;&#47;span&gt;&lt;&#47;a&gt;&lt;ul class=&#34;dropdown-menu&#34; role=&#34;menu&#34; aria-labelledby=&#34;dLabel&#34;&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Bool&#34;&gt;base_simple3$Bool&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Int&#34;&gt;base_simple3$Int&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__A&#34;&gt;base_simple3$A&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__B&#34;&gt;base_simple3$B&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__C&#34;&gt;base_simple3$C&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;li&gt;&lt;a href=&#34;#base_simple3___base_simple3__Sys&#34;&gt;base_simple3$Sys&lt;&#47;a&gt;&lt;&#47;li&gt;&lt;&#47;ul&gt;&lt;&#47;div&gt;&lt;&#47;div&gt;" data-toggle="popover">Object</span></span></span></code></pre>
 <h2>AST node: AEnumClasskind at base_simple3.nit:22,1--4</h2>
 <pre><code><span class="nitcode"><span class="line" id="L22"><span class="nc_k">enum</span></span></span></code></pre>
 <h2>AST node: TKwenum at base_simple3.nit:22,1--4</h2>
 <pre><code><span class="nitcode"><span class="line" id="L22"><span class="nc_k">enum</span></span></span></code></pre>
 <h2>AST node: AMethPropdef at base_simple3.nit:26,2--21</h2>
-<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$Int$output"><span class="line" id="L26">      <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;output&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">output</span></span> <span class="nc_k">is</span> <span class="nc_i">intern</span></span></span></span></code></pre>
+<pre><code><span class="nitcode"><span class="nc_pdef foldable" id="base_simple3$Int$output"><span class="line" id="L26">      <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;output&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="nc_i">output</span></span> <span class="nc_k">is</span> <span class="nc_i">intern</span></span></span></span></code></pre>
 <h2>AST node: TKwmeth at base_simple3.nit:26,2--4</h2>
 <pre><code><span class="nc_pdef foldable" id="base_simple3$Int$output"><span class="line" id="L26">    <span class="nc_k">fun</span></span></span></code></pre>
 <h2>AST node: AIdMethid at base_simple3.nit:26,6--11</h2>
-<pre><code><span class="nitcode"><span class="nc_def popupable foldable" title="base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;output&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="line" id="L26"> <span class="nc_i">output</span></span></span></span></code></pre>
+<pre><code><span class="nitcode"><span class="nc_def popupable foldable" title="base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;output&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="line" id="L26"> <span class="nc_i">output</span></span></span></span></code></pre>
 <h2>AST node: TId at base_simple3.nit:26,6--11</h2>
-<pre><code><span class="nitcode"><span class="nc_def popupable foldable" title="base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;output&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="line" id="L26"> <span class="nc_i">output</span></span></span></span></code></pre>
+<pre><code><span class="nitcode"><span class="nc_def popupable foldable" title="base_simple3$Int$output" data-title="&lt;a href=&#34;#base_simple3___base_simple3__Int___output&#34;&gt;base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;fun&lt;&#47;b&gt; &lt;span&gt;output&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover"><span class="line" id="L26"> <span class="nc_i">output</span></span></span></span></code></pre>
 <h2>AST node: ASignature at base_simple3.nit:26,13</h2>
 <pre><code><span class="nitcode"></span></code></pre>
 <h2>AST node: AAnnotations at base_simple3.nit:26,13--21</h2>
 <pre><code><span class="nitcode"><span class="line" id="L29"><span class="nc_k">class</span></span></span></code></pre>
 <h2>AST node: TKwinit at base_simple3.nit:30,2--5</h2>
 <pre><code><span class="nc_pdef foldable" id="base_simple3$A$init"><span class="line" id="L30">        <span class="nc_k">init</span></span></span></code></pre>
-<h2>AST node: TKwdo at base_simple3.nit:30,7--8</h2>
-<pre><code><span class="nitcode"><span class="line" id="L30"> <span class="nc_k">do</span></span></span></code></pre>
-<h2>AST node: ACallExpr at base_simple3.nit:30,10--17</h2>
-<pre><code><span class="nitcode"><span class="line" id="L30"> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></code></pre>
-<h2>AST node: AIntegerExpr at base_simple3.nit:30,10</h2>
-<pre><code><span class="nitcode"><span class="line" id="L30"> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">5</span></span></span></code></pre>
-<h2>AST node: TInteger at base_simple3.nit:30,10</h2>
-<pre><code><span class="nitcode"><span class="line" id="L30"> <span class="nc_l popupable" title="Int" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;class&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int&#34;&gt;Int&lt;&#47;a&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">5</span></span></span></code></pre>
-<h2>AST node: AQid at base_simple3.nit:30,12--17</h2>
-<pre><code><span class="nitcode"><span class="line" id="L30"><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;call base_simple3$Int$output&lt;&#47;a&gt;" data-content="&lt;div&gt;&lt;b&gt;call&lt;&#47;b&gt; &lt;span&gt;&lt;a href=&#34;base_simple3.html#base_simple3$Int$output&#34;&gt;output&lt;&#47;a&gt;&lt;span&gt;&lt;&#47;span&gt;&lt;&#47;span&gt;&lt;br&#47;&gt;&lt;&#47;div&gt;" data-toggle="popover">output</span></span></span></code></pre>
-<h2>AST node: AListExprs at base_simple3.nit:30,17</h2>
-<pre><code><spa***TRUNCATED***
+<h2>AST node: TKwdo at base***TRUNCATED***
diff --git a/tests/sav/test_loader.res b/tests/sav/test_loader.res
new file mode 100644 (file)
index 0000000..e50ad70
--- /dev/null
@@ -0,0 +1,2 @@
+Usage: [OPTION]... [ARG]...
+Use --help for help
diff --git a/tests/sav/test_loader_args1.res b/tests/sav/test_loader_args1.res
new file mode 100644 (file)
index 0000000..1b169e2
--- /dev/null
@@ -0,0 +1,21 @@
+test_prog/rpg/races.nit: module?
+       module test_prog::races at test_prog/rpg/races.nit
+test_prog/rpg/races.nit: group?
+       nothing
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+test_prog/rpg: module?
+       module test_prog::rpg at test_prog/rpg/rpg.nit
+test_prog/rpg: group?
+       group test_prog>rpg> at test_prog/rpg
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=0
+scan_full found 6 modules
+  model: mpackages=1 mmodules=5
+  mb: identified modules=5; parsed modules=0
+parse found 2 modules
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=6
+parse_full found 5 modules
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=6
diff --git a/tests/sav/test_loader_args2.res b/tests/sav/test_loader_args2.res
new file mode 100644 (file)
index 0000000..5b3c4f0
--- /dev/null
@@ -0,0 +1,41 @@
+Error: cannot find module `test_prog/test_prog`.
+Error: cannot find module `test_prog/test_prog`.
+test_prog/test_prog.nit: module?
+       module test_prog::test_prog at test_prog/test_prog.nit
+test_prog/test_prog.nit: group?
+       nothing
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+test_prog/test_prog: module?
+       nothing
+test_prog/test_prog: group?
+       nothing
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+test_prog: module?
+       module test_prog::test_prog at test_prog/test_prog.nit
+test_prog: group?
+       group test_prog> at test_prog
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+test_prog::test_prog: module?
+       module test_prog::test_prog at test_prog/test_prog.nit
+test_prog::test_prog: group?
+       nothing
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
+test_prog/: module?
+       module test_prog::test_prog at test_prog/test_prog.nit
+test_prog/: group?
+       group test_prog> at test_prog
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
+scan_full found 18 modules
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
+parse found 1 modules
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=8
+parse_full found 8 modules
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=8
diff --git a/tests/sav/test_loader_args3.res b/tests/sav/test_loader_args3.res
new file mode 100644 (file)
index 0000000..940b6bf
--- /dev/null
@@ -0,0 +1,31 @@
+Error: cannot find module `test_prog::races:rpg`. Did you mean test_prog::races?
+Error: cannot find module `test_prog::races::combat`. Did you mean test_prog::combat?
+Error: cannot find module `test_prog::races:rpg`. Did you mean test_prog::races?
+Error: cannot find module `test_prog::races::combat`. Did you mean test_prog::combat?
+test_prog::races: module?
+       module test_prog::races at test_prog/rpg/races.nit
+test_prog::races: group?
+       nothing
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
+test_prog::races:rpg: module?
+       Error: cannot find module `test_prog::races:rpg`. Did you mean test_prog::races?
+test_prog::races:rpg: group?
+       nothing
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
+test_prog::races::combat: module?
+       Error: cannot find module `test_prog::races::combat`. Did you mean test_prog::combat?
+test_prog::races::combat: group?
+       nothing
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
+scan_full found 1 modules
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
+parse found 1 modules
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=2
+parse_full found 1 modules
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=2
diff --git a/tests/sav/test_loader_args4.res b/tests/sav/test_loader_args4.res
new file mode 100644 (file)
index 0000000..74dfacb
--- /dev/null
@@ -0,0 +1,33 @@
+Error: cannot find module `test_prog::fail::races`. Did you mean test_prog::races?
+Error: cannot find module `test_prog::fail`. Did you mean test_prog::game?
+Error: cannot find module `fail::fail`.
+Error: cannot find module `test_prog::fail::races`. Did you mean test_prog::races?
+Error: cannot find module `test_prog::fail`. Did you mean test_prog::game?
+Error: cannot find module `fail::fail`.
+test_prog::fail::races: module?
+       Error: cannot find module `test_prog::fail::races`. Did you mean test_prog::races?
+test_prog::fail::races: group?
+       nothing
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
+test_prog::fail: module?
+       Error: cannot find module `test_prog::fail`. Did you mean test_prog::game?
+test_prog::fail: group?
+       nothing
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
+fail::fail: module?
+       nothing
+fail::fail: group?
+       nothing
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
+scan_full found 0 modules
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
+parse found 0 modules
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
+parse_full found 0 modules
+  model: mpackages=2 mmodules=9
+  mb: identified modules=9; parsed modules=0
diff --git a/tests/sav/test_loader_args5.res b/tests/sav/test_loader_args5.res
new file mode 100644 (file)
index 0000000..8c087fa
--- /dev/null
@@ -0,0 +1,31 @@
+Error: cannot find module `/fail`.
+Error: `/lib` is not a Nit source file.
+Error: `sublib` is not a Nit source file.
+Error: cannot find module `/fail`.
+/lib: module?
+       Error: `/lib` is not a Nit package.
+/lib: group?
+       nothing
+  model: mpackages=0 mmodules=0
+  mb: identified modules=0; parsed modules=0
+/fail: module?
+       nothing
+/fail: group?
+       nothing
+  model: mpackages=0 mmodules=0
+  mb: identified modules=0; parsed modules=0
+sublib: module?
+       Error: `sublib` is not a Nit package.
+sublib: group?
+       nothing
+  model: mpackages=0 mmodules=0
+  mb: identified modules=0; parsed modules=0
+scan_full found 3 modules
+  model: mpackages=2 mmodules=3
+  mb: identified modules=3; parsed modules=0
+parse found 0 modules
+  model: mpackages=2 mmodules=3
+  mb: identified modules=3; parsed modules=0
+parse_full found 3 modules
+  model: mpackages=2 mmodules=3
+  mb: identified modules=3; parsed modules=3
diff --git a/tests/sav/test_loader_args6.res b/tests/sav/test_loader_args6.res
new file mode 100644 (file)
index 0000000..c3553f5
--- /dev/null
@@ -0,0 +1,61 @@
+Error: cannot find module `sublib/foo`.
+Error: cannot find module `foo.nit`.
+Error: cannot find module `./foo`.
+Error: cannot find module `foo/`.
+Error: cannot find module `foo::foo`.
+Error: cannot find module `sublib/foo`.
+Error: cannot find module `foo.nit`.
+Error: cannot find module `./foo`.
+Error: cannot find module `foo/`.
+Error: cannot find module `foo::foo`.
+foo: module?
+       module foo::foo at sublib/foo.nit
+foo: group?
+       nothing
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+sublib/foo: module?
+       nothing
+sublib/foo: group?
+       nothing
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+sublib/foo.nit: module?
+       module foo::foo at sublib/foo.nit
+sublib/foo.nit: group?
+       nothing
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+foo.nit: module?
+       nothing
+foo.nit: group?
+       Error: `sublib/foo.nit` is not a directory.
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+./foo: module?
+       nothing
+./foo: group?
+       nothing
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+foo/: module?
+       nothing
+foo/: group?
+       nothing
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+foo::foo: module?
+       nothing
+foo::foo: group?
+       nothing
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+scan_full found 2 modules
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+parse found 1 modules
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=1
+parse_full found 1 modules
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=1
diff --git a/tests/sav/test_loader_args7.res b/tests/sav/test_loader_args7.res
new file mode 100644 (file)
index 0000000..fbf0445
--- /dev/null
@@ -0,0 +1,65 @@
+Error: cannot find module `sublib/bar.nit`.
+Error: cannot find module `bar.nit`.
+Error: cannot find module `./bar`.
+Error: cannot find module `bar/`.
+Error: cannot find module `sublib/bar.nit`.
+Error: cannot find module `bar.nit`.
+Error: cannot find module `./bar`.
+Error: cannot find module `bar/`.
+bar: module?
+       module bar::bar at sublib/bar/bar.nit
+bar: group?
+       group bar> at sublib/bar
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=0
+sublib/bar: module?
+       module bar::bar at sublib/bar/bar.nit
+sublib/bar: group?
+       group bar> at sublib/bar
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=0
+sublib/bar.nit: module?
+       nothing
+sublib/bar.nit: group?
+       nothing
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=0
+sublib/bar/bar.nit: module?
+       module bar::bar at sublib/bar/bar.nit
+sublib/bar/bar.nit: group?
+       nothing
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=0
+bar.nit: module?
+       nothing
+bar.nit: group?
+       nothing
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=0
+./bar: module?
+       nothing
+./bar: group?
+       nothing
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=0
+bar/: module?
+       nothing
+bar/: group?
+       nothing
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=0
+bar::bar: module?
+       module bar::bar at sublib/bar/bar.nit
+bar::bar: group?
+       nothing
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=0
+scan_full found 6 modules
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=0
+parse found 1 modules
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=1
+parse_full found 2 modules
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=2
diff --git a/tests/sav/test_loader_args8.res b/tests/sav/test_loader_args8.res
new file mode 100644 (file)
index 0000000..d13776b
--- /dev/null
@@ -0,0 +1,37 @@
+Error: cannot find module `sublib/bar/foo`.
+Error: cannot find module `bar/foo.nit`.
+Error: cannot find module `sublib/bar/foo`.
+Error: cannot find module `bar/foo.nit`.
+sublib/bar/foo.nit: module?
+       module bar::foo at sublib/bar/foo.nit
+sublib/bar/foo.nit: group?
+       nothing
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+sublib/bar/foo: module?
+       nothing
+sublib/bar/foo: group?
+       nothing
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+bar/foo.nit: module?
+       nothing
+bar/foo.nit: group?
+       nothing
+  model: mpackages=1 mmodules=1
+  mb: identified modules=1; parsed modules=0
+bar::foo: module?
+       module bar::foo at sublib/bar/foo.nit
+bar::foo: group?
+       nothing
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=0
+scan_full found 2 modules
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=0
+parse found 1 modules
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=1
+parse_full found 1 modules
+  model: mpackages=1 mmodules=2
+  mb: identified modules=2; parsed modules=1
diff --git a/tests/sav/test_loader_args9.res b/tests/sav/test_loader_args9.res
new file mode 100644 (file)
index 0000000..6882434
--- /dev/null
@@ -0,0 +1,18 @@
+Error: cannot find module `fail::fail`.
+Error: cannot find module `fail::fail`.
+qnames? fail::fail fail
+fail::fail: not found
+  model: mpackages=0 mmodules=0
+  mb: identified modules=0; parsed modules=0
+qnames? fail::fail fail
+scan_full found 0 modules
+  model: mpackages=0 mmodules=0
+  mb: identified modules=0; parsed modules=0
+qnames? fail::fail fail
+parse found 0 modules
+  model: mpackages=0 mmodules=0
+  mb: identified modules=0; parsed modules=0
+qnames? fail::fail fail
+parse_full found 0 modules
+  model: mpackages=0 mmodules=0
+  mb: identified modules=0; parsed modules=0
diff --git a/tests/sublib/bar/bar.nit b/tests/sublib/bar/bar.nit
new file mode 100644 (file)
index 0000000..cbbf19b
--- /dev/null
@@ -0,0 +1 @@
+import end
diff --git a/tests/sublib/bar/foo.nit b/tests/sublib/bar/foo.nit
new file mode 100644 (file)
index 0000000..cbbf19b
--- /dev/null
@@ -0,0 +1 @@
+import end
diff --git a/tests/sublib/foo.nit b/tests/sublib/foo.nit
new file mode 100644 (file)
index 0000000..cbbf19b
--- /dev/null
@@ -0,0 +1 @@
+import end
diff --git a/tests/sublib/packages.ini b/tests/sublib/packages.ini
new file mode 100644 (file)
index 0000000..e69de29
index 8b49b8b..d921bf4 100644 (file)
@@ -43,11 +43,10 @@ builder.options.add "-Djava.class.path=."
 #alt1#builder.options.clear
 #alt1#builder.options.add "-Djava.class.path=/tmp/"
 var jvm = builder.create_jvm
-var env = builder.jni_env
-assert env != null
+assert jvm != null
 
-# Test JavaVM::env
-assert not jvm.env.address_is_null
+var env = jvm.env
+assert not env.address_is_null
 
 print "---------------------Test 1----------------------"
 # get the class
diff --git a/tests/test_loader.args b/tests/test_loader.args
new file mode 100644 (file)
index 0000000..52a76e8
--- /dev/null
@@ -0,0 +1,8 @@
+test_prog/rpg/races.nit test_prog/rpg
+test_prog/test_prog.nit test_prog/test_prog test_prog test_prog::test_prog test_prog/
+test_prog::races test_prog::races:rpg test_prog::races::combat
+test_prog::fail::races test_prog::fail fail::fail
+/lib /fail sublib
+foo sublib/foo sublib/foo.nit foo.nit ./foo foo/ foo::foo -I sublib
+bar sublib/bar sublib/bar.nit sublib/bar/bar.nit bar.nit ./bar bar/ bar::bar -I sublib
+sublib/bar/foo.nit sublib/bar/foo bar/foo.nit bar::foo -I sublib