コード例 #1
0
ファイル: vm.c プロジェクト: SumiTomohiko/Yog
void
YogVM_boot(YogEnv* env, YogVM* vm)
{
    YogHandleScope scope;
    YogHandleScope_OPEN(env, &scope);

    setup_encodings1(env, vm);
    setup_symbol_tables(env, vm);
    setup_basic_classes(env, vm);
    YogHandle* builtins = YogHandle_REGISTER(env, alloc_skelton_pkg(env, vm));
    setup_classes(env, vm, HDL2VAL(builtins));
    YogPackage_init(env, HDL2VAL(builtins), TYPE_PACKAGE);
    set_main_thread_class(env, vm);
    YogException_define_classes(env, HDL2VAL(builtins));
    YogObject_boot(env, vm->cObject, HDL2VAL(builtins));
    YogClass_boot(env, vm->cClass, HDL2VAL(builtins));

    vm->pkgs = YogTable_create_symbol_table(env);

    vm->encodings = YogDict_new(env);
    setup_encodings2(env, vm);
    setup_default_encoding(env, vm);

    vm->finish_code = YogCompiler_compile_finish_code(env);

    vm->id_star = YogVM_intern(env, vm, "*");
    vm->id_star2 = YogVM_intern(env, vm, "**");
    vm->id_amp = YogVM_intern(env, vm, "&");

    setup_builtins(env, vm, builtins);
    YogArray_eval_builtin_script(env, vm->cArray);
    YogBinary_eval_builtin_script(env, vm->cBinary);
    YogDatetime_eval_builtin_script(env, vm->cDatetime);
    YogDict_eval_builtin_script(env, vm->cDict);
    YogFixnum_eval_builtin_script(env, vm->cFixnum);
    YogObject_eval_builtin_script(env, vm->cObject);
    YogSet_eval_builtin_script(env, vm->cSet);
    YogString_eval_builtin_script(env, vm->cString);
    YogPath_eval_builtin_script(env, vm->cPath);
    YogSymbol_eval_builtin_script(env, vm->cSymbol);
    YogCallable_eval_builtin_script(env, vm->mCallable);
    YogEnumerable_eval_builtin_script(env, vm->mEnumerable);

    YogHandleScope_close(env);
}
コード例 #2
0
ファイル: engine.c プロジェクト: Dablakbandit/Consoles
JNIEXPORT void JNICALL Java_jni_LuaEngine_setup(JNIEnv* env, jobject object) {
    if (!setup) {
        static jmp_buf reg_handle;
        
        if (setjmp(reg_handle)) { return; }
        
        function_index = 0;
        
        setup_closures();
        setup_classes(env, reg_handle);
        setup_value(env, reg_handle);
        thread_datum_init(env, reg_handle);

        ASSERTEX(env);
        
        setup = 1;
    }
}
コード例 #3
0
ファイル: test4.c プロジェクト: moiri-usi/USI-compilers
int main()
{
  setup_classes();

  // c = C()
  pyobj c = create_object(C);

  // d = D()
  pyobj d = create_object(D);

  // TODO: call the __init__ method if it exists

#ifdef TAGGING
  pyobj one = inject_int(1);
  pyobj three = inject_int(3);
#else
  pyobj one = create_int(1);
  pyobj three = create_int(3);
#endif

  // c.f = 1
  set_attr(c, "f", one);

  // d.f = 1
  set_attr(d, "f", one);

  pyobj i, j, k, h;

  // i = c.m()
  {
    pyobj meth = get_attr(c, "m");
    pyobj fun = get_function(meth);
    void *fp = get_fun_ptr(fun);
    pyobj (*f)(pyobj) = (pyobj (*)(pyobj)) fp; // cast to a function pointer type
    i = f(get_receiver(meth));
  }

  // j = d.m()
  {
    pyobj meth = get_attr(d, "m");
    pyobj fun = get_function(meth);
    void *fp = get_fun_ptr(fun);
    pyobj (*f)(pyobj) = (pyobj (*)(pyobj)) fp; // cast to a function pointer type
    j = f(get_receiver(meth));
  }

  // d.n(3)
  {
    pyobj (*f)(pyobj, pyobj) = (pyobj (*)(pyobj, pyobj)) get_fun_ptr_from_attr(d, "n");
    f(d, three);
  }

  // k = d.m()
  {
    pyobj meth = get_attr(d, "m");
    pyobj fun = get_function(meth);
    void *fp = get_fun_ptr(fun);
    pyobj (*f)(pyobj) = (pyobj (*)(pyobj)) fp; // cast to a function pointer type
    k = f(get_receiver(meth));
  }

  // h = i + j + k
  {
#ifdef TAGGING
    // optimized, but assumes i and j are integers
    // h = i + j + k

    // unoptimized, but checks that i and j are integers
    h = inject_int(project_int(i) + project_int(j) + project_int(k));
#else
    h = create_int(project_int(i) + project_int(j) + project_int(k));
#endif
  }

  // print i, j, k
  print_any(i);
  print_any(j);
  print_any(k);
  print_any(h);
  return 0;
}