whole_func_string: function(def) {
          var start = Array.isArray(def.start) ? def.start : [def.start];
          var end = Array.isArray(def.end) ? def.end : [def.end];
          var then = def.then ? (Array.isArray(def.then) ? def.then : [def.then]) : [];
  
          var child = new Block(line, {
              start: start,
              end: end,
              then: then
          }, self);
          self.children.push(child);
          return child;
      }
func_code_string: function(def) {
          var start = Array.isArray(def.start) ? def.start : [def.start];
          var end = Array.isArray(def.end) ? def.end : [def.end];
          var then = def.then ? (Array.isArray(def.then) ? def.then : [def.then]) : [];
  
          var child = new Block(line, {
              start: start,
              end: end,
              then: then
          }, self);
          self.children.push(child);
          return child;
      }
func_documentation_string: Creates a block with the specified definition
  
  @param {Object} def The block definition
  @returns {Block}