吉里吉里 version White Space 001 stack class

先日、HSPでstackのモジュールを書いたんですけど、
なんか吉里吉里にも翻訳出来そうだったので、
やってみたら出来ました。
吉里吉里出来そうで翻訳しか出来ない疑惑w
でもこういうことやってたら、
真っ白から書けるかもってかんじ。

[iscript]
var STACK_MEMBERS =  			1024;
var HEAP_MEMBERS  = 			1024;
var MAX_LABELS 	  = 		200;
var MAX_LABEL_LENGTH =		500;
var MAX_INSTRUCTIONS =		30;
var MAX_INSTRUCTION_LENGTH =    10;
var MAX_NESTED_SUBROUTINES =    20;
[endscript]
[iscript]
class Stack_Model {
  var m_size;
  var m_current;
  var m_contents = [];
  var m_big;
  function Stack_Model(p_size){
    m_size = p_size;
    m_current = p_size;
    // どこまで代入したか記録
    m_big=p_size;
  }
  function stack_push(p_val){
    if (m_current >= 1) {
      m_current--;
      m_contents[m_current] = p_val;
      if (m_big >= m_current){
        m_big=m_current;
      }
      return 1;
    }
    return -1;
  }
  function stack_pop(){
    if (m_current < m_size){
      m_current++;
      return m_contents[m_current-1];
    }
    return 0;
  }
  function stack_peak(p_depth){
    if ((m_current+p_depth) < m_size){
      return m_contents[m_current + p_depth];
    }
    return 0;
  }
  function stack_look(p_depth){
    if (m_big > p_depth){
      return 0;
    }else{
      return m_contents[p_depth];
    }
  }
}
[endscript]
[iscript]
var stack = new Stack_Model(STACK_MEMBERS);
stack.stack_push(100);
stack.stack_push(200);
stack.stack_push(300);
stack.stack_push(400);
stack.stack_push(500);
stack.stack_push(600);
stack.stack_push(700);
stack.stack_push(800);
var r1=stack.stack_look(1023);
var r2=stack.stack_look(1022);
var r3=stack.stack_look(1021);
var r4=stack.stack_look(1020);
var r5=stack.stack_look(1019);
var r6=stack.stack_look(1018);
var r7=stack.stack_look(1017);
var r8=stack.stack_look(1016);
[endscript]
[emb exp="r1"][r]
[emb exp="r2"][r]
[emb exp="r3"][r]
[emb exp="r4"][r]
[emb exp="r5"][r]
[emb exp="r6"][r]
[emb exp="r7"][r]
[emb exp="r8"][r]
[p][cm]
[iscript]
var r11=stack.stack_peak(2);
var r12=stack.stack_peak(3);
var r13=stack.stack_pop();
var r14=stack.stack_pop();
var r15=stack.stack_peak(2);
var r16=stack.stack_peak(3);
[endscript]
peak 2:[emb exp="r11"][r]
peak 3:[emb exp="r12"][r]
pop:[emb exp="r13"][r]
pop:[emb exp="r14"][r]
peak 2:[emb exp="r15"][r]
peak 3:[emb exp="r16"][r]

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です