Erlang/OTP Forums

Author Message

<  Erlang  ~  Esense in Xemacs

Ludvig
Posted: Wed Aug 02, 2006 4:59 pm Reply with quote
User Joined: 20 Jul 2006 Posts: 38 Location: London
Sorry about the fuzzy information.

if I write "mn" and push f1 mnesia comes up.
But if I want to get the functions "mnesia:tran" and then f1 the problem accures.

The debuggoption was equal, here is the debuggoutput:
Code:

Debugger entered--Lisp error: (wrong-type-argument char-or-string-p nil)
  downcase(nil)
  (esense-string-begins-with (downcase x) filter)
  (lambda (x) (esense-string-begins-with (downcase x) filter))(nil)
  remove*(nil (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil ...) :if-not (lambda (x) (esense-string-begins-with (downcase x) filter)))
  apply(remove* nil (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil ...) :if-not (lambda (x) (esense-string-begins-with (downcase x) filter)) nil)
  remove-if-not((lambda (x) (esense-string-begins-with (downcase x) filter)) (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil ...))
  (let ((filter-length ...)) (setq filter (downcase filter)) (remove-if-not (lambda ... ...) list))
  esense-filter-completion-list((nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil ...) "")
  (let* ((filter ...) (completions ...)) (if (let ... ...) (progn ... ... ...) (let ... ...) (if ... ... ...) (setq esense-completion-list ...) (esense-update-completion-list filter) (setcdr ... esense-minor-mode-completion-map) (with-current-buffer ... ...) (setq esense-completion-startup t) (add-hook ... ...)))
  esense-start-completion(7091 (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil ...) esense-completion-insert-function esense-completion-get-function-documentation)
  (let ((module-given module) completion-list) (if module (esense-lookup-module module) (dolist ... ...) (dolist ... ...) (let ... ...) (setq module "erlang")) (dolist (function ...) (if ... ...)) (esense-start-completion symbol-beginning-position completion-list (quote esense-completion-insert-function) (quote esense-completion-get-function-documentation)))
  esense-complete-function("mnesia" "" 7091)
  (if (and at-end (/= char-after ?:) (not recursive)) (esense-complete-function module function symbol-beginning-position) (esense-show-function-help module function (esense-get-number-of-function-arguments)))
  (if go-to-doc (esense-go-to-function-definition module function (esense-get-number-of-function-arguments) arguments) (if (and at-end ... ...) (esense-complete-function module function symbol-beginning-position) (esense-show-function-help module function ...)))
  (if (= (length module) 0) (message (concat "It looks like a function, " "but I cannot determine the module name.")) (if go-to-doc (esense-go-to-function-definition module function ... arguments) (if ... ... ...)))
  (let (module function arguments) (if (= char-after ?:) (progn ... ...) (setq function symbol) (setq arguments ...) (save-excursion ... ... ... ... ...)) (if (= ... 0) (message ...) (if go-to-doc ... ...)))
  (cond ((= char-before ?\?) (if go-to-doc ... ...)) ((= char-before ?\#) (if go-to-doc ... ...)) ((= char-before ?\.) (let ... ... ...)) ((or ... ...) (let ... ... ...)) (t (let* ... ...)))
  (let* ((symbol-info ...) (symbol ...) (char-before ...) (symbol-beginning-position ...) (at-end ...) (char-after ...) (symbol-end-position ...)) (unless char-after (setq char-after ?|)) (unless char-before (setq char-before ?|)) (cond (... ...) (... ...) (... ...) (... ...) (t ...)))
  esense-do-something-with-symbol-at-point()
  (if (save-excursion (goto-char ...) (looking-at esense-include-regexp)) (esense-go-to-include-file (esense-get-include-file)) (esense-do-something-with-symbol-at-point))
  (condition-case error-data (if (save-excursion ... ...) (esense-go-to-include-file ...) (esense-do-something-with-symbol-at-point)) (esense-error (error ...)))
  (lambda nil "Check if there is something recognizable at or around point\nand do something with it." (interactive) (condition-case error-data (if ... ... ...) (esense-error ...)))()
  call-interactively(esense-do-something-at-point)


Last edited by Ludvig on Wed Aug 02, 2006 6:12 pm; edited 1 time in total
View user's profile Send private message Visit poster's website MSN Messenger ICQ Number
tpatro
Posted: Wed Aug 02, 2006 5:30 pm Reply with quote
User Joined: 27 Jul 2006 Posts: 20
Whew! You should put it between code tags next time to preserve some formatting. Smile

The abundance of nils in the trace bother me... Debugging this remotely won't be trivial.

First you can try checking from which file the completion information is generated. Check the .esense/modules/mnesia file in your home directory. It should contain a single path which you will use below.

Then from the command line issue this command:

esense.sh -stdout -full <path>


This should dump to the standard output the information esense extracts. You can check if it seems correct (contains function information, etc.).

If there's something strange in the output then the problem is on the esense side, otherwise it's on the emacs side. We should determine this first.
View user's profile Send private message
Ludvig
Posted: Wed Aug 02, 2006 6:13 pm Reply with quote
User Joined: 20 Jul 2006 Posts: 38 Location: London
I will try it out tomorrow when I'm back at work.


-------
Sitting home and trying. Can't try everhting because I'm not at my linux
computer.

But I have looked in to the syntax_error problem.
This is beacuse in erl_syntax_lib.erl the function
analyze_record_attribute(Node) has the same problem as in the macro thing I fixed in esense module. It can't handle records with macros as name. At the moment I can't see any simple solution to this more than to change in the erl_syntax_lib file and add the macroname as record name (this is not god becuse this is just the macro name and not the record value...).

But this I don't think solve the mnesia problem. But will look in to that tomorrow

In analyze_record_attrubute(Node)
Code:
case erl_syntax:attribute_arguments(Node) of
                [R, T] ->
                    case erl_syntax:type(R) of
                        atom ->
                            Es = analyze_record_attribute_tuple(T),
                            {erl_syntax:atom_value(R), Es};
         macro ->
             Es = analyze_record_attribute_tuple(T),
             Macro = erl_syntax:variable_literal(erl_syntax:macro_name(R)),
             {Macro, Es};
                        _ ->
                            throw(syntax_error)
                    end;
                _ ->
                    throw(syntax_error)
            end;
View user's profile Send private message Visit poster's website MSN Messenger ICQ Number
tpatro
Posted: Thu Aug 03, 2006 6:57 am Reply with quote
User Joined: 27 Jul 2006 Posts: 20
I applied your changes to my esense.erl. Post your full name, so that I can add you to the change log as a contributor.

I omitted the change where you swapped the order of handling "define" and "record", since I think it has no effect.

I also set a dummy name for the record if the macro name cannot be resolved. The value undefined is not good, because it messes up the generated index file.

Here is my diff. Note that the line numbers will not match 1.11, because I made several changes since that version.
Code:
diff -u -r1.5 esense.erl
--- esense.erl   9 Jun 2006 09:11:28 -0000   1.5
+++ esense.erl   3 Aug 2006 06:48:57 -0000
@@ -345,7 +345,7 @@
                             {Exports, PrevComments,
                              Content#content{imports = Imports}};
                         "record" ->
-                            Record = parse_erlang_record(Node, PrevComments),
+                            Record = parse_erlang_record(Node, PrevComments, Content),
                             Records = Content#content.records ++ [Record],
                             {Exports, [], Content#content{records = Records}};
                         "define" ->
@@ -436,7 +436,7 @@
     #import{module = erl_syntax:atom_literal(Module), functions = Functions}.
 
 
-parse_erlang_record(Node, PrevComments) ->
+parse_erlang_record(Node, PrevComments, Content) ->
     case erl_syntax:get_precomments(Node) of
         [] ->
             case PrevComments of
@@ -451,7 +451,32 @@
 
     Record = lists:foldl(
                fun (Arg, InnerRecord) ->
-                       parse_erlang_record2(Arg, InnerRecord)
+                       case erl_syntax:type(Arg) of
+                           atom ->
+                               InnerRecord
+                                   #record{name = erl_syntax:atom_name(Arg)};
+                           tuple ->
+                               parse_erlang_record_fields(
+                                 erl_syntax:tuple_elements(Arg),
+                                 InnerRecord);
+                           macro ->
+                               MacroName = erl_syntax:variable_literal(
+                                             erl_syntax:macro_name(Arg)),
+
+                               Result = lists:filter(fun(Macro) ->
+                                                             Macro#macro.name == MacroName
+                                                     end,
+                                                     Content#content.macros),
+
+                               case Result of
+                                   [] ->
+                                       Name = "name_cannot_be_resolved";
+                                   [Macro] ->
+                                       Name = Macro#macro.value
+                               end,
+
+                               InnerRecord #record{name = Name}
+                       end
                end,
                #record{},
                erl_syntax:attribute_arguments(Node)),
@@ -459,13 +484,11 @@
     Record#record{line = erl_syntax:get_pos(Node),
                   doc = Doc}.
 
-parse_erlang_record2({tree, atom, {attr, _, _, _}, _} = RecordName, Record) ->
-    Record#record{name = erl_syntax:atom_name(RecordName)};
-parse_erlang_record2({tree, tuple, _, Fields}, Record) ->
+parse_erlang_record_fields(Fields, Record) ->
     lists:foldl(
       fun (Field, InnerRecord) ->
               Name = erl_syntax:atom_name(
-                       erl_syntax:attribute_name(Field)),
+                       erl_syntax:record_field_name(Field)),
 
               case erl_syntax:get_postcomments(Field) of
                   [] ->
@@ -1176,6 +1195,8 @@
                                             [{def, {'vsn', "current"}}]) of
                 {'EXIT', _Reason} ->
                     undefined;
+                syntax_error ->
+                    undefined;
                 {_Module, Xml} ->
                     case catch esense_edoc_layout:layout_module(Xml) of
                         {ok, EdocInfo} ->
View user's profile Send private message
Ludvig
Posted: Thu Aug 03, 2006 8:43 am Reply with quote
User Joined: 20 Jul 2006 Posts: 38 Location: London
Quote:
I omitted the change where you swapped the order of handling "define" and "record", since I think it has no effect.

True....

My name is Ludvig Johansson <ludvig@erlang-consulting.com>

Now I'm back at work allso so I will try the things about mnesia. Must add that it works super for most of the modules like lists. works perfect. But since I use mnesia almost all the time that would be great to get that to work.

Also I have a little thing that I do not really like. That is that if the file you are currently working at is not 100% correct it will not index and this will prevent the esense from showing all other stuff.


--------------------------------
Code:
ludvig@Blackbox:~/.esense/modules> cat mnesia
/usr/local/lib/erlang/lib/mnesia-4.3.1/src/mnesia.erl

ludvig@Blackbox:~/esense-1.11> ./esense.sh -stdout -full /usr/local/lib/erlang/lib/mnesia-4.3.1/src/mnesia.erl > mnesia.txt
View user's profile Send private message Visit poster's website MSN Messenger ICQ Number
tpatro
Posted: Thu Aug 03, 2006 9:50 am Reply with quote
User Joined: 27 Jul 2006 Posts: 20
Ludvig wrote:
Now I'm back at work allso so I will try the things about mnesia. Must add that it works super for most of the modules like lists. works perfect. But since I use mnesia almost all the time that would be great to get that to work.

The attached file looks OK to me. It's strange that other modules work fine, only mnesia has problems. Isn't there any other module which also do not work?

Ludvig wrote:

Also I have a little thing that I do not really like. That is that if the file you are currently working at is not 100% correct it will not index and this will prevent the esense from showing all other stuff.

Well, the parsing is done with epp_dodger:parse_file and I use the info it returns, so it's not up to me.
View user's profile Send private message
Ludvig
Posted: Thu Aug 03, 2006 10:22 am Reply with quote
User Joined: 20 Jul 2006 Posts: 38 Location: London
I cheked a couple of them now:

string dosen't work same problem
lists works
erlang works
calendar works
compile dosen't work same problem
dbg works
gen_server dosen't work same problem


Quote:

Well, the parsing is done with epp_dodger:parse_file and I use the info it returns, so it's not up to me.

So if it returns an error esense crashes? Is there anyway to get it to continu working even though the current file fails?
View user's profile Send private message Visit poster's website MSN Messenger ICQ Number
tpatro
Posted: Thu Aug 03, 2006 10:31 am Reply with quote
User Joined: 27 Jul 2006 Posts: 20
Ludvig wrote:
I cheked a couple of them now:

Okay, please try the following. When the error occurs with mnesia go to the *scratch* buffer and type this there:
Code:
(print (esense-lookup-module "mnesia") (current-buffer))

Then move the cursor to the end of the expression and do M-x eval-last-sexp and attach the output.
Ludvig wrote:
So if it returns an error esense crashes? Is there anyway to get it to continu working even though the current file fails?

No, it doesn't crash. If I'm not mistaken if epp_dodger finds a syntax error in the file then it tries to continue from a later part of the code which can be parsed correctly.

So it simply skips the erroneous parts (since it cannot do anything with it) and returns only the correct parts and that's what I see.
View user's profile Send private message
Ludvig
Posted: Thu Aug 03, 2006 10:45 am Reply with quote
User Joined: 20 Jul 2006 Posts: 38 Location: London
Code:
(print (esense-lookup-module "mnesia") (current-buffer))
[cl-struct-esense-erlang "mnesia" "/usr/local/lib/erlang/lib/mnesia-4.3.1/src/mnesia.erl" ([cl-struct-esense-function "put_activity_id" nil nil nil nil nil nil nil nil nil 2741 nil nil nil nil] [cl-struct-esense-function "put_activity_id" nil nil nil nil nil nil nil nil nil 2739 nil nil nil t] [cl-struct-esense-function "get_activity_id" nil nil nil nil nil nil nil nil nil 2736 "                                                                         
  Mnemosyne exclusive" nil nil t] [cl-struct-esense-function "do_fixtable" nil nil nil nil nil nil nil nil nil 2716 "                                                                       " nil nil nil] [cl-struct-esense-function "qlc_format" nil nil nil nil nil nil nil nil nil 2700 nil nil nil nil] [cl-struct-esense-function "qlc_info" nil nil nil nil nil nil nil nil nil 2674 nil nil nil nil] [cl-struct-esense-function "qlc_opts" nil nil nil nil nil nil nil nil nil 2664 nil nil nil nil] [cl-struct-esense-function "qlc_opts" nil nil nil nil nil nil nil nil nil 2659 nil nil nil nil] [cl-struct-esense-function "qlc_select" nil nil nil nil nil nil nil nil nil 2655 nil nil nil nil] [cl-struct-esense-function "post_qlc" nil nil nil nil nil nil nil nil nil 2642 nil nil nil nil] [cl-struct-esense-function "pre_qlc" nil nil nil nil nil nil nil nil nil 2613 nil nil nil nil] [cl-struct-esense-function "table" nil nil nil nil nil nil nil nil nil 2577 nil nil nil t] [cl-struct-esense-function "table" nil nil nil nil nil nil nil nil nil 2575 "                                                                         
  QLC Handles
                                     " nil nil t] [cl-struct-esense-function "dump_to_textfile" nil nil nil nil nil nil nil nil nil 2569 nil nil nil t] [cl-struct-esense-function "load_textfile" nil nil nil nil nil nil nil nil nil 2567 "                                                                         
  Textfile access" nil nil t] [cl-struct-esense-function "snmp_get_mnesia_key" nil nil nil nil nil nil nil nil nil 2559 nil nil nil t] [cl-struct-esense-function "snmp_get_next_index" nil nil nil nil nil nil nil nil nil 2554 nil nil nil t] [cl-struct-esense-function "snmp_get_row" nil nil nil nil nil nil nil nil nil 2549 nil nil nil t] [cl-struct-esense-function "snmp_close_table" nil nil nil nil nil nil nil nil nil 2546 nil nil nil t] [cl-struct-esense-function "snmp_open_table" nil nil nil nil nil nil nil nil nil 2543 "                                                                         
  Snmp" nil nil t] [cl-struct-esense-function "report_event" nil nil nil nil nil nil nil nil nil 2537 nil nil nil t] [cl-struct-esense-function "unsubscribe" nil nil nil nil nil nil nil nil nil 2534 nil nil nil t] [cl-struct-esense-function "subscribe" nil nil nil nil nil nil nil nil nil 2531 nil nil nil t] [cl-struct-esense-function "dump_log" nil nil nil nil nil nil nil nil nil 2528 "                                                                         
  Misc admin" nil nil t] [cl-struct-esense-function "set_master_nodes" nil nil nil nil nil nil nil nil nil 2477 nil nil nil t] [cl-struct-esense-function "log_valid_master_nodes" nil nil nil nil nil nil nil nil nil 2468 nil nil nil nil] [cl-struct-esense-function "set_master_nodes" nil nil nil nil nil nil nil nil nil 2439 nil nil nil t] [cl-struct-esense-function "change_table_load_order" nil nil nil nil nil nil nil nil nil 2436 nil nil nil t] [cl-struct-esense-function "change_table_access_mode" nil nil nil nil nil nil nil nil nil 2433 nil nil nil t] [cl-struct-esense-function "force_load_table" nil nil nil nil nil nil nil nil nil 2427 nil nil nil t] [cl-struct-esense-function "wait_for_tables" nil nil nil nil nil nil nil nil nil 2424 "  allow the user to wait for some tables to be loaded" nil nil t] [cl-struct-esense-function "dump_tables" nil nil nil nil nil nil nil nil nil 2420 "  Dump a ram table to disc" nil nil t] [cl-struct-esense-function "change_table_frag" nil nil nil nil nil nil nil nil nil 2413 "                                                                         
  Table mgt - user properties" nil nil t] [cl-struct-esense-function "delete_table_property" nil nil nil nil nil nil nil nil nil 2407 nil nil nil t] [cl-struct-esense-function "write_table_property" nil nil nil nil nil nil nil nil nil 2404 nil nil nil t] [cl-struct-esense-function "read_table_property" nil nil nil nil nil nil nil nil nil 2401 "                                                                         
  Table mgt - user properties" nil nil t] [cl-struct-esense-function "clear_table" nil nil nil nil nil nil nil nil nil 2395 nil nil nil t] [cl-struct-esense-function "change_table_copy_type" nil nil nil nil nil nil nil nil nil 2392 nil nil nil t] [cl-struct-esense-function "transform_table" nil nil nil nil nil nil nil nil nil 2389 nil nil nil t] [cl-struct-esense-function "transform_table" nil nil nil nil nil nil nil nil nil 2381 nil nil nil t] [cl-struct-esense-function "del_table_index" nil nil nil nil nil nil nil nil nil 2378 nil nil nil t] [cl-struct-esense-function "add_table_index" nil nil nil nil nil nil nil nil nil 2376 nil nil nil t] [cl-struct-esense-function "move_table_copy" nil nil nil nil nil nil nil nil nil 2373 nil nil nil t] [cl-struct-esense-function "del_table_copy" nil nil nil nil nil nil nil nil nil 2370 nil nil nil t] [cl-struct-esense-function "add_table_copy" nil nil nil nil nil nil nil nil nil 2368 nil nil nil t] [cl-struct-esense-function "delete_table" nil nil nil nil nil nil nil nil nil 2365 nil nil nil t] [cl-struct-esense-function "create_table" nil nil nil nil nil nil nil nil nil 2360 nil nil nil t] [cl-struct-esense-function "create_table" nil nil nil nil nil nil nil nil nil 2358 "                                                                         
  Table mgt" nil nil t] [cl-struct-esense-function "restore" nil nil nil nil nil nil nil nil nil 2352 nil nil nil t] [cl-struct-esense-function "backup_checkpoint" nil nil nil nil nil nil nil nil nil 2349 nil nil nil t] [cl-struct-esense-function "backup_checkpoint" nil nil nil nil nil nil nil nil nil 2346 nil nil nil t] [cl-struct-esense-function "deactivate_checkpoint" nil nil nil nil nil nil nil nil nil 2343 nil nil nil t] [cl-struct-esense-function "activate_checkpoint" nil nil nil nil nil nil nil nil nil 2340 nil nil nil t] [cl-struct-esense-function "uninstall_fallback" nil nil nil nil nil nil nil nil nil 2337 nil nil nil t] [cl-struct-esense-function "uninstall_fallback" nil nil nil nil nil nil nil nil nil 2334 nil nil nil t] [cl-struct-esense-function "install_fallback" nil nil nil nil nil nil nil nil nil 2331 nil nil nil t] [cl-struct-esense-function "install_fallback" nil nil nil nil nil nil nil nil nil 2328 nil nil nil t] [cl-struct-esense-function "traverse_backup" nil nil nil nil nil nil nil nil nil 2325 nil nil nil t] [cl-struct-esense-function "traverse_backup" nil nil nil nil nil nil nil nil nil 2322 nil nil nil t] [cl-struct-esense-function "backup" nil nil nil nil nil nil nil nil nil 2319 nil nil nil t] [cl-struct-esense-function "backup" nil nil nil nil nil nil nil nil nil 2316 nil nil nil t] [cl-struct-esense-function "delete_schema" nil nil nil nil nil nil nil nil nil 2313 nil nil nil t] [cl-struct-esense-function "create_schema" nil nil nil nil nil nil nil nil nil 2310 "                                                                         
  Database mgt" nil nil t] [cl-struct-esense-function "load_mnesia_or_abort" nil nil nil nil nil nil nil nil nil 2299 nil nil nil nil] [cl-struct-esense-function "system_info" nil nil nil nil nil nil nil nil nil 2284 nil nil nil t] [cl-struct-esense-function "system_info_items" nil nil nil nil nil nil nil nil nil 2215 nil nil nil nil] [cl-struct-esense-function "system_info2" nil nil nil nil nil nil nil nil nil 2071 nil nil nil nil] [cl-struct-esense-function "system_info" nil nil nil nil nil nil nil nil nil 2065 nil nil nil t] [cl-struct-esense-function "storage_count" nil nil nil nil nil nil nil nil nil 2057 nil nil nil nil] [cl-struct-esense-function "display_tab_info" nil nil nil nil nil nil nil nil nil 2024 nil nil nil nil] [cl-struct-esense-function "display_system_info" nil nil nil nil nil nil nil nil nil 1997 nil nil nil nil] [cl-struct-esense-function "mini_info" nil nil nil nil nil nil nil nil nil 1979 nil nil nil nil] [cl-struct-esense-function "info" nil nil nil nil nil nil nil nil nil 1943 nil nil nil t] [cl-struct-esense-function "error_description" nil nil nil nil nil nil nil nil nil 1940 nil nil nil t] [cl-struct-esense-function "schema" nil nil nil nil nil nil nil nil nil 1937 "  Raw info about one tables" nil nil t] [cl-struct-esense-function "schema" nil nil nil nil nil nil nil nil nil 1933 "  Raw info about all tables" nil nil t] [cl-struct-esense-function "bad_info_reply" nil nil nil nil nil nil nil nil nil 1928 nil nil nil nil] [cl-struct-esense-function "info_reply" nil nil nil nil nil nil nil nil nil 1921 nil nil nil nil] [cl-struct-esense-function "raw_table_info" nil nil nil nil nil nil nil nil nil 1907 nil nil nil t] [cl-struct-esense-function "any_table_info" nil nil nil nil nil nil nil nil nil 1866 nil nil nil nil] [cl-struct-esense-function "table_info" nil nil nil nil nil nil nil nil nil 1862 nil nil nil t] [cl-struct-esense-function "table_info" nil nil nil nil nil nil nil nil nil 1850 "  Info about one table" nil nil t] [cl-struct-esense-function "do_dirty_rpc" nil nil nil nil nil nil nil nil nil 1815 nil nil nil nil] [cl-struct-esense-function "dirty_rpc" nil nil nil nil nil nil nil nil nil 1811 nil nil nil t] [cl-struct-esense-function "dirty_prev" nil nil nil nil nil nil nil nil nil 1805 nil nil nil t] [cl-struct-esense-function "dirty_next" nil nil nil nil nil nil nil nil nil 1800 nil nil nil t] [cl-struct-esense-function "dirty_last" nil nil nil nil nil nil nil nil nil 1795 nil nil nil t] [cl-struct-esense-function "dirty_first" nil nil nil nil nil nil nil nil nil 1790 nil nil nil t] [cl-struct-esense-function "dirty_slot" nil nil nil nil nil nil nil nil nil 1785 nil nil nil t] [cl-struct-esense-function "dirty_index_read" nil nil nil nil nil nil nil nil nil 1774 nil nil nil t] [cl-struct-esense-function "dirty_index_match_object" nil nil nil nil nil nil nil nil nil 1751 nil nil nil t] [cl-struct-esense-function "dirty_index_match_object" nil nil nil nil nil nil nil nil nil 1745 nil nil nil t] [cl-struct-esense-function "dirty_all_keys" nil nil nil nil nil nil nil nil nil 1730 nil nil nil t] [cl-struct-esense-function "dirty_sel_cont" nil nil nil nil nil nil nil nil nil 1726 nil nil nil nil] [cl-struct-esense-function "dirty_sel_init" nil nil nil nil nil nil nil nil nil 1723 nil nil nil t] [cl-struct-esense-function "remote_dirty_select" nil nil nil nil nil nil nil nil nil 1702 nil nil nil nil] [cl-struct-esense-function "remote_dirty_select" nil nil nil nil nil nil nil nil nil 1687 nil nil nil t] [cl-struct-esense-function "dirty_select" nil nil nil nil nil nil nil nil nil 1682 nil nil nil t] [cl-struct-esense-function "remote_dirty_match_object" nil nil nil nil nil nil nil nil nil 1669 nil nil nil nil] [cl-struct-esense-function "remote_dirty_match_object" nil nil nil nil nil nil nil nil nil 1659 nil nil nil t] [cl-struct-esense-function "dirty_match_object" nil nil nil nil nil nil nil nil nil 1653 nil nil nil t] [cl-struct-esense-function "dirty_match_object" nil nil nil nil nil nil nil nil nil 1647 nil nil nil t] [cl-struct-esense-function "dirty_read" nil nil nil nil nil nil nil nil nil 1635 nil nil nil t] [cl-struct-esense-function "dirty_read" nil nil nil nil nil nil nil nil nil 1630 "                                                                         
  Dirty access regardless of activities - read" nil nil t] [cl-struct-esense-function "do_dirty_update_counter" nil nil nil nil nil nil nil nil nil 1615 nil nil nil nil] [cl-struct-esense-function "dirty_update_counter" nil nil nil nil nil nil nil nil nil 1612 nil nil nil t] [cl-struct-esense-function "dirty_update_counter" nil nil nil nil nil nil nil nil nil 1607 "  A Counter is an Oid being {CounterTab, CounterName}" nil nil t] [cl-struct-esense-function "do_dirty_delete_object" nil nil nil nil nil nil nil nil nil 1598 nil nil nil nil] [cl-struct-esense-function "dirty_delete_object" nil nil nil nil nil nil nil nil nil 1595 nil nil nil t] [cl-struct-esense-function "dirty_delete_object" nil nil nil nil nil nil nil nil nil 1589 nil nil nil t] [cl-struct-esense-function "do_dirty_delete" nil nil nil nil nil nil nil nil nil 1583 nil nil nil nil] [cl-struct-esense-function "dirty_delete" nil nil nil nil nil nil nil nil nil 1580 nil nil nil t] [cl-struct-esense-function "dirty_delete" nil nil nil nil nil nil nil nil nil 1575 nil nil nil t] [cl-struct-esense-function "do_dirty_write" nil nil nil nil nil nil nil nil nil 1560 nil nil nil nil] [cl-struct-esense-function "dirty_write" nil nil nil nil nil nil nil nil nil 1557 nil nil nil t] [cl-struct-esense-function "dirty_write" nil nil nil nil nil nil nil nil nil 1551 "                                                                         
  Dirty access regardless of activities - updates" nil nil t] [cl-struct-esense-function "index_read" nil nil nil nil nil nil nil nil nil 1521 nil nil nil t] [cl-struct-esense-function "index_read" nil nil nil nil nil nil nil nil nil 1511 nil nil nil t] [cl-struct-esense-function "index_match_object" nil nil nil nil nil nil nil nil nil 1485 nil nil nil t] [cl-struct-esense-function "index_match_object" nil nil nil nil nil nil nil nil nil 1475 nil nil nil t] [cl-struct-esense-function "index_match_object" nil nil nil nil nil nil nil nil nil 1469 nil nil nil t] [cl-struct-esense-function "all_keys" nil nil nil nil nil nil nil nil nil 1455 nil nil nil t] [cl-struct-esense-function "all_keys" nil nil nil nil nil nil nil nil nil 1445 nil nil nil t] [cl-struct-esense-function "get_record_pattern" nil nil nil nil nil nil nil nil nil 1441 nil nil nil nil] [cl-struct-esense-function "select_state" nil nil nil nil nil nil nil nil nil 1437 nil nil nil nil] [cl-struct-esense-function "trans_select" nil nil nil nil nil nil nil nil nil 1429 nil nil nil nil] [cl-struct-esense-function "select_cont" nil nil nil nil nil nil nil nil nil 1412 nil nil nil t] [cl-struct-esense-function "select" nil nil nil nil nil nil nil nil nil 1402 nil nil nil t] [cl-struct-esense-function "fun_select" nil nil nil nil nil nil nil nil nil 1367 nil nil nil t] [cl-struct-esense-function "select" nil nil nil nil nil nil nil nil nil 1359 nil nil nil t] [cl-struct-esense-function "select" nil nil nil nil nil nil nil nil nil 1346 "  Breakable Select" nil nil t] [cl-struct-esense-function "select_lock" nil nil nil nil nil nil nil nil nil 1332 nil nil nil nil] [cl-struct-esense-function "fun_select" nil nil nil nil nil nil nil nil nil 1305 nil nil nil t] [cl-struct-esense-function "select" nil nil nil nil nil nil nil nil nil 1301 nil nil nil t] [cl-struct-esense-function "select" nil nil nil nil nil nil nil nil nil 1288 nil nil nil t] [cl-struct-esense-function "select" nil nil nil nil nil nil nil nil nil 1286 "                 
 select" nil nil t] [cl-struct-esense-function "deloid" nil nil nil nil nil nil nil nil nil 1276 nil nil nil nil] [cl-struct-esense-function "add_sel_ordered_match" nil nil nil nil nil nil nil nil nil 1251 "  For ordered_set only !!" nil nil nil] [cl-struct-esense-function "add_sel_match" nil nil nil nil nil nil nil nil nil 1214 nil nil nil nil] [cl-struct-esense-function "add_sel_match" nil nil nil nil nil nil nil nil nil 1209 "  For select chunk" nil nil nil] [cl-struct-esense-function "add_ordered_match" nil nil nil nil nil nil nil nil nil 1182 "  For ordered_set only !!" nil nil nil] [cl-struct-esense-function "add_match" nil nil nil nil nil nil nil nil nil 1167 nil nil nil nil] [cl-struct-esense-function "find_ops" nil nil nil nil nil nil nil nil nil 1161 nil nil nil nil] [cl-struct-esense-function "add_written_match" nil nil nil nil nil nil nil nil nil 1157 nil nil nil nil] [cl-struct-esense-function "match_object" nil nil nil nil nil nil nil nil nil 1138 nil nil nil t] [cl-struct-esense-function "match_object" nil nil nil nil nil nil nil nil nil 1128 nil nil nil t] [cl-struct-esense-function "match_object" nil nil nil nil nil nil nil nil nil 1122 nil nil nil t] [cl-struct-esense-function "add_written_to_bag" nil nil nil nil nil nil nil nil nil 1111 nil nil nil nil] [cl-struct-esense-function "add_written_to_set" nil nil nil nil nil nil nil nil nil 1104 nil nil nil nil] [cl-struct-esense-function "add_written" nil nil nil nil nil nil nil nil nil 1094 "  This routine fixes up the return value from read/1 so that
  it is correct with respect to what this particular transaction
  has already written, deleted .... etc" nil nil nil] [cl-struct-esense-function "add_previous" nil nil nil nil nil nil nil nil nil 1084 nil nil nil nil] [cl-struct-esense-function "close_iteration" nil nil nil nil nil nil nil nil nil 1068 nil nil nil nil] [cl-struct-esense-function "init_iteration" nil nil nil nil nil nil nil nil nil 1055 nil nil nil nil] [cl-struct-esense-function "do_foldr" nil nil nil nil nil nil nil nil nil 1033 nil nil nil nil] [cl-struct-esense-function "foldr" nil nil nil nil nil nil nil nil nil 1021 nil nil nil t] [cl-struct-esense-function "foldr" nil nil nil nil nil nil nil nil nil 1011 nil nil nil t] [cl-struct-esense-function "foldr" nil nil nil nil nil nil nil nil nil 1009 nil nil nil t] [cl-struct-esense-function "do_foldl" nil nil nil nil nil nil nil nil nil 987 nil nil nil nil] [cl-struct-esense-function "foldl" nil nil nil nil nil nil nil nil nil 982 nil nil nil t] [cl-struct-esense-function "foldl" nil nil nil nil nil nil nil nil nil 972 nil nil nil t] [cl-struct-esense-function "foldl" nil nil nil nil nil nil nil nil nil 969 "                   
  Iterators" nil nil t] [cl-struct-esense-function "ts_keys_1" nil nil nil nil nil nil nil nil nil 952 nil nil nil nil] [cl-struct-esense-function "ts_keys" nil nil nil nil nil nil nil nil nil 938 nil nil nil nil] [cl-struct-esense-function "get_next_tskey" nil nil nil nil nil nil nil nil nil 916 nil nil nil nil] [cl-struct-esense-function "get_ordered_tskey" nil nil nil nil nil nil nil nil nil 910 nil nil nil nil] [cl-struct-esense-function "stored_keys" nil nil nil nil nil nil nil nil nil 861 "  Compensate for transaction written and/or deleted records" nil nil nil] [cl-struct-esense-function "prev" nil nil nil nil nil nil nil nil nil 843 nil nil nil nil] [cl-struct-esense-function "prev" nil nil nil nil nil nil nil nil nil 834 nil nil nil t] [cl-struct-esense-function "next" nil nil nil nil nil nil nil nil nil 817 nil nil nil nil] [cl-struct-esense-function "next" nil nil nil nil nil nil nil nil nil 808 nil nil nil t] [cl-struct-esense-function "last" nil nil nil nil nil nil nil nil nil 791 nil nil nil nil] [cl-struct-esense-function "last" nil nil nil nil nil nil nil nil nil 781 nil nil nil t] [cl-struct-esense-function "first" nil nil nil nil nil nil nil nil nil 764 nil nil nil nil] [cl-struct-esense-function "first" nil nil nil nil nil nil nil nil nil 754 nil nil nil t] [cl-struct-esense-function "read" nil nil nil nil nil nil nil nil nil 728 nil nil nil t] [cl-struct-esense-function "read" nil nil nil nil nil nil nil nil nil 718 nil nil nil t] [cl-struct-esense-function "wread" nil nil nil nil nil nil nil nil nil 713 nil nil nil t] [cl-struct-esense-function "read" nil nil nil nil nil nil nil nil nil 708 "                                                                         
  Access within an activity - read" nil nil t] [cl-struct-esense-function "delete_object" nil nil nil nil nil nil nil nil nil 667 nil nil nil t] [cl-struct-esense-function "delete_object" nil nil nil nil nil nil nil nil nil 657 nil nil nil t] [cl-struct-esense-function "s_delete_object" nil nil nil nil nil nil nil nil nil 651 nil nil nil t] [cl-struct-esense-function "delete_object" nil nil nil nil nil nil nil nil nil 645 nil nil nil t] [cl-struct-esense-function "delete" nil nil nil nil nil nil nil nil nil 619 nil nil nil t] [cl-struct-esense-function "delete" nil nil nil nil nil nil nil nil nil 609 nil nil nil t] [cl-struct-esense-function "s_delete" nil nil nil nil nil nil nil nil nil 604 nil nil nil t] [cl-struct-esense-function "delete" nil nil nil nil nil nil nil nil nil 599 nil nil nil t] [cl-struct-esense-function "write_to_store" nil nil nil nil nil nil nil nil nil 581 nil nil nil nil] [cl-struct-esense-function "write" nil nil nil nil nil nil nil nil nil 557 nil nil nil t] [cl-struct-esense-function "write" nil nil nil nil nil nil nil nil nil 547 nil nil nil t] [cl-struct-esense-function "s_write" nil nil nil nil nil nil nil nil nil 543 nil nil nil t] [cl-struct-esense-function "write" nil nil nil nil nil nil nil nil nil 537 "                                                                         
  Access within an activity - updates" nil nil t] [cl-struct-esense-function "good_global_nodes" nil nil nil nil nil nil nil nil nil 530 nil nil nil nil] [cl-struct-esense-function "global_lock" nil nil nil nil nil nil nil nil nil 513 nil nil nil nil] [cl-struct-esense-function "lock_table" nil nil nil nil nil nil nil nil nil 496 nil nil nil nil] [cl-struct-esense-function "lock_record" nil nil nil nil nil nil nil nil nil 478 nil nil nil nil] [cl-struct-esense-function "write_lock_table" nil nil nil nil nil nil nil nil nil 474 "  Grab a write lock on a whole table" nil nil t] [cl-struct-esense-function "read_lock_table" nil nil nil nil nil nil nil nil nil 469 "  Grab a read lock on a whole table" nil nil t] [cl-struct-esense-function "lock" nil nil nil nil nil nil nil nil nil 451 nil nil nil t] [cl-struct-esense-function "lock" nil nil nil nil nil nil nil nil nil 441 "  Grab a lock on an item in the global lock table
  Item may be any term. Lock may be write or read.
  write lock is set on all the given nodes
  read lock is only set on the first node
  Nodes may either be a list of nodes or one node as an atom
  Mnesia on all Nodes must be connected to each other, but
  it is not neccessary that they are up and running." nil nil t] [cl-struct-esense-function "wrap_trans" nil nil nil nil nil nil nil nil nil 424 nil nil nil nil] [cl-struct-esense-function "activity" nil nil nil nil nil nil nil nil nil 411 nil nil nil t] [cl-struct-esense-function "activity" nil nil nil nil nil nil nil nil nil 406 nil nil nil t] [cl-struct-esense-function "activity" nil nil nil nil nil nil nil nil nil 404 nil nil nil t] [cl-struct-esense-function "ets" nil nil nil nil nil nil nil nil nil 401 nil nil nil t] [cl-struct-esense-function "ets" nil nil nil nil nil nil nil nil nil 399 nil nil nil t] [cl-struct-esense-function "sync_dirty" nil nil nil nil nil nil nil nil nil 396 nil nil nil t] [cl-struct-esense-function "sync_dirty" nil nil nil nil nil nil nil nil nil 394 nil nil nil t] [cl-struct-esense-function "async_dirty" nil nil nil nil nil nil nil nil nil 391 nil nil nil t] [cl-struct-esense-function "async_dirty" nil nil nil nil nil nil nil nil nil 389 nil nil nil t] [cl-struct-esense-function "non_transaction" nil nil nil nil nil nil nil nil nil 383 nil nil nil nil] [cl-struct-esense-function "transaction" nil nil nil nil nil nil nil nil nil 374 nil nil nil nil] [cl-struct-esense-function "sync_transaction" nil nil nil nil nil nil nil nil nil 370 nil nil nil t] [cl-struct-esense-function "sync_transaction" nil nil nil nil nil nil nil nil nil 364 nil nil nil t] [cl-struct-esense-function "sync_transaction" nil nil nil nil nil nil nil nil nil 362 nil nil nil t] [cl-struct-esense-function "transaction" nil nil nil nil nil nil nil nil nil 359 nil nil nil t] [cl-struct-esense-function "transaction" nil nil nil nil nil nil nil nil nil 353 nil nil nil t] [cl-struct-esense-function "transaction" nil nil nil nil nil nil nil nil nil 351 nil nil nil t] [cl-struct-esense-function "abort" nil nil nil nil nil nil nil nil nil 348 "                                                                         
  Activity mgt" nil nil t] [cl-struct-esense-function "mod2abs" nil nil nil nil nil nil nil nil nil 336 nil nil nil nil] [cl-struct-esense-function "try_load" nil nil nil nil nil nil nil nil nil 320 nil nil nil nil] [cl-struct-esense-function "load" nil nil nil nil nil nil nil nil nil 302 nil nil nil nil] [cl-struct-esense-function "ni" nil nil nil nil nil nil nil nil nil 299 nil nil nil t] [cl-struct-esense-function "ni" nil nil nil nil nil nil nil nil nil 295 nil nil nil t] [cl-struct-esense-function "nc" nil nil nil nil nil nil nil nil nil 292 nil nil nil t] [cl-struct-esense-function "nc" nil nil nil nil nil nil nil nil nil 288 nil nil nil t] [cl-struct-esense-function "ms" nil nil nil nil nil nil nil nil nil 253 nil nil nil t] [cl-struct-esense-function "kill" nil nil nil nil nil nil nil nil nil 250 nil nil nil t] [cl-struct-esense-function "lkill" nil nil nil nil nil nil nil nil nil 247 nil nil nil t] [cl-struct-esense-function "set_debug_level" nil nil nil nil nil nil nil nil nil 244 "                                                                         
  Debugging" nil nil t] [cl-struct-esense-function "change_config" nil nil nil nil nil nil nil nil nil 236 nil nil nil t] [cl-struct-esense-function "stop" nil nil nil nil nil nil nil nil nil 229 nil nil nil t] [cl-struct-esense-function "patched_start" nil nil nil nil nil nil nil nil nil 217 nil nil nil nil] [cl-struct-esense-function "start" nil nil nil nil nil nil nil nil nil 207 nil nil nil t] [cl-struct-esense-function "start" nil nil nil nil nil nil nil nil nil 191 "                                                                         
  Start and stop" nil nil t] [cl-struct-esense-function "e_has_var" nil nil nil nil nil nil nil nil nil 181 nil nil nil nil] [cl-struct-esense-function "has_var" nil nil nil nil nil nil nil nil nil 163 nil nil nil t] [cl-struct-esense-function "is_digits" nil nil nil nil nil nil nil nil nil 153 nil nil nil nil] [cl-struct-esense-function "is_dollar_digits" nil nil nil nil nil nil nil nil nil 145 nil nil nil nil] [cl-struct-esense-function "val" nil nil nil nil nil nil nil nil nil 139 "  Local function in order to avoid external function call" nil nil nil]) ([cl-struct-esense-record "mnesia_select" 1365 nil ([cl-struct-esense-record-field "tab" nil] [cl-struct-esense-record-field "tid" nil] [cl-struct-esense-record-field "node" nil] [cl-struct-esense-record-field "storage" nil] [cl-struct-esense-record-field "cont" nil] [cl-struct-esense-record-field "written" nil] [cl-struct-esense-record-field "spec" nil] [cl-struct-esense-record-field "type" nil] [cl-struct-esense-record-field "orig" nil])]) ([cl-struct-esense-macro "PATTERN_TO_BINDINGS_MATCH_SPEC(Pat)" nil] [cl-struct-esense-macro "PATTERN_TO_OBJECT_MATCH_SPEC(Pat)" nil] [cl-struct-esense-macro "DEFAULT_ACCESS" "?MODULE"]) ((include . "mnesia.hrl")) ([cl-struct-esense-import "mnesia_lib" ([cl-struct-esense-imported-function "verbose" 2])])]


Quote:

No, it doesn't crash. If I'm not mistaken if epp_dodger finds a syntax error in the file then it tries to continue from a later part of the code which can be parsed correctly.

So it simply skips the erroneous parts (since it cannot do anything with it) and returns only the correct parts and that's what I see.


When I have a syntax error in the edoc either that the syntax is just wrong or that the function under is not ended correctly so it thinks that next edoc belongs to the one above it gives me the error
Code:
Assertion failed: (= (char-attr) ?:)


and no list with functions/modules is shown.
I can see in the *esense* tab that the error is something like this
Code:
/home/ludvig/esense-1.11/ludde.erl, in module footer: at line 4: tag @doc not allowed here.
/home/ludvig/esense-1.11/ludde.erl, in module footer: at line 7: tag @spec not allowed here.
and after all the functions is read in. But still no list.
Can this be that before there where no sudgestions on the errors and therefore your program dosen't accept it.

-----------------------------
You sad that you are reading in the file with epp_do... But do you read in the edoc with this to?


Last edited by Ludvig on Thu Aug 03, 2006 10:59 am; edited 1 time in total
View user's profile Send private message Visit poster's website MSN Messenger ICQ Number
tpatro
Posted: Thu Aug 03, 2006 10:58 am Reply with quote
User Joined: 27 Jul 2006 Posts: 20
The assertion failed thing is bad. Esense expects only name:value pairs in the *esense* buffer (value can be multiline in some cases), so it bails out if it finds something else there.

So edoc should be prevented from outputting unwanted things, because it confuses esense and things will not work.

Edoc doesn't do it in R10, that's why it's not a problem for me.
View user's profile Send private message
tpatro
Posted: Thu Aug 03, 2006 10:59 am Reply with quote
User Joined: 27 Jul 2006 Posts: 20
BTW,
Code:
Assertion failed: (= (char-after) ?:)

means there should be a colon (
Code:
:
) character (the separator between name and value) at the cursor, but something else is there.
View user's profile Send private message
Ludvig
Posted: Thu Aug 03, 2006 11:15 am Reply with quote
User Joined: 20 Jul 2006 Posts: 38 Location: London
Here is how the file looks:
Code:
-module(ludde).
-export([test2/0,test3/0,testing/0]).

testing() ->
    mnesia:

test2() ->
    ok.

test3() ->
    ok.

%% @spec asdas
%% asdas
%% @doc asdasd


Here is the *esene* buffer:
Code:
/home/ludvig/esense-1.11/ludde.erl, in module footer: at line 13: tag @spec not allowed here.
/home/ludvig/esense-1.11/ludde.erl, in module footer: at line 15: tag @doc not allowed here.
/home/ludvig/esense-1.11/ludde.erl
function:test3
arity:0
line:10
exported:true


This gives the Assertion error. Is that because of that there are other stuff in the buffer than just the function: stuff? Where do you do the read in of edoc to this buffert?
View user's profile Send private message Visit poster's website MSN Messenger ICQ Number
tpatro
Posted: Thu Aug 03, 2006 11:32 am Reply with quote
User Joined: 27 Jul 2006 Posts: 20
Yes. When the error occurs check the cursor position in the *esense* buffer. There should be a colon where the cursor is.

The generic format of the output in the *esense* buffer should look like this:

In the first line there is the full path of the file from which the index info is generated. Further lines contain name:value pairs.

As you can see in your example there is garbage (printed by edoc) at the beginning of the buffer. That is the problem.

BTW, the edoc parsing is done by the function parse_erlang_with_edoc in esense.erl.
View user's profile Send private message
tpatro
Posted: Thu Aug 03, 2006 11:34 am Reply with quote
User Joined: 27 Jul 2006 Posts: 20
The garbage output by edoc should be visible even if you dump the index from the command line:

esense.sh -stdout -full <erlang file>


While the garbage is there, esense will fail.
View user's profile Send private message
Ludvig
Posted: Thu Aug 03, 2006 11:48 am Reply with quote
User Joined: 20 Jul 2006 Posts: 38 Location: London
tpatro wrote:
The garbage output by edoc should be visible even if you dump the index from the command line:

esense.sh -stdout -full <erlang file>


While the garbage is there, esense will fail.


Yepp tested it now and it sure is there. The problem is edoc_report.erl where you have things like:
Code:
where({File, module}) ->
    io_lib:fwrite("~s, in module header: ", [File]);
where({File, footer}) ->
    io_lib:fwrite("~s, in module footer: ", [File]);
where({File, header}) ->
    io_lib:fwrite("~s, in header file: ", [File]);
where({File, {F, A}}) ->
    io_lib:fwrite("~s, function ~s/~w: ", [File, F, A]);


Can't one make esense more forgiving then?
To ignore the first lines if it contains error outputs?

Where do you read in the buffert or files?
View user's profile Send private message Visit poster's website MSN Messenger ICQ Number

Display posts from previous:  

All times are GMT
Page 2 of 3
Goto page Previous  1, 2, 3  Next
This forum is locked: you cannot post, reply to, or edit topics.

Jump to:  

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum