예제 #1
0
int a2_libdostring(struct a2_state* state){
	int args = a2_top(state);
	if(args==0 || a2_type(state, 0)!=TSTRING)
		a2_err(state, "the arg must string type.");
	const char* str = a2_tostring(state, 0);
	if(a2_dostring(state, str, strlen(str))){
		printf("%s\n", a2_tostring(state, a2_top(state)-1));
	}
	return 0;
}
예제 #2
0
파일: a2_libutil.c 프로젝트: eagles125/A2
int a2_libsystem(struct a2_state* state) {
    int args = a2_top(state);
    if(args==0 || a2_type(state, 0)!=TSTRING)
        a2_err(state, "the arg must string type.");
    const char* str = a2_tostring(state, 0);
    system(str);
    return 0;
}
예제 #3
0
파일: a2_libutil.c 프로젝트: lvzixun/A2
int a2_libdofile(struct a2_state* state){
	int args = a2_top(state);
	if(args==0 || a2_type(state, 0)!=TSTRING)
		a2_err(state, "the arg must string type.");
	const char* filename = a2_tostring(state, 0);
	int top = a2_top(state);
	a2_loadfile(state, filename);
	return a2_top(state) - top;
}
예제 #4
0
파일: a2_libutil.c 프로젝트: lvzixun/A2
int a2_libdostring(struct a2_state* state){
	int args = a2_top(state);
	if(args==0 || a2_type(state, 0)!=TSTRING)
		a2_err(state, "the arg must string type.");
	const char* str = a2_tostring(state, 0);
	int top = a2_top(state);
	a2_dostring(state, str, strlen(str));
	return a2_top(state) - top;
}
예제 #5
0
파일: a2.c 프로젝트: rodking/A2
static void _command(struct a2_state* state){
  for(;;){
    char* str = NULL;
    if( NULL != (str = readline(">")) ){ 
      if(str[0]=='='){
        size_t sz = strlen(str)+7;
        char tmp [sz];
        sprintf(tmp , "print(%s)", str+1);
        tmp[sz-1] = '\0';
        if(a2_dostring(state, tmp, strlen(tmp)))
          printf("%s", a2_tostring(state, a2_top(state)-1)); 
      }else{
      if(a2_dostring(state, str, strlen(str)))
        printf("%s", a2_tostring(state, a2_top(state)-1));
      }
      add_history(str);
      free(str);
    }
  }
}
예제 #6
0
// print 
int a2_libprint(struct a2_state* state){
	int args = a2_top(state);
	int i;
	for(i=0; i<args; i++){
		switch(a2_type(state, i)){
			case TNIL:
				printf("nil ");
				break;
			case TNUMBER:
				printf("%.14g ", a2_tonumber(state, i));
				break;
			case TSTRING:
				printf("%s ", a2_tostring(state, i));
				break;
			case TBOOL:
				printf("%s ", (a2_tobool(state, i))?("true"):("false"));
				break;
			case TCFUNCTION:
				printf("cfunc:%p ", a2_tocfunction(state, i));
				break;
			case TCLOSURE:
				printf("closure:%p ", a2_topoint(state, i));
				break;
			case TARRAY:
				printf("array:%p ", a2_topoint(state, i));
				break;
			case TMAP:
				printf("map:%p ", a2_topoint(state, i));
				break;
			default:
				assert(0);
		}
	}
	
	printf("\n");
	return 0;
}
예제 #7
0
파일: a2.c 프로젝트: rodking/A2
static inline void _load(struct a2_state* state, const char* filename){
  if(a2_loadfile(state, filename)){
    printf("%s\n", a2_tostring(state, a2_top(state)-1));
  }
}