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
# 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
class WindowHttpRequest
super BenitluxHttpRequest
- autoinit window, rest_action
+ autoinit window, uri_tail
# Type of the related `window`
type W: Window
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"}")
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)
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
t.start
end
- redef fun on_load(data)
+ redef fun on_load(data, status)
do
if app.user == null then return
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)
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)
do
title = "Benitlux"
update_checkin_text
- checkin_button.observers.add self
end
# TODO hide when not logged in
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
class ReviewAction
super WindowHttpRequest
- redef fun on_load(res)
+ redef fun on_load(res, status)
do
if intercept_error(res) then return
end
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)
#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
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)
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)
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`
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
# 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
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)
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
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
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}"
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
# 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
# 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
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
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)
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)
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
# note: the DFA is not minimized.
fun to_dfa: Automaton
do
+ assert_valid
+
trim
var dfa = new Automaton.empty
{plus:} re3 '+' |
{shortest:} 'Shortest' '(' re ')' |
{longest:} 'Longest' '(' re ')' |
+ {prefixes:} 'Prefixes' '(' re ')' |
{id:} id |
{par:} '(' re ')' |
{class:} text '.' '.' text |
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,
t_except,
t_shortest,
t_longest,
+ t_prefixes,
t_ch_dec,
t_ch_hex])
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)
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
--- /dev/null
+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;
--- /dev/null
+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)=''
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
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
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)
# 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
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
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
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
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
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
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
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
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
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
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
# 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"
for op in row do
var but = new Button(parent=row_layout, text=op)
- but.observers.add self
buttons[op] = but
end
end
for op in row do
var but = new Button(parent=row_layout, text=op)
- but.observers.add self
buttons[op] = but
end
end
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.
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
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
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
--- /dev/null
+http_request_example
+http_request_example.apk
+http_request_example.app
--- /dev/null
+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
--- /dev/null
+# 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
# 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,
# * `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
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
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
# 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`
#
var maybe_code: nullable Int
# The status code
+ #
# Require: `not is_error`
fun code: Int do return maybe_code.as(not null)
end
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
sender_thread.after
end
end
+
+private class RestRunnableJoin
+ super HttpRequestTask
+
+ redef fun main do sender_thread.join
+end
# 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
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`
# 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`
--- /dev/null
+# 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
--- /dev/null
+# 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
--- /dev/null
+# 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
--- /dev/null
+# 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
--- /dev/null
+[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
# ~~~
module collections
-import base
+import ffi_support
# Java primitive array
#
# 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
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`
# 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;
# 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
# 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
# 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
args.options = c_options
- var jvm = new JavaVM(args, self)
+ var jvm = new JavaVM(args)
args.free
c_options.free
# 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);
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)
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
`}
end
-# used to initialize a JavaVM
-class JniEnvRef
- var jni_env: nullable JniEnv = null
-end
-
# Represents a jni jclass
extern class JClass `{jclass`}
end
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
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
# 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`
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); `}
# 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`
--- /dev/null
+<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}}
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>
--- /dev/null
+/*
+ * 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();
+ }])
+})();
(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',
.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);
+ }
+ }
+ }])
})();
*/
(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'
})
border-color: #eee;
}
+/* loading bar */
+
+#loading-bar .bar {
+ background: #FF8100;
+}
+
/* navs */
.nav-tabs li { cursor: pointer; }
-<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>
-<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>
--- /dev/null
+<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>
--- /dev/null
+<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>
-<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>
-<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>
-<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>
-<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>
-<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>
# * `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`.
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
class CodeCommand
super AbstractDocCommand
end
+
+# A `DocCommand` that display an graph for a `MEntity`.
+#
+# Syntax:
+# * `graph: MEntity::name`
+class GraphCommand
+ super AbstractDocCommand
+end
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.
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
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)
# 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
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
--- /dev/null
+# 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)
# 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")
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
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
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
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
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
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
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
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
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")
end
redef class MSignature
- redef fun linkto
+ redef fun linkto(v)
do
var res = new HTMLTag("span")
var first = true
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
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
return res
end
- redef fun linkto
+ redef fun linkto(v)
do
- return mpropdef.linkto
+ return mpropdef.linkto(v)
end
end
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
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
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
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)
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
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
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
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
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}`.")
# 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.
# 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)
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?
# 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
# Filter out non-directories
if not stat.is_dir then
+ last_loader_error = "Error: `{dirpath}` is not a directory."
return null
end
# 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
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
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
# 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}`.")
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
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]
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
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
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
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
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
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
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
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]
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]
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]
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
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
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
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
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)
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
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">
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>"
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>"
--- /dev/null
+# 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
--- /dev/null
+# 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
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`
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)
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
# 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
+++ /dev/null
-# 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
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
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
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))
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)
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)
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)
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
+++ /dev/null
-# 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
</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="<a href="base_simple3.html#base_simple3$Object">class Object</a>" data-content="<div><b>class</b> <span>Object</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> sub-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Bool">Bool</a></li><li><a href="base_simple3.html#base_simple3$Int">Int</a></li><li><a href="base_simple3.html#base_simple3$A">A</a></li><li><a href="base_simple3.html#base_simple3$B">B</a></li><li><a href="base_simple3.html#base_simple3$C">C</a></li><li><a href="base_simple3.html#base_simple3$Sys">Sys</a></li></ul></div></div>" 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="<a href="#base_simple3$Object">class Object</a>" data-content="<div><b>class</b> <span>Object</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> sub-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3$Bool">base_simple3$Bool</a></li><li><a href="#base_simple3$Int">base_simple3$Int</a></li><li><a href="#base_simple3$A">base_simple3$A</a></li><li><a href="#base_simple3$B">base_simple3$B</a></li><li><a href="#base_simple3$C">base_simple3$C</a></li><li><a href="#base_simple3$Sys">base_simple3$Sys</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$Bool">class Bool</a>" data-content="<div><b>class</b> <span>Bool</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Object">Object</a></li></ul></div></div>" 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="<a href="#base_simple3$Bool">class Bool</a>" data-content="<div><b>class</b> <span>Bool</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3$Object">base_simple3$Object</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$Int">class Int</a>" data-content="<div><b>class</b> <span>Int</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Object">Object</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$Int$output">base_simple3$Int$output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" 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="<a href="#base_simple3$Int">class Int</a>" data-content="<div><b>class</b> <span>Int</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3$Object">base_simple3$Object</a></li></ul></div></div>" 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="<a href="#base_simple3$Int$output">base_simple3$Int$output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$A">class A</a>" data-content="<div><b>class</b> <span>A</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Object">Object</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$A$run">base_simple3$A$run</a>" data-content="<div><b>fun</b> <span>run<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">6</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="#base_simple3$A">class A</a>" data-content="<div><b>class</b> <span>A</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3$Object">base_simple3$Object</a></li></ul></div></div>" 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="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="#base_simple3$A$run">base_simple3$A$run</a>" data-content="<div><b>fun</b> <span>run<span></span></span><br/></div>" 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="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">6</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$B">class B</a>" data-content="<div><b>class</b> <span>B</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Object">Object</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$B$val">base_simple3$B$val</a>" data-content="<div><b>fun</b> <span>val<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<div><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>1 message(s)</b> <span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li>Warning: init with signature in base_simple3$B</li></ul></div></div>" data-toggle="popover">init</span><span>(</span><span class="nc_i nc_v popupable" title="v: Int" data-content="<div><b>local var</b> <span>v:<a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">v</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="#base_simple3$B">class B</a>" data-content="<div><b>class</b> <span>B</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3$Object">base_simple3$Object</a></li></ul></div></div>" 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="<a href="#base_simple3$B$val">base_simple3$B$val</a>" data-content="<div><b>fun</b> <span>val<span>: <a href="#base_simple3$Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-content="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" 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="<div><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>1 message(s)</b> <span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li>Warning: init with signature in base_simple3$B</li></ul></div></div>" data-toggle="popover">init</span><span>(</span><span class="nc_i nc_v popupable" title="v: Int" data-content="<div><b>local var</b> <span>v:<a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">v</span><span>:</span> <span class="nc_t popupable" title="Int" data-content="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">7</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
-</span><span class="line" id="L39"> <span class="nc_k popupable" title="B" data-title="<a href="base_simple3.html#base_simple3$B">B</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$B">B</a></span><br/></div>" data-toggle="popover">self</span><span class="popupable" title="call base_simple3$B$val=" data-title="<a href="base_simple3.html#base_simple3$B$val=">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$val=">val=</a><span>(val: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$val=" data-title="<a href="base_simple3.html#base_simple3$B$val=">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$val=">val=</a><span>(val: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">val</span> <span class="popupable" title="call base_simple3$B$val=" data-title="<a href="base_simple3.html#base_simple3$B$val=">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$val=">val=</a><span>(val: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">=</span> <span class="nc_i nc_v popupable" title="v: Int" data-content="<div><b>local var</b> <span>v:<a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">v</span>
+</span><span class="line" id="L38"> <span class="nc_l popupable" title="Int" data-content="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">7</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
+</span><span class="line" id="L39"> <span class="nc_k popupable" title="B" data-content="<div><b>class</b> <span><a href="#base_simple3$B">base_simple3$B</a></span><br/></div>" data-toggle="popover">self</span><span class="popupable" title="call base_simple3$B$val=" data-title="<a href="#base_simple3$B$val=">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$B$val=">base_simple3$B$val=</a><span>(val: <a href="#base_simple3$Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$val=" data-title="<a href="#base_simple3$B$val=">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$B$val=">base_simple3$B$val=</a><span>(val: <a href="#base_simple3$Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">val</span> <span class="popupable" title="call base_simple3$B$val=" data-title="<a href="#base_simple3$B$val=">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$B$val=">base_simple3$B$val=</a><span>(val: <a href="#base_simple3$Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">=</span> <span class="nc_i nc_v popupable" title="v: Int" data-content="<div><b>local var</b> <span>v:<a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$B$run">base_simple3$B$run</a>" data-content="<div><b>fun</b> <span>run<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$B$val">call base_simple3$B$val</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$val">val</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="#base_simple3$B$run">base_simple3$B$run</a>" data-content="<div><b>fun</b> <span>run<span></span></span><br/></div>" 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="<a href="#base_simple3$B$val">call base_simple3$B$val</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$B$val">base_simple3$B$val</a><span>: <a href="#base_simple3$Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$C">class C</a>" data-content="<div><b>class</b> <span>C</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Object">Object</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$C$val1">base_simple3$C$val1</a>" data-content="<div><b>fun</b> <span>val1<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$C$val2">base_simple3$C$val2</a>" data-content="<div><b>fun</b> <span>val2<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="#base_simple3$C">class C</a>" data-content="<div><b>class</b> <span>C</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3$Object">base_simple3$Object</a></li></ul></div></div>" 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="<a href="#base_simple3$C$val1">base_simple3$C$val1</a>" data-content="<div><b>fun</b> <span>val1<span>: <a href="#base_simple3$Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-content="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3$C$val2">base_simple3$C$val2</a>" data-content="<div><b>fun</b> <span>val2<span>: <a href="#base_simple3$Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-content="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-content="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Sys$foo">base_simple3$Sys$foo</a>" data-content="<div><b>fun</b> <span>foo<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">2</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Sys$bar">base_simple3$Sys$bar</a>" data-content="<div><b>fun</b> <span>bar<span>(i: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover"><span class="nc_i">bar</span></span><span>(</span><span class="nc_i nc_v popupable" title="i: Int" data-content="<div><b>local var</b> <span>i:<a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">i</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<div><b>local var</b> <span>i:<a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">i</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Sys$baz">base_simple3$Sys$baz</a>" data-content="<div><b>fun</b> <span>baz<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover"><span class="nc_i">baz</span></span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="#base_simple3$Sys$foo">base_simple3$Sys$foo</a>" data-content="<div><b>fun</b> <span>foo<span></span></span><br/></div>" 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="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">2</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="#base_simple3$Sys$bar">base_simple3$Sys$bar</a>" data-content="<div><b>fun</b> <span>bar<span>(i: <a href="#base_simple3$Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover"><span class="nc_i">bar</span></span><span>(</span><span class="nc_i nc_v popupable" title="i: Int" data-content="<div><b>local var</b> <span>i:<a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">i</span><span>:</span> <span class="nc_t popupable" title="Int" data-content="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" 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="<div><b>local var</b> <span>i:<a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">i</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="#base_simple3$Sys$baz">base_simple3$Sys$baz</a>" data-content="<div><b>fun</b> <span>baz<span>: <a href="#base_simple3$Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover"><span class="nc_i">baz</span></span><span>:</span> <span class="nc_t popupable" title="Int" data-content="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" 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="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">1</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
-</span><span class="line" id="L54"><span class="nc_i popupable" title="call base_simple3$Sys$foo" data-title="<a href="base_simple3.html#base_simple3$Sys$foo">call base_simple3$Sys$foo</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Sys$foo">foo</a><span></span></span><br/></div>" data-toggle="popover">foo</span>
-</span><span class="line" id="L55"><span class="nc_i popupable" title="call base_simple3$Sys$bar" data-title="<a href="base_simple3.html#base_simple3$Sys$bar">call base_simple3$Sys$bar</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Sys$bar">bar</a><span>(i: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">bar</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Sys$baz">call base_simple3$Sys$baz</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Sys$baz">baz</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">baz</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">1</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
+</span><span class="line" id="L54"><span class="nc_i popupable" title="call base_simple3$Sys$foo" data-title="<a href="#base_simple3$Sys$foo">call base_simple3$Sys$foo</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Sys$foo">base_simple3$Sys$foo</a><span></span></span><br/></div>" data-toggle="popover">foo</span>
+</span><span class="line" id="L55"><span class="nc_i popupable" title="call base_simple3$Sys$bar" data-title="<a href="#base_simple3$Sys$bar">call base_simple3$Sys$bar</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Sys$bar">base_simple3$Sys$bar</a><span>(i: <a href="#base_simple3$Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">bar</span><span>(</span><span class="nc_l popupable" title="Int" data-content="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3$Sys$baz">call base_simple3$Sys$baz</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Sys$baz">base_simple3$Sys$baz</a><span>: <a href="#base_simple3$Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">baz</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>a:<a href="base_simple3.html#base_simple3$A">A</a></span><br/></div>" data-toggle="popover">a</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$A$init" data-title="<a href="base_simple3.html#base_simple3$A$init">call base_simple3$A$init</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$A$init">init</a><span></span></span><br/><b>intro</b> <span><a href="base_simple3.html#base_simple3$Object$init">in base_simple3$Object</a></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="A" data-title="<a href="base_simple3.html#base_simple3$A">A</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$A">A</a></span><br/></div>" data-toggle="popover">A</span>
-</span><span class="line" id="L59"><span class="nc_i nc_v popupable" title="a: A" data-content="<div><b>local var</b> <span>a:<a href="base_simple3.html#base_simple3$A">A</a></span><br/></div>" data-toggle="popover">a</span><span class="popupable" title="call base_simple3$A$run" data-title="<a href="base_simple3.html#base_simple3$A$run">call base_simple3$A$run</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$A$run">run</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$A$run" data-title="<a href="base_simple3.html#base_simple3$A$run">call base_simple3$A$run</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$A$run">run</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>a:<a href="#base_simple3$A">base_simple3$A</a></span><br/></div>" data-toggle="popover">a</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$A$init" data-title="<a href="#base_simple3$A$init">call base_simple3$A$init</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$A$init">base_simple3$A$init</a><span></span></span><br/><b>intro</b> <span><a href="#base_simple3$Object$init">in base_simple3$Object</a></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="A" data-content="<div><b>class</b> <span><a href="#base_simple3$A">base_simple3$A</a></span><br/></div>" data-toggle="popover">A</span>
+</span><span class="line" id="L59"><span class="nc_i nc_v popupable" title="a: A" data-content="<div><b>local var</b> <span>a:<a href="#base_simple3$A">base_simple3$A</a></span><br/></div>" data-toggle="popover">a</span><span class="popupable" title="call base_simple3$A$run" data-title="<a href="#base_simple3$A$run">call base_simple3$A$run</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$A$run">base_simple3$A$run</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$A$run" data-title="<a href="#base_simple3$A$run">call base_simple3$A$run</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$A$run">base_simple3$A$run</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>b:<a href="base_simple3.html#base_simple3$B">B</a></span><br/></div>" data-toggle="popover">b</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$B$init" data-title="<a href="base_simple3.html#base_simple3$B$init">call base_simple3$B$init</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$init">init</a><span>(v: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="B" data-title="<a href="base_simple3.html#base_simple3$B">B</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$B">B</a></span><br/></div>" data-toggle="popover">B</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<div><b>local var</b> <span>b:<a href="base_simple3.html#base_simple3$B">B</a></span><br/></div>" data-toggle="popover">b</span><span class="popupable" title="call base_simple3$B$run" data-title="<a href="base_simple3.html#base_simple3$B$run">call base_simple3$B$run</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$run">run</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$run" data-title="<a href="base_simple3.html#base_simple3$B$run">call base_simple3$B$run</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$run">run</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>b:<a href="#base_simple3$B">base_simple3$B</a></span><br/></div>" data-toggle="popover">b</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$B$init" data-title="<a href="#base_simple3$B$init">call base_simple3$B$init</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$B$init">base_simple3$B$init</a><span>(v: <a href="#base_simple3$Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="B" data-content="<div><b>class</b> <span><a href="#base_simple3$B">base_simple3$B</a></span><br/></div>" data-toggle="popover">B</span><span>(</span><span class="nc_l popupable" title="Int" data-content="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" 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="<div><b>local var</b> <span>b:<a href="#base_simple3$B">base_simple3$B</a></span><br/></div>" data-toggle="popover">b</span><span class="popupable" title="call base_simple3$B$run" data-title="<a href="#base_simple3$B$run">call base_simple3$B$run</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$B$run">base_simple3$B$run</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$run" data-title="<a href="#base_simple3$B$run">call base_simple3$B$run</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$B$run">base_simple3$B$run</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>c:<a href="base_simple3.html#base_simple3$C">C</a></span><br/></div>" data-toggle="popover">c</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$C$init" data-title="<a href="base_simple3.html#base_simple3$C$init">call base_simple3$C$init</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$init">init</a><span>(val1: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/><b>intro</b> <span><a href="base_simple3.html#base_simple3$Object$init">in base_simple3$Object</a></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="C" data-title="<a href="base_simple3.html#base_simple3$C">C</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$C">C</a></span><br/></div>" data-toggle="popover">C</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<div><b>local var</b> <span>c:<a href="base_simple3.html#base_simple3$C">C</a></span><br/></div>" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val1" data-title="<a href="base_simple3.html#base_simple3$C$val1">call base_simple3$C$val1</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$val1">val1</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val1" data-title="<a href="base_simple3.html#base_simple3$C$val1">call base_simple3$C$val1</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$val1">val1</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
-</span><span class="line" id="L66"><span class="nc_i nc_v popupable" title="c: C" data-content="<div><b>local var</b> <span>c:<a href="base_simple3.html#base_simple3$C">C</a></span><br/></div>" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val2" data-title="<a href="base_simple3.html#base_simple3$C$val2">call base_simple3$C$val2</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$val2">val2</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val2" data-title="<a href="base_simple3.html#base_simple3$C$val2">call base_simple3$C$val2</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$val2">val2</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>c:<a href="#base_simple3$C">base_simple3$C</a></span><br/></div>" data-toggle="popover">c</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$C$init" data-title="<a href="#base_simple3$C$init">call base_simple3$C$init</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$C$init">base_simple3$C$init</a><span>(val1: <a href="#base_simple3$Int">base_simple3$Int</a>)</span></span><br/><b>intro</b> <span><a href="#base_simple3$Object$init">in base_simple3$Object</a></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="C" data-content="<div><b>class</b> <span><a href="#base_simple3$C">base_simple3$C</a></span><br/></div>" data-toggle="popover">C</span><span>(</span><span class="nc_l popupable" title="Int" data-content="<div><b>class</b> <span><a href="#base_simple3$Int">base_simple3$Int</a></span><br/></div>" 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="<div><b>local var</b> <span>c:<a href="#base_simple3$C">base_simple3$C</a></span><br/></div>" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val1" data-title="<a href="#base_simple3$C$val1">call base_simple3$C$val1</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$C$val1">base_simple3$C$val1</a><span>: <a href="#base_simple3$Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val1" data-title="<a href="#base_simple3$C$val1">call base_simple3$C$val1</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$C$val1">base_simple3$C$val1</a><span>: <a href="#base_simple3$Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
+</span><span class="line" id="L66"><span class="nc_i nc_v popupable" title="c: C" data-content="<div><b>local var</b> <span>c:<a href="#base_simple3$C">base_simple3$C</a></span><br/></div>" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val2" data-title="<a href="#base_simple3$C$val2">call base_simple3$C$val2</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$C$val2">base_simple3$C$val2</a><span>: <a href="#base_simple3$Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val2" data-title="<a href="#base_simple3$C$val2">call base_simple3$C$val2</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$C$val2">base_simple3$C$val2</a><span>: <a href="#base_simple3$Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3$Int$output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
</span></span></span>
\ No newline at end of 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="<a href="base_simple3.html#base_simple3$Int$output">base_simple3$Int$output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$A$run">base_simple3$A$run</a>" data-content="<div><b>fun</b> <span>run<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">6</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$B$val">base_simple3$B$val</a>" data-content="<div><b>fun</b> <span>val<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$B$val">base_simple3$B$val</a>" data-content="<div><b>fun</b> <span>val<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$B$val">base_simple3$B$val</a>" data-content="<div><b>fun</b> <span>val<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<div><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>1 message(s)</b> <span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li>Warning: init with signature in base_simple3$B</li></ul></div></div>" data-toggle="popover">init</span><span>(</span><span class="nc_i nc_v popupable" title="v: Int" data-content="<div><b>local var</b> <span>v:<a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">v</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" 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="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__A___run">base_simple3$A$run</a>" data-content="<div><b>fun</b> <span>run<span></span></span><br/></div>" 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="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">6</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__B___val">base_simple3$B$val</a>" data-content="<div><b>fun</b> <span>val<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__B___val">base_simple3$B$val</a>" data-content="<div><b>fun</b> <span>val<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__B___val">base_simple3$B$val</a>" data-content="<div><b>fun</b> <span>val<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<div><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>1 message(s)</b> <span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li>Warning: init with signature in base_simple3$B</li></ul></div></div>" data-toggle="popover">init</span><span>(</span><span class="nc_i nc_v popupable" title="v: Int" data-content="<div><b>local var</b> <span>v:<a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">v</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">7</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
-</span><span class="line" id="L39"> <span class="nc_k popupable" title="B" data-title="<a href="base_simple3.html#base_simple3$B">B</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$B">B</a></span><br/></div>" data-toggle="popover">self</span><span class="popupable" title="call base_simple3$B$val=" data-title="<a href="base_simple3.html#base_simple3$B$val=">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$val=">val=</a><span>(val: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$val=" data-title="<a href="base_simple3.html#base_simple3$B$val=">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$val=">val=</a><span>(val: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">val</span> <span class="popupable" title="call base_simple3$B$val=" data-title="<a href="base_simple3.html#base_simple3$B$val=">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$val=">val=</a><span>(val: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">=</span> <span class="nc_i nc_v popupable" title="v: Int" data-content="<div><b>local var</b> <span>v:<a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">v</span>
+</span><span class="line" id="L38"> <span class="nc_l popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">7</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
+</span><span class="line" id="L39"> <span class="nc_k popupable" title="B" data-title="<a href="#base_simple3__B">B</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__B">base_simple3$B</a></span><br/></div>" data-toggle="popover">self</span><span class="popupable" title="call base_simple3$B$val=" data-title="<a href="#base_simple3___base_simple3__B___val_61d">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___val_61d">base_simple3$B$val=</a><span>(val: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$val=" data-title="<a href="#base_simple3___base_simple3__B___val_61d">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___val_61d">base_simple3$B$val=</a><span>(val: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">val</span> <span class="popupable" title="call base_simple3$B$val=" data-title="<a href="#base_simple3___base_simple3__B___val_61d">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___val_61d">base_simple3$B$val=</a><span>(val: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">=</span> <span class="nc_i nc_v popupable" title="v: Int" data-content="<div><b>local var</b> <span>v:<a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$B$run">base_simple3$B$run</a>" data-content="<div><b>fun</b> <span>run<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$B$val">call base_simple3$B$val</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$val">val</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$C$val1">base_simple3$C$val1</a>" data-content="<div><b>fun</b> <span>val1<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$C$val1">base_simple3$C$val1</a>" data-content="<div><b>fun</b> <span>val1<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$C$val1">base_simple3$C$val1</a>" data-content="<div><b>fun</b> <span>val1<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$C$val2">base_simple3$C$val2</a>" data-content="<div><b>fun</b> <span>val2<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$C$val2">base_simple3$C$val2</a>" data-content="<div><b>fun</b> <span>val2<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$C$val2">base_simple3$C$val2</a>" data-content="<div><b>fun</b> <span>val2<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Sys$foo">base_simple3$Sys$foo</a>" data-content="<div><b>fun</b> <span>foo<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">2</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Sys$bar">base_simple3$Sys$bar</a>" data-content="<div><b>fun</b> <span>bar<span>(i: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover"><span class="nc_i">bar</span></span><span>(</span><span class="nc_i nc_v popupable" title="i: Int" data-content="<div><b>local var</b> <span>i:<a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">i</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<div><b>local var</b> <span>i:<a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">i</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Sys$baz">base_simple3$Sys$baz</a>" data-content="<div><b>fun</b> <span>baz<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover"><span class="nc_i">baz</span></span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">1</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
-</span><span class="line" id="L54"><span class="nc_i popupable" title="call base_simple3$Sys$foo" data-title="<a href="base_simple3.html#base_simple3$Sys$foo">call base_simple3$Sys$foo</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Sys$foo">foo</a><span></span></span><br/></div>" data-toggle="popover">foo</span>
-</span><span class="line" id="L55"><span class="nc_i popupable" title="call base_simple3$Sys$bar" data-title="<a href="base_simple3.html#base_simple3$Sys$bar">call base_simple3$Sys$bar</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Sys$bar">bar</a><span>(i: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">bar</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Sys$baz">call base_simple3$Sys$baz</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Sys$baz">baz</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">baz</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__B___run">base_simple3$B$run</a>" data-content="<div><b>fun</b> <span>run<span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__B___val">call base_simple3$B$val</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___val">base_simple3$B$val</a><span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__C___val1">base_simple3$C$val1</a>" data-content="<div><b>fun</b> <span>val1<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__C___val1">base_simple3$C$val1</a>" data-content="<div><b>fun</b> <span>val1<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__C___val1">base_simple3$C$val1</a>" data-content="<div><b>fun</b> <span>val1<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__C___val2">base_simple3$C$val2</a>" data-content="<div><b>fun</b> <span>val2<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__C___val2">base_simple3$C$val2</a>" data-content="<div><b>fun</b> <span>val2<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__C___val2">base_simple3$C$val2</a>" data-content="<div><b>fun</b> <span>val2<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Sys___foo">base_simple3$Sys$foo</a>" data-content="<div><b>fun</b> <span>foo<span></span></span><br/></div>" 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="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">2</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Sys___bar">base_simple3$Sys$bar</a>" data-content="<div><b>fun</b> <span>bar<span>(i: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover"><span class="nc_i">bar</span></span><span>(</span><span class="nc_i nc_v popupable" title="i: Int" data-content="<div><b>local var</b> <span>i:<a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">i</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<div><b>local var</b> <span>i:<a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">i</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Sys___baz">base_simple3$Sys$baz</a>" data-content="<div><b>fun</b> <span>baz<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover"><span class="nc_i">baz</span></span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">1</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
+</span><span class="line" id="L54"><span class="nc_i popupable" title="call base_simple3$Sys$foo" data-title="<a href="#base_simple3___base_simple3__Sys___foo">call base_simple3$Sys$foo</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Sys___foo">base_simple3$Sys$foo</a><span></span></span><br/></div>" data-toggle="popover">foo</span>
+</span><span class="line" id="L55"><span class="nc_i popupable" title="call base_simple3$Sys$bar" data-title="<a href="#base_simple3___base_simple3__Sys___bar">call base_simple3$Sys$bar</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Sys___bar">base_simple3$Sys$bar</a><span>(i: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">bar</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Sys___baz">call base_simple3$Sys$baz</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Sys___baz">base_simple3$Sys$baz</a><span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">baz</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>a:<a href="base_simple3.html#base_simple3$A">A</a></span><br/></div>" data-toggle="popover">a</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$A$init" data-title="<a href="base_simple3.html#base_simple3$A$init">call base_simple3$A$init</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$A$init">init</a><span></span></span><br/><b>intro</b> <span><a href="base_simple3.html#base_simple3$Object$init">in base_simple3$Object</a></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="A" data-title="<a href="base_simple3.html#base_simple3$A">A</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$A">A</a></span><br/></div>" data-toggle="popover">A</span>
-</span><span class="line" id="L59"><span class="nc_i nc_v popupable" title="a: A" data-content="<div><b>local var</b> <span>a:<a href="base_simple3.html#base_simple3$A">A</a></span><br/></div>" data-toggle="popover">a</span><span class="popupable" title="call base_simple3$A$run" data-title="<a href="base_simple3.html#base_simple3$A$run">call base_simple3$A$run</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$A$run">run</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$A$run" data-title="<a href="base_simple3.html#base_simple3$A$run">call base_simple3$A$run</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$A$run">run</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>a:<a href="#base_simple3___base_simple3__A">base_simple3$A</a></span><br/></div>" data-toggle="popover">a</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$A$init" data-title="<a href="#base_simple3___base_simple3__A___Object__init">call base_simple3$A$init</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__A___Object__init">base_simple3$A$init</a><span></span></span><br/><b>intro</b> <span><a href="#base_simple3___base_simple3__Object___init">in base_simple3$Object</a></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="A" data-title="<a href="#base_simple3__A">A</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__A">base_simple3$A</a></span><br/></div>" data-toggle="popover">A</span>
+</span><span class="line" id="L59"><span class="nc_i nc_v popupable" title="a: A" data-content="<div><b>local var</b> <span>a:<a href="#base_simple3___base_simple3__A">base_simple3$A</a></span><br/></div>" data-toggle="popover">a</span><span class="popupable" title="call base_simple3$A$run" data-title="<a href="#base_simple3___base_simple3__A___run">call base_simple3$A$run</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__A___run">base_simple3$A$run</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$A$run" data-title="<a href="#base_simple3___base_simple3__A___run">call base_simple3$A$run</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__A___run">base_simple3$A$run</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>b:<a href="base_simple3.html#base_simple3$B">B</a></span><br/></div>" data-toggle="popover">b</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$B$init" data-title="<a href="base_simple3.html#base_simple3$B$init">call base_simple3$B$init</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$init">init</a><span>(v: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="B" data-title="<a href="base_simple3.html#base_simple3$B">B</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$B">B</a></span><br/></div>" data-toggle="popover">B</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<div><b>local var</b> <span>b:<a href="base_simple3.html#base_simple3$B">B</a></span><br/></div>" data-toggle="popover">b</span><span class="popupable" title="call base_simple3$B$run" data-title="<a href="base_simple3.html#base_simple3$B$run">call base_simple3$B$run</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$run">run</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$run" data-title="<a href="base_simple3.html#base_simple3$B$run">call base_simple3$B$run</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$run">run</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>b:<a href="#base_simple3___base_simple3__B">base_simple3$B</a></span><br/></div>" data-toggle="popover">b</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$B$init" data-title="<a href="#base_simple3___base_simple3__B___init">call base_simple3$B$init</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___init">base_simple3$B$init</a><span>(v: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="B" data-title="<a href="#base_simple3__B">B</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__B">base_simple3$B</a></span><br/></div>" data-toggle="popover">B</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<div><b>local var</b> <span>b:<a href="#base_simple3___base_simple3__B">base_simple3$B</a></span><br/></div>" data-toggle="popover">b</span><span class="popupable" title="call base_simple3$B$run" data-title="<a href="#base_simple3___base_simple3__B___run">call base_simple3$B$run</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___run">base_simple3$B$run</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$run" data-title="<a href="#base_simple3___base_simple3__B___run">call base_simple3$B$run</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___run">base_simple3$B$run</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>c:<a href="base_simple3.html#base_simple3$C">C</a></span><br/></div>" data-toggle="popover">c</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$C$init" data-title="<a href="base_simple3.html#base_simple3$C$init">call base_simple3$C$init</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$init">init</a><span>(val1: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/><b>intro</b> <span><a href="base_simple3.html#base_simple3$Object$init">in base_simple3$Object</a></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="C" data-title="<a href="base_simple3.html#base_simple3$C">C</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$C">C</a></span><br/></div>" data-toggle="popover">C</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<div><b>local var</b> <span>c:<a href="base_simple3.html#base_simple3$C">C</a></span><br/></div>" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val1" data-title="<a href="base_simple3.html#base_simple3$C$val1">call base_simple3$C$val1</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$val1">val1</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val1" data-title="<a href="base_simple3.html#base_simple3$C$val1">call base_simple3$C$val1</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$val1">val1</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
-</span><span class="line" id="L66"><span class="nc_i nc_v popupable" title="c: C" data-content="<div><b>local var</b> <span>c:<a href="base_simple3.html#base_simple3$C">C</a></span><br/></div>" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val2" data-title="<a href="base_simple3.html#base_simple3$C$val2">call base_simple3$C$val2</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$val2">val2</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val2" data-title="<a href="base_simple3.html#base_simple3$C$val2">call base_simple3$C$val2</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$val2">val2</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>c:<a href="#base_simple3___base_simple3__C">base_simple3$C</a></span><br/></div>" data-toggle="popover">c</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$C$init" data-title="<a href="#base_simple3___base_simple3__C___Object__init">call base_simple3$C$init</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__C___Object__init">base_simple3$C$init</a><span>(val1: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/><b>intro</b> <span><a href="#base_simple3___base_simple3__Object___init">in base_simple3$Object</a></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="C" data-title="<a href="#base_simple3__C">C</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__C">base_simple3$C</a></span><br/></div>" data-toggle="popover">C</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<div><b>local var</b> <span>c:<a href="#base_simple3___base_simple3__C">base_simple3$C</a></span><br/></div>" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val1" data-title="<a href="#base_simple3___base_simple3__C___val1">call base_simple3$C$val1</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__C___val1">base_simple3$C$val1</a><span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val1" data-title="<a href="#base_simple3___base_simple3__C___val1">call base_simple3$C$val1</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__C___val1">base_simple3$C$val1</a><span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
+</span><span class="line" id="L66"><span class="nc_i nc_v popupable" title="c: C" data-content="<div><b>local var</b> <span>c:<a href="#base_simple3___base_simple3__C">base_simple3$C</a></span><br/></div>" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val2" data-title="<a href="#base_simple3___base_simple3__C___val2">call base_simple3$C$val2</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__C___val2">base_simple3$C$val2</a><span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val2" data-title="<a href="#base_simple3___base_simple3__C___val2">call base_simple3$C$val2</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__C___val2">base_simple3$C$val2</a><span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Object">class Object</a>" data-content="<div><b>class</b> <span>Object</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> sub-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Bool">Bool</a></li><li><a href="base_simple3.html#base_simple3$Int">Int</a></li><li><a href="base_simple3.html#base_simple3$A">A</a></li><li><a href="base_simple3.html#base_simple3$B">B</a></li><li><a href="base_simple3.html#base_simple3$C">C</a></li><li><a href="base_simple3.html#base_simple3$Sys">Sys</a></li></ul></div></div>" 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="<a href="#base_simple3___base_simple3__Object">class Object</a>" data-content="<div><b>class</b> <span>Object</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> sub-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3___base_simple3__Bool">base_simple3$Bool</a></li><li><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></li><li><a href="#base_simple3___base_simple3__A">base_simple3$A</a></li><li><a href="#base_simple3___base_simple3__B">base_simple3$B</a></li><li><a href="#base_simple3___base_simple3__C">base_simple3$C</a></li><li><a href="#base_simple3___base_simple3__Sys">base_simple3$Sys</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$Bool">class Bool</a>" data-content="<div><b>class</b> <span>Bool</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Object">Object</a></li></ul></div></div>" 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="<a href="#base_simple3___base_simple3__Bool">class Bool</a>" data-content="<div><b>class</b> <span>Bool</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3___base_simple3__Object">base_simple3$Object</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$Int">class Int</a>" data-content="<div><b>class</b> <span>Int</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Object">Object</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$Int$output">base_simple3$Int$output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Int">class Int</a>" data-content="<div><b>class</b> <span>Int</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3___base_simple3__Object">base_simple3$Object</a></li></ul></div></div>" 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="<a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$A">class A</a>" data-content="<div><b>class</b> <span>A</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Object">Object</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$A$run">base_simple3$A$run</a>" data-content="<div><b>fun</b> <span>run<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">6</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__A">class A</a>" data-content="<div><b>class</b> <span>A</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3___base_simple3__Object">base_simple3$Object</a></li></ul></div></div>" 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="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__A___run">base_simple3$A$run</a>" data-content="<div><b>fun</b> <span>run<span></span></span><br/></div>" 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="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">6</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$B">class B</a>" data-content="<div><b>class</b> <span>B</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Object">Object</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$B$val">base_simple3$B$val</a>" data-content="<div><b>fun</b> <span>val<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<div><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>1 message(s)</b> <span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li>Warning: init with signature in base_simple3$B</li></ul></div></div>" data-toggle="popover">init</span><span>(</span><span class="nc_i nc_v popupable" title="v: Int" data-content="<div><b>local var</b> <span>v:<a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">v</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__B">class B</a>" data-content="<div><b>class</b> <span>B</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3___base_simple3__Object">base_simple3$Object</a></li></ul></div></div>" 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="<a href="#base_simple3___base_simple3__B___val">base_simple3$B$val</a>" data-content="<div><b>fun</b> <span>val<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<div><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>1 message(s)</b> <span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li>Warning: init with signature in base_simple3$B</li></ul></div></div>" data-toggle="popover">init</span><span>(</span><span class="nc_i nc_v popupable" title="v: Int" data-content="<div><b>local var</b> <span>v:<a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">v</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">7</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
-</span><span class="line" id="L39"> <span class="nc_k popupable" title="B" data-title="<a href="base_simple3.html#base_simple3$B">B</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$B">B</a></span><br/></div>" data-toggle="popover">self</span><span class="popupable" title="call base_simple3$B$val=" data-title="<a href="base_simple3.html#base_simple3$B$val=">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$val=">val=</a><span>(val: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$val=" data-title="<a href="base_simple3.html#base_simple3$B$val=">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$val=">val=</a><span>(val: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">val</span> <span class="popupable" title="call base_simple3$B$val=" data-title="<a href="base_simple3.html#base_simple3$B$val=">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$val=">val=</a><span>(val: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">=</span> <span class="nc_i nc_v popupable" title="v: Int" data-content="<div><b>local var</b> <span>v:<a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">v</span>
+</span><span class="line" id="L38"> <span class="nc_l popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">7</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
+</span><span class="line" id="L39"> <span class="nc_k popupable" title="B" data-title="<a href="#base_simple3__B">B</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__B">base_simple3$B</a></span><br/></div>" data-toggle="popover">self</span><span class="popupable" title="call base_simple3$B$val=" data-title="<a href="#base_simple3___base_simple3__B___val_61d">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___val_61d">base_simple3$B$val=</a><span>(val: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$val=" data-title="<a href="#base_simple3___base_simple3__B___val_61d">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___val_61d">base_simple3$B$val=</a><span>(val: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">val</span> <span class="popupable" title="call base_simple3$B$val=" data-title="<a href="#base_simple3___base_simple3__B___val_61d">call base_simple3$B$val=</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___val_61d">base_simple3$B$val=</a><span>(val: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">=</span> <span class="nc_i nc_v popupable" title="v: Int" data-content="<div><b>local var</b> <span>v:<a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$B$run">base_simple3$B$run</a>" data-content="<div><b>fun</b> <span>run<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$B$val">call base_simple3$B$val</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$val">val</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__B___run">base_simple3$B$run</a>" data-content="<div><b>fun</b> <span>run<span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__B___val">call base_simple3$B$val</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___val">base_simple3$B$val</a><span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$C">class C</a>" data-content="<div><b>class</b> <span>C</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Object">Object</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$C$val1">base_simple3$C$val1</a>" data-content="<div><b>fun</b> <span>val1<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$C$val2">base_simple3$C$val2</a>" data-content="<div><b>fun</b> <span>val2<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__C">class C</a>" data-content="<div><b>class</b> <span>C</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3___base_simple3__Object">base_simple3$Object</a></li></ul></div></div>" 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="<a href="#base_simple3___base_simple3__C___val1">base_simple3$C$val1</a>" data-content="<div><b>fun</b> <span>val1<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__C___val2">base_simple3$C$val2</a>" data-content="<div><b>fun</b> <span>val2<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">Int</span> <span>=</span> <span class="nc_l popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Sys$foo">base_simple3$Sys$foo</a>" data-content="<div><b>fun</b> <span>foo<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">2</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Sys$bar">base_simple3$Sys$bar</a>" data-content="<div><b>fun</b> <span>bar<span>(i: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover"><span class="nc_i">bar</span></span><span>(</span><span class="nc_i nc_v popupable" title="i: Int" data-content="<div><b>local var</b> <span>i:<a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">i</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<div><b>local var</b> <span>i:<a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">i</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Sys$baz">base_simple3$Sys$baz</a>" data-content="<div><b>fun</b> <span>baz<span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover"><span class="nc_i">baz</span></span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Sys___foo">base_simple3$Sys$foo</a>" data-content="<div><b>fun</b> <span>foo<span></span></span><br/></div>" 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="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">2</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Sys___bar">base_simple3$Sys$bar</a>" data-content="<div><b>fun</b> <span>bar<span>(i: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover"><span class="nc_i">bar</span></span><span>(</span><span class="nc_i nc_v popupable" title="i: Int" data-content="<div><b>local var</b> <span>i:<a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">i</span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<div><b>local var</b> <span>i:<a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">i</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Sys___baz">base_simple3$Sys$baz</a>" data-content="<div><b>fun</b> <span>baz<span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover"><span class="nc_i">baz</span></span><span>:</span> <span class="nc_t popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">1</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
-</span><span class="line" id="L54"><span class="nc_i popupable" title="call base_simple3$Sys$foo" data-title="<a href="base_simple3.html#base_simple3$Sys$foo">call base_simple3$Sys$foo</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Sys$foo">foo</a><span></span></span><br/></div>" data-toggle="popover">foo</span>
-</span><span class="line" id="L55"><span class="nc_i popupable" title="call base_simple3$Sys$bar" data-title="<a href="base_simple3.html#base_simple3$Sys$bar">call base_simple3$Sys$bar</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Sys$bar">bar</a><span>(i: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">bar</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Sys$baz">call base_simple3$Sys$baz</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Sys$baz">baz</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">baz</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" data-toggle="popover">1</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
+</span><span class="line" id="L54"><span class="nc_i popupable" title="call base_simple3$Sys$foo" data-title="<a href="#base_simple3___base_simple3__Sys___foo">call base_simple3$Sys$foo</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Sys___foo">base_simple3$Sys$foo</a><span></span></span><br/></div>" data-toggle="popover">foo</span>
+</span><span class="line" id="L55"><span class="nc_i popupable" title="call base_simple3$Sys$bar" data-title="<a href="#base_simple3___base_simple3__Sys___bar">call base_simple3$Sys$bar</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Sys___bar">base_simple3$Sys$bar</a><span>(i: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">bar</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Sys___baz">call base_simple3$Sys$baz</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Sys___baz">base_simple3$Sys$baz</a><span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">baz</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>a:<a href="base_simple3.html#base_simple3$A">A</a></span><br/></div>" data-toggle="popover">a</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$A$init" data-title="<a href="base_simple3.html#base_simple3$A$init">call base_simple3$A$init</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$A$init">init</a><span></span></span><br/><b>intro</b> <span><a href="base_simple3.html#base_simple3$Object$init">in base_simple3$Object</a></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="A" data-title="<a href="base_simple3.html#base_simple3$A">A</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$A">A</a></span><br/></div>" data-toggle="popover">A</span>
-</span><span class="line" id="L59"><span class="nc_i nc_v popupable" title="a: A" data-content="<div><b>local var</b> <span>a:<a href="base_simple3.html#base_simple3$A">A</a></span><br/></div>" data-toggle="popover">a</span><span class="popupable" title="call base_simple3$A$run" data-title="<a href="base_simple3.html#base_simple3$A$run">call base_simple3$A$run</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$A$run">run</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$A$run" data-title="<a href="base_simple3.html#base_simple3$A$run">call base_simple3$A$run</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$A$run">run</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>a:<a href="#base_simple3___base_simple3__A">base_simple3$A</a></span><br/></div>" data-toggle="popover">a</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$A$init" data-title="<a href="#base_simple3___base_simple3__A___Object__init">call base_simple3$A$init</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__A___Object__init">base_simple3$A$init</a><span></span></span><br/><b>intro</b> <span><a href="#base_simple3___base_simple3__Object___init">in base_simple3$Object</a></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="A" data-title="<a href="#base_simple3__A">A</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__A">base_simple3$A</a></span><br/></div>" data-toggle="popover">A</span>
+</span><span class="line" id="L59"><span class="nc_i nc_v popupable" title="a: A" data-content="<div><b>local var</b> <span>a:<a href="#base_simple3___base_simple3__A">base_simple3$A</a></span><br/></div>" data-toggle="popover">a</span><span class="popupable" title="call base_simple3$A$run" data-title="<a href="#base_simple3___base_simple3__A___run">call base_simple3$A$run</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__A___run">base_simple3$A$run</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$A$run" data-title="<a href="#base_simple3___base_simple3__A___run">call base_simple3$A$run</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__A___run">base_simple3$A$run</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>b:<a href="base_simple3.html#base_simple3$B">B</a></span><br/></div>" data-toggle="popover">b</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$B$init" data-title="<a href="base_simple3.html#base_simple3$B$init">call base_simple3$B$init</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$init">init</a><span>(v: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="B" data-title="<a href="base_simple3.html#base_simple3$B">B</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$B">B</a></span><br/></div>" data-toggle="popover">B</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<div><b>local var</b> <span>b:<a href="base_simple3.html#base_simple3$B">B</a></span><br/></div>" data-toggle="popover">b</span><span class="popupable" title="call base_simple3$B$run" data-title="<a href="base_simple3.html#base_simple3$B$run">call base_simple3$B$run</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$run">run</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$run" data-title="<a href="base_simple3.html#base_simple3$B$run">call base_simple3$B$run</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$B$run">run</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>b:<a href="#base_simple3___base_simple3__B">base_simple3$B</a></span><br/></div>" data-toggle="popover">b</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$B$init" data-title="<a href="#base_simple3___base_simple3__B___init">call base_simple3$B$init</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___init">base_simple3$B$init</a><span>(v: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="B" data-title="<a href="#base_simple3__B">B</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__B">base_simple3$B</a></span><br/></div>" data-toggle="popover">B</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<div><b>local var</b> <span>b:<a href="#base_simple3___base_simple3__B">base_simple3$B</a></span><br/></div>" data-toggle="popover">b</span><span class="popupable" title="call base_simple3$B$run" data-title="<a href="#base_simple3___base_simple3__B___run">call base_simple3$B$run</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___run">base_simple3$B$run</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$B$run" data-title="<a href="#base_simple3___base_simple3__B___run">call base_simple3$B$run</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__B___run">base_simple3$B$run</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>c:<a href="base_simple3.html#base_simple3$C">C</a></span><br/></div>" data-toggle="popover">c</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$C$init" data-title="<a href="base_simple3.html#base_simple3$C$init">call base_simple3$C$init</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$init">init</a><span>(val1: <a href="base_simple3.html#base_simple3$Int">Int</a>)</span></span><br/><b>intro</b> <span><a href="base_simple3.html#base_simple3$Object$init">in base_simple3$Object</a></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="C" data-title="<a href="base_simple3.html#base_simple3$C">C</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$C">C</a></span><br/></div>" data-toggle="popover">C</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<div><b>local var</b> <span>c:<a href="base_simple3.html#base_simple3$C">C</a></span><br/></div>" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val1" data-title="<a href="base_simple3.html#base_simple3$C$val1">call base_simple3$C$val1</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$val1">val1</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val1" data-title="<a href="base_simple3.html#base_simple3$C$val1">call base_simple3$C$val1</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$val1">val1</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
-</span><span class="line" id="L66"><span class="nc_i nc_v popupable" title="c: C" data-content="<div><b>local var</b> <span>c:<a href="base_simple3.html#base_simple3$C">C</a></span><br/></div>" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val2" data-title="<a href="base_simple3.html#base_simple3$C$val2">call base_simple3$C$val2</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$val2">val2</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val2" data-title="<a href="base_simple3.html#base_simple3$C$val2">call base_simple3$C$val2</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$C$val2">val2</a><span>: <a href="base_simple3.html#base_simple3$Int">Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<div><b>local var</b> <span>c:<a href="#base_simple3___base_simple3__C">base_simple3$C</a></span><br/></div>" data-toggle="popover">c</span> <span>=</span> <span class="nc_k popupable" title="call base_simple3$C$init" data-title="<a href="#base_simple3___base_simple3__C___Object__init">call base_simple3$C$init</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__C___Object__init">base_simple3$C$init</a><span>(val1: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a>)</span></span><br/><b>intro</b> <span><a href="#base_simple3___base_simple3__Object___init">in base_simple3$Object</a></span><br/></div>" data-toggle="popover">new</span> <span class="nc_t popupable" title="C" data-title="<a href="#base_simple3__C">C</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__C">base_simple3$C</a></span><br/></div>" data-toggle="popover">C</span><span>(</span><span class="nc_l popupable" title="Int" data-title="<a href="#base_simple3__Int">Int</a>" data-content="<div><b>class</b> <span><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span><br/></div>" 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="<div><b>local var</b> <span>c:<a href="#base_simple3___base_simple3__C">base_simple3$C</a></span><br/></div>" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val1" data-title="<a href="#base_simple3___base_simple3__C___val1">call base_simple3$C$val1</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__C___val1">base_simple3$C$val1</a><span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val1" data-title="<a href="#base_simple3___base_simple3__C___val1">call base_simple3$C$val1</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__C___val1">base_simple3$C$val1</a><span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val1</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">output</span>
+</span><span class="line" id="L66"><span class="nc_i nc_v popupable" title="c: C" data-content="<div><b>local var</b> <span>c:<a href="#base_simple3___base_simple3__C">base_simple3$C</a></span><br/></div>" data-toggle="popover">c</span><span class="popupable" title="call base_simple3$C$val2" data-title="<a href="#base_simple3___base_simple3__C___val2">call base_simple3$C$val2</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__C___val2">base_simple3$C$val2</a><span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$C$val2" data-title="<a href="#base_simple3___base_simple3__C___val2">call base_simple3$C$val2</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__C___val2">base_simple3$C$val2</a><span>: <a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></span></span><br/></div>" data-toggle="popover">val2</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="#base_simple3___base_simple3__Int___output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Object">class Object</a>" data-content="<div><b>class</b> <span>Object</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> sub-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Bool">Bool</a></li><li><a href="base_simple3.html#base_simple3$Int">Int</a></li><li><a href="base_simple3.html#base_simple3$A">A</a></li><li><a href="base_simple3.html#base_simple3$B">B</a></li><li><a href="base_simple3.html#base_simple3$C">C</a></li><li><a href="base_simple3.html#base_simple3$Sys">Sys</a></li></ul></div></div>" 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="<a href="#base_simple3___base_simple3__Object">class Object</a>" data-content="<div><b>class</b> <span>Object</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> sub-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3___base_simple3__Bool">base_simple3$Bool</a></li><li><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></li><li><a href="#base_simple3___base_simple3__A">base_simple3$A</a></li><li><a href="#base_simple3___base_simple3__B">base_simple3$B</a></li><li><a href="#base_simple3___base_simple3__C">base_simple3$C</a></li><li><a href="#base_simple3___base_simple3__Sys">base_simple3$Sys</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$Object">class Object</a>" data-content="<div><b>class</b> <span>Object</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> sub-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Bool">Bool</a></li><li><a href="base_simple3.html#base_simple3$Int">Int</a></li><li><a href="base_simple3.html#base_simple3$A">A</a></li><li><a href="base_simple3.html#base_simple3$B">B</a></li><li><a href="base_simple3.html#base_simple3$C">C</a></li><li><a href="base_simple3.html#base_simple3$Sys">Sys</a></li></ul></div></div>" 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="<a href="#base_simple3___base_simple3__Object">class Object</a>" data-content="<div><b>class</b> <span>Object</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> sub-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3___base_simple3__Bool">base_simple3$Bool</a></li><li><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></li><li><a href="#base_simple3___base_simple3__A">base_simple3$A</a></li><li><a href="#base_simple3___base_simple3__B">base_simple3$B</a></li><li><a href="#base_simple3___base_simple3__C">base_simple3$C</a></li><li><a href="#base_simple3___base_simple3__Sys">base_simple3$Sys</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$Object">class Object</a>" data-content="<div><b>class</b> <span>Object</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> sub-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3$Bool">Bool</a></li><li><a href="base_simple3.html#base_simple3$Int">Int</a></li><li><a href="base_simple3.html#base_simple3$A">A</a></li><li><a href="base_simple3.html#base_simple3$B">B</a></li><li><a href="base_simple3.html#base_simple3$C">C</a></li><li><a href="base_simple3.html#base_simple3$Sys">Sys</a></li></ul></div></div>" 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="<a href="#base_simple3___base_simple3__Object">class Object</a>" data-content="<div><b>class</b> <span>Object</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> sub-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="#base_simple3___base_simple3__Bool">base_simple3$Bool</a></li><li><a href="#base_simple3___base_simple3__Int">base_simple3$Int</a></li><li><a href="#base_simple3___base_simple3__A">base_simple3$A</a></li><li><a href="#base_simple3___base_simple3__B">base_simple3$B</a></li><li><a href="#base_simple3___base_simple3__C">base_simple3$C</a></li><li><a href="#base_simple3___base_simple3__Sys">base_simple3$Sys</a></li></ul></div></div>" 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="<a href="base_simple3.html#base_simple3$Int$output">base_simple3$Int$output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int$output">base_simple3$Int$output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int$output">base_simple3$Int$output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" 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="<a href="#base_simple3___base_simple3__Int___output">base_simple3$Int$output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" data-toggle="popover">5</span><span class="popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" data-toggle="popover">.</span><span class="nc_i popupable" title="call base_simple3$Int$output" data-title="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int">Int</a>" data-content="<div><b>class</b> <span><a href="base_simple3.html#base_simple3$Int">Int</a></span><br/></div>" 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="<a href="base_simple3.html#base_simple3$Int$output">call base_simple3$Int$output</a>" data-content="<div><b>call</b> <span><a href="base_simple3.html#base_simple3$Int$output">output</a><span></span></span><br/></div>" 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***
--- /dev/null
+Usage: [OPTION]... [ARG]...
+Use --help for help
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+import end
--- /dev/null
+import end
--- /dev/null
+import end
#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
--- /dev/null
+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