<commit_before>* OUTPUT DOCUMENTATION
** EVENTS
The events are separated by a NEWLINE('\n').

** Identifiers and primitive fields
All identifiers are supposed to be larger than 0,
except primitive fields or if something else is stated.

Field stores/loads of primitive type are traced,
but not the values.

** OPCODE
The first character in every line is
a number that describes what type of
event it is according to below:

allocation	1
getfield 	2
storefield	3
methodcall	4
deallocation	5
return		6
storevar	7

** Allocation
The allocation event is formed as: 
1 X Y Z

where:
X = LONG = Identifies the allocated object.
Y = TYPE = describes the allocated object's TYPE
Z = STRING/LONG = describes the caller to new.
                  If the caller is static Z will be a string,
		  else Z will be a long.
** Field Load
The field load event is formed as:
2 X(Y) Z A K

where:
X = string = field name
Y = string = field description
Z = long = Identifies the loaded object
A = STRING/LONG = Identifies caller
K = STRING/LONG = Identifies callee

** Field Store
The field store event is formed as:
3 X(Y) Z O A K

where:
X = string = field name
Y = string = field description
Z = long = Identifies the stored object
O = long = Identifies the object that was held by the field before... (the overwritten object)
           O can be 0.
A = STRING/LONG = Identifies caller
K = STRING/LONG = Identifies callee

** Deallocation
The deallocation event is formed as:
5 X

where:
X = long = Identifies the garbage collected object

** Variable Store
The variable store event is formed as:
7 X Y Z

where:
X = LONG = stored obj
Y = LONG = old value
Z = STRING/LONG = CALLER/CALLEE

** Method Call
The variable store event is formed as:
4 X(Y) Z A K

where:
X = string = method name
Y = string = method description
Z = STRING/LONG = CALLER
A = STRING/LONG = CALLEE
K = LONG* = space separated tags that identifies
            the arguments passed to this method
* Benchmarks in Dacapo
  AVRORA
  BATIK
  ECLIPSE
  FOP
  h2
  jython
  luindex
  lusearch
  pmd
  sunflow
  tomcat
  tradebeans
  tradesoap
  xalan

* Event status
** DONE STOREFIELD
** DONE LOADFIELD
** DONE DEALLOC
** DONE ALLOC
** DONE STOREVAR
** TODO METHODCALL
** TODO METHODRETURN

   

* Failing benchmarks
** Using Fields
   AVRORA
   TOMCAT
   TRADEBEANS
   TRADESOAP
** Using Fields & Allocs
   Same as "Using Fields" + ECLIPSE
   (Eclipse can run with the -noverify option to java though)
   


** Using Fields & Allocs & VARS
*** avrora/tomcat/tradebeans/tradesoap still fails

** Using Fields & ALLOCs & VARS & METHODCALLS
AVRORA FAIL
BATIK COMPLETES
ECLIPSE NULLPOINTEREXCEPTION







WITH METHODCALLS
===== DaCapo 9.12 batik starting =====
===== DaCapo 9.12 batik PASSED in 509176 msec =====

WITHOUT
===== DaCapo 9.12 batik starting =====
===== DaCapo 9.12 batik PASSED in 35353 msec =====








* List of things todo
** TODO Instrument all classes
   Find out why sigsegv occurs
** TODO If Instrument all classes works. Reimplement NEW


** TODO Implement variable overwrites
** TODO Implement AASTOREs
** Implement 

  <commit_msg>Add<commit_after>* OUTPUT DOCUMENTATION
** EVENTS
The events are separated by a NEWLINE('\n').

** Identifiers and primitive fields
All identifiers are supposed to be larger than 0,
except primitive fields or if something else is stated.

Field stores/loads of primitive type are traced,
but not the values.

** OPCODE
The first character in every line is
a number that describes what type of
event it is according to below:

allocation	1
getfield 	2
storefield	3
methodcall	4
deallocation	5
return		6
storevar	7

** Allocation
The allocation event is formed as: 
1 X Y Z

where:
X = LONG = Identifies the allocated object.
Y = TYPE = describes the allocated object's TYPE
Z = STRING/LONG = describes the caller to new.
                  If the caller is static Z will be a string,
		  else Z will be a long.
** Field Load
The field load event is formed as:
2 X(Y) Z A K

where:
X = string = field name
Y = string = field description
Z = long = Identifies the loaded object
A = STRING/LONG = Identifies caller
K = STRING/LONG = Identifies callee

** Field Store
The field store event is formed as:
3 X(Y) Z O A K

where:
X = string = field name
Y = string = field description
Z = long = Identifies the stored object
O = long = Identifies the object that was held by the field before... (the overwritten object)
           O can be 0.
A = STRING/LONG = Identifies caller
K = STRING/LONG = Identifies callee

** Deallocation
The deallocation event is formed as:
5 X

where:
X = long = Identifies the garbage collected object

** Variable Store
The variable store event is formed as:
7 X Y Z

where:
X = LONG = stored obj
Y = LONG = old value
Z = STRING/LONG = CALLER/CALLEE

** Method Call
The variable store event is formed as:
4 X(Y) Z A K

where:
X = string = method name
Y = string = method description
Z = STRING/LONG = CALLER
A = STRING/LONG = CALLEE
K = LONG* = space separated tags that identifies
            the arguments passed to this method
* Benchmarks in Dacapo
  AVRORA
  BATIK
  ECLIPSE
  FOP
  h2
  jython
  luindex
  lusearch
  pmd
  sunflow
  tomcat
  tradebeans
  tradesoap
  xalan

* Event status
** DONE STOREFIELD
** DONE LOADFIELD
** DONE DEALLOC
** DONE ALLOC
** DONE STOREVAR
** DONE METHODCALL
** TODO METHODRETURN

   

* Failing benchmarks
** Using Fields
   AVRORA
   TOMCAT
   TRADEBEANS
   TRADESOAP
** Using Fields & Allocs
   Same as "Using Fields" + ECLIPSE
   (Eclipse can run with the -noverify option to java though)
   


** Using Fields & Allocs & VARS
*** avrora/tomcat/tradebeans/tradesoap still fails

** Using Fields & ALLOCs & VARS & METHODCALLS
AVRORA FAIL
BATIK COMPLETES
ECLIPSE COMPLETES WITH 30x overhead


** Using all events
   eclipse 60x~ overhead



* TODOs
** TODO Make use of zlib-dev instead of piping to gzip
** TODO Reimplement variable overwrites
** TODO Reimplement variable out of scopes
** TODO Implement AASTOREs

** TODO Instrument classes loaded with bootstrapclassloader too
   Find out why sigsegv occurs
** TODO If above works. Reimplement NEW
** TODO Extend command line options that handles instrumentation switches and output methods

** TODO Calculate how big part of the objs that are aliased.
** TODO Calculate how big part of the aliased obj that are ever used from multiple sources.
{'fraction_non_alphanumeric': 0.0638063806380638, 'fraction_numerical': 0.009272355807009273, 'mean_word_length': 3.4503496503496502, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3037883', 'n_tokens_mistral': 2102, 'n_tokens_neox': 1968, 'n_words': 908}