Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* ************************************************************************
  #
  #  DivConq
  #
  #  http://divconq.com/
  #
  #  Copyright:
  #    Copyright 2014 eTimeline, LLC. All rights reserved.
  #
 #  License:
 #    See the license.txt file in the project's top-level directory for details.
 #
 #  Authors:
 #    * Andy White
 #
 ************************************************************************ */
 package divconq.script;
 
 
 public class StackFunctionEntry extends StackBlockEntry {
 	// result/state about the last command executed
     protected Struct lastResult = null;		
     protected IntegerStruct lastCode = null;		
     
     // parameter into function, make sure this is not disposed directly as the caller
     // does not want the param disposed
     protected Struct param = null;
     protected String pname = null;
 
     public StackFunctionEntry(Activity actStackEntry parentInstruction inst) {
 		super(actparentinst);
 		
         this. = new IntegerStruct();
         this..setValue((long) 0);
     }
 
     @Override
     public Struct getLastResult() {
         return this.
     }
     
     @Override
     public void setLastResult(Struct v) {
 		this. = v;
 
 		// if this is the Main function then the last result is also the task result
         if ((this. == null) && (this. != null)) {
         	TaskRun run = this..getTaskRun();
         	
         	if (run != null)
         		run.setResult(v);
         }
     }
     
     @Override
     public Long getLastCode() {
         return this..getValue(); 
     }
     
     @Override
     public void setLastCode(Long v) {
     	// won't overwrite the existing code with 1
     	if ((v != null) && (v == 1) && (this..getValue() > 1))
     		return;
     	
         this..setValue(v); 
     }
     
     public Struct getParameter() {
         return this.
     }
     
     public void setParameter(Struct v) {
         this. = v
     }
     
     public String getParameterName() {
         return this.
     }
     
     public void setParameterName(String v) {
         this. = v
     }
 
     public void collectDebugRecord(RecordStruct rec) {
 		super.collectDebugRecord(rec);
 		
     	RecordStruct dumpVariables = rec.getFieldAsRecord("Variables");
 		
         if (StringUtil.isNotEmpty(this.)) 
         	dumpVariables.setField(this., (this. != null) ? this. : null);
        else
        	dumpVariables.setField("_Param", (this. != null) ? this. : null);
        
        dumpVariables.setField("_LastResult"this.);        
        dumpVariables.setField("_LastCode"this.);        
    }	
    public Struct queryVariable(String name) {
		if (StringUtil.isEmpty(name))
			return null;
		//if (name.equals(this.pname) || "_Param".equals(this.pname))
		//	return this.param;
        if ("_LastResult".equals(name) || "_".equals(name)) 
        	return this.;
        
        if ("_LastCode".equals(name) || "__".equals(name)) 
        	return this.;
        
        // needed to copy all of StackBlock here, except remove the query for parent vars - replace with check for global vars
        // do not call super - that would expose vars outside of the function
        int dotpos = name.indexOf(".");
        if (dotpos > -1) {
            String oname = name.substring(0, dotpos);
            Struct ov = null;
            
    		if (oname.equals(this.) || oname.equals("_Param"))
    			ov = this.;
    		
    		if (ov == null)
    			ov = this..containsKey(oname) ? this..get(oname) : null;
            // support global variables
            if (ov == null
            	ov = this..queryVariable(oname);
            if (ov == null) {
            	this.log().errorTr(515, oname);
            	return null;
            }
            
            if (!(ov instanceof CompositeStruct)){
            	this.log().errorTr(516, oname);
            	return null;
            }
            
            FuncResult<Structsres = ((CompositeStruct)ov).select(name.substring(dotpos + 1)); 
            this.log().copyMessages(sres);
            
            return sres.getResult();
        }
        else if (this..containsKey(name)) {
            return this..get(name);
        }
        
        // if nothing else, try globals
        return this..queryVariable(name);
    }
		return this;
	}
New to GrepCode? Check out our FAQ X